d6aeede2bc
从桌面工程复制而来,作为本仓库的 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。
105 lines
3.0 KiB
Swift
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
|
|
}
|
|
}
|
|
}
|