Мы создаем приложение, используя 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
для iOS 7, но WKWebKit
для 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 есть правильный ответ. Я добавляю дополнительную информацию для других.
Сначала перейдите к Project
, нажмите General
, прокрутите вниз до Linked Frameworks and Libraries
и добавьте WebKit.framework
как необязательный. (Я также сделал это для UIKit.framework
) См. Снимок экрана:
Что касается моего класса WebViewController
. Он по-прежнему импортирует UIKit
и WebKit
. но viewDidLoad()
устанавливает представление, основанное на примере kkoltzau. Затем, когда мне нужно загрузить/перезагрузить веб-страницу, он проверяет существование wkWebView
.