Nun, endlich funktioniert das nach vielen Stunden der Frustration.
Bis Apple die Validierung behebt, besteht der Schlüssel darin, zur Laufzeit dynamisch mit dem WebKit-Framework zu verknüpfen. Ihr Projekt sollte bereits Laufzeitüberprüfungen verwenden, um problemlos auf UIWebView für iOS7 und früher zurückzugreifen, d. H. Nach [WKWebView-Klasse] zu suchen.
Schritt 1: Entfernen Sie das WebKit-Framework aus den Projekteinstellungen. Gehe zu deinem Ziel -> Allgemein -> Verknüpfte Frameworks und Bibliotheken und entferne WebKit. An diesem Punkt wird der Code zwar kompiliert, aber nicht gelinkt, da WKWebView und die zugehörigen Symbole nicht aufgelöst werden können.
Schritt 2: Bearbeiten Sie Ihre main.m Datei dynamisch die Bibliothek zu laden:
#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]));
}
}
Ich benutze eine Runtime-O Versionsprüfung weil Apple nur die dynamischen Laden in iOS Ausgangsbibliothek ermöglicht 8. Die Bibliothek Lage ist für den Simulator anders als tatsächliche Geräte, so dass ich bedingte Kompilierung verwenden, um dies zu überprüfen.
Schritt 3: Da die Bibliothek dynamisch geladen wird, funktioniert der Aufruf von [WKWebView class] und [WKWebView alloc] nicht. Gehen Sie durch Ihren Code, ändert jede Instanz
[WKWebView class]
// change to:
NSClassFromString(@"WKWebView")
Und jedes Mal, ändern Sie teilen einen WKWebView:
[WKWebView alloc]
// change to:
[NSClassFromString(@"WKWebView") alloc]
Sie müssen auch tun dies für die zugehörigen Klassen, einschließlich WKWebViewConfiguration, WKProcessPool, WKUserScript, und was auch immer du benutzt. Überprüfen Sie Ihre Linker-Fehler für alles, was Sie möglicherweise verpasst haben.
Schritt 4: Jetzt sollte Ihr Code erfolgreich kompilieren. Paket, senden Sie an den App Store und feiern Sie.
Sie müssen auf UIWebView zurückgreifen, wenn Ihre Benutzer auf iOS 7 sind (es ist nicht klar, dass Sie das versucht haben). Das sollte funktionieren: http://stackoverflow.com/q/25341238/1580288 – EthanB
Ich überprüfe die Laufzeit für ios7 und benutze UIWebView. Es läuft gut auf meinen Entwicklungsgeräten. Das Problem, das ich habe, versucht, die Validierung zu bestehen. Vielen Dank! – weiyin
Ich habe das gleiche Problem. Ich verwende nur WebKit für iOS 8, aber meine App wird für iOS 7 bereitgestellt –