[
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n## Build generated\nbuild/\nDerivedData\n\n## Various settings\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n"
  },
  {
    "path": "README.md",
    "content": "# HybridNSURLProtocol\n一个基于WKWebView的hybirde的容器。能拦截所有WKWKWebView的的css,js,png等网络请求的demo\nNSURLProtocol 子类，就可以对 app 内所有的网络请求进行:\n\n```\n[NSURLProtocol registerClass:[HybridNSURLProtocol class]];\n\n```\n\n\n可是在 WKWebView 中的请求却完全不遵从这一规则，只是象征性+ (BOOL) canInitWithRequest:(NSURLRequest *)request 方法，之后的整个请求流程似乎就与 NSURLProtocol 完全无关了。\n\n使我WKWebView 的一度认为请求不遵守NSURLProtocol协议，所以不走 NSURLProtocol。这个也是很苦扰我的问题。导致我们hybird的容器1.0也是是用UIWebVIew实现的。\n\n\n但在苹果放在gittub的CustomHTTPProtocol，明显感觉到WKWebview的也是遵守NSURLProtocol，要不也不会走+ (BOOL)canInitWithRequest:(NSURLRequest *)request;后来一个每天看博客和gittub的习惯帮助了我，找到一个大神的不久前开源库。\n\n使用了WKBrowsingContextController和registerSchemeForCustomProtocol。 通过反射的方式拿到了私有的 class/selector。通过kvc取到browsingContextController。通过把注册把 http 和 https 请求交给 NSURLProtocol 处理\n```\n[NSURLProtocol wk_registerScheme:@\"http\"];\n[NSURLProtocol wk_registerScheme:@\"https\"];\n```\n下面直接上源代码吧\n\n```\n//FOUNDATION_STATIC_INLINE 属于属于runtime范畴，你的.m文件需要频繁调用一个函数,可以用static inline来声明。在SDWebImage读取内存的缓存也用到这个声明。\nFOUNDATION_STATIC_INLINE Class ContextControllerClass() {\nstatic Class cls;\nif (!cls) {\ncls = [[[WKWebView new] valueForKey:@\"browsingContextController\"] class];\n}\nreturn cls;\n}\n\nFOUNDATION_STATIC_INLINE SEL RegisterSchemeSelector() {\nreturn NSSelectorFromString(@\"registerSchemeForCustomProtocol:\");\n}\n\nFOUNDATION_STATIC_INLINE SEL UnregisterSchemeSelector() {\nreturn NSSelectorFromString(@\"unregisterSchemeForCustomProtocol:\");\n}\n\n@implementation NSURLProtocol (WebKitSupport)\n\n+ (void)wk_registerScheme:(NSString *)scheme {\nClass cls = ContextControllerClass();\nSEL sel = RegisterSchemeSelector();\nif ([(id)cls respondsToSelector:sel]) {\n// 放弃编辑器警告\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"\n[(id)cls performSelector:sel withObject:scheme];\n#pragma clang diagnostic pop\n}\n}\n\n+ (void)wk_unregisterScheme:(NSString *)scheme {\nClass cls = ContextControllerClass();\nSEL sel = UnregisterSchemeSelector();\nif ([(id)cls respondsToSelector:sel]) {\n// 放弃编辑器警告\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"\n[(id)cls performSelector:sel withObject:scheme];\n#pragma clang diagnostic pop\n}\n}\n\n```\n注册后，客户端所有请求走+ (BOOL)canInitWithRequest:(NSURLRequest *)request。下面是打印的请求的log\n\n```\n+ (BOOL)canInitWithRequest:(NSURLRequest *)request\n{\nNSLog(@\"request.URL.absoluteString = %@\",request.URL.absoluteString);\nNSString *scheme = [[request URL] scheme];\nif ( ([scheme caseInsensitiveCompare:@\"http\"]  == NSOrderedSame ||\n[scheme caseInsensitiveCompare:@\"https\"] == NSOrderedSame ))\n{\n//看看是否已经处理过了，防止无限循环\nif ([NSURLProtocol propertyForKey:KHybridNSURLProtocolHKey inRequest:request])\nreturn NO;\nreturn YES;\n}\nreturn NO;\n}\n\n```\n\n![Aaron Swartz](https://github.com/LiuShuoyu/HybirdWKWebVIew/blob/master/jpeg/WechatLog.jpeg?raw=true)\n\nrequest的重写定向，request的重写定向，替换百度知道的log\n```\n+ (BOOL)canInitWithRequest:(NSURLRequest *)request\n{\nNSLog(@\"request.URL.absoluteString = %@\",request.URL.absoluteString);\nNSString *scheme = [[request URL] scheme];\nif ( ([scheme caseInsensitiveCompare:@\"http\"]  == NSOrderedSame ||\n[scheme caseInsensitiveCompare:@\"https\"] == NSOrderedSame ))\n{\n//看看是否已经处理过了，防止无限循环\nif ([NSURLProtocol propertyForKey:KHybridNSURLProtocolHKey inRequest:request])\n  return YES;\n}\n  return NO;\n}\n\n```\n这里最好加上缓存判断，加载本地离线文件， 这个直接简单的例子。\n``` \n- (void)startLoading\n{\nNSMutableURLRequest *mutableReqeust = [[self request] mutableCopy];\n//给我们处理过的请求设置一个标识符, 防止无限循环,\n[NSURLProtocol setProperty:@YES forKey:KHybridNSURLProtocolHKey inRequest:mutableReqeust];\n\n//这里最好加上缓存判断，加载本地离线文件， 这个直接简单的例子。\nif ([mutableReqeust.URL.absoluteString isEqualToString:sourIconUrl])\n{\nNSData* data = UIImagePNGRepresentation([UIImage imageNamed:@\"medlinker\"]);\nNSURLResponse* response = [[NSURLResponse alloc] initWithURL:self.request.URL MIMEType:@\"image/png\" expectedContentLength:data.length textEncodingName:nil];\n[self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];\n[self.client URLProtocol:self didLoadData:data];\n[self.client URLProtocolDidFinishLoading:self];\n}\nelse\n{\nNSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil];\nself.task = [session dataTaskWithRequest:self.request];\n[self.task resume];\n}\n}\n\n```\n下面是代码效果图\n\n![Aaron Swartz](https://github.com/LiuShuoyu/HybirdWKWebVIew/blob/master/jpeg/WechatIMG1.jpeg)\n![Aaron Swartz](https://github.com/LiuShuoyu/HybirdWKWebVIew/blob/master/jpeg/WechatIMG2.jpeg)\n\n\n##有问题反馈\n在使用中有任何问题，欢迎反馈给我，可以用以下联系方式跟我交流\n\n* QQ 微信: 476804765\n* Email:13281250969@163.com\n\n\n###接受启发的作者的github\ngithub：<a href=\"https://github.com/yeatse/\">Yeatse CC</a>\n苹果开发者文档：<a href=\"https://developer.apple.com/library/content/samplecode/CustomHTTPProtocol/Introduction/Intro.html/\">apple</a>\n\n\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  WKWebVIewHybridDemo\n//\n//  Created by shuoyu liu on 2017/1/17.\n//  Copyright © 2017年 shuoyu liu. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n\n@end\n\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  WKWebVIewHybridDemo\n//\n//  Created by shuoyu liu on 2017/1/17.\n//  Copyright © 2017年 shuoyu liu. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n#import \"HybridNSURLProtocol.h\"\n\n@interface AppDelegate ()\n\n@end\n\n@implementation AppDelegate\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    // Override point for customization after application launch.\n    [NSURLProtocol registerClass:[HybridNSURLProtocol class]];\n    return YES;\n}\n\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.\n}\n\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.\n}\n\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n\n\n@end\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/Assets.xcassets/medlinker.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"medlinker.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11134\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11106\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"11762\" systemVersion=\"16C67\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"Uza-gG-yrE\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11757\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--WKwebView-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"HybirdViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                    <navigationItem key=\"navigationItem\" title=\"WKwebView\" id=\"HZg-vt-cGA\"/>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1313\" y=\"378\"/>\n        </scene>\n        <!--Navigation Controller-->\n        <scene sceneID=\"2ok-cM-1hr\">\n            <objects>\n                <navigationController automaticallyAdjustsScrollViewInsets=\"NO\" id=\"Uza-gG-yrE\" sceneMemberID=\"viewController\">\n                    <toolbarItems/>\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"Hg2-dC-J9S\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <nil name=\"viewControllers\"/>\n                    <connections>\n                        <segue destination=\"BYZ-38-t0r\" kind=\"relationship\" relationship=\"rootViewController\" id=\"jBX-rA-R4C\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"a8c-4P-e5G\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"393\" y=\"394\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/HybirdViewController.h",
    "content": "//\n//  HybirdViewController.h\n//  WKWebVIewHybridDemo\n//\n//  Created by shuoyu liu on 2017/1/17.\n//  Copyright © 2017年 shuoyu liu. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface HybirdViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/HybirdViewController.m",
    "content": "//\n//  HybirdViewController.m\n//  WKWebVIewHybridDemo\n//\n//  Created by shuoyu liu on 2017/1/17.\n//  Copyright © 2017年 shuoyu liu. All rights reserved.\n//\n\n#import \"HybirdViewController.h\"\n\n#import \"HybirdViewController.h\"\n#import <WebKit/WebKit.h>\n#import \"NSURLProtocol+WKWebVIew.h\"\n\n@interface HybirdViewController ()<WKNavigationDelegate,WKUIDelegate>\n@property (nonatomic)  WKWebView* webView;\n\n@end\n\n@implementation HybirdViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    [NSURLProtocol wk_registerScheme:@\"http\"];\n    [NSURLProtocol wk_registerScheme:@\"https\"];\n\n    [self.view addSubview:self.webView];\n    \n    // Do any additional setup after loading the view.\n}\n\n-(void)viewWillAppear:(BOOL)animated{\n    [super viewWillAppear:animated];\n    \n}\n\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n\n- (WKWebView *)webView {\n    if (!_webView) {\n        WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];\n        configuration.userContentController = [WKUserContentController new];\n        \n        WKPreferences *preferences = [WKPreferences new];\n        preferences.javaScriptCanOpenWindowsAutomatically = YES;\n        preferences.minimumFontSize = 30.0;\n        configuration.preferences = preferences;\n        \n        _webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:configuration];\n        _webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;\n        \n        if ([_webView respondsToSelector:@selector(setNavigationDelegate:)]) {\n            [_webView setNavigationDelegate:self];\n        }\n        \n        if ([_webView respondsToSelector:@selector(setDelegate:)]) {\n            [_webView setUIDelegate:self];\n        }\n        NSURL *url = [NSURL URLWithString:@\"http://www.baidu.com\"];\n        NSURLRequest *request = [NSURLRequest requestWithURL:url];\n        [_webView loadRequest:request];\n        \n    }\n    return _webView;\n}\n\n/*\n#pragma mark - Navigation\n\n// In a storyboard-based application, you will often want to do a little preparation before navigation\n- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {\n    // Get the new view controller using [segue destinationViewController].\n    // Pass the selected object to the new view controller.\n}\n*/\n\n@end\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/HybridNSURLProtocol.h",
    "content": "//\n//  HybridNSURLProtocol.h\n//  WKWebVIewHybridDemo\n//\n//  Created by shuoyu liu on 2017/1/16.\n//  Copyright © 2017年 shuoyu liu. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface HybridNSURLProtocol : NSURLProtocol\n\n@end\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/HybridNSURLProtocol.m",
    "content": "//\n//  HybridNSURLProtocol.m\n//  WKWebVIewHybridDemo\n//\n//  Created by shuoyu liu on 2017/1/16.\n//  Copyright © 2017年 shuoyu liu. All rights reserved.\n//\n\n#import \"HybridNSURLProtocol.h\"\n#import <UIKit/UIKit.h>\nstatic NSString*const sourUrl  = @\"https://m.baidu.com/static/index/plus/plus_logo.png\";\nstatic NSString*const sourIconUrl  = @\"http://m.baidu.com/static/search/baiduapp_icon.png\";\nstatic NSString*const localUrl = @\"http://mecrm.qa.medlinker.net/public/image?id=57026794&certType=workCertPicUrl&time=1484625241\";\n\nstatic NSString* const KHybridNSURLProtocolHKey = @\"KHybridNSURLProtocol\";\n@interface HybridNSURLProtocol ()<NSURLSessionDelegate>\n@property (nonnull,strong) NSURLSessionDataTask *task;\n\n@end\n\n\n@implementation HybridNSURLProtocol\n\n+ (BOOL)canInitWithRequest:(NSURLRequest *)request\n{\n    NSLog(@\"request.URL.absoluteString = %@\",request.URL.absoluteString);\n    NSString *scheme = [[request URL] scheme];\n    if ( ([scheme caseInsensitiveCompare:@\"http\"]  == NSOrderedSame ||\n          [scheme caseInsensitiveCompare:@\"https\"] == NSOrderedSame ))\n    {\n        //看看是否已经处理过了，防止无限循环\n        if ([NSURLProtocol propertyForKey:KHybridNSURLProtocolHKey inRequest:request])\n            return NO;\n        return YES;\n    }\n    return NO;\n}\n\n+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request\n{\n    NSMutableURLRequest *mutableReqeust = [request mutableCopy];\n    \n    //request截取重定向\n    if ([request.URL.absoluteString isEqualToString:sourUrl])\n    {\n        NSURL* url1 = [NSURL URLWithString:localUrl];\n        mutableReqeust = [NSMutableURLRequest requestWithURL:url1];\n    }\n    \n    return mutableReqeust;\n}\n\n+ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b\n{\n    return [super requestIsCacheEquivalent:a toRequest:b];\n}\n\n- (void)startLoading\n{\n    NSMutableURLRequest *mutableReqeust = [[self request] mutableCopy];\n    //给我们处理过的请求设置一个标识符, 防止无限循环,\n    [NSURLProtocol setProperty:@YES forKey:KHybridNSURLProtocolHKey inRequest:mutableReqeust];\n    \n    //这里最好加上缓存判断，加载本地离线文件， 这个直接简单的例子。\n    if ([mutableReqeust.URL.absoluteString isEqualToString:sourIconUrl])\n    {\n            NSData* data = UIImagePNGRepresentation([UIImage imageNamed:@\"medlinker\"]);\n            NSURLResponse* response = [[NSURLResponse alloc] initWithURL:self.request.URL MIMEType:@\"image/png\" expectedContentLength:data.length textEncodingName:nil];\n            [self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];\n            [self.client URLProtocol:self didLoadData:data];\n            [self.client URLProtocolDidFinishLoading:self];\n    }\n    else\n    {\n        NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil];\n        self.task = [session dataTaskWithRequest:self.request];\n        [self.task resume];\n    }\n}\n- (void)stopLoading\n{\n    if (self.task != nil)\n    {\n        [self.task  cancel];\n    }\n}\n\n\n- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {\n    [[self client] URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];\n    \n    completionHandler(NSURLSessionResponseAllow);\n}\n\n- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {\n    [[self client] URLProtocol:self didLoadData:data];\n}\n\n- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error {\n    [self.client URLProtocolDidFinishLoading:self];\n}\n\n@end\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/NSURLProtocol+WKWebVIew.h",
    "content": "//\n//  NSURLProtocol+WKWebVIew.h\n//  WKWebVIewHybridDemo\n//\n//  Created by shuoyu liu on 2017/1/15.\n//  Copyright © 2017年 shuoyu liu. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface NSURLProtocol (WKWebVIew)\n\n+ (void)wk_registerScheme:(NSString*)scheme;\n\n+ (void)wk_unregisterScheme:(NSString*)scheme;\n\n\n@end\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/NSURLProtocol+WKWebVIew.m",
    "content": "//\n//  NSURLProtocol+WKWebVIew.m\n//  WKWebVIewHybridDemo\n//\n//  Created by shuoyu liu on 2017/1/15.\n//  Copyright © 2017年 shuoyu liu. All rights reserved.\n//\n\n#import \"NSURLProtocol+WKWebVIew.h\"\n#import <WebKit/WebKit.h>\n//FOUNDATION_STATIC_INLINE 属于属于runtime范畴，你的.m文件需要频繁调用一个函数,可以用static inline来声明。从SDWebImage从get到的。\nFOUNDATION_STATIC_INLINE Class ContextControllerClass() {\n    static Class cls;\n    if (!cls) {\n        cls = [[[WKWebView new] valueForKey:@\"browsingContextController\"] class];\n    }\n    return cls;\n}\n\nFOUNDATION_STATIC_INLINE SEL RegisterSchemeSelector() {\n    return NSSelectorFromString(@\"registerSchemeForCustomProtocol:\");\n}\n\nFOUNDATION_STATIC_INLINE SEL UnregisterSchemeSelector() {\n    return NSSelectorFromString(@\"unregisterSchemeForCustomProtocol:\");\n}\n\n@implementation NSURLProtocol (WebKitSupport)\n\n+ (void)wk_registerScheme:(NSString *)scheme {\n    Class cls = ContextControllerClass();\n    SEL sel = RegisterSchemeSelector();\n    if ([(id)cls respondsToSelector:sel]) {\n    // 放弃编辑器警告\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"\n        [(id)cls performSelector:sel withObject:scheme];\n#pragma clang diagnostic pop\n    }\n}\n\n+ (void)wk_unregisterScheme:(NSString *)scheme {\n    Class cls = ContextControllerClass();\n    SEL sel = UnregisterSchemeSelector();\n    if ([(id)cls respondsToSelector:sel]) {\n     // 放弃编辑器警告\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"\n        [(id)cls performSelector:sel withObject:scheme];\n#pragma clang diagnostic pop\n    }\n}\n\n@end\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo/main.m",
    "content": "//\n//  main.m\n//  WKWebVIewHybridDemo\n//\n//  Created by shuoyu liu on 2017/1/17.\n//  Copyright © 2017年 shuoyu liu. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t9AFC82EF1E2E2BD7003A439F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AFC82EE1E2E2BD7003A439F /* main.m */; };\n\t\t9AFC82F21E2E2BD7003A439F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AFC82F11E2E2BD7003A439F /* AppDelegate.m */; };\n\t\t9AFC82F81E2E2BD7003A439F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9AFC82F61E2E2BD7003A439F /* Main.storyboard */; };\n\t\t9AFC82FA1E2E2BD7003A439F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9AFC82F91E2E2BD7003A439F /* Assets.xcassets */; };\n\t\t9AFC82FD1E2E2BD7003A439F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9AFC82FB1E2E2BD7003A439F /* LaunchScreen.storyboard */; };\n\t\t9AFC83081E2E2BD7003A439F /* WKWebVIewHybridDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AFC83071E2E2BD7003A439F /* WKWebVIewHybridDemoTests.m */; };\n\t\t9AFC83131E2E2BD7003A439F /* WKWebVIewHybridDemoUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AFC83121E2E2BD7003A439F /* WKWebVIewHybridDemoUITests.m */; };\n\t\t9AFC83241E2E2BF2003A439F /* NSURLProtocol+WKWebVIew.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AFC83211E2E2BF2003A439F /* NSURLProtocol+WKWebVIew.m */; };\n\t\t9AFC83251E2E2BF2003A439F /* HybridNSURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AFC83231E2E2BF2003A439F /* HybridNSURLProtocol.m */; };\n\t\t9AFC83281E2E2C0D003A439F /* HybirdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AFC83271E2E2C0D003A439F /* HybirdViewController.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t9AFC83041E2E2BD7003A439F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 9AFC82E21E2E2BD7003A439F /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9AFC82E91E2E2BD7003A439F;\n\t\t\tremoteInfo = WKWebVIewHybridDemo;\n\t\t};\n\t\t9AFC830F1E2E2BD7003A439F /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 9AFC82E21E2E2BD7003A439F /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9AFC82E91E2E2BD7003A439F;\n\t\t\tremoteInfo = WKWebVIewHybridDemo;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t9AFC82EA1E2E2BD7003A439F /* WKWebVIewHybridDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WKWebVIewHybridDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9AFC82EE1E2E2BD7003A439F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t9AFC82F01E2E2BD7003A439F /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t9AFC82F11E2E2BD7003A439F /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t9AFC82F71E2E2BD7003A439F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t9AFC82F91E2E2BD7003A439F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t9AFC82FC1E2E2BD7003A439F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t9AFC82FE1E2E2BD7003A439F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9AFC83031E2E2BD7003A439F /* WKWebVIewHybridDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WKWebVIewHybridDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9AFC83071E2E2BD7003A439F /* WKWebVIewHybridDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WKWebVIewHybridDemoTests.m; sourceTree = \"<group>\"; };\n\t\t9AFC83091E2E2BD7003A439F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9AFC830E1E2E2BD7003A439F /* WKWebVIewHybridDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WKWebVIewHybridDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9AFC83121E2E2BD7003A439F /* WKWebVIewHybridDemoUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WKWebVIewHybridDemoUITests.m; sourceTree = \"<group>\"; };\n\t\t9AFC83141E2E2BD7003A439F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9AFC83201E2E2BF2003A439F /* NSURLProtocol+WKWebVIew.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSURLProtocol+WKWebVIew.h\"; sourceTree = \"<group>\"; };\n\t\t9AFC83211E2E2BF2003A439F /* NSURLProtocol+WKWebVIew.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSURLProtocol+WKWebVIew.m\"; sourceTree = \"<group>\"; };\n\t\t9AFC83221E2E2BF2003A439F /* HybridNSURLProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HybridNSURLProtocol.h; sourceTree = \"<group>\"; };\n\t\t9AFC83231E2E2BF2003A439F /* HybridNSURLProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HybridNSURLProtocol.m; sourceTree = \"<group>\"; };\n\t\t9AFC83261E2E2C0D003A439F /* HybirdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HybirdViewController.h; sourceTree = \"<group>\"; };\n\t\t9AFC83271E2E2C0D003A439F /* HybirdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HybirdViewController.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t9AFC82E71E2E2BD7003A439F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9AFC83001E2E2BD7003A439F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9AFC830B1E2E2BD7003A439F /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t9AFC82E11E2E2BD7003A439F = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9AFC82EC1E2E2BD7003A439F /* WKWebVIewHybridDemo */,\n\t\t\t\t9AFC83061E2E2BD7003A439F /* WKWebVIewHybridDemoTests */,\n\t\t\t\t9AFC83111E2E2BD7003A439F /* WKWebVIewHybridDemoUITests */,\n\t\t\t\t9AFC82EB1E2E2BD7003A439F /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9AFC82EB1E2E2BD7003A439F /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9AFC82EA1E2E2BD7003A439F /* WKWebVIewHybridDemo.app */,\n\t\t\t\t9AFC83031E2E2BD7003A439F /* WKWebVIewHybridDemoTests.xctest */,\n\t\t\t\t9AFC830E1E2E2BD7003A439F /* WKWebVIewHybridDemoUITests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9AFC82EC1E2E2BD7003A439F /* WKWebVIewHybridDemo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9AFC82F01E2E2BD7003A439F /* AppDelegate.h */,\n\t\t\t\t9AFC82F11E2E2BD7003A439F /* AppDelegate.m */,\n\t\t\t\t9AFC83261E2E2C0D003A439F /* HybirdViewController.h */,\n\t\t\t\t9AFC83271E2E2C0D003A439F /* HybirdViewController.m */,\n\t\t\t\t9AFC82F61E2E2BD7003A439F /* Main.storyboard */,\n\t\t\t\t9AFC83201E2E2BF2003A439F /* NSURLProtocol+WKWebVIew.h */,\n\t\t\t\t9AFC83211E2E2BF2003A439F /* NSURLProtocol+WKWebVIew.m */,\n\t\t\t\t9AFC83221E2E2BF2003A439F /* HybridNSURLProtocol.h */,\n\t\t\t\t9AFC83231E2E2BF2003A439F /* HybridNSURLProtocol.m */,\n\t\t\t\t9AFC82F91E2E2BD7003A439F /* Assets.xcassets */,\n\t\t\t\t9AFC82FB1E2E2BD7003A439F /* LaunchScreen.storyboard */,\n\t\t\t\t9AFC82FE1E2E2BD7003A439F /* Info.plist */,\n\t\t\t\t9AFC82ED1E2E2BD7003A439F /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = WKWebVIewHybridDemo;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9AFC82ED1E2E2BD7003A439F /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9AFC82EE1E2E2BD7003A439F /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9AFC83061E2E2BD7003A439F /* WKWebVIewHybridDemoTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9AFC83071E2E2BD7003A439F /* WKWebVIewHybridDemoTests.m */,\n\t\t\t\t9AFC83091E2E2BD7003A439F /* Info.plist */,\n\t\t\t);\n\t\t\tpath = WKWebVIewHybridDemoTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9AFC83111E2E2BD7003A439F /* WKWebVIewHybridDemoUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9AFC83121E2E2BD7003A439F /* WKWebVIewHybridDemoUITests.m */,\n\t\t\t\t9AFC83141E2E2BD7003A439F /* Info.plist */,\n\t\t\t);\n\t\t\tpath = WKWebVIewHybridDemoUITests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t9AFC82E91E2E2BD7003A439F /* WKWebVIewHybridDemo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9AFC83171E2E2BD7003A439F /* Build configuration list for PBXNativeTarget \"WKWebVIewHybridDemo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9AFC82E61E2E2BD7003A439F /* Sources */,\n\t\t\t\t9AFC82E71E2E2BD7003A439F /* Frameworks */,\n\t\t\t\t9AFC82E81E2E2BD7003A439F /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = WKWebVIewHybridDemo;\n\t\t\tproductName = WKWebVIewHybridDemo;\n\t\t\tproductReference = 9AFC82EA1E2E2BD7003A439F /* WKWebVIewHybridDemo.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t9AFC83021E2E2BD7003A439F /* WKWebVIewHybridDemoTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9AFC831A1E2E2BD7003A439F /* Build configuration list for PBXNativeTarget \"WKWebVIewHybridDemoTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9AFC82FF1E2E2BD7003A439F /* Sources */,\n\t\t\t\t9AFC83001E2E2BD7003A439F /* Frameworks */,\n\t\t\t\t9AFC83011E2E2BD7003A439F /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t9AFC83051E2E2BD7003A439F /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = WKWebVIewHybridDemoTests;\n\t\t\tproductName = WKWebVIewHybridDemoTests;\n\t\t\tproductReference = 9AFC83031E2E2BD7003A439F /* WKWebVIewHybridDemoTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t9AFC830D1E2E2BD7003A439F /* WKWebVIewHybridDemoUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9AFC831D1E2E2BD7003A439F /* Build configuration list for PBXNativeTarget \"WKWebVIewHybridDemoUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9AFC830A1E2E2BD7003A439F /* Sources */,\n\t\t\t\t9AFC830B1E2E2BD7003A439F /* Frameworks */,\n\t\t\t\t9AFC830C1E2E2BD7003A439F /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t9AFC83101E2E2BD7003A439F /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = WKWebVIewHybridDemoUITests;\n\t\t\tproductName = WKWebVIewHybridDemoUITests;\n\t\t\tproductReference = 9AFC830E1E2E2BD7003A439F /* WKWebVIewHybridDemoUITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t9AFC82E21E2E2BD7003A439F /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0820;\n\t\t\t\tORGANIZATIONNAME = \"shuoyu liu\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t9AFC82E91E2E2BD7003A439F = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tDevelopmentTeam = 298LEY82V6;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\t9AFC83021E2E2BD7003A439F = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = 9AFC82E91E2E2BD7003A439F;\n\t\t\t\t\t};\n\t\t\t\t\t9AFC830D1E2E2BD7003A439F = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = 9AFC82E91E2E2BD7003A439F;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 9AFC82E51E2E2BD7003A439F /* Build configuration list for PBXProject \"WKWebVIewHybridDemo\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 9AFC82E11E2E2BD7003A439F;\n\t\t\tproductRefGroup = 9AFC82EB1E2E2BD7003A439F /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t9AFC82E91E2E2BD7003A439F /* WKWebVIewHybridDemo */,\n\t\t\t\t9AFC83021E2E2BD7003A439F /* WKWebVIewHybridDemoTests */,\n\t\t\t\t9AFC830D1E2E2BD7003A439F /* WKWebVIewHybridDemoUITests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t9AFC82E81E2E2BD7003A439F /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9AFC82FD1E2E2BD7003A439F /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t9AFC82FA1E2E2BD7003A439F /* Assets.xcassets in Resources */,\n\t\t\t\t9AFC82F81E2E2BD7003A439F /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9AFC83011E2E2BD7003A439F /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9AFC830C1E2E2BD7003A439F /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t9AFC82E61E2E2BD7003A439F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9AFC83281E2E2C0D003A439F /* HybirdViewController.m in Sources */,\n\t\t\t\t9AFC83251E2E2BF2003A439F /* HybridNSURLProtocol.m in Sources */,\n\t\t\t\t9AFC83241E2E2BF2003A439F /* NSURLProtocol+WKWebVIew.m in Sources */,\n\t\t\t\t9AFC82F21E2E2BD7003A439F /* AppDelegate.m in Sources */,\n\t\t\t\t9AFC82EF1E2E2BD7003A439F /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9AFC82FF1E2E2BD7003A439F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9AFC83081E2E2BD7003A439F /* WKWebVIewHybridDemoTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9AFC830A1E2E2BD7003A439F /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9AFC83131E2E2BD7003A439F /* WKWebVIewHybridDemoUITests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t9AFC83051E2E2BD7003A439F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9AFC82E91E2E2BD7003A439F /* WKWebVIewHybridDemo */;\n\t\t\ttargetProxy = 9AFC83041E2E2BD7003A439F /* PBXContainerItemProxy */;\n\t\t};\n\t\t9AFC83101E2E2BD7003A439F /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9AFC82E91E2E2BD7003A439F /* WKWebVIewHybridDemo */;\n\t\t\ttargetProxy = 9AFC830F1E2E2BD7003A439F /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t9AFC82F61E2E2BD7003A439F /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t9AFC82F71E2E2BD7003A439F /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9AFC82FB1E2E2BD7003A439F /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t9AFC82FC1E2E2BD7003A439F /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t9AFC83151E2E2BD7003A439F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9AFC83161E2E2BD7003A439F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9AFC83181E2E2BD7003A439F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tDEVELOPMENT_TEAM = 298LEY82V6;\n\t\t\t\tINFOPLIST_FILE = WKWebVIewHybridDemo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = medlinker.WKWebVIewHybridDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9AFC83191E2E2BD7003A439F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tDEVELOPMENT_TEAM = 298LEY82V6;\n\t\t\t\tINFOPLIST_FILE = WKWebVIewHybridDemo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = medlinker.WKWebVIewHybridDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9AFC831B1E2E2BD7003A439F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = WKWebVIewHybridDemoTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = medlinker.WKWebVIewHybridDemoTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/WKWebVIewHybridDemo.app/WKWebVIewHybridDemo\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9AFC831C1E2E2BD7003A439F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = WKWebVIewHybridDemoTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = medlinker.WKWebVIewHybridDemoTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/WKWebVIewHybridDemo.app/WKWebVIewHybridDemo\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9AFC831E1E2E2BD7003A439F /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = WKWebVIewHybridDemoUITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = medlinker.WKWebVIewHybridDemoUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_TARGET_NAME = WKWebVIewHybridDemo;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9AFC831F1E2E2BD7003A439F /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = WKWebVIewHybridDemoUITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = medlinker.WKWebVIewHybridDemoUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_TARGET_NAME = WKWebVIewHybridDemo;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t9AFC82E51E2E2BD7003A439F /* Build configuration list for PBXProject \"WKWebVIewHybridDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9AFC83151E2E2BD7003A439F /* Debug */,\n\t\t\t\t9AFC83161E2E2BD7003A439F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9AFC83171E2E2BD7003A439F /* Build configuration list for PBXNativeTarget \"WKWebVIewHybridDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9AFC83181E2E2BD7003A439F /* Debug */,\n\t\t\t\t9AFC83191E2E2BD7003A439F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n\t\t9AFC831A1E2E2BD7003A439F /* Build configuration list for PBXNativeTarget \"WKWebVIewHybridDemoTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9AFC831B1E2E2BD7003A439F /* Debug */,\n\t\t\t\t9AFC831C1E2E2BD7003A439F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n\t\t9AFC831D1E2E2BD7003A439F /* Build configuration list for PBXNativeTarget \"WKWebVIewHybridDemoUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9AFC831E1E2E2BD7003A439F /* Debug */,\n\t\t\t\t9AFC831F1E2E2BD7003A439F /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 9AFC82E21E2E2BD7003A439F /* Project object */;\n}\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:WKWebVIewHybridDemo.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemoTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemoTests/WKWebVIewHybridDemoTests.m",
    "content": "//\n//  WKWebVIewHybridDemoTests.m\n//  WKWebVIewHybridDemoTests\n//\n//  Created by shuoyu liu on 2017/1/17.\n//  Copyright © 2017年 shuoyu liu. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n\n@interface WKWebVIewHybridDemoTests : XCTestCase\n\n@end\n\n@implementation WKWebVIewHybridDemoTests\n\n- (void)setUp {\n    [super setUp];\n    // Put setup code here. This method is called before the invocation of each test method in the class.\n}\n\n- (void)tearDown {\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testExample {\n    // This is an example of a functional test case.\n    // Use XCTAssert and related functions to verify your tests produce the correct results.\n}\n\n- (void)testPerformanceExample {\n    // This is an example of a performance test case.\n    [self measureBlock:^{\n        // Put the code you want to measure the time of here.\n    }];\n}\n\n@end\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemoUITests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "WKWebVIewHybridDemo/WKWebVIewHybridDemoUITests/WKWebVIewHybridDemoUITests.m",
    "content": "//\n//  WKWebVIewHybridDemoUITests.m\n//  WKWebVIewHybridDemoUITests\n//\n//  Created by shuoyu liu on 2017/1/17.\n//  Copyright © 2017年 shuoyu liu. All rights reserved.\n//\n\n#import <XCTest/XCTest.h>\n\n@interface WKWebVIewHybridDemoUITests : XCTestCase\n\n@end\n\n@implementation WKWebVIewHybridDemoUITests\n\n- (void)setUp {\n    [super setUp];\n    \n    // Put setup code here. This method is called before the invocation of each test method in the class.\n    \n    // In UI tests it is usually best to stop immediately when a failure occurs.\n    self.continueAfterFailure = NO;\n    // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.\n    [[[XCUIApplication alloc] init] launch];\n    \n    // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.\n}\n\n- (void)tearDown {\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testExample {\n    // Use recording to get started writing UI tests.\n    // Use XCTAssert and related functions to verify your tests produce the correct results.\n}\n\n@end\n"
  }
]