加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Xcode 6 iOS 8 SDK,但部署在iOS 7(UIWebKit和WKWebKit)

发布时间:2020-12-15 01:55:08 所属栏目:百科 来源:网络整理
导读:我们正在使用Xcode 6 beta 5 Swift在iOS 8 SDK上创建一个应用程序。我们也想部署到iOS 7。那可能吗?当我们将项目的部署目标设置为7.0时,我们得到如下编译时错误: Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_WKPreferences",referenced f
我们正在使用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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读