导入 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。
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
//
|
||||
// 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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user