Включение рамки WebKit для iOS8 не позволяет выполнить проверку

Я использую WKWebView для платформы WebKit и при попытке отправить в хранилище приложений я получаю эту ошибку:

Your app contains non-public API usage. Please review the errors, correct them, and resubmit your application. The app links to non-public libraries in Payload...: /System/Library/PrivateFrameworks/WebKit.framework/WebKit 

Если я установил цель развертывания на 8.0, ошибка исчезнет, ​​но я также хотел бы поддержать iOS 7. Ошибка, похоже, является результатом того, что iOS7 также имеет структуру WebKit, но тогда он был закрыт.

Поэтому я хотел бы динамически связываться с библиотекой WebKit. Как это сделать в XCode?

Ну, наконец, это получилось после многих часов разочарования.

Пока Apple не исправляет проверку, ключ должен динамически связываться с инфраструктурой WebKit во время выполнения. Ваш проект должен уже использовать проверки времени выполнения, чтобы изящно вернуться к UIWebView для iOS7 и ранее, то есть проверить для [класс WKWebView].

Шаг 1. Удалите структуру WebKit из параметров проекта. Перейдите к своей цели -> Общие -> Связанные структуры и библиотеки и удалите WebKit. На этом этапе ваш код будет компилироваться, но не будет связан, потому что он не может разрешить WKWebView и связанные с ним символы.

Шаг 2. Отредактируйте файл main.m, чтобы динамически загружать библиотеку:

 #import <UIKit/UIKit.h> #import <TargetConditionals.h> #import <dlfcn.h> #import "MyAppDelegate.h" #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) int main(int argc, char * argv[]) { @autoreleasepool { // Dynamically load WebKit if iOS version >= 8 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) { #if TARGET_IPHONE_SIMULATOR NSString *frameworkPath = [[NSProcessInfo processInfo] environment][@"DYLD_FALLBACK_FRAMEWORK_PATH"]; if (frameworkPath) { NSString webkitLibraryPath = [NSString pathWithComponents:@[frameworkPath, @"WebKit.framework", @"WebKit"]]; dlopen([webkitLibraryPath cStringUsingEncoding:NSUTF8StringEncoding], RTLD_LAZY); } #else dlopen("/System/Library/Frameworks/WebKit.framework/WebKit", RTLD_LAZY); #endif } return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class])); } } 

Я использую проверку версии операционной системы, потому что Apple разрешает загрузку динамической библиотеки, начиная с iOS 8. Месторасположение библиотеки отличается от симулятора и фактических устройств, поэтому я использую условную компиляцию для проверки этого.

Шаг 3. Поскольку библиотека загружается динамически, вызов [класс WKWebView] и [WKWebView alloc] не будет работать. Пройдите через свой код, изменив каждый экземпляр

 [WKWebView class] // change to: NSClassFromString(@"WKWebView") 

И изменяйте каждый раз, когда вы выделяете WKWebView:

 [WKWebView alloc] // change to: [NSClassFromString(@"WKWebView") alloc] 

Вы также должны сделать это для связанных классов, включая WKWebViewConfiguration, WKProcessPool, WKUserScript и все, что вы используете. Проверьте ошибки компоновщика на все, что вы, возможно, пропустили.

Шаг 4. Теперь ваш код должен успешно скомпилироваться. Пакет, отправить в магазин приложений и отпраздновать.

  • Swift 3 WKWebView 'URLRequest'; вы хотели использовать «как» для явного преобразования? (BUG)
  • неожиданно найдено нуль при развертывании необязательного значения Параметры WKWebView get
  • WKWebView не воспроизводит видео в ландшафтном режиме только в iOS 10
  • WKWebView ScaleToFit
  • Воспроизведение видео в веб-представлении неожиданно заканчивается фоновой видеозаписью?
  • Скрытие панели аксессуаров клавиатуры в WKWebView
  • как я могу очистить содержимое UIWebView / WKWebView?
  • Включить сеансовые куки для iframe на странице в WkWebView / mobile Safari
  • Не получать обратный вызов из didReceiveScriptMessage в фоновом режиме
  • Совместное использование файлов cookie между несколькими WKWebViews
  • Может ли WKWebView сохранять разрешение служб местоположения?
  • Interesting Posts

    Как я могу получить прозрачный фон в моем приложении iOS7 (например, в Newsstand), чтобы я мог видеть обои на главном экране?

    Отрегулируйте ширину UITextField, чтобы заполнить панель инструментов в ландшафте

    Как удалить последний компонент пути строки в Swift?

    Google плюс признаки сбоев в ios 9

    ios – generateCGImagesAsynchronouslyForTimes слишком долго

    Как удалить последнюю границу последней ячейки в UITableView?

    Воспроизвести аудио iOS Objective-C

    iOS быстро удаляет пространство сепаратора ячейки UITableView

    Преобразование шестнадцатеричного в десятичное в быстром

    В iOS 7, как мне скрывать и показывать строку состояния «на лету» (когда захочу)

    Определить, что было изменено с ABAddressBookRegisterExternalChangeCallback

    Как настроить UIRefreshControl с другим изображением и позицией?

    ipad / iphone css переход с jquery не работает

    Как я могу полностью использовать все строки внутри массива?

    Исправлен нижний колонтитул с разрывами ввода с виртуальным ключевым словом iOS 9 / Safari

    Давайте будем гением компьютера.