Vâng, cuối cùng đã làm việc này sau nhiều giờ thất vọng.
Cho đến khi Apple sửa lỗi xác thực, khóa là liên kết động với khung WebKit khi chạy. Dự án của bạn đã được sử dụng kiểm tra thời gian chạy để quay trở lại UIWebView cho iOS7 trở về trước một cách duyên dáng, tức là kiểm tra [lớp WKWebView].
Bước 1: Xóa khung WebKit khỏi cài đặt dự án. Chuyển đến mục tiêu của bạn -> Chung -> Khung và Thư viện được Liên kết và xóa WebKit. Tại thời điểm này, mã của bạn sẽ biên dịch nhưng không liên kết được vì nó không thể giải quyết WKWebView và các ký hiệu liên quan.
Bước 2: Chỉnh sửa tập tin main.m của bạn để tải các thư viện động:
#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]));
}
}
tôi sử dụng một tấm séc runtime phiên bản hệ điều hành vì Apple chỉ cho phép tải thư viện năng động bắt đầu trong iOS 8. Các vị trí thư viện khác với mô phỏng so với các thiết bị thực tế, vì vậy tôi sử dụng trình biên dịch có điều kiện để kiểm tra điều đó.
Bước 3: Vì thư viện được nạp tự động, gọi [lớp WKWebView] và [WKWebView alloc] sẽ không hoạt động. Đi qua mã của bạn, thay đổi mỗi thể hiện của
[WKWebView class]
// change to:
NSClassFromString(@"WKWebView")
Và thay đổi mỗi khi bạn phân bổ một WKWebView:
[WKWebView alloc]
// change to:
[NSClassFromString(@"WKWebView") alloc]
Bạn cũng phải làm điều này cho các lớp học liên quan, bao gồm WKWebViewConfiguration, WKProcessPool, WKUserScript, và bất cứ điều gì khác bạn đang sử dụng. Kiểm tra lỗi liên kết của bạn cho bất kỳ điều gì bạn có thể đã bỏ lỡ.
Bước 4: Bây giờ mã của bạn sẽ biên dịch thành công. Đóng gói, gửi đến cửa hàng ứng dụng và kỷ niệm.
Bạn sẽ cần phải quay trở lại UIWebView khi người dùng của bạn đang sử dụng iOS 7 (không rõ là bạn đang thử điều đó). Điều này sẽ hoạt động: http://stackoverflow.com/q/25341238/1580288 – EthanB
Tôi thực hiện kiểm tra thời gian chạy cho ios7 và sử dụng UIWebView. Nó chạy tốt trên các thiết bị phát triển của tôi. Vấn đề tôi đang gặp là cố gắng vượt qua xác thực. Cảm ơn! – weiyin
Tôi đang gặp vấn đề tương tự. Tôi chỉ sử dụng WebKit trên iOS 8 nhưng ứng dụng của tôi triển khai trên iOS 7 –