Mặc dù tôi không có câu trả lời nhanh (có nghĩa là sửa chữa nhanh) Tôi có giải pháp.
Điều này bao gồm việc từ bỏ giao thức tệp: // và chuyển sang http: // qua localhost.
NGẮN ĐÁP
Sau đây là các bước sau:
1) - Cài đặt một máy chủ Web địa phương trong ứng dụng của riêng bạn;
2) - Thiết lập máy chủ Web cục bộ để phân phối từ máy chủ cục bộ tại một cổng đã chọn mà bạn chọn;
3) - Thiết lập đại biểu thực sự phân phát tệp từ tài nguyên ứng dụng của bạn cho loại mime phù hợp;
4) - Ủy quyền bỏ qua iOS9 ATS để xử lý http (và không chỉ https).
Và thì đấy!
CỤ THỂ ĐÁP
1) Cài đặt một máy chủ Web địa phương trong ứng dụng của riêng bạn;
Cài đặt GCDWebServer fro repo Github của nó: https://github.com/swisspol/GCDWebServer
2) Thiết lập các máy chủ Web địa phương để phục vụ từ localhost tại một cổng nhất định bạn
Với thực tế angularjs của bạn hoặc các tập tin ứng dụng HTML được đặt vào thư mục "ứng dụng" trong thư mục tài nguyên của bạn.
Trong vc viewDidLoad của bạn:
@implementation ViewController
GCDWebServer* _webServer;
- (void)viewDidLoad
{
[super viewDidLoad];
self.webView = [[WKWebView alloc] initWithFrame:self.view.frame];
[self.view addSubview:self.webView];
self.webView.navigationDelegate = self;
NSURL *bundleURL = [NSBundle mainBundle].bundleURL;
NSURL *basePath = nil;
// Init WebServer
[self initWebServer:[[NSURL URLWithString:@"app" relativeToURL:bundleURL] absoluteURL]];
basePath = [NSURL URLWithString:@"http://localhost:8080/page.html#/home" relativeToURL:nil];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:basePath];
[self.webView loadRequest:request];
}
3) Thiết lập các đại biểu mà thực sự phục vụ các tập tin từ nguồn tài ứng dụng của bạn cho các loại mime đúng;
-(void)initWebServer:(NSURL *)basePath {
// Create server
_webServer = [[GCDWebServer alloc] init];
#define GCDWebServer_DEBUG 0
#define GCDWebServer_VERBOSE 1
#define GCDWebServer_INFO 2
#define GCDWebServer_WARNING 3
#define GCDWebServer_ERROR 4
#define GCDWebServer_EXCEPTION 5
[GCDWebServer setLogLevel:GCDWebServer_ERROR];
// Add a handler to respond to GET requests on any URL
[_webServer addDefaultHandlerForMethod:@"GET"
requestClass:[GCDWebServerRequest class]
processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
//NSLog([NSString stringWithFormat:@"WS: loading %@", request]);
NSString * page = request.URL.lastPathComponent;
NSString * path = request.URL.path;
NSString * file = path;
//NSLog(@"WS: loading %@", file);
NSString * fullPath = [NSString stringWithFormat:@"%@%@", basePath, path];
NSString * sFullPath = [fullPath substringFromIndex:7];
BOOL isText = NO;
if([page.lastPathComponent hasSuffix:@"html"]) {
isText = YES;
}
if (isText) {
NSError * error = nil;
NSString * html = [NSString stringWithContentsOfFile:sFullPath encoding:NSUTF8StringEncoding error: &error];
return [GCDWebServerDataResponse responseWithHTML:html];
}
else {
NSData * data = [NSData dataWithContentsOfFile:sFullPath];
if (data !=nil) {
NSString * type = @"image/jpeg";
if ([page.lastPathComponent hasSuffix:@"jpg"]) type = @"image/jpeg";
else if ([page.lastPathComponent hasSuffix:@"png"]) type = @"image/png";
else if ([page.lastPathComponent hasSuffix:@"css"]) type = @"text/css";
else if ([page.lastPathComponent hasSuffix:@"js" ]) type = @"text/javascript";
return [GCDWebServerDataResponse responseWithData:data contentType:type];
}
else {
return [GCDWebServerDataResponse responseWithHTML:[NSString stringWithFormat:@"<html><body><p>404 : unknown file %@ World</p></body></html>", sFullPath]];
//return [GCDWebServerDataResponse responseWithHTML:@"<html><body><p>Hello World</p></body></html>"];
}
}
}];
// Start server on port 8080
[_webServer startWithPort:8080 bonjourName:nil];
NSLog(@"Visiting %@", _webServer.serverURL);
}
4) Ủy quyền cho để bỏ qua iOS9 ATS để xử lý http (và không https chỉ)
Trong file info.plist của bạn trong Xcode, bạn phải thêm một cuốn từ điển có tên là "Cài đặt ứng dụng Giao thông vận tải An ninh "với bên trong một giá trị quan trọng như sau:
NSAllowsArbitraryLoads = true
Hy vọng nó giúp. Bất cứ ai vấp ngã khi một cái gì đó đơn giản được chào đón để trả lời!
Bạn biết bạn có thể kết nối Trình kiểm tra web Safari với WKWebView của bạn để xem lỗi trong bảng điều khiển không? Điều đó có thể cung cấp nhiều gợi ý hơn. –
@stefan arentz Chắc chắn rồi. Tôi đã cải thiện mô tả sự cố của mình bằng ảnh chụp màn hình. –
@stefan arentz Tính năng tuyệt vời! – AppsolutEinfach