From fb575c0b6260c5d49ca3ac2b560098771e64f88e Mon Sep 17 00:00:00 2001 From: wushenghua Date: Thu, 17 Nov 2016 16:44:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=99=E5=A5=BD=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ASHWebURLProtocol.xcodeproj/project.pbxproj | 12 ++ .../UserInterfaceState.xcuserstate | Bin 9468 -> 26413 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 199 ++++++++++++++++++ .../xcschemes/ASHWebURLProtocol.xcscheme | 7 + ASHWebURLProtocol/ASHWebNSURLProtocol.h | 13 ++ ASHWebURLProtocol/ASHWebNSURLProtocol.m | 150 +++++++++++++ ASHWebURLProtocol/AppDelegate.m | 4 +- ASHWebURLProtocol/Info.plist | 5 + ASHWebURLProtocol/ViewController.m | 17 +- 9 files changed, 404 insertions(+), 3 deletions(-) create mode 100644 ASHWebURLProtocol.xcodeproj/xcuserdata/xmfish.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 ASHWebURLProtocol/ASHWebNSURLProtocol.h create mode 100644 ASHWebURLProtocol/ASHWebNSURLProtocol.m diff --git a/ASHWebURLProtocol.xcodeproj/project.pbxproj b/ASHWebURLProtocol.xcodeproj/project.pbxproj index de4c160..0b8f02b 100644 --- a/ASHWebURLProtocol.xcodeproj/project.pbxproj +++ b/ASHWebURLProtocol.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ A9CA81F41DDC39990013F919 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A9CA81F21DDC39990013F919 /* Main.storyboard */; }; A9CA81F61DDC39990013F919 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A9CA81F51DDC39990013F919 /* Assets.xcassets */; }; A9CA81F91DDC39990013F919 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A9CA81F71DDC39990013F919 /* LaunchScreen.storyboard */; }; + A9CA82021DDC3ADB0013F919 /* ASHWebNSURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = A9CA82011DDC3ADB0013F919 /* ASHWebNSURLProtocol.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -26,6 +27,8 @@ A9CA81F51DDC39990013F919 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; A9CA81F81DDC39990013F919 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; A9CA81FA1DDC39990013F919 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A9CA82001DDC3ADB0013F919 /* ASHWebNSURLProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASHWebNSURLProtocol.h; sourceTree = ""; }; + A9CA82011DDC3ADB0013F919 /* ASHWebNSURLProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASHWebNSURLProtocol.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -67,6 +70,8 @@ A9CA81F71DDC39990013F919 /* LaunchScreen.storyboard */, A9CA81FA1DDC39990013F919 /* Info.plist */, A9CA81E91DDC39990013F919 /* Supporting Files */, + A9CA82001DDC3ADB0013F919 /* ASHWebNSURLProtocol.h */, + A9CA82011DDC3ADB0013F919 /* ASHWebNSURLProtocol.m */, ); path = ASHWebURLProtocol; sourceTree = ""; @@ -110,6 +115,7 @@ TargetAttributes = { A9CA81E51DDC39990013F919 = { CreatedOnToolsVersion = 8.0; + DevelopmentTeam = X75CUV458P; ProvisioningStyle = Automatic; }; }; @@ -150,6 +156,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + A9CA82021DDC3ADB0013F919 /* ASHWebNSURLProtocol.m in Sources */, A9CA81F11DDC39990013F919 /* ViewController.m in Sources */, A9CA81EE1DDC39990013F919 /* AppDelegate.m in Sources */, A9CA81EB1DDC39990013F919 /* main.m in Sources */, @@ -270,7 +277,9 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = X75CUV458P; INFOPLIST_FILE = ASHWebURLProtocol/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.ash.ASHWebURLProtocol; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -281,7 +290,9 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = X75CUV458P; INFOPLIST_FILE = ASHWebURLProtocol/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.ash.ASHWebURLProtocol; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -307,6 +318,7 @@ A9CA81FF1DDC39990013F919 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/ASHWebURLProtocol.xcodeproj/project.xcworkspace/xcuserdata/xmfish.xcuserdatad/UserInterfaceState.xcuserstate b/ASHWebURLProtocol.xcodeproj/project.xcworkspace/xcuserdata/xmfish.xcuserdatad/UserInterfaceState.xcuserstate index c77a9773364b85db94c13c4a1b2a994ed89819e3..87909f42f9330545988e471bc6a53defeacae6b0 100644 GIT binary patch literal 26413 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 literal 9468 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ASHWebURLProtocol.xcodeproj/xcuserdata/xmfish.xcuserdatad/xcschemes/ASHWebURLProtocol.xcscheme b/ASHWebURLProtocol.xcodeproj/xcuserdata/xmfish.xcuserdatad/xcschemes/ASHWebURLProtocol.xcscheme index b393a54..b4b0b50 100644 --- a/ASHWebURLProtocol.xcodeproj/xcuserdata/xmfish.xcuserdatad/xcschemes/ASHWebURLProtocol.xcscheme +++ b/ASHWebURLProtocol.xcodeproj/xcuserdata/xmfish.xcuserdatad/xcschemes/ASHWebURLProtocol.xcscheme @@ -61,6 +61,13 @@ ReferencedContainer = "container:ASHWebURLProtocol.xcodeproj"> + + + + diff --git a/ASHWebURLProtocol/ASHWebNSURLProtocol.h b/ASHWebURLProtocol/ASHWebNSURLProtocol.h new file mode 100644 index 0000000..b304950 --- /dev/null +++ b/ASHWebURLProtocol/ASHWebNSURLProtocol.h @@ -0,0 +1,13 @@ +// +// ASHWebNSURLProtocol.h +// ASHWebURLProtocol +// +// Created by xmfish on 16/11/16. +// Copyright © 2016年 ash. All rights reserved. +// + +#import + +@interface ASHWebNSURLProtocol : NSURLProtocol + +@end diff --git a/ASHWebURLProtocol/ASHWebNSURLProtocol.m b/ASHWebURLProtocol/ASHWebNSURLProtocol.m new file mode 100644 index 0000000..b3e23b7 --- /dev/null +++ b/ASHWebURLProtocol/ASHWebNSURLProtocol.m @@ -0,0 +1,150 @@ +// +// ASHWebNSURLProtocol.m +// ASHWebURLProtocol +// +// Created by xmfish on 16/11/16. +// Copyright © 2016年 ash. All rights reserved. +// + +#import "ASHWebNSURLProtocol.h" + +@interface ASHCachedData : NSObject +@property (nonatomic, readwrite, strong) NSData *data; +@property (nonatomic, readwrite, strong) NSURLResponse *response; +@end + +static NSString *const kDataKey = @"data"; +static NSString *const kResponseKey = @"response"; +static NSString *const kHTTPHeaderField = @"ASH-WebView-Caching"; +@implementation ASHCachedData + +- (void)encodeWithCoder:(NSCoder *)aCoder +{ + [aCoder encodeObject:[self data] forKey:kDataKey]; + [aCoder encodeObject:[self response] forKey:kResponseKey]; +} + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super init]; + if (self != nil) { + [self setData:[aDecoder decodeObjectForKey:kDataKey]]; + [self setResponse:[aDecoder decodeObjectForKey:kResponseKey]]; + } + + return self; +} +@end + +@interface ASHWebNSURLProtocol() +@property (nonatomic, strong) NSURLConnection* connection; +@property (nonatomic, strong) NSURLSession* session; +@property (nonatomic, readwrite, strong) NSMutableData *data; +@property (nonatomic, readwrite, strong) NSURLResponse *response; +@end + + +@implementation ASHWebNSURLProtocol + +- (NSString *)cachePathForRequest:(NSURLRequest *)aRequest +{ + NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; + NSString *fileName = [NSString stringWithFormat:@"%lu",[[[aRequest URL] absoluteString] hash]]; + + return [cachesPath stringByAppendingPathComponent:fileName]; +} + +- (void)appendData:(NSData *)newData +{ + if ([self data] == nil) { + [self setData:[newData mutableCopy]]; + } + else { + [[self data] appendData:newData]; + } +} + ++(BOOL)canInitWithRequest:(NSURLRequest *)request +{ + + ///通过UA 来判断是否UIWebView发起的请求 + NSString* UA = [request valueForHTTPHeaderField:@"User-Agent"]; + if ([UA containsString:@" AppleWebKit/"] == NO) { + return NO; + } + + if ([request valueForHTTPHeaderField:kHTTPHeaderField]) { + return NO; + } + return YES; +} + ++ (NSURLRequest*)canonicalRequestForRequest:(NSURLRequest *)request +{ + return request; +} + ++ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest*)b +{ + return [super requestIsCacheEquivalent:a toRequest:b]; +} +- (void)startLoading +{ + + + NSString *cachesPath = [self cachePathForRequest:[self request]]; + ASHCachedData *cache = [NSKeyedUnarchiver unarchiveObjectWithFile:cachesPath]; + +// if (cache) { +// NSData *data = cache.data; +// +// [[self client] URLProtocol:self didReceiveResponse:cache.response cacheStoragePolicy:NSURLCacheStorageNotAllowed]; +// [[self client] URLProtocol:self didLoadData:data]; +// [[self client] URLProtocolDidFinishLoading:self]; +// return; +// } + + + NSMutableURLRequest *newRequest = [self.request mutableCopy]; + + [newRequest setValue:@"" forHTTPHeaderField:kHTTPHeaderField]; + [newRequest setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData]; + + self.connection = [NSURLConnection connectionWithRequest:newRequest + delegate:self]; + + [self.connection start]; +} +- (void)stopLoading +{ +// [self.connection cancel]; +} + +- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { + [self setResponse:response]; + [self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed]; +} + +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { + [self.client URLProtocol:self didLoadData:data]; + [self appendData:data]; + +} +- (void)connectionDidFinishLoading:(NSURLConnection *)connection { + [self.client URLProtocolDidFinishLoading:self]; + + NSString *cachesPath = [self cachePathForRequest:[self request]]; + + + + ASHCachedData *cache = [ASHCachedData new]; + cache.data = [self data]; + cache.response = [self response]; + + [NSKeyedArchiver archiveRootObject:cache toFile:cachesPath]; +} +- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { + [self.client URLProtocol:self didFailWithError:error]; +} + +@end diff --git a/ASHWebURLProtocol/AppDelegate.m b/ASHWebURLProtocol/AppDelegate.m index 673ca8c..1132e0d 100644 --- a/ASHWebURLProtocol/AppDelegate.m +++ b/ASHWebURLProtocol/AppDelegate.m @@ -7,7 +7,7 @@ // #import "AppDelegate.h" - +#import "ASHWebNSURLProtocol.h" @interface AppDelegate () @end @@ -17,6 +17,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. + + [NSURLProtocol registerClass:[ASHWebNSURLProtocol class]]; return YES; } diff --git a/ASHWebURLProtocol/Info.plist b/ASHWebURLProtocol/Info.plist index 38e98af..9a21b4f 100644 --- a/ASHWebURLProtocol/Info.plist +++ b/ASHWebURLProtocol/Info.plist @@ -34,5 +34,10 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + diff --git a/ASHWebURLProtocol/ViewController.m b/ASHWebURLProtocol/ViewController.m index 2557e29..3a525db 100644 --- a/ASHWebURLProtocol/ViewController.m +++ b/ASHWebURLProtocol/ViewController.m @@ -8,18 +8,31 @@ #import "ViewController.h" -@interface ViewController () +@interface ViewController () +@property(nonatomic,strong) UIWebView* webview;; @end @implementation ViewController + + - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. + _webview = [[UIWebView alloc] init]; + _webview.frame = self.view.bounds; + [self.view addSubview:_webview]; + + [self loadWebView]; } - +- (void)loadWebView +{ + NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; + NSURLRequest *request = [NSURLRequest requestWithURL:url]; + [self.webview loadRequest:request]; +} - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.