From f53992b504b13624d020b94f37dfb4ccf2b71cf1 Mon Sep 17 00:00:00 2001 From: "Justin.wang" Date: Thu, 1 Mar 2018 18:40:34 +0800 Subject: [PATCH] fix bugs --- SafeKit/Foundation/NSArray+SafeKit.m | 8 +++++ .../Foundation/NSMutableDictionary+SafeKit.m | 13 ++++++++ SafeKit/MRC/NSMutableArray+SafeKitMRC.m | 9 ++++++ .../SafeKitExample.xcodeproj/project.pbxproj | 4 +-- .../UserInterfaceState.xcuserstate | Bin 0 -> 27750 bytes .../xcschemes/xcschememanagement.plist | 19 +++++++++++ .../AppIcon.appiconset/Contents.json | 30 ++++++++++++++++++ 7 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 SafeKitExample/SafeKitExample.xcodeproj/project.xcworkspace/xcuserdata/wangrongchao.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 SafeKitExample/SafeKitExample.xcodeproj/xcuserdata/wangrongchao.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/SafeKit/Foundation/NSArray+SafeKit.m b/SafeKit/Foundation/NSArray+SafeKit.m index de8b3ae..90b61ad 100644 --- a/SafeKit/Foundation/NSArray+SafeKit.m +++ b/SafeKit/Foundation/NSArray+SafeKit.m @@ -30,6 +30,13 @@ - (id)safe_objectAtIndex:(NSUInteger)index { return [self safe_objectAtIndex:index]; } +- (id)safe_objectAtIndexedSubscript:(NSUInteger)index { + if (index >= [self count]) { + return nil; + } + return [self safe_objectAtIndexedSubscript:index]; +} + - (NSArray *)safe_arrayByAddingObject:(id)anObject { if (!anObject) { return self; @@ -42,6 +49,7 @@ + (void)load { dispatch_once(&onceToken, ^{ [self safe_swizzleMethod:@selector(initWithObjects_safe:count:) tarClass:@"__NSPlaceholderArray" tarSel:@selector(initWithObjects:count:)]; [self safe_swizzleMethod:@selector(safe_objectAtIndex:) tarClass:@"__NSArrayI" tarSel:@selector(objectAtIndex:)]; + [self safe_swizzleMethod:@selector(safe_objectAtIndexedSubscript:) tarClass:@"__NSArrayI" tarSel:@selector(objectAtIndexedSubscript:)]; [self safe_swizzleMethod:@selector(safe_arrayByAddingObject:) tarClass:@"__NSArrayI" tarSel:@selector(arrayByAddingObject:)]; }); } diff --git a/SafeKit/Foundation/NSMutableDictionary+SafeKit.m b/SafeKit/Foundation/NSMutableDictionary+SafeKit.m index 416490b..43c2a0c 100644 --- a/SafeKit/Foundation/NSMutableDictionary+SafeKit.m +++ b/SafeKit/Foundation/NSMutableDictionary+SafeKit.m @@ -18,6 +18,17 @@ - (void)safe_removeObjectForKey:(id)aKey { [self safe_removeObjectForKey:aKey]; } +- (void)safe_setObject:(id)anObject forKeyedSubscript:(id )aKey { + if (!anObject) { + return; + } + if (!aKey) { + return; + } + [self safe_setObject:anObject forKeyedSubscript:aKey]; +} + + - (void)safe_setObject:(id)anObject forKey:(id )aKey { if (!anObject) { return; @@ -33,6 +44,8 @@ + (void) load { dispatch_once(&onceToken, ^{ [self safe_swizzleMethod:@selector(safe_removeObjectForKey:) tarClass:@"__NSDictionaryM" tarSel:@selector(removeObjectForKey:)]; [self safe_swizzleMethod:@selector(safe_setObject:forKey:) tarClass:@"__NSDictionaryM" tarSel:@selector(setObject:forKey:)]; + [self safe_swizzleMethod:@selector(safe_setObject:forKeyedSubscript:) tarClass:@"__NSDictionaryM" tarSel:@selector(setObject:forKeyedSubscript:)]; + }); } diff --git a/SafeKit/MRC/NSMutableArray+SafeKitMRC.m b/SafeKit/MRC/NSMutableArray+SafeKitMRC.m index 9d541c5..833aed7 100644 --- a/SafeKit/MRC/NSMutableArray+SafeKitMRC.m +++ b/SafeKit/MRC/NSMutableArray+SafeKitMRC.m @@ -19,10 +19,19 @@ - (id)safe_objectAtIndex:(NSUInteger)index { return [self safe_objectAtIndex:index]; } + +- (id)safe_objectAtIndexedSubscript:(NSUInteger)index { + if (index >= [self count]) { + return nil; + } + return [self safe_objectAtIndexedSubscript:index]; +} + + (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self safe_swizzleMethod:@selector(safe_objectAtIndex:) tarClass:@"__NSArrayM" tarSel:@selector(objectAtIndex:)]; + [self safe_swizzleMethod:@selector(safe_objectAtIndexedSubscript:) tarClass:@"__NSArrayM" tarSel:@selector(objectAtIndexedSubscript:)]; }); } diff --git a/SafeKitExample/SafeKitExample.xcodeproj/project.pbxproj b/SafeKitExample/SafeKitExample.xcodeproj/project.pbxproj index 42e2008..43085ec 100644 --- a/SafeKitExample/SafeKitExample.xcodeproj/project.pbxproj +++ b/SafeKitExample/SafeKitExample.xcodeproj/project.pbxproj @@ -695,7 +695,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SafeKitExample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = "-ObjC"; PRODUCT_BUNDLE_IDENTIFIER = com.zhangyu.SafeKitExample; @@ -708,7 +708,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = SafeKitExample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = "-ObjC"; PRODUCT_BUNDLE_IDENTIFIER = com.zhangyu.SafeKitExample; diff --git a/SafeKitExample/SafeKitExample.xcodeproj/project.xcworkspace/xcuserdata/wangrongchao.xcuserdatad/UserInterfaceState.xcuserstate b/SafeKitExample/SafeKitExample.xcodeproj/project.xcworkspace/xcuserdata/wangrongchao.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..af389b1856e1168c631640459e1bf36bedac45d1 GIT binary patch literal 27750 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 literal 0 HcmV?d00001 diff --git a/SafeKitExample/SafeKitExample.xcodeproj/xcuserdata/wangrongchao.xcuserdatad/xcschemes/xcschememanagement.plist b/SafeKitExample/SafeKitExample.xcodeproj/xcuserdata/wangrongchao.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..38eac68 --- /dev/null +++ b/SafeKitExample/SafeKitExample.xcodeproj/xcuserdata/wangrongchao.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,19 @@ + + + + + SchemeUserState + + SafeKitExample.xcscheme + + orderHint + 1 + + SafeKitLib.xcscheme + + orderHint + 0 + + + + diff --git a/SafeKitExample/SafeKitExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/SafeKitExample/SafeKitExample/Assets.xcassets/AppIcon.appiconset/Contents.json index 36d2c80..d8db8d6 100644 --- a/SafeKitExample/SafeKitExample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/SafeKitExample/SafeKitExample/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "29x29", @@ -30,6 +40,16 @@ "size" : "60x60", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -59,6 +79,16 @@ "idiom" : "ipad", "size" : "76x76", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : {