Xcode 6 + iOS 8 SDK mais déployer sur iOS 7 (UIWebKit & WKWebKit)
Nous sommes la création d'une application à l'aide de Xcode 6 beta 5 + Swift sur iOS 8 SDK. Nous tenons à déployer pour iOS 7. Est-ce possible? Lorsque nous avons fixé la cible de déploiement du projet à la version 7.0, nous obtenons moment de la compilation erreurs de ce type:
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)
Je crois que c'est parce que nous sommes à l'aide de WKWebKit
qui est pris en charge par iOS 8+. Nous sommes ok avec l'aide de UIWebKit
pour iOS 7, mais WKWebKit
pour iOS 8. Comment définissons-nous?
Notre définition de la classe ressemble à...
import WebKit
class WebViewController: UIViewController, WKNavigationDelegate {
...
}
et il est appelé par:
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let destinationVC = mainStoryboard.instantiateViewControllerWithIdentifier("WebViewController") as WebViewController
presentViewController(destinationVC, animated: true, completion: nil)
Je pensais à l'aide de ce fragment d'appeler presentViewController
mais qui ne résout pas le temps de compilation des questions. (NSFoundationVersionNumber
ne résout pas le temps de compilation des questions)
if ((UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8.0) {
} else {
}
Mise à JOUR: kkoltzau a la réponse correcte. Je vais ajouter quelques infos pour les autres.
D'abord, aller à votre Project
cliquez sur General
faites défiler vers le bas pour Linked Frameworks and Libraries
et ajouter WebKit.framework
comme Facultatif. (Je l'ai également fait pour UIKit.framework
) Voir la capture d'écran:
Comme pour mon WebViewController
classe. Il importe encore UIKit
et WebKit
. mais le viewDidLoad()
définit la vue basée sur kkoltzau l'exemple. Alors à chaque fois que j'ai besoin de charger/recharger la page web, il vérifie l'existence de wkWebView
.
source d'informationauteur Dean
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin de vérifier si WKWebView est disponible, et de revenir au UIWebView si ses pas.
Assurez-vous de maillon faible WebKit.cadre (à option)
Objective-C:
Swift:
Puis ailleurs dans votre code:
Objective-C:
Swift:
Si vous avez besoin de soutien iOS7, vous ne pouvez pas utiliser WebKit2 (
WK*
) classes, ou vous avez besoin d'appliquer deux fois la logique, à la fois pour iOS8 à l'aide deWK*
et une fois à l'aide deUIWeb*
et au moment de l'exécution de choisir en fonction de la version du système d'exploitation.