Xcode 6 iOS 8 SDK,但部署在iOS 7(UIWebKit和WKWebKit)
我们正在使用Xcode 6 beta 5 Swift在iOS 8 SDK上创建一个应用程序。我们也想部署到iOS 7。那可能吗?当我们将项目的部署目标设置为7.0时,我们得到如下编译时错误:
Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_WKPreferences",referenced from: __TMaCSo13WKPreferences in WebViewController.o "_OBJC_CLASS_$_WKWebView",referenced from: __TMaCSo9WKWebView in WebViewController.o "_OBJC_CLASS_$_WKWebViewConfiguration",referenced from: __TMaCSo22WKWebViewConfiguration in WebViewController.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) 我相信这是因为我们正在使用WKWebKit,它仅由iOS 8支持。我们可以使用UIWebKit for iOS 7,但WKWebKit for iOS 8.我们如何定义? 我们的类定义看起来像这样… import WebKit class WebViewController: UIViewController,WKNavigationDelegate { ... } 它被称为: let mainStoryboard = UIStoryboard(name: "Main",bundle: nil) let destinationVC = mainStoryboard.instantiateViewControllerWithIdentifier("WebViewController") as WebViewController presentViewController(destinationVC,animated: true,completion: nil) 我正在考虑使用这个片段来调用presentViewController,但是并不能解决编译时问题。 (NSFoundationVersionNumber也不解决编译时问题) if ((UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8.0) { } else { } 更新:kkoltzau有正确答案。我为别人添加了更多的信息。 首先,转到您的项目,单击常规,向下滚动到链接框架和库,并将WebKit.framework添加为可选。 (我也是为UIKit.framework做的)见截图: 至于我的WebViewController类。它仍然导入UIKit和WebKit。但是viewDidLoad()基于kkoltzau的示例设置视图。然后每当我需要加载/重新加载网页时,它会检查是否存在wkWebView。 解决方法
您将需要检查WKWebView是否可用,如果没有,则返回到UIWebView。
确保你的弱链接WebKit.framework(设置为可选) Objective-C的: WKWebView *wkWebView = nil; UIWebView *uiWebView = nil; Class wkWebViewClass = NSClassFromString(@"WKWebView"); if(wkWebViewClass) { WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; // ... wkWebView = [[wkWebViewClass alloc] initWithFrame:frame configuration:config]; [self.view addSubview:wkWebView]; } else { uiWebView = [[UIWebView alloc] initWithFrame:frame]; [self.view addSubview:uiWebView]; } 迅速: var wkWebView : WKWebView? var uiWebView : UIWebView? if NSClassFromString("WKWebView") { let config = WKWebViewConfiguration() // ... wkWebView = WKWebView(frame: frame,configuration: config) self.view.addSubview(wkWebView) } else { uiWebView = UIWebView(frame: frame) self.view.addSubview(uiWebView) } 然后你的代码中的其他地方: Objective-C的: if(wkWebView) { // WKWebView specific code } else { // UIWebView specific code } 迅速: if let w=wkWebView { // WKWebView specific code } else if let w=uiWebView { // UIWebView specific code } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |