Xcode 6 beta 5 + Swift on iOS 8SDKを使用してアプリを作成しています。iOS7にもデプロイしたいと思います。それは可能ですか?のデプロイターゲットを設定すると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)
_
これは、iOS8以降でのみサポートされているWKWebKit
を使用しているためだと思います。 iOS 7の場合はUIWebKit
を使用できますが、iOS 8の場合はWKWebKit
を使用できます。それをどのように定義しますか?
クラス定義は次のようになります...
_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には正解があります。他の人のためにいくつかの情報を追加しています。
まず、Project
に移動し、General
をクリックして、下にスクロールして_Linked Frameworks and Libraries
_に移動し、オプションとして_WebKit.framework
_を追加します。 (私も_UIKit.framework
_のためにそれをしました)スクリーンショットを見てください:
私のWebViewController
クラスについて。それでもUIKit
とWebKit
をインポートします。ただし、viewDidLoad()
は、kkoltzauの例に基づいてビューを設定します。次に、Webページをロード/リロードする必要があるときはいつでも、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
}
IOS7をサポートする必要がある場合は、WebKit2(WK*
)クラスを使用できないか、ロジックを2回実装する必要があります。1回はiOS8でWK*
を使用し、もう1回はUIWeb*
を使用します。オペレーティングシステムのバージョンに応じて選択してください。