Xcode 6 + iOS 8 SDK、iOS 7(UIWebKit&WKWebKit)にデプロイ


Answers

iOS7をサポートする必要がある場合は、WebKit2( WK* )クラスを使用することはできません。また、 WK*使用するiOS8の場合は1回、UIWeb WK*を使用する場合は2回のロジックを実装し、実行時にはオペレーティングシステムのバージョンに従って選択する必要があります。

Question

私たちは、iOS 8 SDKのXcode 6 beta 5 + Swiftを使用してアプリケーションを作成しています。 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)

iOS 8以降でのみサポートされているWKWebKitを使用しているためだと思います。 iOS 7ではWKWebKit 、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ためにUIKit.framework )スクリーンショットを見る:

私のWebViewControllerクラスについては、 それでもUIKitWebKitがインポートされます。 viewDidLoad()はkkoltzauの例に基づいてビューを設定します。 次に、Webページをロード/リロードする必要があるたびに、 wkWebView存在をチェックします。