Files
admin d6aeede2bc 导入 XuXuCheck 工程(iOS 干化学尿液试纸分析 App)
从桌面工程复制而来,作为本仓库的 Xuxucheck/ 子目录。

为控制仓库体积做了两处删减:
- 移除 Frameworks/opencv2.xcframework 下的两个 visionOS 切片
  (xros-arm64、xros-arm64-simulator,合计约 106 MB),并同步删掉该
  xcframework 内 Info.plist 里对应的两条 AvailableLibraries 记录,
  只保留 ios-arm64 与 ios-arm64_x86_64-simulator。
- 移除全部 .DS_Store 与 xcuserdata/。

已用 xcodebuild 从本目录完整编译验证:BUILD SUCCEEDED,
ProcessXCFramework 以 --platform ios 成功选中框架,产物含 3699 个 cv:: 符号
(OpenCV 确实链入),嵌入 framework 3 个,与移除无用 pod 之后的状态一致。

仓库约 206 MB,其中 OpenCV 203 MB、其余源码与依赖约 3 MB。
2026-09-23 14:17:31 +08:00

105 lines
3.0 KiB
Swift

//
// WebViewModel.swift
// WKWebViewLocal
//
// Created by Gary Newby on 25/11/2024.
//
import SwiftUI
import WebKit
@Observable
class WebViewModel {
var url: URL?
var error: Error?
var isLoading = false
var backButtonIsEnabled = false
/// Load a file or a HTML string
let loadFile = false
weak var webView: WKWebView?
var jsCommand: String?
var jsParameter: JS2SwiftData?
var hasNewCommand = false
func assignWebView(webView: WKWebView) {
self.webView = webView
if (url != nil) {
hasNewCommand = false
self.webView?.load(URLRequest(url: url!))
}else{
if loadFile {
loadFile(name: "index")
} else {
loadString(name: "index")
}
}
}
func loadFile(name: String) {
guard let filePath = Bundle.main.path(forResource: name, ofType: "html", inDirectory: "Web_Assets") else {
print("file not found:", name)
return
}
let filePathURL = URL.init(fileURLWithPath: filePath)
let fileDirectoryURL = filePathURL.deletingLastPathComponent()
webView?.loadFileURL(filePathURL, allowingReadAccessTo: fileDirectoryURL)
}
func loadString(name: String) {
guard let filePath = Bundle.main.path(forResource: name, ofType: "html", inDirectory: "Web_Assets") else {
print("file not found:", name)
return
}
do {
let html = try String(contentsOfFile: filePath, encoding: .utf8)
/// baseURL needs to be set for local files to load correctly
webView?.loadHTMLString(html, baseURL: Bundle.main.resourceURL?.appendingPathComponent("Web_Assets"))
} catch {
print("Error loading html")
}
}
func loadUrl(url: String){
webView?.load(URLRequest(url: URL(string:url)!))
}
func callJsImage(imageString: String){
let script = "javascript:CallJS('SelectPhoto','data:image/jpeg;base64,\(imageString)')"
webView?.evaluateJavaScript(script) { (result: Any?, error: Error?) in
if let error = error {
print("evaluateJavaScript error: \(error)")
} else {
print("evaluateJavaScript result: \(result ?? "")")
}
}
}
func callJsBarcode(named: String) {
let script = "javascript:CallJS('BarCode','\(named)')"
webView?.evaluateJavaScript(script) { (result: Any?, error: Error?) in
if let error = error {
print("evaluateJavaScript error: \(error)")
} else {
print("evaluateJavaScript result: \(result ?? "")")
}
}
}
func isButtonVisible(_ action: String) -> Bool {
switch action {
case "goBack()":
return backButtonIsEnabled
case "changeText('hello from Swift')":
return !backButtonIsEnabled
default:
return false
}
}
}