diff --git a/BlocksKit.podspec b/BlocksKit.podspec index a33d76f77..4ccc10a4c 100644 --- a/BlocksKit.podspec +++ b/BlocksKit.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'BlocksKit' - s.version = '2.2.5' + s.version = '2.2.6' s.license = 'MIT' s.summary = 'The Objective-C block utilities you always wish you had.' s.homepage = 'https://zwaldowski.github.io/BlocksKit' @@ -10,6 +10,7 @@ Pod::Spec.new do |s| s.requires_arc = true s.osx.deployment_target = '10.8' s.ios.deployment_target = '6.0' + s.watchos.deployment_target = '2.0' s.default_subspec = 'All' s.subspec 'All' do |ss| @@ -21,7 +22,7 @@ Pod::Spec.new do |s| end s.subspec 'Core' do |ss| - ss.source_files = 'BlocksKit/BlocksKit.h', 'BlocksKit/Core/*.{h,m}' + ss.source_files = 'BlocksKit/BlocksKit.h', "BlocksKit/BKDefines.h", 'BlocksKit/Core/*.{h,m}' end s.subspec 'DynamicDelegate' do |ss| diff --git a/BlocksKit.xcodeproj/project.pbxproj b/BlocksKit.xcodeproj/project.pbxproj index c82100d06..c08aa3775 100644 --- a/BlocksKit.xcodeproj/project.pbxproj +++ b/BlocksKit.xcodeproj/project.pbxproj @@ -7,973 +7,1102 @@ objects = { /* Begin PBXBuildFile section */ - 2BB8A49518BE7740006AF0F6 /* UIImagePickerControllerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BB8A49418BE7740006AF0F6 /* UIImagePickerControllerBlocksKitTest.m */; }; - 2BB8A49C18BE7927006AF0F6 /* UIImagePickerController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BB8A49B18BE7927006AF0F6 /* UIImagePickerController+BlocksKit.m */; }; - 2BB8A4A218BEF584006AF0F6 /* UIImagePickerController+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 2BB8A49A18BE7927006AF0F6 /* UIImagePickerController+BlocksKit.h */; }; - 43CE09E1198660EE00F91137 /* QLPreviewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 43CE09E0198660EE00F91137 /* QLPreviewController+BlocksKit.m */; }; - 43CE09E419866C2300F91137 /* QLPreviewControllerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 43CE09E319866C2300F91137 /* QLPreviewControllerBlocksKitTest.m */; }; - 43CE09E519866CC200F91137 /* BlocksKit+QuickLook.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 43CE09E21986618700F91137 /* BlocksKit+QuickLook.h */; }; - 43CE09E919866D8400F91137 /* QLPreviewController+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 43CE09DF198660EE00F91137 /* QLPreviewController+BlocksKit.h */; }; - A3E3ED9B19F797A3008E0ECB /* NSMapTable+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = A3E3ED9919F797A3008E0ECB /* NSMapTable+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3E3ED9C19F797A3008E0ECB /* NSMapTable+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E3ED9A19F797A3008E0ECB /* NSMapTable+BlocksKit.m */; }; - A3E3ED9D19F797A3008E0ECB /* NSMapTable+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E3ED9A19F797A3008E0ECB /* NSMapTable+BlocksKit.m */; }; - A3E3ED9E19F797C9008E0ECB /* NSMapTable+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = A3E3ED9919F797A3008E0ECB /* NSMapTable+BlocksKit.h */; }; - A3E3EDA119F798C6008E0ECB /* NSMapTableBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E3EDA019F798C6008E0ECB /* NSMapTableBlocksKitTest.m */; }; - A3E3EDA219F798C6008E0ECB /* NSMapTableBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A3E3EDA019F798C6008E0ECB /* NSMapTableBlocksKitTest.m */; }; - DB5BF880185E909300FF2A0B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB08B1184DC23000F37EEE /* Foundation.framework */; }; - DB5BF881185E909300FF2A0B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB5BF802185E8E6300FF2A0B /* CoreGraphics.framework */; }; - DB5BF882185E909300FF2A0B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB08C2184DC23000F37EEE /* UIKit.framework */; }; - DB981A04185E96A60047E817 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DB981A03185E96A60047E817 /* Images.xcassets */; }; - DB981A06185E96EA0047E817 /* iOS-Runner.m in Sources */ = {isa = PBXBuildFile; fileRef = DB981A05185E96EA0047E817 /* iOS-Runner.m */; }; - DBD7875418E0CE3A008DC59D /* XCTestCase+BKAsyncTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = DBD7875318E0CE3A008DC59D /* XCTestCase+BKAsyncTestCase.m */; }; - DBD7875518E0CE3A008DC59D /* XCTestCase+BKAsyncTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = DBD7875318E0CE3A008DC59D /* XCTestCase+BKAsyncTestCase.m */; }; - DBE126D8184DDD8B0023AFAD /* A2DynamicTestClasses+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DBE126D7184DDD8B0023AFAD /* A2DynamicTestClasses+A2BlockDelegate.m */; }; - DBE126D9184DDD8B0023AFAD /* A2DynamicTestClasses+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DBE126D7184DDD8B0023AFAD /* A2DynamicTestClasses+A2BlockDelegate.m */; }; - DBE126DA184DDD8F0023AFAD /* A2DynamicTestClasses.m in Sources */ = {isa = PBXBuildFile; fileRef = DBE126D4184DDCFA0023AFAD /* A2DynamicTestClasses.m */; }; - DBE126DB184DDD900023AFAD /* A2DynamicTestClasses.m in Sources */ = {isa = PBXBuildFile; fileRef = DBE126D4184DDCFA0023AFAD /* A2DynamicTestClasses.m */; }; - DBFB08B2184DC23000F37EEE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB08B1184DC23000F37EEE /* Foundation.framework */; }; - DBFB08B7184DC23000F37EEE /* BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB08B6184DC23000F37EEE /* BlocksKit.h */; }; - DBFB08C0184DC23000F37EEE /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB08BF184DC23000F37EEE /* XCTest.framework */; }; - DBFB08C1184DC23000F37EEE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB08B1184DC23000F37EEE /* Foundation.framework */; }; - DBFB08C3184DC23000F37EEE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB08C2184DC23000F37EEE /* UIKit.framework */; }; - DBFB08C6184DC23000F37EEE /* libBlocksKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB08AE184DC23000F37EEE /* libBlocksKit.a */; }; - DBFB0942184DC36400F37EEE /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB08BF184DC23000F37EEE /* XCTest.framework */; }; - DBFB0943184DC36400F37EEE /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB092D184DC36400F37EEE /* Cocoa.framework */; }; - DBFB0946184DC36400F37EEE /* BlocksKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB092C184DC36400F37EEE /* BlocksKit.framework */; }; - DBFB0955184DC3AB00F37EEE /* BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB08B6184DC23000F37EEE /* BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB0958184DC3B400F37EEE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB0930184DC36400F37EEE /* Foundation.framework */; }; - DBFB09AC184DC7B000F37EEE /* BKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB098D184DC7AF00F37EEE /* BKMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09AD184DC7B000F37EEE /* NSArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB098E184DC7AF00F37EEE /* NSArray+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09AE184DC7B000F37EEE /* NSArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB098F184DC7AF00F37EEE /* NSArray+BlocksKit.m */; }; - DBFB09AF184DC7B000F37EEE /* NSArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB098F184DC7AF00F37EEE /* NSArray+BlocksKit.m */; }; - DBFB09B0184DC7B000F37EEE /* NSDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB0990184DC7AF00F37EEE /* NSDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09B1184DC7B000F37EEE /* NSDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0991184DC7AF00F37EEE /* NSDictionary+BlocksKit.m */; }; - DBFB09B2184DC7B000F37EEE /* NSDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0991184DC7AF00F37EEE /* NSDictionary+BlocksKit.m */; }; - DBFB09B3184DC7B000F37EEE /* NSIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB0992184DC7AF00F37EEE /* NSIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09B4184DC7B000F37EEE /* NSIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0993184DC7AF00F37EEE /* NSIndexSet+BlocksKit.m */; }; - DBFB09B5184DC7B000F37EEE /* NSIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0993184DC7AF00F37EEE /* NSIndexSet+BlocksKit.m */; }; - DBFB09B6184DC7B000F37EEE /* NSInvocation+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB0994184DC7AF00F37EEE /* NSInvocation+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09B7184DC7B000F37EEE /* NSInvocation+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0995184DC7AF00F37EEE /* NSInvocation+BlocksKit.m */; }; - DBFB09B8184DC7B000F37EEE /* NSInvocation+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0995184DC7AF00F37EEE /* NSInvocation+BlocksKit.m */; }; - DBFB09B9184DC7B000F37EEE /* NSMutableArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB0996184DC7AF00F37EEE /* NSMutableArray+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09BA184DC7B000F37EEE /* NSMutableArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0997184DC7B000F37EEE /* NSMutableArray+BlocksKit.m */; }; - DBFB09BB184DC7B000F37EEE /* NSMutableArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0997184DC7B000F37EEE /* NSMutableArray+BlocksKit.m */; }; - DBFB09BC184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB0998184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09BD184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0999184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.m */; }; - DBFB09BE184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0999184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.m */; }; - DBFB09BF184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB099A184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09C0184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB099B184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.m */; }; - DBFB09C1184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB099B184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.m */; }; - DBFB09C2184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB099C184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09C3184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB099D184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.m */; }; - DBFB09C4184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB099D184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.m */; }; - DBFB09C5184DC7B000F37EEE /* NSMutableSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB099E184DC7B000F37EEE /* NSMutableSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09C6184DC7B000F37EEE /* NSMutableSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB099F184DC7B000F37EEE /* NSMutableSet+BlocksKit.m */; }; - DBFB09C7184DC7B000F37EEE /* NSMutableSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB099F184DC7B000F37EEE /* NSMutableSet+BlocksKit.m */; }; - DBFB09C8184DC7B000F37EEE /* NSObject+BKAssociatedObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09A0184DC7B000F37EEE /* NSObject+BKAssociatedObjects.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09C9184DC7B000F37EEE /* NSObject+BKAssociatedObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09A1184DC7B000F37EEE /* NSObject+BKAssociatedObjects.m */; }; - DBFB09CA184DC7B000F37EEE /* NSObject+BKAssociatedObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09A1184DC7B000F37EEE /* NSObject+BKAssociatedObjects.m */; }; - DBFB09CB184DC7B000F37EEE /* NSObject+BKBlockExecution.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09A2184DC7B000F37EEE /* NSObject+BKBlockExecution.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09CC184DC7B000F37EEE /* NSObject+BKBlockExecution.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09A3184DC7B000F37EEE /* NSObject+BKBlockExecution.m */; }; - DBFB09CD184DC7B000F37EEE /* NSObject+BKBlockExecution.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09A3184DC7B000F37EEE /* NSObject+BKBlockExecution.m */; }; - DBFB09CE184DC7B000F37EEE /* NSObject+BKBlockObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09A4184DC7B000F37EEE /* NSObject+BKBlockObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09CF184DC7B000F37EEE /* NSObject+BKBlockObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09A5184DC7B000F37EEE /* NSObject+BKBlockObservation.m */; }; - DBFB09D0184DC7B000F37EEE /* NSObject+BKBlockObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09A5184DC7B000F37EEE /* NSObject+BKBlockObservation.m */; }; - DBFB09D1184DC7B000F37EEE /* NSOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09A6184DC7B000F37EEE /* NSOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09D2184DC7B000F37EEE /* NSOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09A7184DC7B000F37EEE /* NSOrderedSet+BlocksKit.m */; }; - DBFB09D3184DC7B000F37EEE /* NSOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09A7184DC7B000F37EEE /* NSOrderedSet+BlocksKit.m */; }; - DBFB09D4184DC7B000F37EEE /* NSSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09A8184DC7B000F37EEE /* NSSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09D5184DC7B000F37EEE /* NSSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09A9184DC7B000F37EEE /* NSSet+BlocksKit.m */; }; - DBFB09D6184DC7B000F37EEE /* NSSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09A9184DC7B000F37EEE /* NSSet+BlocksKit.m */; }; - DBFB09D7184DC7B000F37EEE /* NSTimer+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09AA184DC7B000F37EEE /* NSTimer+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09D8184DC7B000F37EEE /* NSTimer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09AB184DC7B000F37EEE /* NSTimer+BlocksKit.m */; }; - DBFB09D9184DC7B000F37EEE /* NSTimer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09AB184DC7B000F37EEE /* NSTimer+BlocksKit.m */; }; - DBFB09DA184DC7BD00F37EEE /* BlocksKit+MessageUI.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB098A184DC7A200F37EEE /* BlocksKit+MessageUI.h */; }; - DBFB09DB184DC7BD00F37EEE /* BlocksKit+UIKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB098B184DC7A200F37EEE /* BlocksKit+UIKit.h */; }; - DBFB09DC184DC7BD00F37EEE /* BKMacros.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB098D184DC7AF00F37EEE /* BKMacros.h */; }; - DBFB09DD184DC7C600F37EEE /* NSArray+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB098E184DC7AF00F37EEE /* NSArray+BlocksKit.h */; }; - DBFB09DE184DC7C600F37EEE /* NSDictionary+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0990184DC7AF00F37EEE /* NSDictionary+BlocksKit.h */; }; - DBFB09DF184DC7C600F37EEE /* NSIndexSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0992184DC7AF00F37EEE /* NSIndexSet+BlocksKit.h */; }; - DBFB09E0184DC7C600F37EEE /* NSInvocation+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0994184DC7AF00F37EEE /* NSInvocation+BlocksKit.h */; }; - DBFB09E1184DC7C600F37EEE /* NSMutableArray+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0996184DC7AF00F37EEE /* NSMutableArray+BlocksKit.h */; }; - DBFB09E2184DC7C600F37EEE /* NSMutableDictionary+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0998184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.h */; }; - DBFB09E3184DC7C600F37EEE /* NSMutableIndexSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB099A184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.h */; }; - DBFB09E4184DC7C600F37EEE /* NSMutableOrderedSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB099C184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.h */; }; - DBFB09E5184DC7C600F37EEE /* NSMutableSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB099E184DC7B000F37EEE /* NSMutableSet+BlocksKit.h */; }; - DBFB09E6184DC7C600F37EEE /* NSObject+BKAssociatedObjects.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09A0184DC7B000F37EEE /* NSObject+BKAssociatedObjects.h */; }; - DBFB09E7184DC7C600F37EEE /* NSObject+BKBlockExecution.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09A2184DC7B000F37EEE /* NSObject+BKBlockExecution.h */; }; - DBFB09E8184DC7C600F37EEE /* NSObject+BKBlockObservation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09A4184DC7B000F37EEE /* NSObject+BKBlockObservation.h */; }; - DBFB09E9184DC7C600F37EEE /* NSOrderedSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09A6184DC7B000F37EEE /* NSOrderedSet+BlocksKit.h */; }; - DBFB09EA184DC7C600F37EEE /* NSSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09A8184DC7B000F37EEE /* NSSet+BlocksKit.h */; }; - DBFB09EB184DC7C600F37EEE /* NSTimer+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09AA184DC7B000F37EEE /* NSTimer+BlocksKit.h */; }; - DBFB09FB184DC7E400F37EEE /* A2BlockInvocation.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09ED184DC7E400F37EEE /* A2BlockInvocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09FC184DC7E400F37EEE /* A2BlockInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09EE184DC7E400F37EEE /* A2BlockInvocation.m */; }; - DBFB09FD184DC7E400F37EEE /* A2BlockInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09EE184DC7E400F37EEE /* A2BlockInvocation.m */; }; - DBFB09FE184DC7E400F37EEE /* A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09EF184DC7E400F37EEE /* A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB09FF184DC7E400F37EEE /* A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09F0184DC7E400F37EEE /* A2DynamicDelegate.m */; }; - DBFB0A00184DC7E400F37EEE /* A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09F0184DC7E400F37EEE /* A2DynamicDelegate.m */; }; - DBFB0A02184DC7E400F37EEE /* NSCache+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09F3184DC7E400F37EEE /* NSCache+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB0A03184DC7E400F37EEE /* NSCache+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09F4184DC7E400F37EEE /* NSCache+BlocksKit.m */; }; - DBFB0A04184DC7E400F37EEE /* NSCache+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09F4184DC7E400F37EEE /* NSCache+BlocksKit.m */; }; - DBFB0A05184DC7E400F37EEE /* NSURLConnection+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09F5184DC7E400F37EEE /* NSURLConnection+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB0A06184DC7E400F37EEE /* NSURLConnection+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09F6184DC7E400F37EEE /* NSURLConnection+BlocksKit.m */; }; - DBFB0A07184DC7E400F37EEE /* NSURLConnection+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09F6184DC7E400F37EEE /* NSURLConnection+BlocksKit.m */; }; - DBFB0A08184DC7E400F37EEE /* NSObject+A2BlockDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09F7184DC7E400F37EEE /* NSObject+A2BlockDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB0A09184DC7E400F37EEE /* NSObject+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09F8184DC7E400F37EEE /* NSObject+A2BlockDelegate.m */; }; - DBFB0A0A184DC7E400F37EEE /* NSObject+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09F8184DC7E400F37EEE /* NSObject+A2BlockDelegate.m */; }; - DBFB0A0B184DC7E400F37EEE /* NSObject+A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFB09F9184DC7E400F37EEE /* NSObject+A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBFB0A0C184DC7E400F37EEE /* NSObject+A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09FA184DC7E400F37EEE /* NSObject+A2DynamicDelegate.m */; }; - DBFB0A0D184DC7E400F37EEE /* NSObject+A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB09FA184DC7E400F37EEE /* NSObject+A2DynamicDelegate.m */; }; - DBFB0A0E184DC7FB00F37EEE /* A2BlockInvocation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09ED184DC7E400F37EEE /* A2BlockInvocation.h */; }; - DBFB0A0F184DC7FB00F37EEE /* A2DynamicDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09EF184DC7E400F37EEE /* A2DynamicDelegate.h */; }; - DBFB0A10184DC7FB00F37EEE /* NSObject+A2BlockDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09F7184DC7E400F37EEE /* NSObject+A2BlockDelegate.h */; }; - DBFB0A11184DC7FB00F37EEE /* NSObject+A2DynamicDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09F9184DC7E400F37EEE /* NSObject+A2DynamicDelegate.h */; }; - DBFB0A12184DC7FB00F37EEE /* NSCache+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09F3184DC7E400F37EEE /* NSCache+BlocksKit.h */; }; - DBFB0A13184DC7FB00F37EEE /* NSURLConnection+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB09F5184DC7E400F37EEE /* NSURLConnection+BlocksKit.h */; }; - DBFB0A19184DC82100F37EEE /* MFMailComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0A16184DC82000F37EEE /* MFMailComposeViewController+BlocksKit.m */; }; - DBFB0A1A184DC82100F37EEE /* MFMessageComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0A18184DC82100F37EEE /* MFMessageComposeViewController+BlocksKit.m */; }; - DBFB0A1B184DC82900F37EEE /* MFMailComposeViewController+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0A15184DC82000F37EEE /* MFMailComposeViewController+BlocksKit.h */; }; - DBFB0A1C184DC82900F37EEE /* MFMessageComposeViewController+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0A17184DC82100F37EEE /* MFMessageComposeViewController+BlocksKit.h */; }; - DBFB0A30184DC83200F37EEE /* UIActionSheet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0A1F184DC83200F37EEE /* UIActionSheet+BlocksKit.m */; }; - DBFB0A31184DC83200F37EEE /* UIAlertView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0A21184DC83200F37EEE /* UIAlertView+BlocksKit.m */; }; - DBFB0A32184DC83200F37EEE /* UIBarButtonItem+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0A23184DC83200F37EEE /* UIBarButtonItem+BlocksKit.m */; }; - DBFB0A33184DC83200F37EEE /* UIControl+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0A25184DC83200F37EEE /* UIControl+BlocksKit.m */; }; - DBFB0A34184DC83200F37EEE /* UIGestureRecognizer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0A27184DC83200F37EEE /* UIGestureRecognizer+BlocksKit.m */; }; - DBFB0A35184DC83200F37EEE /* UIPopoverController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0A29184DC83200F37EEE /* UIPopoverController+BlocksKit.m */; }; - DBFB0A36184DC83200F37EEE /* UITextField+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0A2B184DC83200F37EEE /* UITextField+BlocksKit.m */; }; - DBFB0A37184DC83200F37EEE /* UIView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0A2D184DC83200F37EEE /* UIView+BlocksKit.m */; }; - DBFB0A38184DC83200F37EEE /* UIWebView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0A2F184DC83200F37EEE /* UIWebView+BlocksKit.m */; }; - DBFB0A39184DC83C00F37EEE /* UIActionSheet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0A1E184DC83200F37EEE /* UIActionSheet+BlocksKit.h */; }; - DBFB0A3A184DC83C00F37EEE /* UIAlertView+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0A20184DC83200F37EEE /* UIAlertView+BlocksKit.h */; }; - DBFB0A3B184DC83C00F37EEE /* UIBarButtonItem+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0A22184DC83200F37EEE /* UIBarButtonItem+BlocksKit.h */; }; - DBFB0A3C184DC83C00F37EEE /* UIControl+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0A24184DC83200F37EEE /* UIControl+BlocksKit.h */; }; - DBFB0A3D184DC83C00F37EEE /* UIGestureRecognizer+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0A26184DC83200F37EEE /* UIGestureRecognizer+BlocksKit.h */; }; - DBFB0A3E184DC83C00F37EEE /* UIPopoverController+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0A28184DC83200F37EEE /* UIPopoverController+BlocksKit.h */; }; - DBFB0A3F184DC83C00F37EEE /* UITextField+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0A2A184DC83200F37EEE /* UITextField+BlocksKit.h */; }; - DBFB0A40184DC83C00F37EEE /* UIView+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0A2C184DC83200F37EEE /* UIView+BlocksKit.h */; }; - DBFB0A41184DC83C00F37EEE /* UIWebView+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB0A2E184DC83200F37EEE /* UIWebView+BlocksKit.h */; }; - DBFB0A88184DCBCC00F37EEE /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB092D184DC36400F37EEE /* Cocoa.framework */; }; - DBFB0ABD184DCC9400F37EEE /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = DBFB0AB7184DCC9400F37EEE /* MainMenu.xib */; }; - DBFB0ABE184DCC9400F37EEE /* BKApp.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0ABA184DCC9400F37EEE /* BKApp.m */; }; - DBFB0AC0184DCC9400F37EEE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0ABC184DCC9400F37EEE /* main.m */; }; - DBFB0AC1184DCCA500F37EEE /* BlocksKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBFB092C184DC36400F37EEE /* BlocksKit.framework */; }; - DBFB0AC3184DCCC500F37EEE /* BlocksKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBFB092C184DC36400F37EEE /* BlocksKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - DBFB0AFE184DCD6200F37EEE /* A2BlockDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AC5184DCD6200F37EEE /* A2BlockDelegateTests.m */; }; - DBFB0AFF184DCD6200F37EEE /* A2BlockInvocationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AC7184DCD6200F37EEE /* A2BlockInvocationTests.m */; }; - DBFB0B00184DCD6200F37EEE /* A2DynamicDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AC9184DCD6200F37EEE /* A2DynamicDelegateTests.m */; }; - DBFB0B02184DCD6200F37EEE /* BKMacrosTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0ACD184DCD6200F37EEE /* BKMacrosTest.m */; }; - DBFB0B03184DCD6200F37EEE /* MFMailComposeViewControllerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0ACF184DCD6200F37EEE /* MFMailComposeViewControllerBlocksKitTest.m */; }; - DBFB0B04184DCD6200F37EEE /* MFMessageComposeViewControllerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AD1184DCD6200F37EEE /* MFMessageComposeViewControllerBlocksKitTest.m */; }; - DBFB0B05184DCD6200F37EEE /* NSArrayBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AD3184DCD6200F37EEE /* NSArrayBlocksKitTest.m */; }; - DBFB0B06184DCD6200F37EEE /* NSCacheBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AD5184DCD6200F37EEE /* NSCacheBlocksKitTest.m */; }; - DBFB0B07184DCD6200F37EEE /* NSDictionaryBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AD7184DCD6200F37EEE /* NSDictionaryBlocksKitTest.m */; }; - DBFB0B08184DCD6200F37EEE /* NSIndexSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AD9184DCD6200F37EEE /* NSIndexSetBlocksKitTest.m */; }; - DBFB0B09184DCD6200F37EEE /* NSInvocationBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0ADB184DCD6200F37EEE /* NSInvocationBlocksKitTest.m */; }; - DBFB0B0A184DCD6200F37EEE /* NSMutableArrayBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0ADD184DCD6200F37EEE /* NSMutableArrayBlocksKitTest.m */; }; - DBFB0B0B184DCD6200F37EEE /* NSMutableDictionaryBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0ADF184DCD6200F37EEE /* NSMutableDictionaryBlocksKitTest.m */; }; - DBFB0B0C184DCD6200F37EEE /* NSMutableIndexSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AE1184DCD6200F37EEE /* NSMutableIndexSetBlocksKitTest.m */; }; - DBFB0B0D184DCD6200F37EEE /* NSMutableOrderedSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AE3184DCD6200F37EEE /* NSMutableOrderedSetBlocksKitTest.m */; }; - DBFB0B0E184DCD6200F37EEE /* NSMutableSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AE5184DCD6200F37EEE /* NSMutableSetBlocksKitTest.m */; }; - DBFB0B0F184DCD6200F37EEE /* NSObjectAssociatedObjectTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AE7184DCD6200F37EEE /* NSObjectAssociatedObjectTest.m */; }; - DBFB0B10184DCD6200F37EEE /* NSObjectBlockObservationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AE9184DCD6200F37EEE /* NSObjectBlockObservationTest.m */; }; - DBFB0B11184DCD6200F37EEE /* NSObjectBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AEB184DCD6200F37EEE /* NSObjectBlocksKitTest.m */; }; - DBFB0B12184DCD6200F37EEE /* NSOrderedSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AED184DCD6200F37EEE /* NSOrderedSetBlocksKitTest.m */; }; - DBFB0B13184DCD6200F37EEE /* NSSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AEF184DCD6200F37EEE /* NSSetBlocksKitTest.m */; }; - DBFB0B14184DCD6200F37EEE /* NSTimerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AF1184DCD6200F37EEE /* NSTimerBlocksKitTest.m */; }; - DBFB0B15184DCD6200F37EEE /* NSURLConnectionBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AF3184DCD6200F37EEE /* NSURLConnectionBlocksKitTest.m */; }; - DBFB0B16184DCD6200F37EEE /* UIActionSheetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AF5184DCD6200F37EEE /* UIActionSheetBlocksKitTest.m */; }; - DBFB0B17184DCD6200F37EEE /* UIAlertViewBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AF7184DCD6200F37EEE /* UIAlertViewBlocksKitTest.m */; }; - DBFB0B18184DCD6200F37EEE /* UIControlBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AF9184DCD6200F37EEE /* UIControlBlocksKitTest.m */; }; - DBFB0B19184DCD6200F37EEE /* UITextFieldBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AFB184DCD6200F37EEE /* UITextFieldBlocksKitTest.m */; }; - DBFB0B1A184DCD6200F37EEE /* UIWebViewBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AFD184DCD6200F37EEE /* UIWebViewBlocksKitTest.m */; }; - DBFB0B1D184DCD9C00F37EEE /* A2BlockDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AC5184DCD6200F37EEE /* A2BlockDelegateTests.m */; }; - DBFB0B1E184DCD9C00F37EEE /* A2BlockInvocationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AC7184DCD6200F37EEE /* A2BlockInvocationTests.m */; }; - DBFB0B1F184DCD9C00F37EEE /* A2DynamicDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AC9184DCD6200F37EEE /* A2DynamicDelegateTests.m */; }; - DBFB0B21184DCD9C00F37EEE /* BKMacrosTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0ACD184DCD6200F37EEE /* BKMacrosTest.m */; }; - DBFB0B22184DCD9C00F37EEE /* NSArrayBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AD3184DCD6200F37EEE /* NSArrayBlocksKitTest.m */; }; - DBFB0B23184DCD9C00F37EEE /* NSCacheBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AD5184DCD6200F37EEE /* NSCacheBlocksKitTest.m */; }; - DBFB0B24184DCD9C00F37EEE /* NSDictionaryBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AD7184DCD6200F37EEE /* NSDictionaryBlocksKitTest.m */; }; - DBFB0B25184DCD9C00F37EEE /* NSIndexSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AD9184DCD6200F37EEE /* NSIndexSetBlocksKitTest.m */; }; - DBFB0B26184DCD9C00F37EEE /* NSInvocationBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0ADB184DCD6200F37EEE /* NSInvocationBlocksKitTest.m */; }; - DBFB0B27184DCD9C00F37EEE /* NSMutableArrayBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0ADD184DCD6200F37EEE /* NSMutableArrayBlocksKitTest.m */; }; - DBFB0B28184DCD9C00F37EEE /* NSMutableDictionaryBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0ADF184DCD6200F37EEE /* NSMutableDictionaryBlocksKitTest.m */; }; - DBFB0B29184DCD9C00F37EEE /* NSMutableIndexSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AE1184DCD6200F37EEE /* NSMutableIndexSetBlocksKitTest.m */; }; - DBFB0B2A184DCD9C00F37EEE /* NSMutableOrderedSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AE3184DCD6200F37EEE /* NSMutableOrderedSetBlocksKitTest.m */; }; - DBFB0B2B184DCD9C00F37EEE /* NSMutableSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AE5184DCD6200F37EEE /* NSMutableSetBlocksKitTest.m */; }; - DBFB0B2C184DCD9C00F37EEE /* NSObjectAssociatedObjectTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AE7184DCD6200F37EEE /* NSObjectAssociatedObjectTest.m */; }; - DBFB0B2D184DCD9C00F37EEE /* NSObjectBlockObservationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AE9184DCD6200F37EEE /* NSObjectBlockObservationTest.m */; }; - DBFB0B2E184DCD9C00F37EEE /* NSObjectBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AEB184DCD6200F37EEE /* NSObjectBlocksKitTest.m */; }; - DBFB0B2F184DCD9C00F37EEE /* NSOrderedSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AED184DCD6200F37EEE /* NSOrderedSetBlocksKitTest.m */; }; - DBFB0B30184DCD9C00F37EEE /* NSSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AEF184DCD6200F37EEE /* NSSetBlocksKitTest.m */; }; - DBFB0B31184DCD9C00F37EEE /* NSTimerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AF1184DCD6200F37EEE /* NSTimerBlocksKitTest.m */; }; - DBFB0B32184DCD9C00F37EEE /* NSURLConnectionBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DBFB0AF3184DCD6200F37EEE /* NSURLConnectionBlocksKitTest.m */; }; + DB4CA4261B3A662A004B70F8 /* BKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4051B3A662A004B70F8 /* BKMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4271B3A662A004B70F8 /* BKMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4051B3A662A004B70F8 /* BKMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4281B3A662A004B70F8 /* NSArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4061B3A662A004B70F8 /* NSArray+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4291B3A662A004B70F8 /* NSArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4061B3A662A004B70F8 /* NSArray+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA42A1B3A662A004B70F8 /* NSArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4071B3A662A004B70F8 /* NSArray+BlocksKit.m */; }; + DB4CA42B1B3A662A004B70F8 /* NSArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4071B3A662A004B70F8 /* NSArray+BlocksKit.m */; }; + DB4CA42C1B3A662A004B70F8 /* NSArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4071B3A662A004B70F8 /* NSArray+BlocksKit.m */; }; + DB4CA42D1B3A662A004B70F8 /* NSDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4081B3A662A004B70F8 /* NSDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA42E1B3A662A004B70F8 /* NSDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4081B3A662A004B70F8 /* NSDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA42F1B3A662A004B70F8 /* NSDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4091B3A662A004B70F8 /* NSDictionary+BlocksKit.m */; }; + DB4CA4301B3A662A004B70F8 /* NSDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4091B3A662A004B70F8 /* NSDictionary+BlocksKit.m */; }; + DB4CA4311B3A662A004B70F8 /* NSDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4091B3A662A004B70F8 /* NSDictionary+BlocksKit.m */; }; + DB4CA4321B3A662A004B70F8 /* NSIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA40A1B3A662A004B70F8 /* NSIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4331B3A662A004B70F8 /* NSIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA40A1B3A662A004B70F8 /* NSIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4341B3A662A004B70F8 /* NSIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA40B1B3A662A004B70F8 /* NSIndexSet+BlocksKit.m */; }; + DB4CA4351B3A662A004B70F8 /* NSIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA40B1B3A662A004B70F8 /* NSIndexSet+BlocksKit.m */; }; + DB4CA4361B3A662A004B70F8 /* NSIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA40B1B3A662A004B70F8 /* NSIndexSet+BlocksKit.m */; }; + DB4CA4371B3A662A004B70F8 /* NSInvocation+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA40C1B3A662A004B70F8 /* NSInvocation+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4381B3A662A004B70F8 /* NSInvocation+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA40C1B3A662A004B70F8 /* NSInvocation+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4391B3A662A004B70F8 /* NSInvocation+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA40D1B3A662A004B70F8 /* NSInvocation+BlocksKit.m */; }; + DB4CA43A1B3A662A004B70F8 /* NSInvocation+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA40D1B3A662A004B70F8 /* NSInvocation+BlocksKit.m */; }; + DB4CA43B1B3A662A004B70F8 /* NSInvocation+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA40D1B3A662A004B70F8 /* NSInvocation+BlocksKit.m */; }; + DB4CA43C1B3A662A004B70F8 /* NSMapTable+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA40E1B3A662A004B70F8 /* NSMapTable+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA43D1B3A662A004B70F8 /* NSMapTable+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA40E1B3A662A004B70F8 /* NSMapTable+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA43E1B3A662A004B70F8 /* NSMapTable+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA40F1B3A662A004B70F8 /* NSMapTable+BlocksKit.m */; }; + DB4CA43F1B3A662A004B70F8 /* NSMapTable+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA40F1B3A662A004B70F8 /* NSMapTable+BlocksKit.m */; }; + DB4CA4401B3A662A004B70F8 /* NSMapTable+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA40F1B3A662A004B70F8 /* NSMapTable+BlocksKit.m */; }; + DB4CA4411B3A662A004B70F8 /* NSMutableArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4101B3A662A004B70F8 /* NSMutableArray+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4421B3A662A004B70F8 /* NSMutableArray+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4101B3A662A004B70F8 /* NSMutableArray+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4431B3A662A004B70F8 /* NSMutableArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4111B3A662A004B70F8 /* NSMutableArray+BlocksKit.m */; }; + DB4CA4441B3A662A004B70F8 /* NSMutableArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4111B3A662A004B70F8 /* NSMutableArray+BlocksKit.m */; }; + DB4CA4451B3A662A004B70F8 /* NSMutableArray+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4111B3A662A004B70F8 /* NSMutableArray+BlocksKit.m */; }; + DB4CA4461B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4121B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4471B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4121B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4481B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4131B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.m */; }; + DB4CA4491B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4131B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.m */; }; + DB4CA44A1B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4131B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.m */; }; + DB4CA44B1B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4141B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA44C1B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4141B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA44D1B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4151B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.m */; }; + DB4CA44E1B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4151B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.m */; }; + DB4CA44F1B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4151B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.m */; }; + DB4CA4501B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4161B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4511B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4161B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4521B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4171B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.m */; }; + DB4CA4531B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4171B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.m */; }; + DB4CA4541B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4171B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.m */; }; + DB4CA4551B3A662A004B70F8 /* NSMutableSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4181B3A662A004B70F8 /* NSMutableSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4561B3A662A004B70F8 /* NSMutableSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4181B3A662A004B70F8 /* NSMutableSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4571B3A662A004B70F8 /* NSMutableSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4191B3A662A004B70F8 /* NSMutableSet+BlocksKit.m */; }; + DB4CA4581B3A662A004B70F8 /* NSMutableSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4191B3A662A004B70F8 /* NSMutableSet+BlocksKit.m */; }; + DB4CA4591B3A662A004B70F8 /* NSMutableSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4191B3A662A004B70F8 /* NSMutableSet+BlocksKit.m */; }; + DB4CA45A1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA41A1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA45B1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA41A1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA45C1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA41B1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.m */; }; + DB4CA45D1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA41B1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.m */; }; + DB4CA45E1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA41B1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.m */; }; + DB4CA45F1B3A662A004B70F8 /* NSObject+BKBlockExecution.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA41C1B3A662A004B70F8 /* NSObject+BKBlockExecution.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4601B3A662A004B70F8 /* NSObject+BKBlockExecution.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA41C1B3A662A004B70F8 /* NSObject+BKBlockExecution.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4611B3A662A004B70F8 /* NSObject+BKBlockExecution.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA41D1B3A662A004B70F8 /* NSObject+BKBlockExecution.m */; }; + DB4CA4621B3A662A004B70F8 /* NSObject+BKBlockExecution.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA41D1B3A662A004B70F8 /* NSObject+BKBlockExecution.m */; }; + DB4CA4631B3A662A004B70F8 /* NSObject+BKBlockExecution.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA41D1B3A662A004B70F8 /* NSObject+BKBlockExecution.m */; }; + DB4CA4641B3A662A004B70F8 /* NSObject+BKBlockObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA41E1B3A662A004B70F8 /* NSObject+BKBlockObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4651B3A662A004B70F8 /* NSObject+BKBlockObservation.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA41E1B3A662A004B70F8 /* NSObject+BKBlockObservation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4661B3A662A004B70F8 /* NSObject+BKBlockObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA41F1B3A662A004B70F8 /* NSObject+BKBlockObservation.m */; }; + DB4CA4671B3A662A004B70F8 /* NSObject+BKBlockObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA41F1B3A662A004B70F8 /* NSObject+BKBlockObservation.m */; }; + DB4CA4681B3A662A004B70F8 /* NSObject+BKBlockObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA41F1B3A662A004B70F8 /* NSObject+BKBlockObservation.m */; }; + DB4CA4691B3A662A004B70F8 /* NSOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4201B3A662A004B70F8 /* NSOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA46A1B3A662A004B70F8 /* NSOrderedSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4201B3A662A004B70F8 /* NSOrderedSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA46B1B3A662A004B70F8 /* NSOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4211B3A662A004B70F8 /* NSOrderedSet+BlocksKit.m */; }; + DB4CA46C1B3A662A004B70F8 /* NSOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4211B3A662A004B70F8 /* NSOrderedSet+BlocksKit.m */; }; + DB4CA46D1B3A662A004B70F8 /* NSOrderedSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4211B3A662A004B70F8 /* NSOrderedSet+BlocksKit.m */; }; + DB4CA46E1B3A662A004B70F8 /* NSSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4221B3A662A004B70F8 /* NSSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA46F1B3A662A004B70F8 /* NSSet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4221B3A662A004B70F8 /* NSSet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4701B3A662A004B70F8 /* NSSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4231B3A662A004B70F8 /* NSSet+BlocksKit.m */; }; + DB4CA4711B3A662A004B70F8 /* NSSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4231B3A662A004B70F8 /* NSSet+BlocksKit.m */; }; + DB4CA4721B3A662A004B70F8 /* NSSet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4231B3A662A004B70F8 /* NSSet+BlocksKit.m */; }; + DB4CA4731B3A662A004B70F8 /* NSTimer+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4241B3A662A004B70F8 /* NSTimer+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4741B3A662A004B70F8 /* NSTimer+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4241B3A662A004B70F8 /* NSTimer+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4751B3A662A004B70F8 /* NSTimer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4251B3A662A004B70F8 /* NSTimer+BlocksKit.m */; }; + DB4CA4761B3A662A004B70F8 /* NSTimer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4251B3A662A004B70F8 /* NSTimer+BlocksKit.m */; }; + DB4CA4771B3A662A004B70F8 /* NSTimer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4251B3A662A004B70F8 /* NSTimer+BlocksKit.m */; }; + DB4CA4A51B3A6657004B70F8 /* A2BlockInvocation.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4791B3A6656004B70F8 /* A2BlockInvocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4A61B3A6657004B70F8 /* A2BlockInvocation.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4791B3A6656004B70F8 /* A2BlockInvocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4A71B3A6657004B70F8 /* A2BlockInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA47A1B3A6656004B70F8 /* A2BlockInvocation.m */; }; + DB4CA4A81B3A6657004B70F8 /* A2BlockInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA47A1B3A6656004B70F8 /* A2BlockInvocation.m */; }; + DB4CA4A91B3A6657004B70F8 /* A2BlockInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA47A1B3A6656004B70F8 /* A2BlockInvocation.m */; }; + DB4CA4AA1B3A6657004B70F8 /* A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA47B1B3A6656004B70F8 /* A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4AB1B3A6657004B70F8 /* A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA47B1B3A6656004B70F8 /* A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4AC1B3A6657004B70F8 /* A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA47C1B3A6656004B70F8 /* A2DynamicDelegate.m */; }; + DB4CA4AD1B3A6657004B70F8 /* A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA47C1B3A6656004B70F8 /* A2DynamicDelegate.m */; }; + DB4CA4AE1B3A6657004B70F8 /* A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA47C1B3A6656004B70F8 /* A2DynamicDelegate.m */; }; + DB4CA4AF1B3A6657004B70F8 /* NSCache+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA47E1B3A6656004B70F8 /* NSCache+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4B01B3A6657004B70F8 /* NSCache+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA47E1B3A6656004B70F8 /* NSCache+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4B11B3A6657004B70F8 /* NSCache+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA47F1B3A6656004B70F8 /* NSCache+BlocksKit.m */; }; + DB4CA4B21B3A6657004B70F8 /* NSCache+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA47F1B3A6656004B70F8 /* NSCache+BlocksKit.m */; }; + DB4CA4B31B3A6657004B70F8 /* NSCache+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA47F1B3A6656004B70F8 /* NSCache+BlocksKit.m */; }; + DB4CA4B41B3A6657004B70F8 /* NSURLConnection+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4801B3A6656004B70F8 /* NSURLConnection+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4B51B3A6657004B70F8 /* NSURLConnection+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4801B3A6656004B70F8 /* NSURLConnection+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4B61B3A6657004B70F8 /* NSURLConnection+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4811B3A6656004B70F8 /* NSURLConnection+BlocksKit.m */; }; + DB4CA4B71B3A6657004B70F8 /* NSURLConnection+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4811B3A6656004B70F8 /* NSURLConnection+BlocksKit.m */; }; + DB4CA4B81B3A6657004B70F8 /* NSURLConnection+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4811B3A6656004B70F8 /* NSURLConnection+BlocksKit.m */; }; + DB4CA4B91B3A6657004B70F8 /* NSObject+A2BlockDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4821B3A6656004B70F8 /* NSObject+A2BlockDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4BA1B3A6657004B70F8 /* NSObject+A2BlockDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4821B3A6656004B70F8 /* NSObject+A2BlockDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4BB1B3A6657004B70F8 /* NSObject+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4831B3A6656004B70F8 /* NSObject+A2BlockDelegate.m */; }; + DB4CA4BC1B3A6657004B70F8 /* NSObject+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4831B3A6656004B70F8 /* NSObject+A2BlockDelegate.m */; }; + DB4CA4BD1B3A6657004B70F8 /* NSObject+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4831B3A6656004B70F8 /* NSObject+A2BlockDelegate.m */; }; + DB4CA4BE1B3A6657004B70F8 /* NSObject+A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4841B3A6656004B70F8 /* NSObject+A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4BF1B3A6657004B70F8 /* NSObject+A2DynamicDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4841B3A6656004B70F8 /* NSObject+A2DynamicDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4C01B3A6657004B70F8 /* NSObject+A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4851B3A6656004B70F8 /* NSObject+A2DynamicDelegate.m */; }; + DB4CA4C11B3A6657004B70F8 /* NSObject+A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4851B3A6656004B70F8 /* NSObject+A2DynamicDelegate.m */; }; + DB4CA4C21B3A6657004B70F8 /* NSObject+A2DynamicDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4851B3A6656004B70F8 /* NSObject+A2DynamicDelegate.m */; }; + DB4CA4C41B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4871B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4C61B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4881B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.m */; }; + DB4CA4C71B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4881B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.m */; }; + DB4CA4C91B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4891B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4CB1B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA48A1B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.m */; }; + DB4CA4CC1B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA48A1B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.m */; }; + DB4CA4CE1B3A6657004B70F8 /* QLPreviewController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA48C1B3A6657004B70F8 /* QLPreviewController+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4D01B3A6657004B70F8 /* QLPreviewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA48D1B3A6657004B70F8 /* QLPreviewController+BlocksKit.m */; }; + DB4CA4D11B3A6657004B70F8 /* QLPreviewController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA48D1B3A6657004B70F8 /* QLPreviewController+BlocksKit.m */; }; + DB4CA4D31B3A6657004B70F8 /* UIActionSheet+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA48F1B3A6657004B70F8 /* UIActionSheet+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4D51B3A6657004B70F8 /* UIActionSheet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4901B3A6657004B70F8 /* UIActionSheet+BlocksKit.m */; }; + DB4CA4D61B3A6657004B70F8 /* UIActionSheet+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4901B3A6657004B70F8 /* UIActionSheet+BlocksKit.m */; }; + DB4CA4D81B3A6657004B70F8 /* UIAlertView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4911B3A6657004B70F8 /* UIAlertView+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4DA1B3A6657004B70F8 /* UIAlertView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4921B3A6657004B70F8 /* UIAlertView+BlocksKit.m */; }; + DB4CA4DB1B3A6657004B70F8 /* UIAlertView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4921B3A6657004B70F8 /* UIAlertView+BlocksKit.m */; }; + DB4CA4DD1B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4931B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4DF1B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4941B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.m */; }; + DB4CA4E01B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4941B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.m */; }; + DB4CA4E21B3A6657004B70F8 /* UIControl+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4951B3A6657004B70F8 /* UIControl+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4E41B3A6657004B70F8 /* UIControl+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4961B3A6657004B70F8 /* UIControl+BlocksKit.m */; }; + DB4CA4E51B3A6657004B70F8 /* UIControl+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4961B3A6657004B70F8 /* UIControl+BlocksKit.m */; }; + DB4CA4E71B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4971B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4E91B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4981B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.m */; }; + DB4CA4EA1B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4981B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.m */; }; + DB4CA4EC1B3A6657004B70F8 /* UIImage+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4991B3A6657004B70F8 /* UIImage+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4EE1B3A6657004B70F8 /* UIImage+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA49A1B3A6657004B70F8 /* UIImage+BlocksKit.m */; }; + DB4CA4EF1B3A6657004B70F8 /* UIImage+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA49A1B3A6657004B70F8 /* UIImage+BlocksKit.m */; }; + DB4CA4F11B3A6657004B70F8 /* UIImagePickerController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA49B1B3A6657004B70F8 /* UIImagePickerController+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4F31B3A6657004B70F8 /* UIImagePickerController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA49C1B3A6657004B70F8 /* UIImagePickerController+BlocksKit.m */; }; + DB4CA4F41B3A6657004B70F8 /* UIImagePickerController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA49C1B3A6657004B70F8 /* UIImagePickerController+BlocksKit.m */; }; + DB4CA4F61B3A6657004B70F8 /* UIPopoverController+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA49D1B3A6657004B70F8 /* UIPopoverController+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4F81B3A6657004B70F8 /* UIPopoverController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA49E1B3A6657004B70F8 /* UIPopoverController+BlocksKit.m */; }; + DB4CA4F91B3A6657004B70F8 /* UIPopoverController+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA49E1B3A6657004B70F8 /* UIPopoverController+BlocksKit.m */; }; + DB4CA4FB1B3A6657004B70F8 /* UITextField+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA49F1B3A6657004B70F8 /* UITextField+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA4FD1B3A6657004B70F8 /* UITextField+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4A01B3A6657004B70F8 /* UITextField+BlocksKit.m */; }; + DB4CA4FE1B3A6657004B70F8 /* UITextField+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4A01B3A6657004B70F8 /* UITextField+BlocksKit.m */; }; + DB4CA5001B3A6657004B70F8 /* UIView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4A11B3A6657004B70F8 /* UIView+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA5021B3A6657004B70F8 /* UIView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4A21B3A6657004B70F8 /* UIView+BlocksKit.m */; }; + DB4CA5031B3A6657004B70F8 /* UIView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4A21B3A6657004B70F8 /* UIView+BlocksKit.m */; }; + DB4CA5051B3A6657004B70F8 /* UIWebView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA4A31B3A6657004B70F8 /* UIWebView+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA5071B3A6657004B70F8 /* UIWebView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4A41B3A6657004B70F8 /* UIWebView+BlocksKit.m */; }; + DB4CA5081B3A6657004B70F8 /* UIWebView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA4A41B3A6657004B70F8 /* UIWebView+BlocksKit.m */; }; + DB4CA50D1B3A6720004B70F8 /* BlocksKit+MessageUI.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA5091B3A6720004B70F8 /* BlocksKit+MessageUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA50F1B3A6720004B70F8 /* BlocksKit+QuickLook.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA50A1B3A6720004B70F8 /* BlocksKit+QuickLook.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA5111B3A6720004B70F8 /* BlocksKit+UIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB4CA50B1B3A6720004B70F8 /* BlocksKit+UIKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB4CA5621B3A67A3004B70F8 /* BKMacrosTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA53B1B3A67A3004B70F8 /* BKMacrosTest.m */; }; + DB4CA5631B3A67A3004B70F8 /* BKMacrosTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA53B1B3A67A3004B70F8 /* BKMacrosTest.m */; }; + DB4CA5651B3A67A3004B70F8 /* NSArrayBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA53C1B3A67A3004B70F8 /* NSArrayBlocksKitTest.m */; }; + DB4CA5661B3A67A3004B70F8 /* NSArrayBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA53C1B3A67A3004B70F8 /* NSArrayBlocksKitTest.m */; }; + DB4CA5681B3A67A3004B70F8 /* NSDictionaryBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA53D1B3A67A3004B70F8 /* NSDictionaryBlocksKitTest.m */; }; + DB4CA5691B3A67A3004B70F8 /* NSDictionaryBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA53D1B3A67A3004B70F8 /* NSDictionaryBlocksKitTest.m */; }; + DB4CA56B1B3A67A3004B70F8 /* NSIndexSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA53E1B3A67A3004B70F8 /* NSIndexSetBlocksKitTest.m */; }; + DB4CA56C1B3A67A3004B70F8 /* NSIndexSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA53E1B3A67A3004B70F8 /* NSIndexSetBlocksKitTest.m */; }; + DB4CA56E1B3A67A3004B70F8 /* NSInvocationBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA53F1B3A67A3004B70F8 /* NSInvocationBlocksKitTest.m */; }; + DB4CA56F1B3A67A3004B70F8 /* NSInvocationBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA53F1B3A67A3004B70F8 /* NSInvocationBlocksKitTest.m */; }; + DB4CA5711B3A67A3004B70F8 /* NSMapTableBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5401B3A67A3004B70F8 /* NSMapTableBlocksKitTest.m */; }; + DB4CA5721B3A67A3004B70F8 /* NSMapTableBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5401B3A67A3004B70F8 /* NSMapTableBlocksKitTest.m */; }; + DB4CA5741B3A67A3004B70F8 /* NSMutableArrayBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5411B3A67A3004B70F8 /* NSMutableArrayBlocksKitTest.m */; }; + DB4CA5751B3A67A3004B70F8 /* NSMutableArrayBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5411B3A67A3004B70F8 /* NSMutableArrayBlocksKitTest.m */; }; + DB4CA5771B3A67A3004B70F8 /* NSMutableDictionaryBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5421B3A67A3004B70F8 /* NSMutableDictionaryBlocksKitTest.m */; }; + DB4CA5781B3A67A3004B70F8 /* NSMutableDictionaryBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5421B3A67A3004B70F8 /* NSMutableDictionaryBlocksKitTest.m */; }; + DB4CA57A1B3A67A3004B70F8 /* NSMutableIndexSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5431B3A67A3004B70F8 /* NSMutableIndexSetBlocksKitTest.m */; }; + DB4CA57B1B3A67A3004B70F8 /* NSMutableIndexSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5431B3A67A3004B70F8 /* NSMutableIndexSetBlocksKitTest.m */; }; + DB4CA57D1B3A67A3004B70F8 /* NSMutableOrderedSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5441B3A67A3004B70F8 /* NSMutableOrderedSetBlocksKitTest.m */; }; + DB4CA57E1B3A67A3004B70F8 /* NSMutableOrderedSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5441B3A67A3004B70F8 /* NSMutableOrderedSetBlocksKitTest.m */; }; + DB4CA5801B3A67A3004B70F8 /* NSMutableSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5451B3A67A3004B70F8 /* NSMutableSetBlocksKitTest.m */; }; + DB4CA5811B3A67A3004B70F8 /* NSMutableSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5451B3A67A3004B70F8 /* NSMutableSetBlocksKitTest.m */; }; + DB4CA5831B3A67A3004B70F8 /* NSObjectAssociatedObjectTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5461B3A67A3004B70F8 /* NSObjectAssociatedObjectTest.m */; }; + DB4CA5841B3A67A3004B70F8 /* NSObjectAssociatedObjectTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5461B3A67A3004B70F8 /* NSObjectAssociatedObjectTest.m */; }; + DB4CA5861B3A67A3004B70F8 /* NSObjectBlockObservationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5471B3A67A3004B70F8 /* NSObjectBlockObservationTest.m */; }; + DB4CA5871B3A67A3004B70F8 /* NSObjectBlockObservationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5471B3A67A3004B70F8 /* NSObjectBlockObservationTest.m */; }; + DB4CA5891B3A67A3004B70F8 /* NSObjectBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5481B3A67A3004B70F8 /* NSObjectBlocksKitTest.m */; }; + DB4CA58A1B3A67A3004B70F8 /* NSObjectBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5481B3A67A3004B70F8 /* NSObjectBlocksKitTest.m */; }; + DB4CA58C1B3A67A3004B70F8 /* NSOrderedSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5491B3A67A3004B70F8 /* NSOrderedSetBlocksKitTest.m */; }; + DB4CA58D1B3A67A3004B70F8 /* NSOrderedSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5491B3A67A3004B70F8 /* NSOrderedSetBlocksKitTest.m */; }; + DB4CA58F1B3A67A3004B70F8 /* NSSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA54A1B3A67A3004B70F8 /* NSSetBlocksKitTest.m */; }; + DB4CA5901B3A67A3004B70F8 /* NSSetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA54A1B3A67A3004B70F8 /* NSSetBlocksKitTest.m */; }; + DB4CA5921B3A67A3004B70F8 /* NSTimerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA54B1B3A67A3004B70F8 /* NSTimerBlocksKitTest.m */; }; + DB4CA5931B3A67A3004B70F8 /* NSTimerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA54B1B3A67A3004B70F8 /* NSTimerBlocksKitTest.m */; }; + DB4CA5951B3A67A3004B70F8 /* A2BlockDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA54D1B3A67A3004B70F8 /* A2BlockDelegateTests.m */; }; + DB4CA5961B3A67A3004B70F8 /* A2BlockDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA54D1B3A67A3004B70F8 /* A2BlockDelegateTests.m */; }; + DB4CA5981B3A67A3004B70F8 /* A2BlockInvocationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA54E1B3A67A3004B70F8 /* A2BlockInvocationTests.m */; }; + DB4CA5991B3A67A3004B70F8 /* A2BlockInvocationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA54E1B3A67A3004B70F8 /* A2BlockInvocationTests.m */; }; + DB4CA59B1B3A67A3004B70F8 /* A2DynamicDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA54F1B3A67A3004B70F8 /* A2DynamicDelegateTests.m */; }; + DB4CA59C1B3A67A3004B70F8 /* A2DynamicDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA54F1B3A67A3004B70F8 /* A2DynamicDelegateTests.m */; }; + DB4CA59E1B3A67A3004B70F8 /* A2DynamicTestClasses+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5511B3A67A3004B70F8 /* A2DynamicTestClasses+A2BlockDelegate.m */; }; + DB4CA59F1B3A67A3004B70F8 /* A2DynamicTestClasses+A2BlockDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5511B3A67A3004B70F8 /* A2DynamicTestClasses+A2BlockDelegate.m */; }; + DB4CA5A11B3A67A3004B70F8 /* A2DynamicTestClasses.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5531B3A67A3004B70F8 /* A2DynamicTestClasses.m */; }; + DB4CA5A21B3A67A3004B70F8 /* A2DynamicTestClasses.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5531B3A67A3004B70F8 /* A2DynamicTestClasses.m */; }; + DB4CA5A41B3A67A3004B70F8 /* NSCacheBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5541B3A67A3004B70F8 /* NSCacheBlocksKitTest.m */; }; + DB4CA5A51B3A67A3004B70F8 /* NSCacheBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5541B3A67A3004B70F8 /* NSCacheBlocksKitTest.m */; }; + DB4CA5A71B3A67A3004B70F8 /* NSURLConnectionBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5551B3A67A3004B70F8 /* NSURLConnectionBlocksKitTest.m */; }; + DB4CA5A81B3A67A3004B70F8 /* NSURLConnectionBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5551B3A67A3004B70F8 /* NSURLConnectionBlocksKitTest.m */; }; + DB4CA5AB1B3A67A3004B70F8 /* MFMailComposeViewControllerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5571B3A67A3004B70F8 /* MFMailComposeViewControllerBlocksKitTest.m */; }; + DB4CA5AE1B3A67A3004B70F8 /* MFMessageComposeViewControllerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5581B3A67A3004B70F8 /* MFMessageComposeViewControllerBlocksKitTest.m */; }; + DB4CA5B11B3A67A3004B70F8 /* QLPreviewControllerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA55A1B3A67A3004B70F8 /* QLPreviewControllerBlocksKitTest.m */; }; + DB4CA5B41B3A67A3004B70F8 /* UIActionSheetBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA55C1B3A67A3004B70F8 /* UIActionSheetBlocksKitTest.m */; }; + DB4CA5B71B3A67A3004B70F8 /* UIAlertViewBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA55D1B3A67A3004B70F8 /* UIAlertViewBlocksKitTest.m */; }; + DB4CA5BA1B3A67A3004B70F8 /* UIControlBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA55E1B3A67A3004B70F8 /* UIControlBlocksKitTest.m */; }; + DB4CA5BD1B3A67A3004B70F8 /* UIImagePickerControllerBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA55F1B3A67A3004B70F8 /* UIImagePickerControllerBlocksKitTest.m */; }; + DB4CA5C01B3A67A3004B70F8 /* UITextFieldBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5601B3A67A3004B70F8 /* UITextFieldBlocksKitTest.m */; }; + DB4CA5C31B3A67A3004B70F8 /* UIWebViewBlocksKitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5611B3A67A3004B70F8 /* UIWebViewBlocksKitTest.m */; }; + DB4CA5CD1B3A6819004B70F8 /* BKApp.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5CA1B3A6810004B70F8 /* BKApp.m */; }; + DB4CA5D01B3A7A08004B70F8 /* BlocksKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB9B96371B3A52E500940D20 /* BlocksKit.framework */; }; + DB4CA5D11B3A7A08004B70F8 /* BlocksKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DB9B96371B3A52E500940D20 /* BlocksKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + DB4CA5D51B3A7A1D004B70F8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DB4CA5CC1B3A6810004B70F8 /* main.m */; }; + DB4CA5D61B3A7A22004B70F8 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = DB4CA5C71B3A6810004B70F8 /* MainMenu.xib */; }; + DB5C6C481C52005900778E5F /* NSNumber+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB5C6C461C52005900778E5F /* NSNumber+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB5C6C491C52005900778E5F /* NSNumber+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB5C6C461C52005900778E5F /* NSNumber+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB5C6C4A1C52005900778E5F /* NSNumber+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB5C6C471C52005900778E5F /* NSNumber+BlocksKit.m */; }; + DB5C6C4B1C52005900778E5F /* NSNumber+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB5C6C471C52005900778E5F /* NSNumber+BlocksKit.m */; }; + DB5C6C4C1C52005900778E5F /* NSNumber+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB5C6C471C52005900778E5F /* NSNumber+BlocksKit.m */; }; + DB5C6C501C52009700778E5F /* UITextView+BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB5C6C4E1C52009700778E5F /* UITextView+BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB5C6C511C52009700778E5F /* UITextView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB5C6C4F1C52009700778E5F /* UITextView+BlocksKit.m */; }; + DB5C6C521C52009700778E5F /* UITextView+BlocksKit.m in Sources */ = {isa = PBXBuildFile; fileRef = DB5C6C4F1C52009700778E5F /* UITextView+BlocksKit.m */; }; + DB5C6C531C5200B200778E5F /* BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB9B961B1B3A52A700940D20 /* BlocksKit.h */; }; + DB5C6C541C5200B200778E5F /* BKDefines.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBA576A21B3A7B9700E41A6B /* BKDefines.h */; }; + DB5C6C551C5200B200778E5F /* BlocksKit+MessageUI.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA5091B3A6720004B70F8 /* BlocksKit+MessageUI.h */; }; + DB5C6C561C5200B200778E5F /* BlocksKit+QuickLook.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA50A1B3A6720004B70F8 /* BlocksKit+QuickLook.h */; }; + DB5C6C571C5200B200778E5F /* BlocksKit+UIKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA50B1B3A6720004B70F8 /* BlocksKit+UIKit.h */; }; + DB5C6C581C5200B200778E5F /* BKMacros.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4051B3A662A004B70F8 /* BKMacros.h */; }; + DB5C6C591C5200B200778E5F /* NSArray+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4061B3A662A004B70F8 /* NSArray+BlocksKit.h */; }; + DB5C6C5A1C5200B200778E5F /* NSDictionary+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4081B3A662A004B70F8 /* NSDictionary+BlocksKit.h */; }; + DB5C6C5B1C5200B200778E5F /* NSIndexSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA40A1B3A662A004B70F8 /* NSIndexSet+BlocksKit.h */; }; + DB5C6C5C1C5200B200778E5F /* NSInvocation+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA40C1B3A662A004B70F8 /* NSInvocation+BlocksKit.h */; }; + DB5C6C5D1C5200B200778E5F /* NSMapTable+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA40E1B3A662A004B70F8 /* NSMapTable+BlocksKit.h */; }; + DB5C6C5E1C5200B200778E5F /* NSMutableArray+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4101B3A662A004B70F8 /* NSMutableArray+BlocksKit.h */; }; + DB5C6C5F1C5200B200778E5F /* NSMutableDictionary+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4121B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.h */; }; + DB5C6C601C5200B200778E5F /* NSMutableIndexSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4141B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.h */; }; + DB5C6C611C5200B200778E5F /* NSMutableOrderedSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4161B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.h */; }; + DB5C6C621C5200B200778E5F /* NSMutableSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4181B3A662A004B70F8 /* NSMutableSet+BlocksKit.h */; }; + DB5C6C631C5200B200778E5F /* NSNumber+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB5C6C461C52005900778E5F /* NSNumber+BlocksKit.h */; }; + DB5C6C641C5200B200778E5F /* NSObject+BKAssociatedObjects.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA41A1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.h */; }; + DB5C6C651C5200B200778E5F /* NSObject+BKBlockExecution.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA41C1B3A662A004B70F8 /* NSObject+BKBlockExecution.h */; }; + DB5C6C661C5200B200778E5F /* NSObject+BKBlockObservation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA41E1B3A662A004B70F8 /* NSObject+BKBlockObservation.h */; }; + DB5C6C671C5200B200778E5F /* NSOrderedSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4201B3A662A004B70F8 /* NSOrderedSet+BlocksKit.h */; }; + DB5C6C681C5200B200778E5F /* NSSet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4221B3A662A004B70F8 /* NSSet+BlocksKit.h */; }; + DB5C6C691C5200B200778E5F /* NSTimer+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4241B3A662A004B70F8 /* NSTimer+BlocksKit.h */; }; + DB5C6C6A1C5200B200778E5F /* A2BlockInvocation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4791B3A6656004B70F8 /* A2BlockInvocation.h */; }; + DB5C6C6B1C5200B200778E5F /* A2DynamicDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA47B1B3A6656004B70F8 /* A2DynamicDelegate.h */; }; + DB5C6C6C1C5200B200778E5F /* NSCache+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA47E1B3A6656004B70F8 /* NSCache+BlocksKit.h */; }; + DB5C6C6D1C5200B200778E5F /* NSURLConnection+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4801B3A6656004B70F8 /* NSURLConnection+BlocksKit.h */; }; + DB5C6C6E1C5200B200778E5F /* NSObject+A2BlockDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4821B3A6656004B70F8 /* NSObject+A2BlockDelegate.h */; }; + DB5C6C6F1C5200B200778E5F /* NSObject+A2DynamicDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4841B3A6656004B70F8 /* NSObject+A2DynamicDelegate.h */; }; + DB5C6C701C5200B200778E5F /* MFMailComposeViewController+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4871B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.h */; }; + DB5C6C711C5200B200778E5F /* MFMessageComposeViewController+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4891B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.h */; }; + DB5C6C721C5200B200778E5F /* QLPreviewController+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA48C1B3A6657004B70F8 /* QLPreviewController+BlocksKit.h */; }; + DB5C6C731C5200B200778E5F /* UIActionSheet+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA48F1B3A6657004B70F8 /* UIActionSheet+BlocksKit.h */; }; + DB5C6C741C5200B200778E5F /* UIAlertView+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4911B3A6657004B70F8 /* UIAlertView+BlocksKit.h */; }; + DB5C6C751C5200B200778E5F /* UIBarButtonItem+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4931B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.h */; }; + DB5C6C761C5200B200778E5F /* UIControl+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4951B3A6657004B70F8 /* UIControl+BlocksKit.h */; }; + DB5C6C771C5200B200778E5F /* UIGestureRecognizer+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4971B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.h */; }; + DB5C6C781C5200B200778E5F /* UIImage+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4991B3A6657004B70F8 /* UIImage+BlocksKit.h */; }; + DB5C6C791C5200B200778E5F /* UIImagePickerController+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA49B1B3A6657004B70F8 /* UIImagePickerController+BlocksKit.h */; }; + DB5C6C7A1C5200B200778E5F /* UIPopoverController+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA49D1B3A6657004B70F8 /* UIPopoverController+BlocksKit.h */; }; + DB5C6C7B1C5200B200778E5F /* UITextField+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA49F1B3A6657004B70F8 /* UITextField+BlocksKit.h */; }; + DB5C6C7C1C5200B200778E5F /* UITextView+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB5C6C4E1C52009700778E5F /* UITextView+BlocksKit.h */; }; + DB5C6C7D1C5200B200778E5F /* UIView+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4A11B3A6657004B70F8 /* UIView+BlocksKit.h */; }; + DB5C6C7E1C5200B200778E5F /* UIWebView+BlocksKit.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB4CA4A31B3A6657004B70F8 /* UIWebView+BlocksKit.h */; }; + DB9B961C1B3A52A700940D20 /* BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB9B961B1B3A52A700940D20 /* BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB9B96231B3A52A700940D20 /* BlocksKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB9B96181B3A52A700940D20 /* BlocksKit.framework */; }; + DB9B96411B3A52E500940D20 /* BlocksKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB9B96371B3A52E500940D20 /* BlocksKit.framework */; }; + DB9B96681B3A533900940D20 /* BlocksKit.h in Headers */ = {isa = PBXBuildFile; fileRef = DB9B961B1B3A52A700940D20 /* BlocksKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DBA576A31B3A7B9700E41A6B /* BKDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = DBA576A21B3A7B9700E41A6B /* BKDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DBA576A41B3A7B9700E41A6B /* BKDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = DBA576A21B3A7B9700E41A6B /* BKDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - DB981A01185E96240047E817 /* PBXContainerItemProxy */ = { + DB4CA5D21B3A7A08004B70F8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = DBFB08A4184DC21500F37EEE /* Project object */; + containerPortal = DB9B960F1B3A52A700940D20 /* Project object */; proxyType = 1; - remoteGlobalIDString = DB5BF87E185E909300FF2A0B; - remoteInfo = "BlocksKit iOS Tests Runner"; + remoteGlobalIDString = DB9B96361B3A52E500940D20; + remoteInfo = BlocksKit; }; - DBFB0944184DC36400F37EEE /* PBXContainerItemProxy */ = { + DB9B96241B3A52A700940D20 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = DBFB08A4184DC21500F37EEE /* Project object */; + containerPortal = DB9B960F1B3A52A700940D20 /* Project object */; proxyType = 1; - remoteGlobalIDString = DBFB092B184DC36400F37EEE; + remoteGlobalIDString = DB9B96171B3A52A700940D20; remoteInfo = BlocksKit; }; - DBFB0AB4184DCC0000F37EEE /* PBXContainerItemProxy */ = { + DB9B96421B3A52E500940D20 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = DBFB08A4184DC21500F37EEE /* Project object */; + containerPortal = DB9B960F1B3A52A700940D20 /* Project object */; proxyType = 1; - remoteGlobalIDString = DBFB092B184DC36400F37EEE; - remoteInfo = "BlocksKit Mac"; + remoteGlobalIDString = DB9B96361B3A52E500940D20; + remoteInfo = BlocksKitMac; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - DBFB08AC184DC23000F37EEE /* CopyFiles */ = { + DB4CA5D41B3A7A08004B70F8 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; + dstPath = ""; + dstSubfolderSpec = 10; files = ( - 43CE09E919866D8400F91137 /* QLPreviewController+BlocksKit.h in CopyFiles */, - 43CE09E519866CC200F91137 /* BlocksKit+QuickLook.h in CopyFiles */, - 2BB8A4A218BEF584006AF0F6 /* UIImagePickerController+BlocksKit.h in CopyFiles */, - DBFB0A39184DC83C00F37EEE /* UIActionSheet+BlocksKit.h in CopyFiles */, - DBFB0A3A184DC83C00F37EEE /* UIAlertView+BlocksKit.h in CopyFiles */, - DBFB0A3B184DC83C00F37EEE /* UIBarButtonItem+BlocksKit.h in CopyFiles */, - DBFB0A3C184DC83C00F37EEE /* UIControl+BlocksKit.h in CopyFiles */, - DBFB0A3D184DC83C00F37EEE /* UIGestureRecognizer+BlocksKit.h in CopyFiles */, - DBFB0A3E184DC83C00F37EEE /* UIPopoverController+BlocksKit.h in CopyFiles */, - DBFB0A3F184DC83C00F37EEE /* UITextField+BlocksKit.h in CopyFiles */, - DBFB0A40184DC83C00F37EEE /* UIView+BlocksKit.h in CopyFiles */, - DBFB0A41184DC83C00F37EEE /* UIWebView+BlocksKit.h in CopyFiles */, - DBFB0A1B184DC82900F37EEE /* MFMailComposeViewController+BlocksKit.h in CopyFiles */, - DBFB0A1C184DC82900F37EEE /* MFMessageComposeViewController+BlocksKit.h in CopyFiles */, - DBFB0A0E184DC7FB00F37EEE /* A2BlockInvocation.h in CopyFiles */, - DBFB0A0F184DC7FB00F37EEE /* A2DynamicDelegate.h in CopyFiles */, - DBFB0A10184DC7FB00F37EEE /* NSObject+A2BlockDelegate.h in CopyFiles */, - DBFB0A11184DC7FB00F37EEE /* NSObject+A2DynamicDelegate.h in CopyFiles */, - DBFB0A12184DC7FB00F37EEE /* NSCache+BlocksKit.h in CopyFiles */, - DBFB0A13184DC7FB00F37EEE /* NSURLConnection+BlocksKit.h in CopyFiles */, - DBFB09DD184DC7C600F37EEE /* NSArray+BlocksKit.h in CopyFiles */, - DBFB09DE184DC7C600F37EEE /* NSDictionary+BlocksKit.h in CopyFiles */, - DBFB09DF184DC7C600F37EEE /* NSIndexSet+BlocksKit.h in CopyFiles */, - DBFB09E0184DC7C600F37EEE /* NSInvocation+BlocksKit.h in CopyFiles */, - A3E3ED9E19F797C9008E0ECB /* NSMapTable+BlocksKit.h in CopyFiles */, - DBFB09E1184DC7C600F37EEE /* NSMutableArray+BlocksKit.h in CopyFiles */, - DBFB09E2184DC7C600F37EEE /* NSMutableDictionary+BlocksKit.h in CopyFiles */, - DBFB09E3184DC7C600F37EEE /* NSMutableIndexSet+BlocksKit.h in CopyFiles */, - DBFB09E4184DC7C600F37EEE /* NSMutableOrderedSet+BlocksKit.h in CopyFiles */, - DBFB09E5184DC7C600F37EEE /* NSMutableSet+BlocksKit.h in CopyFiles */, - DBFB09E6184DC7C600F37EEE /* NSObject+BKAssociatedObjects.h in CopyFiles */, - DBFB09E7184DC7C600F37EEE /* NSObject+BKBlockExecution.h in CopyFiles */, - DBFB09E8184DC7C600F37EEE /* NSObject+BKBlockObservation.h in CopyFiles */, - DBFB09E9184DC7C600F37EEE /* NSOrderedSet+BlocksKit.h in CopyFiles */, - DBFB09EA184DC7C600F37EEE /* NSSet+BlocksKit.h in CopyFiles */, - DBFB09EB184DC7C600F37EEE /* NSTimer+BlocksKit.h in CopyFiles */, - DBFB09DA184DC7BD00F37EEE /* BlocksKit+MessageUI.h in CopyFiles */, - DBFB09DB184DC7BD00F37EEE /* BlocksKit+UIKit.h in CopyFiles */, - DBFB09DC184DC7BD00F37EEE /* BKMacros.h in CopyFiles */, - DBFB08B7184DC23000F37EEE /* BlocksKit.h in CopyFiles */, + DB4CA5D11B3A7A08004B70F8 /* BlocksKit.framework in Embed Frameworks */, ); + name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - DBFB0AC2184DCCB500F37EEE /* CopyFiles */ = { + DB9B96501B3A531F00940D20 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; files = ( - DBFB0AC3184DCCC500F37EEE /* BlocksKit.framework in CopyFiles */, + DB5C6C531C5200B200778E5F /* BlocksKit.h in CopyFiles */, + DB5C6C541C5200B200778E5F /* BKDefines.h in CopyFiles */, + DB5C6C551C5200B200778E5F /* BlocksKit+MessageUI.h in CopyFiles */, + DB5C6C561C5200B200778E5F /* BlocksKit+QuickLook.h in CopyFiles */, + DB5C6C571C5200B200778E5F /* BlocksKit+UIKit.h in CopyFiles */, + DB5C6C581C5200B200778E5F /* BKMacros.h in CopyFiles */, + DB5C6C591C5200B200778E5F /* NSArray+BlocksKit.h in CopyFiles */, + DB5C6C5A1C5200B200778E5F /* NSDictionary+BlocksKit.h in CopyFiles */, + DB5C6C5B1C5200B200778E5F /* NSIndexSet+BlocksKit.h in CopyFiles */, + DB5C6C5C1C5200B200778E5F /* NSInvocation+BlocksKit.h in CopyFiles */, + DB5C6C5D1C5200B200778E5F /* NSMapTable+BlocksKit.h in CopyFiles */, + DB5C6C5E1C5200B200778E5F /* NSMutableArray+BlocksKit.h in CopyFiles */, + DB5C6C5F1C5200B200778E5F /* NSMutableDictionary+BlocksKit.h in CopyFiles */, + DB5C6C601C5200B200778E5F /* NSMutableIndexSet+BlocksKit.h in CopyFiles */, + DB5C6C611C5200B200778E5F /* NSMutableOrderedSet+BlocksKit.h in CopyFiles */, + DB5C6C621C5200B200778E5F /* NSMutableSet+BlocksKit.h in CopyFiles */, + DB5C6C631C5200B200778E5F /* NSNumber+BlocksKit.h in CopyFiles */, + DB5C6C641C5200B200778E5F /* NSObject+BKAssociatedObjects.h in CopyFiles */, + DB5C6C651C5200B200778E5F /* NSObject+BKBlockExecution.h in CopyFiles */, + DB5C6C661C5200B200778E5F /* NSObject+BKBlockObservation.h in CopyFiles */, + DB5C6C671C5200B200778E5F /* NSOrderedSet+BlocksKit.h in CopyFiles */, + DB5C6C681C5200B200778E5F /* NSSet+BlocksKit.h in CopyFiles */, + DB5C6C691C5200B200778E5F /* NSTimer+BlocksKit.h in CopyFiles */, + DB5C6C6A1C5200B200778E5F /* A2BlockInvocation.h in CopyFiles */, + DB5C6C6B1C5200B200778E5F /* A2DynamicDelegate.h in CopyFiles */, + DB5C6C6C1C5200B200778E5F /* NSCache+BlocksKit.h in CopyFiles */, + DB5C6C6D1C5200B200778E5F /* NSURLConnection+BlocksKit.h in CopyFiles */, + DB5C6C6E1C5200B200778E5F /* NSObject+A2BlockDelegate.h in CopyFiles */, + DB5C6C6F1C5200B200778E5F /* NSObject+A2DynamicDelegate.h in CopyFiles */, + DB5C6C701C5200B200778E5F /* MFMailComposeViewController+BlocksKit.h in CopyFiles */, + DB5C6C711C5200B200778E5F /* MFMessageComposeViewController+BlocksKit.h in CopyFiles */, + DB5C6C721C5200B200778E5F /* QLPreviewController+BlocksKit.h in CopyFiles */, + DB5C6C731C5200B200778E5F /* UIActionSheet+BlocksKit.h in CopyFiles */, + DB5C6C741C5200B200778E5F /* UIAlertView+BlocksKit.h in CopyFiles */, + DB5C6C751C5200B200778E5F /* UIBarButtonItem+BlocksKit.h in CopyFiles */, + DB5C6C761C5200B200778E5F /* UIControl+BlocksKit.h in CopyFiles */, + DB5C6C771C5200B200778E5F /* UIGestureRecognizer+BlocksKit.h in CopyFiles */, + DB5C6C781C5200B200778E5F /* UIImage+BlocksKit.h in CopyFiles */, + DB5C6C791C5200B200778E5F /* UIImagePickerController+BlocksKit.h in CopyFiles */, + DB5C6C7A1C5200B200778E5F /* UIPopoverController+BlocksKit.h in CopyFiles */, + DB5C6C7B1C5200B200778E5F /* UITextField+BlocksKit.h in CopyFiles */, + DB5C6C7C1C5200B200778E5F /* UITextView+BlocksKit.h in CopyFiles */, + DB5C6C7D1C5200B200778E5F /* UIView+BlocksKit.h in CopyFiles */, + DB5C6C7E1C5200B200778E5F /* UIWebView+BlocksKit.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 2BB8A49418BE7740006AF0F6 /* UIImagePickerControllerBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIImagePickerControllerBlocksKitTest.m; sourceTree = ""; }; - 2BB8A49A18BE7927006AF0F6 /* UIImagePickerController+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImagePickerController+BlocksKit.h"; sourceTree = ""; }; - 2BB8A49B18BE7927006AF0F6 /* UIImagePickerController+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImagePickerController+BlocksKit.m"; sourceTree = ""; }; - 43CE09DF198660EE00F91137 /* QLPreviewController+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "QLPreviewController+BlocksKit.h"; sourceTree = ""; }; - 43CE09E0198660EE00F91137 /* QLPreviewController+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "QLPreviewController+BlocksKit.m"; sourceTree = ""; }; - 43CE09E21986618700F91137 /* BlocksKit+QuickLook.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "BlocksKit+QuickLook.h"; sourceTree = ""; }; - 43CE09E319866C2300F91137 /* QLPreviewControllerBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QLPreviewControllerBlocksKitTest.m; sourceTree = ""; }; - 43CE09E619866D0600F91137 /* QuickLook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickLook.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/QuickLook.framework; sourceTree = DEVELOPER_DIR; }; - A3E3ED9919F797A3008E0ECB /* NSMapTable+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMapTable+BlocksKit.h"; sourceTree = ""; }; - A3E3ED9A19F797A3008E0ECB /* NSMapTable+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMapTable+BlocksKit.m"; sourceTree = ""; }; - A3E3EDA019F798C6008E0ECB /* NSMapTableBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMapTableBlocksKitTest.m; sourceTree = ""; }; - DB5BF802185E8E6300FF2A0B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - DB5BF87F185E909300FF2A0B /* BK Tests.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "BK Tests.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - DB981A00185E95C00047E817 /* BlocksKit-iOS-Tests-Runner-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BlocksKit-iOS-Tests-Runner-Info.plist"; sourceTree = ""; }; - DB981A03185E96A60047E817 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - DB981A05185E96EA0047E817 /* iOS-Runner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "iOS-Runner.m"; sourceTree = ""; }; - DBD7875218E0CE3A008DC59D /* XCTestCase+BKAsyncTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "XCTestCase+BKAsyncTestCase.h"; sourceTree = ""; }; - DBD7875318E0CE3A008DC59D /* XCTestCase+BKAsyncTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestCase+BKAsyncTestCase.m"; sourceTree = ""; }; - DBE126D3184DDCFA0023AFAD /* A2DynamicTestClasses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = A2DynamicTestClasses.h; sourceTree = ""; }; - DBE126D4184DDCFA0023AFAD /* A2DynamicTestClasses.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2DynamicTestClasses.m; sourceTree = ""; }; - DBE126D6184DDD8B0023AFAD /* A2DynamicTestClasses+A2BlockDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "A2DynamicTestClasses+A2BlockDelegate.h"; sourceTree = ""; }; - DBE126D7184DDD8B0023AFAD /* A2DynamicTestClasses+A2BlockDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "A2DynamicTestClasses+A2BlockDelegate.m"; sourceTree = ""; }; - DBFB08AE184DC23000F37EEE /* libBlocksKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libBlocksKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; - DBFB08B1184DC23000F37EEE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - DBFB08B6184DC23000F37EEE /* BlocksKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BlocksKit.h; sourceTree = ""; }; - DBFB08BE184DC23000F37EEE /* BlocksKit-iOS-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "BlocksKit-iOS-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - DBFB08BF184DC23000F37EEE /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - DBFB08C2184DC23000F37EEE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - DBFB0926184DC2FB00F37EEE /* BlocksKit-iOS-Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BlocksKit-iOS-Tests-Info.plist"; sourceTree = ""; }; - DBFB092C184DC36400F37EEE /* BlocksKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BlocksKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DBFB092D184DC36400F37EEE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - DBFB0930184DC36400F37EEE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - DBFB0931184DC36400F37EEE /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; - DBFB0932184DC36400F37EEE /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; - DBFB0941184DC36400F37EEE /* BlocksKit-Mac-Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "BlocksKit-Mac-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - DBFB0959184DC3EC00F37EEE /* BlocksKit-Mac-Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BlocksKit-Mac-Tests-Info.plist"; sourceTree = ""; }; - DBFB095B184DC42800F37EEE /* BlocksKit-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BlocksKit-Info.plist"; sourceTree = ""; }; - DBFB095D184DC4FB00F37EEE /* Versions.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Versions.xcconfig; sourceTree = ""; }; - DBFB098A184DC7A200F37EEE /* BlocksKit+MessageUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "BlocksKit+MessageUI.h"; sourceTree = ""; }; - DBFB098B184DC7A200F37EEE /* BlocksKit+UIKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "BlocksKit+UIKit.h"; sourceTree = ""; }; - DBFB098D184DC7AF00F37EEE /* BKMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BKMacros.h; sourceTree = ""; }; - DBFB098E184DC7AF00F37EEE /* NSArray+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+BlocksKit.h"; sourceTree = ""; }; - DBFB098F184DC7AF00F37EEE /* NSArray+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+BlocksKit.m"; sourceTree = ""; }; - DBFB0990184DC7AF00F37EEE /* NSDictionary+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+BlocksKit.h"; sourceTree = ""; }; - DBFB0991184DC7AF00F37EEE /* NSDictionary+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+BlocksKit.m"; sourceTree = ""; }; - DBFB0992184DC7AF00F37EEE /* NSIndexSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSIndexSet+BlocksKit.h"; sourceTree = ""; }; - DBFB0993184DC7AF00F37EEE /* NSIndexSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSIndexSet+BlocksKit.m"; sourceTree = ""; }; - DBFB0994184DC7AF00F37EEE /* NSInvocation+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSInvocation+BlocksKit.h"; sourceTree = ""; }; - DBFB0995184DC7AF00F37EEE /* NSInvocation+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSInvocation+BlocksKit.m"; sourceTree = ""; }; - DBFB0996184DC7AF00F37EEE /* NSMutableArray+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableArray+BlocksKit.h"; sourceTree = ""; }; - DBFB0997184DC7B000F37EEE /* NSMutableArray+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableArray+BlocksKit.m"; sourceTree = ""; }; - DBFB0998184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableDictionary+BlocksKit.h"; sourceTree = ""; }; - DBFB0999184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+BlocksKit.m"; sourceTree = ""; }; - DBFB099A184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableIndexSet+BlocksKit.h"; sourceTree = ""; }; - DBFB099B184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableIndexSet+BlocksKit.m"; sourceTree = ""; }; - DBFB099C184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableOrderedSet+BlocksKit.h"; sourceTree = ""; }; - DBFB099D184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableOrderedSet+BlocksKit.m"; sourceTree = ""; }; - DBFB099E184DC7B000F37EEE /* NSMutableSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableSet+BlocksKit.h"; sourceTree = ""; }; - DBFB099F184DC7B000F37EEE /* NSMutableSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableSet+BlocksKit.m"; sourceTree = ""; }; - DBFB09A0184DC7B000F37EEE /* NSObject+BKAssociatedObjects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+BKAssociatedObjects.h"; sourceTree = ""; }; - DBFB09A1184DC7B000F37EEE /* NSObject+BKAssociatedObjects.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+BKAssociatedObjects.m"; sourceTree = ""; }; - DBFB09A2184DC7B000F37EEE /* NSObject+BKBlockExecution.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+BKBlockExecution.h"; sourceTree = ""; }; - DBFB09A3184DC7B000F37EEE /* NSObject+BKBlockExecution.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+BKBlockExecution.m"; sourceTree = ""; }; - DBFB09A4184DC7B000F37EEE /* NSObject+BKBlockObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+BKBlockObservation.h"; sourceTree = ""; }; - DBFB09A5184DC7B000F37EEE /* NSObject+BKBlockObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+BKBlockObservation.m"; sourceTree = ""; }; - DBFB09A6184DC7B000F37EEE /* NSOrderedSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSOrderedSet+BlocksKit.h"; sourceTree = ""; }; - DBFB09A7184DC7B000F37EEE /* NSOrderedSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSOrderedSet+BlocksKit.m"; sourceTree = ""; }; - DBFB09A8184DC7B000F37EEE /* NSSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSSet+BlocksKit.h"; sourceTree = ""; }; - DBFB09A9184DC7B000F37EEE /* NSSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSSet+BlocksKit.m"; sourceTree = ""; }; - DBFB09AA184DC7B000F37EEE /* NSTimer+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSTimer+BlocksKit.h"; sourceTree = ""; }; - DBFB09AB184DC7B000F37EEE /* NSTimer+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSTimer+BlocksKit.m"; sourceTree = ""; }; - DBFB09ED184DC7E400F37EEE /* A2BlockInvocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = A2BlockInvocation.h; sourceTree = ""; }; - DBFB09EE184DC7E400F37EEE /* A2BlockInvocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2BlockInvocation.m; sourceTree = ""; }; - DBFB09EF184DC7E400F37EEE /* A2DynamicDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = A2DynamicDelegate.h; sourceTree = ""; }; - DBFB09F0184DC7E400F37EEE /* A2DynamicDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2DynamicDelegate.m; sourceTree = ""; }; - DBFB09F3184DC7E400F37EEE /* NSCache+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSCache+BlocksKit.h"; sourceTree = ""; }; - DBFB09F4184DC7E400F37EEE /* NSCache+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSCache+BlocksKit.m"; sourceTree = ""; }; - DBFB09F5184DC7E400F37EEE /* NSURLConnection+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURLConnection+BlocksKit.h"; sourceTree = ""; }; - DBFB09F6184DC7E400F37EEE /* NSURLConnection+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLConnection+BlocksKit.m"; sourceTree = ""; }; - DBFB09F7184DC7E400F37EEE /* NSObject+A2BlockDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+A2BlockDelegate.h"; sourceTree = ""; }; - DBFB09F8184DC7E400F37EEE /* NSObject+A2BlockDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+A2BlockDelegate.m"; sourceTree = ""; }; - DBFB09F9184DC7E400F37EEE /* NSObject+A2DynamicDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+A2DynamicDelegate.h"; sourceTree = ""; }; - DBFB09FA184DC7E400F37EEE /* NSObject+A2DynamicDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+A2DynamicDelegate.m"; sourceTree = ""; }; - DBFB0A15184DC82000F37EEE /* MFMailComposeViewController+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MFMailComposeViewController+BlocksKit.h"; sourceTree = ""; }; - DBFB0A16184DC82000F37EEE /* MFMailComposeViewController+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MFMailComposeViewController+BlocksKit.m"; sourceTree = ""; }; - DBFB0A17184DC82100F37EEE /* MFMessageComposeViewController+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MFMessageComposeViewController+BlocksKit.h"; sourceTree = ""; }; - DBFB0A18184DC82100F37EEE /* MFMessageComposeViewController+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MFMessageComposeViewController+BlocksKit.m"; sourceTree = ""; }; - DBFB0A1E184DC83200F37EEE /* UIActionSheet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIActionSheet+BlocksKit.h"; sourceTree = ""; }; - DBFB0A1F184DC83200F37EEE /* UIActionSheet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIActionSheet+BlocksKit.m"; sourceTree = ""; }; - DBFB0A20184DC83200F37EEE /* UIAlertView+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIAlertView+BlocksKit.h"; sourceTree = ""; }; - DBFB0A21184DC83200F37EEE /* UIAlertView+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIAlertView+BlocksKit.m"; sourceTree = ""; }; - DBFB0A22184DC83200F37EEE /* UIBarButtonItem+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIBarButtonItem+BlocksKit.h"; sourceTree = ""; }; - DBFB0A23184DC83200F37EEE /* UIBarButtonItem+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIBarButtonItem+BlocksKit.m"; sourceTree = ""; }; - DBFB0A24184DC83200F37EEE /* UIControl+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIControl+BlocksKit.h"; sourceTree = ""; }; - DBFB0A25184DC83200F37EEE /* UIControl+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIControl+BlocksKit.m"; sourceTree = ""; }; - DBFB0A26184DC83200F37EEE /* UIGestureRecognizer+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIGestureRecognizer+BlocksKit.h"; sourceTree = ""; }; - DBFB0A27184DC83200F37EEE /* UIGestureRecognizer+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIGestureRecognizer+BlocksKit.m"; sourceTree = ""; }; - DBFB0A28184DC83200F37EEE /* UIPopoverController+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIPopoverController+BlocksKit.h"; sourceTree = ""; }; - DBFB0A29184DC83200F37EEE /* UIPopoverController+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIPopoverController+BlocksKit.m"; sourceTree = ""; }; - DBFB0A2A184DC83200F37EEE /* UITextField+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITextField+BlocksKit.h"; sourceTree = ""; }; - DBFB0A2B184DC83200F37EEE /* UITextField+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITextField+BlocksKit.m"; sourceTree = ""; }; - DBFB0A2C184DC83200F37EEE /* UIView+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+BlocksKit.h"; sourceTree = ""; }; - DBFB0A2D184DC83200F37EEE /* UIView+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+BlocksKit.m"; sourceTree = ""; }; - DBFB0A2E184DC83200F37EEE /* UIWebView+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIWebView+BlocksKit.h"; sourceTree = ""; }; - DBFB0A2F184DC83200F37EEE /* UIWebView+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWebView+BlocksKit.m"; sourceTree = ""; }; - DBFB0A42184DC84F00F37EEE /* MacBundledFramework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = MacBundledFramework.xcconfig; sourceTree = ""; }; - DBFB0A87184DCBCC00F37EEE /* BlocksKit Mac Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "BlocksKit Mac Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - DBFB0AB8184DCC9400F37EEE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; - DBFB0AB9184DCC9400F37EEE /* BKApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BKApp.h; sourceTree = ""; }; - DBFB0ABA184DCC9400F37EEE /* BKApp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BKApp.m; sourceTree = ""; }; - DBFB0ABB184DCC9400F37EEE /* BlocksKit-Mac-Demo-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "BlocksKit-Mac-Demo-Info.plist"; sourceTree = ""; }; - DBFB0ABC184DCC9400F37EEE /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - DBFB0AC5184DCD6200F37EEE /* A2BlockDelegateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2BlockDelegateTests.m; sourceTree = ""; }; - DBFB0AC7184DCD6200F37EEE /* A2BlockInvocationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2BlockInvocationTests.m; sourceTree = ""; }; - DBFB0AC9184DCD6200F37EEE /* A2DynamicDelegateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2DynamicDelegateTests.m; sourceTree = ""; }; - DBFB0ACD184DCD6200F37EEE /* BKMacrosTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BKMacrosTest.m; sourceTree = ""; }; - DBFB0ACF184DCD6200F37EEE /* MFMailComposeViewControllerBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFMailComposeViewControllerBlocksKitTest.m; sourceTree = ""; }; - DBFB0AD1184DCD6200F37EEE /* MFMessageComposeViewControllerBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFMessageComposeViewControllerBlocksKitTest.m; sourceTree = ""; }; - DBFB0AD3184DCD6200F37EEE /* NSArrayBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSArrayBlocksKitTest.m; sourceTree = ""; }; - DBFB0AD5184DCD6200F37EEE /* NSCacheBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSCacheBlocksKitTest.m; sourceTree = ""; }; - DBFB0AD7184DCD6200F37EEE /* NSDictionaryBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSDictionaryBlocksKitTest.m; sourceTree = ""; }; - DBFB0AD9184DCD6200F37EEE /* NSIndexSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSIndexSetBlocksKitTest.m; sourceTree = ""; }; - DBFB0ADB184DCD6200F37EEE /* NSInvocationBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSInvocationBlocksKitTest.m; sourceTree = ""; }; - DBFB0ADD184DCD6200F37EEE /* NSMutableArrayBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMutableArrayBlocksKitTest.m; sourceTree = ""; }; - DBFB0ADF184DCD6200F37EEE /* NSMutableDictionaryBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMutableDictionaryBlocksKitTest.m; sourceTree = ""; }; - DBFB0AE1184DCD6200F37EEE /* NSMutableIndexSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMutableIndexSetBlocksKitTest.m; sourceTree = ""; }; - DBFB0AE3184DCD6200F37EEE /* NSMutableOrderedSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMutableOrderedSetBlocksKitTest.m; sourceTree = ""; }; - DBFB0AE5184DCD6200F37EEE /* NSMutableSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMutableSetBlocksKitTest.m; sourceTree = ""; }; - DBFB0AE7184DCD6200F37EEE /* NSObjectAssociatedObjectTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectAssociatedObjectTest.m; sourceTree = ""; }; - DBFB0AE9184DCD6200F37EEE /* NSObjectBlockObservationTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectBlockObservationTest.m; sourceTree = ""; }; - DBFB0AEB184DCD6200F37EEE /* NSObjectBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectBlocksKitTest.m; sourceTree = ""; }; - DBFB0AED184DCD6200F37EEE /* NSOrderedSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSOrderedSetBlocksKitTest.m; sourceTree = ""; }; - DBFB0AEF184DCD6200F37EEE /* NSSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSSetBlocksKitTest.m; sourceTree = ""; }; - DBFB0AF1184DCD6200F37EEE /* NSTimerBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSTimerBlocksKitTest.m; sourceTree = ""; }; - DBFB0AF3184DCD6200F37EEE /* NSURLConnectionBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSURLConnectionBlocksKitTest.m; sourceTree = ""; }; - DBFB0AF5184DCD6200F37EEE /* UIActionSheetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIActionSheetBlocksKitTest.m; sourceTree = ""; }; - DBFB0AF7184DCD6200F37EEE /* UIAlertViewBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIAlertViewBlocksKitTest.m; sourceTree = ""; }; - DBFB0AF9184DCD6200F37EEE /* UIControlBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIControlBlocksKitTest.m; sourceTree = ""; }; - DBFB0AFB184DCD6200F37EEE /* UITextFieldBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UITextFieldBlocksKitTest.m; sourceTree = ""; }; - DBFB0AFD184DCD6200F37EEE /* UIWebViewBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIWebViewBlocksKitTest.m; sourceTree = ""; }; + DB4CA3F91B3A624B004B70F8 /* Common-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Common-Framework.xcconfig"; sourceTree = ""; }; + DB4CA3FA1B3A624B004B70F8 /* iOS-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Base.xcconfig"; sourceTree = ""; }; + DB4CA3FB1B3A624B004B70F8 /* iOS-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Framework.xcconfig"; sourceTree = ""; }; + DB4CA3FC1B3A624B004B70F8 /* iOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-StaticLibrary.xcconfig"; sourceTree = ""; }; + DB4CA3FE1B3A624B004B70F8 /* Mac-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Application.xcconfig"; sourceTree = ""; }; + DB4CA3FF1B3A624B004B70F8 /* Mac-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Base.xcconfig"; sourceTree = ""; }; + DB4CA4001B3A624B004B70F8 /* Mac-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Framework.xcconfig"; sourceTree = ""; }; + DB4CA4011B3A624B004B70F8 /* Mac-Test.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Test.xcconfig"; sourceTree = ""; }; + DB4CA4021B3A6450004B70F8 /* iOS-Test.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Test.xcconfig"; sourceTree = ""; }; + DB4CA4051B3A662A004B70F8 /* BKMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BKMacros.h; sourceTree = ""; }; + DB4CA4061B3A662A004B70F8 /* NSArray+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+BlocksKit.h"; sourceTree = ""; }; + DB4CA4071B3A662A004B70F8 /* NSArray+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+BlocksKit.m"; sourceTree = ""; }; + DB4CA4081B3A662A004B70F8 /* NSDictionary+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+BlocksKit.h"; sourceTree = ""; }; + DB4CA4091B3A662A004B70F8 /* NSDictionary+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+BlocksKit.m"; sourceTree = ""; }; + DB4CA40A1B3A662A004B70F8 /* NSIndexSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSIndexSet+BlocksKit.h"; sourceTree = ""; }; + DB4CA40B1B3A662A004B70F8 /* NSIndexSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSIndexSet+BlocksKit.m"; sourceTree = ""; }; + DB4CA40C1B3A662A004B70F8 /* NSInvocation+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSInvocation+BlocksKit.h"; sourceTree = ""; }; + DB4CA40D1B3A662A004B70F8 /* NSInvocation+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSInvocation+BlocksKit.m"; sourceTree = ""; }; + DB4CA40E1B3A662A004B70F8 /* NSMapTable+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMapTable+BlocksKit.h"; sourceTree = ""; }; + DB4CA40F1B3A662A004B70F8 /* NSMapTable+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMapTable+BlocksKit.m"; sourceTree = ""; }; + DB4CA4101B3A662A004B70F8 /* NSMutableArray+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableArray+BlocksKit.h"; sourceTree = ""; }; + DB4CA4111B3A662A004B70F8 /* NSMutableArray+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableArray+BlocksKit.m"; sourceTree = ""; }; + DB4CA4121B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableDictionary+BlocksKit.h"; sourceTree = ""; }; + DB4CA4131B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+BlocksKit.m"; sourceTree = ""; }; + DB4CA4141B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableIndexSet+BlocksKit.h"; sourceTree = ""; }; + DB4CA4151B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableIndexSet+BlocksKit.m"; sourceTree = ""; }; + DB4CA4161B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableOrderedSet+BlocksKit.h"; sourceTree = ""; }; + DB4CA4171B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableOrderedSet+BlocksKit.m"; sourceTree = ""; }; + DB4CA4181B3A662A004B70F8 /* NSMutableSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableSet+BlocksKit.h"; sourceTree = ""; }; + DB4CA4191B3A662A004B70F8 /* NSMutableSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableSet+BlocksKit.m"; sourceTree = ""; }; + DB4CA41A1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+BKAssociatedObjects.h"; sourceTree = ""; }; + DB4CA41B1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+BKAssociatedObjects.m"; sourceTree = ""; }; + DB4CA41C1B3A662A004B70F8 /* NSObject+BKBlockExecution.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+BKBlockExecution.h"; sourceTree = ""; }; + DB4CA41D1B3A662A004B70F8 /* NSObject+BKBlockExecution.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+BKBlockExecution.m"; sourceTree = ""; }; + DB4CA41E1B3A662A004B70F8 /* NSObject+BKBlockObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+BKBlockObservation.h"; sourceTree = ""; }; + DB4CA41F1B3A662A004B70F8 /* NSObject+BKBlockObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+BKBlockObservation.m"; sourceTree = ""; }; + DB4CA4201B3A662A004B70F8 /* NSOrderedSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSOrderedSet+BlocksKit.h"; sourceTree = ""; }; + DB4CA4211B3A662A004B70F8 /* NSOrderedSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSOrderedSet+BlocksKit.m"; sourceTree = ""; }; + DB4CA4221B3A662A004B70F8 /* NSSet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSSet+BlocksKit.h"; sourceTree = ""; }; + DB4CA4231B3A662A004B70F8 /* NSSet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSSet+BlocksKit.m"; sourceTree = ""; }; + DB4CA4241B3A662A004B70F8 /* NSTimer+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSTimer+BlocksKit.h"; sourceTree = ""; }; + DB4CA4251B3A662A004B70F8 /* NSTimer+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSTimer+BlocksKit.m"; sourceTree = ""; }; + DB4CA4791B3A6656004B70F8 /* A2BlockInvocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = A2BlockInvocation.h; sourceTree = ""; }; + DB4CA47A1B3A6656004B70F8 /* A2BlockInvocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2BlockInvocation.m; sourceTree = ""; }; + DB4CA47B1B3A6656004B70F8 /* A2DynamicDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = A2DynamicDelegate.h; sourceTree = ""; }; + DB4CA47C1B3A6656004B70F8 /* A2DynamicDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2DynamicDelegate.m; sourceTree = ""; }; + DB4CA47E1B3A6656004B70F8 /* NSCache+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSCache+BlocksKit.h"; sourceTree = ""; }; + DB4CA47F1B3A6656004B70F8 /* NSCache+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSCache+BlocksKit.m"; sourceTree = ""; }; + DB4CA4801B3A6656004B70F8 /* NSURLConnection+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURLConnection+BlocksKit.h"; sourceTree = ""; }; + DB4CA4811B3A6656004B70F8 /* NSURLConnection+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLConnection+BlocksKit.m"; sourceTree = ""; }; + DB4CA4821B3A6656004B70F8 /* NSObject+A2BlockDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+A2BlockDelegate.h"; sourceTree = ""; }; + DB4CA4831B3A6656004B70F8 /* NSObject+A2BlockDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+A2BlockDelegate.m"; sourceTree = ""; }; + DB4CA4841B3A6656004B70F8 /* NSObject+A2DynamicDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+A2DynamicDelegate.h"; sourceTree = ""; }; + DB4CA4851B3A6656004B70F8 /* NSObject+A2DynamicDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+A2DynamicDelegate.m"; sourceTree = ""; }; + DB4CA4871B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MFMailComposeViewController+BlocksKit.h"; sourceTree = ""; }; + DB4CA4881B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MFMailComposeViewController+BlocksKit.m"; sourceTree = ""; }; + DB4CA4891B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MFMessageComposeViewController+BlocksKit.h"; sourceTree = ""; }; + DB4CA48A1B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MFMessageComposeViewController+BlocksKit.m"; sourceTree = ""; }; + DB4CA48C1B3A6657004B70F8 /* QLPreviewController+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "QLPreviewController+BlocksKit.h"; sourceTree = ""; }; + DB4CA48D1B3A6657004B70F8 /* QLPreviewController+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "QLPreviewController+BlocksKit.m"; sourceTree = ""; }; + DB4CA48F1B3A6657004B70F8 /* UIActionSheet+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIActionSheet+BlocksKit.h"; sourceTree = ""; }; + DB4CA4901B3A6657004B70F8 /* UIActionSheet+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIActionSheet+BlocksKit.m"; sourceTree = ""; }; + DB4CA4911B3A6657004B70F8 /* UIAlertView+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIAlertView+BlocksKit.h"; sourceTree = ""; }; + DB4CA4921B3A6657004B70F8 /* UIAlertView+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIAlertView+BlocksKit.m"; sourceTree = ""; }; + DB4CA4931B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIBarButtonItem+BlocksKit.h"; sourceTree = ""; }; + DB4CA4941B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIBarButtonItem+BlocksKit.m"; sourceTree = ""; }; + DB4CA4951B3A6657004B70F8 /* UIControl+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIControl+BlocksKit.h"; sourceTree = ""; }; + DB4CA4961B3A6657004B70F8 /* UIControl+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIControl+BlocksKit.m"; sourceTree = ""; }; + DB4CA4971B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIGestureRecognizer+BlocksKit.h"; sourceTree = ""; }; + DB4CA4981B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIGestureRecognizer+BlocksKit.m"; sourceTree = ""; }; + DB4CA4991B3A6657004B70F8 /* UIImage+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+BlocksKit.h"; sourceTree = ""; }; + DB4CA49A1B3A6657004B70F8 /* UIImage+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+BlocksKit.m"; sourceTree = ""; }; + DB4CA49B1B3A6657004B70F8 /* UIImagePickerController+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImagePickerController+BlocksKit.h"; sourceTree = ""; }; + DB4CA49C1B3A6657004B70F8 /* UIImagePickerController+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImagePickerController+BlocksKit.m"; sourceTree = ""; }; + DB4CA49D1B3A6657004B70F8 /* UIPopoverController+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIPopoverController+BlocksKit.h"; sourceTree = ""; }; + DB4CA49E1B3A6657004B70F8 /* UIPopoverController+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIPopoverController+BlocksKit.m"; sourceTree = ""; }; + DB4CA49F1B3A6657004B70F8 /* UITextField+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITextField+BlocksKit.h"; sourceTree = ""; }; + DB4CA4A01B3A6657004B70F8 /* UITextField+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITextField+BlocksKit.m"; sourceTree = ""; }; + DB4CA4A11B3A6657004B70F8 /* UIView+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+BlocksKit.h"; sourceTree = ""; }; + DB4CA4A21B3A6657004B70F8 /* UIView+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+BlocksKit.m"; sourceTree = ""; }; + DB4CA4A31B3A6657004B70F8 /* UIWebView+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIWebView+BlocksKit.h"; sourceTree = ""; }; + DB4CA4A41B3A6657004B70F8 /* UIWebView+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWebView+BlocksKit.m"; sourceTree = ""; }; + DB4CA5091B3A6720004B70F8 /* BlocksKit+MessageUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "BlocksKit+MessageUI.h"; sourceTree = ""; }; + DB4CA50A1B3A6720004B70F8 /* BlocksKit+QuickLook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "BlocksKit+QuickLook.h"; sourceTree = ""; }; + DB4CA50B1B3A6720004B70F8 /* BlocksKit+UIKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "BlocksKit+UIKit.h"; sourceTree = ""; }; + DB4CA53B1B3A67A3004B70F8 /* BKMacrosTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BKMacrosTest.m; sourceTree = ""; }; + DB4CA53C1B3A67A3004B70F8 /* NSArrayBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSArrayBlocksKitTest.m; sourceTree = ""; }; + DB4CA53D1B3A67A3004B70F8 /* NSDictionaryBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSDictionaryBlocksKitTest.m; sourceTree = ""; }; + DB4CA53E1B3A67A3004B70F8 /* NSIndexSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSIndexSetBlocksKitTest.m; sourceTree = ""; }; + DB4CA53F1B3A67A3004B70F8 /* NSInvocationBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSInvocationBlocksKitTest.m; sourceTree = ""; }; + DB4CA5401B3A67A3004B70F8 /* NSMapTableBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMapTableBlocksKitTest.m; sourceTree = ""; }; + DB4CA5411B3A67A3004B70F8 /* NSMutableArrayBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMutableArrayBlocksKitTest.m; sourceTree = ""; }; + DB4CA5421B3A67A3004B70F8 /* NSMutableDictionaryBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMutableDictionaryBlocksKitTest.m; sourceTree = ""; }; + DB4CA5431B3A67A3004B70F8 /* NSMutableIndexSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMutableIndexSetBlocksKitTest.m; sourceTree = ""; }; + DB4CA5441B3A67A3004B70F8 /* NSMutableOrderedSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMutableOrderedSetBlocksKitTest.m; sourceTree = ""; }; + DB4CA5451B3A67A3004B70F8 /* NSMutableSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSMutableSetBlocksKitTest.m; sourceTree = ""; }; + DB4CA5461B3A67A3004B70F8 /* NSObjectAssociatedObjectTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectAssociatedObjectTest.m; sourceTree = ""; }; + DB4CA5471B3A67A3004B70F8 /* NSObjectBlockObservationTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectBlockObservationTest.m; sourceTree = ""; }; + DB4CA5481B3A67A3004B70F8 /* NSObjectBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSObjectBlocksKitTest.m; sourceTree = ""; }; + DB4CA5491B3A67A3004B70F8 /* NSOrderedSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSOrderedSetBlocksKitTest.m; sourceTree = ""; }; + DB4CA54A1B3A67A3004B70F8 /* NSSetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSSetBlocksKitTest.m; sourceTree = ""; }; + DB4CA54B1B3A67A3004B70F8 /* NSTimerBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSTimerBlocksKitTest.m; sourceTree = ""; }; + DB4CA54D1B3A67A3004B70F8 /* A2BlockDelegateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2BlockDelegateTests.m; sourceTree = ""; }; + DB4CA54E1B3A67A3004B70F8 /* A2BlockInvocationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2BlockInvocationTests.m; sourceTree = ""; }; + DB4CA54F1B3A67A3004B70F8 /* A2DynamicDelegateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2DynamicDelegateTests.m; sourceTree = ""; }; + DB4CA5501B3A67A3004B70F8 /* A2DynamicTestClasses+A2BlockDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "A2DynamicTestClasses+A2BlockDelegate.h"; sourceTree = ""; }; + DB4CA5511B3A67A3004B70F8 /* A2DynamicTestClasses+A2BlockDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "A2DynamicTestClasses+A2BlockDelegate.m"; sourceTree = ""; }; + DB4CA5521B3A67A3004B70F8 /* A2DynamicTestClasses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = A2DynamicTestClasses.h; sourceTree = ""; }; + DB4CA5531B3A67A3004B70F8 /* A2DynamicTestClasses.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = A2DynamicTestClasses.m; sourceTree = ""; }; + DB4CA5541B3A67A3004B70F8 /* NSCacheBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSCacheBlocksKitTest.m; sourceTree = ""; }; + DB4CA5551B3A67A3004B70F8 /* NSURLConnectionBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSURLConnectionBlocksKitTest.m; sourceTree = ""; }; + DB4CA5571B3A67A3004B70F8 /* MFMailComposeViewControllerBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFMailComposeViewControllerBlocksKitTest.m; sourceTree = ""; }; + DB4CA5581B3A67A3004B70F8 /* MFMessageComposeViewControllerBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MFMessageComposeViewControllerBlocksKitTest.m; sourceTree = ""; }; + DB4CA55A1B3A67A3004B70F8 /* QLPreviewControllerBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QLPreviewControllerBlocksKitTest.m; sourceTree = ""; }; + DB4CA55C1B3A67A3004B70F8 /* UIActionSheetBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIActionSheetBlocksKitTest.m; sourceTree = ""; }; + DB4CA55D1B3A67A3004B70F8 /* UIAlertViewBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIAlertViewBlocksKitTest.m; sourceTree = ""; }; + DB4CA55E1B3A67A3004B70F8 /* UIControlBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIControlBlocksKitTest.m; sourceTree = ""; }; + DB4CA55F1B3A67A3004B70F8 /* UIImagePickerControllerBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIImagePickerControllerBlocksKitTest.m; sourceTree = ""; }; + DB4CA5601B3A67A3004B70F8 /* UITextFieldBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UITextFieldBlocksKitTest.m; sourceTree = ""; }; + DB4CA5611B3A67A3004B70F8 /* UIWebViewBlocksKitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIWebViewBlocksKitTest.m; sourceTree = ""; }; + DB4CA5C81B3A6810004B70F8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + DB4CA5C91B3A6810004B70F8 /* BKApp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BKApp.h; sourceTree = ""; }; + DB4CA5CA1B3A6810004B70F8 /* BKApp.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BKApp.m; sourceTree = ""; }; + DB4CA5CB1B3A6810004B70F8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + DB4CA5CC1B3A6810004B70F8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + DB5C6C461C52005900778E5F /* NSNumber+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNumber+BlocksKit.h"; sourceTree = ""; }; + DB5C6C471C52005900778E5F /* NSNumber+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSNumber+BlocksKit.m"; sourceTree = ""; }; + DB5C6C4E1C52009700778E5F /* UITextView+BlocksKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITextView+BlocksKit.h"; sourceTree = ""; }; + DB5C6C4F1C52009700778E5F /* UITextView+BlocksKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITextView+BlocksKit.m"; sourceTree = ""; }; + DB9B96181B3A52A700940D20 /* BlocksKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BlocksKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DB9B961B1B3A52A700940D20 /* BlocksKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BlocksKit.h; sourceTree = ""; }; + DB9B961D1B3A52A700940D20 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + DB9B96221B3A52A700940D20 /* BlocksKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlocksKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + DB9B96291B3A52A700940D20 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + DB9B96371B3A52E500940D20 /* BlocksKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BlocksKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DB9B96401B3A52E500940D20 /* BlocksKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlocksKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + DB9B96521B3A531F00940D20 /* libMobileBlocksKitLegacy.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMobileBlocksKitLegacy.a; sourceTree = BUILT_PRODUCTS_DIR; }; + DBA576A21B3A7B9700E41A6B /* BKDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BKDefines.h; sourceTree = ""; }; + DBBDD1E51B3A553E008909B0 /* BlocksKit Mac Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "BlocksKit Mac Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + DBBDD23E1B3A5782008909B0 /* Project-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Project-Debug.xcconfig"; sourceTree = ""; }; + DBBDD23F1B3A5782008909B0 /* Project-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Project-Release.xcconfig"; sourceTree = ""; }; + DBBDD2401B3A5782008909B0 /* Project-Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Project-Common.xcconfig"; sourceTree = ""; }; + DBBDD2411B3A5A2C008909B0 /* Project-Version.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Project-Version.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - DB5BF87C185E909300FF2A0B /* Frameworks */ = { + DB9B96141B3A52A700940D20 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DB5BF881185E909300FF2A0B /* CoreGraphics.framework in Frameworks */, - DB5BF882185E909300FF2A0B /* UIKit.framework in Frameworks */, - DB5BF880185E909300FF2A0B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB08AB184DC23000F37EEE /* Frameworks */ = { + DB9B961F1B3A52A700940D20 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DBFB08B2184DC23000F37EEE /* Foundation.framework in Frameworks */, + DB9B96231B3A52A700940D20 /* BlocksKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB08BB184DC23000F37EEE /* Frameworks */ = { + DB9B96331B3A52E500940D20 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DBFB08C0184DC23000F37EEE /* XCTest.framework in Frameworks */, - DBFB08C3184DC23000F37EEE /* UIKit.framework in Frameworks */, - DBFB08C6184DC23000F37EEE /* libBlocksKit.a in Frameworks */, - DBFB08C1184DC23000F37EEE /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB0928184DC36400F37EEE /* Frameworks */ = { + DB9B963D1B3A52E500940D20 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DBFB0958184DC3B400F37EEE /* Foundation.framework in Frameworks */, + DB9B96411B3A52E500940D20 /* BlocksKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB093E184DC36400F37EEE /* Frameworks */ = { + DB9B964F1B3A531F00940D20 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DBFB0943184DC36400F37EEE /* Cocoa.framework in Frameworks */, - DBFB0946184DC36400F37EEE /* BlocksKit.framework in Frameworks */, - DBFB0942184DC36400F37EEE /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB0A84184DCBCC00F37EEE /* Frameworks */ = { + DBBDD1E21B3A553E008909B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DBFB0AC1184DCCA500F37EEE /* BlocksKit.framework in Frameworks */, - DBFB0A88184DCBCC00F37EEE /* Cocoa.framework in Frameworks */, + DB4CA5D01B3A7A08004B70F8 /* BlocksKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 43CE09DE198660EE00F91137 /* QuickLook */ = { + DB4CA4031B3A65FA004B70F8 /* Supporting Files */ = { isa = PBXGroup; children = ( - 43CE09DF198660EE00F91137 /* QLPreviewController+BlocksKit.h */, - 43CE09E0198660EE00F91137 /* QLPreviewController+BlocksKit.m */, + DB9B961D1B3A52A700940D20 /* Info.plist */, ); - path = QuickLook; - sourceTree = ""; - }; - DBE126DC184DDDDB0023AFAD /* Test Classes */ = { - isa = PBXGroup; - children = ( - DBD7875218E0CE3A008DC59D /* XCTestCase+BKAsyncTestCase.h */, - DBD7875318E0CE3A008DC59D /* XCTestCase+BKAsyncTestCase.m */, - DBE126D3184DDCFA0023AFAD /* A2DynamicTestClasses.h */, - DBE126D4184DDCFA0023AFAD /* A2DynamicTestClasses.m */, - DBE126D6184DDD8B0023AFAD /* A2DynamicTestClasses+A2BlockDelegate.h */, - DBE126D7184DDD8B0023AFAD /* A2DynamicTestClasses+A2BlockDelegate.m */, - ); - name = "Test Classes"; + name = "Supporting Files"; sourceTree = ""; }; - DBE126DD184DE0780023AFAD /* DynamicDelegate */ = { + DB4CA4041B3A662A004B70F8 /* Core */ = { isa = PBXGroup; children = ( - DBFB0AC5184DCD6200F37EEE /* A2BlockDelegateTests.m */, - DBFB0AC7184DCD6200F37EEE /* A2BlockInvocationTests.m */, - DBFB0AC9184DCD6200F37EEE /* A2DynamicDelegateTests.m */, - DBE126DC184DDDDB0023AFAD /* Test Classes */, - DBE126DE184DE0820023AFAD /* Foundation */, + DB4CA4051B3A662A004B70F8 /* BKMacros.h */, + DB4CA4061B3A662A004B70F8 /* NSArray+BlocksKit.h */, + DB4CA4071B3A662A004B70F8 /* NSArray+BlocksKit.m */, + DB4CA4081B3A662A004B70F8 /* NSDictionary+BlocksKit.h */, + DB4CA4091B3A662A004B70F8 /* NSDictionary+BlocksKit.m */, + DB4CA40A1B3A662A004B70F8 /* NSIndexSet+BlocksKit.h */, + DB4CA40B1B3A662A004B70F8 /* NSIndexSet+BlocksKit.m */, + DB4CA40C1B3A662A004B70F8 /* NSInvocation+BlocksKit.h */, + DB4CA40D1B3A662A004B70F8 /* NSInvocation+BlocksKit.m */, + DB4CA40E1B3A662A004B70F8 /* NSMapTable+BlocksKit.h */, + DB4CA40F1B3A662A004B70F8 /* NSMapTable+BlocksKit.m */, + DB4CA4101B3A662A004B70F8 /* NSMutableArray+BlocksKit.h */, + DB4CA4111B3A662A004B70F8 /* NSMutableArray+BlocksKit.m */, + DB4CA4121B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.h */, + DB4CA4131B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.m */, + DB4CA4141B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.h */, + DB4CA4151B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.m */, + DB4CA4161B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.h */, + DB4CA4171B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.m */, + DB4CA4181B3A662A004B70F8 /* NSMutableSet+BlocksKit.h */, + DB4CA4191B3A662A004B70F8 /* NSMutableSet+BlocksKit.m */, + DB5C6C461C52005900778E5F /* NSNumber+BlocksKit.h */, + DB5C6C471C52005900778E5F /* NSNumber+BlocksKit.m */, + DB4CA41A1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.h */, + DB4CA41B1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.m */, + DB4CA41C1B3A662A004B70F8 /* NSObject+BKBlockExecution.h */, + DB4CA41D1B3A662A004B70F8 /* NSObject+BKBlockExecution.m */, + DB4CA41E1B3A662A004B70F8 /* NSObject+BKBlockObservation.h */, + DB4CA41F1B3A662A004B70F8 /* NSObject+BKBlockObservation.m */, + DB4CA4201B3A662A004B70F8 /* NSOrderedSet+BlocksKit.h */, + DB4CA4211B3A662A004B70F8 /* NSOrderedSet+BlocksKit.m */, + DB4CA4221B3A662A004B70F8 /* NSSet+BlocksKit.h */, + DB4CA4231B3A662A004B70F8 /* NSSet+BlocksKit.m */, + DB4CA4241B3A662A004B70F8 /* NSTimer+BlocksKit.h */, + DB4CA4251B3A662A004B70F8 /* NSTimer+BlocksKit.m */, ); - name = DynamicDelegate; + path = Core; sourceTree = ""; }; - DBE126DE184DE0820023AFAD /* Foundation */ = { + DB4CA4781B3A6656004B70F8 /* DynamicDelegate */ = { isa = PBXGroup; children = ( - DBFB0AD5184DCD6200F37EEE /* NSCacheBlocksKitTest.m */, - DBFB0AF3184DCD6200F37EEE /* NSURLConnectionBlocksKitTest.m */, + DB4CA4791B3A6656004B70F8 /* A2BlockInvocation.h */, + DB4CA47A1B3A6656004B70F8 /* A2BlockInvocation.m */, + DB4CA47B1B3A6656004B70F8 /* A2DynamicDelegate.h */, + DB4CA47C1B3A6656004B70F8 /* A2DynamicDelegate.m */, + DB4CA47D1B3A6656004B70F8 /* Foundation */, + DB4CA4821B3A6656004B70F8 /* NSObject+A2BlockDelegate.h */, + DB4CA4831B3A6656004B70F8 /* NSObject+A2BlockDelegate.m */, + DB4CA4841B3A6656004B70F8 /* NSObject+A2DynamicDelegate.h */, + DB4CA4851B3A6656004B70F8 /* NSObject+A2DynamicDelegate.m */, ); - name = Foundation; - sourceTree = ""; - }; - DBE126DF184DE08A0023AFAD /* Core */ = { - isa = PBXGroup; - children = ( - DBFB0ACD184DCD6200F37EEE /* BKMacrosTest.m */, - DBFB0AD3184DCD6200F37EEE /* NSArrayBlocksKitTest.m */, - DBFB0AD7184DCD6200F37EEE /* NSDictionaryBlocksKitTest.m */, - DBFB0AD9184DCD6200F37EEE /* NSIndexSetBlocksKitTest.m */, - DBFB0ADB184DCD6200F37EEE /* NSInvocationBlocksKitTest.m */, - A3E3EDA019F798C6008E0ECB /* NSMapTableBlocksKitTest.m */, - DBFB0ADD184DCD6200F37EEE /* NSMutableArrayBlocksKitTest.m */, - DBFB0ADF184DCD6200F37EEE /* NSMutableDictionaryBlocksKitTest.m */, - DBFB0AE1184DCD6200F37EEE /* NSMutableIndexSetBlocksKitTest.m */, - DBFB0AE3184DCD6200F37EEE /* NSMutableOrderedSetBlocksKitTest.m */, - DBFB0AE5184DCD6200F37EEE /* NSMutableSetBlocksKitTest.m */, - DBFB0AE7184DCD6200F37EEE /* NSObjectAssociatedObjectTest.m */, - DBFB0AE9184DCD6200F37EEE /* NSObjectBlockObservationTest.m */, - DBFB0AEB184DCD6200F37EEE /* NSObjectBlocksKitTest.m */, - DBFB0AED184DCD6200F37EEE /* NSOrderedSetBlocksKitTest.m */, - DBFB0AEF184DCD6200F37EEE /* NSSetBlocksKitTest.m */, - DBFB0AF1184DCD6200F37EEE /* NSTimerBlocksKitTest.m */, - ); - name = Core; + path = DynamicDelegate; sourceTree = ""; }; - DBFB08A3184DC21500F37EEE = { + DB4CA47D1B3A6656004B70F8 /* Foundation */ = { isa = PBXGroup; children = ( - DBFB08B3184DC23000F37EEE /* BlocksKit */, - DBFB08D5184DC29500F37EEE /* Tests */, - DBFB095C184DC4FB00F37EEE /* Configurations */, - DBFB08B0184DC23000F37EEE /* Frameworks */, - DBFB08AF184DC23000F37EEE /* Products */, + DB4CA47E1B3A6656004B70F8 /* NSCache+BlocksKit.h */, + DB4CA47F1B3A6656004B70F8 /* NSCache+BlocksKit.m */, + DB4CA4801B3A6656004B70F8 /* NSURLConnection+BlocksKit.h */, + DB4CA4811B3A6656004B70F8 /* NSURLConnection+BlocksKit.m */, ); + path = Foundation; sourceTree = ""; - usesTabs = 1; }; - DBFB08AF184DC23000F37EEE /* Products */ = { + DB4CA4861B3A6657004B70F8 /* MessageUI */ = { isa = PBXGroup; children = ( - DBFB08AE184DC23000F37EEE /* libBlocksKit.a */, - DBFB08BE184DC23000F37EEE /* BlocksKit-iOS-Tests.xctest */, - DBFB092C184DC36400F37EEE /* BlocksKit.framework */, - DBFB0941184DC36400F37EEE /* BlocksKit-Mac-Tests.xctest */, - DBFB0A87184DCBCC00F37EEE /* BlocksKit Mac Demo.app */, - DB5BF87F185E909300FF2A0B /* BK Tests.app */, + DB4CA4871B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.h */, + DB4CA4881B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.m */, + DB4CA4891B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.h */, + DB4CA48A1B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.m */, ); - name = Products; + path = MessageUI; sourceTree = ""; }; - DBFB08B0184DC23000F37EEE /* Frameworks */ = { + DB4CA48B1B3A6657004B70F8 /* QuickLook */ = { isa = PBXGroup; children = ( - 43CE09E619866D0600F91137 /* QuickLook.framework */, - DBFB08B1184DC23000F37EEE /* Foundation.framework */, - DBFB08BF184DC23000F37EEE /* XCTest.framework */, - DBFB08C2184DC23000F37EEE /* UIKit.framework */, - DBFB092D184DC36400F37EEE /* Cocoa.framework */, - DB5BF802185E8E6300FF2A0B /* CoreGraphics.framework */, - DBFB092F184DC36400F37EEE /* Other Frameworks */, - ); - name = Frameworks; + DB4CA48C1B3A6657004B70F8 /* QLPreviewController+BlocksKit.h */, + DB4CA48D1B3A6657004B70F8 /* QLPreviewController+BlocksKit.m */, + ); + path = QuickLook; sourceTree = ""; }; - DBFB08B3184DC23000F37EEE /* BlocksKit */ = { + DB4CA48E1B3A6657004B70F8 /* UIKit */ = { isa = PBXGroup; children = ( - DBFB08B6184DC23000F37EEE /* BlocksKit.h */, - DBFB098A184DC7A200F37EEE /* BlocksKit+MessageUI.h */, - DBFB098B184DC7A200F37EEE /* BlocksKit+UIKit.h */, - 43CE09E21986618700F91137 /* BlocksKit+QuickLook.h */, - DBFB098C184DC7AF00F37EEE /* Core */, - DBFB09EC184DC7E400F37EEE /* DynamicDelegate */, - DBFB0A14184DC82000F37EEE /* MessageUI */, - 43CE09DE198660EE00F91137 /* QuickLook */, - DBFB0A1D184DC83200F37EEE /* UIKit */, - DBFB095A184DC41D00F37EEE /* Supporting Files */, + DB4CA48F1B3A6657004B70F8 /* UIActionSheet+BlocksKit.h */, + DB4CA4901B3A6657004B70F8 /* UIActionSheet+BlocksKit.m */, + DB4CA4911B3A6657004B70F8 /* UIAlertView+BlocksKit.h */, + DB4CA4921B3A6657004B70F8 /* UIAlertView+BlocksKit.m */, + DB4CA4931B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.h */, + DB4CA4941B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.m */, + DB4CA4951B3A6657004B70F8 /* UIControl+BlocksKit.h */, + DB4CA4961B3A6657004B70F8 /* UIControl+BlocksKit.m */, + DB4CA4971B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.h */, + DB4CA4981B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.m */, + DB4CA4991B3A6657004B70F8 /* UIImage+BlocksKit.h */, + DB4CA49A1B3A6657004B70F8 /* UIImage+BlocksKit.m */, + DB4CA49B1B3A6657004B70F8 /* UIImagePickerController+BlocksKit.h */, + DB4CA49C1B3A6657004B70F8 /* UIImagePickerController+BlocksKit.m */, + DB4CA49D1B3A6657004B70F8 /* UIPopoverController+BlocksKit.h */, + DB4CA49E1B3A6657004B70F8 /* UIPopoverController+BlocksKit.m */, + DB4CA49F1B3A6657004B70F8 /* UITextField+BlocksKit.h */, + DB4CA4A01B3A6657004B70F8 /* UITextField+BlocksKit.m */, + DB5C6C4E1C52009700778E5F /* UITextView+BlocksKit.h */, + DB5C6C4F1C52009700778E5F /* UITextView+BlocksKit.m */, + DB4CA4A11B3A6657004B70F8 /* UIView+BlocksKit.h */, + DB4CA4A21B3A6657004B70F8 /* UIView+BlocksKit.m */, + DB4CA4A31B3A6657004B70F8 /* UIWebView+BlocksKit.h */, + DB4CA4A41B3A6657004B70F8 /* UIWebView+BlocksKit.m */, ); - path = BlocksKit; + path = UIKit; sourceTree = ""; }; - DBFB08D5184DC29500F37EEE /* Tests */ = { + DB4CA53A1B3A67A3004B70F8 /* Core */ = { isa = PBXGroup; children = ( - DBE126DF184DE08A0023AFAD /* Core */, - DBE126DD184DE0780023AFAD /* DynamicDelegate */, - DBFB0B1B184DCD7300F37EEE /* UIKit */, - DBFB0B1C184DCD7900F37EEE /* MessageUI */, - DBFB0AB6184DCC9400F37EEE /* MacDemo */, - DBFB0925184DC2E000F37EEE /* Supporting Files */, + DB4CA53B1B3A67A3004B70F8 /* BKMacrosTest.m */, + DB4CA53C1B3A67A3004B70F8 /* NSArrayBlocksKitTest.m */, + DB4CA53D1B3A67A3004B70F8 /* NSDictionaryBlocksKitTest.m */, + DB4CA53E1B3A67A3004B70F8 /* NSIndexSetBlocksKitTest.m */, + DB4CA53F1B3A67A3004B70F8 /* NSInvocationBlocksKitTest.m */, + DB4CA5401B3A67A3004B70F8 /* NSMapTableBlocksKitTest.m */, + DB4CA5411B3A67A3004B70F8 /* NSMutableArrayBlocksKitTest.m */, + DB4CA5421B3A67A3004B70F8 /* NSMutableDictionaryBlocksKitTest.m */, + DB4CA5431B3A67A3004B70F8 /* NSMutableIndexSetBlocksKitTest.m */, + DB4CA5441B3A67A3004B70F8 /* NSMutableOrderedSetBlocksKitTest.m */, + DB4CA5451B3A67A3004B70F8 /* NSMutableSetBlocksKitTest.m */, + DB4CA5461B3A67A3004B70F8 /* NSObjectAssociatedObjectTest.m */, + DB4CA5471B3A67A3004B70F8 /* NSObjectBlockObservationTest.m */, + DB4CA5481B3A67A3004B70F8 /* NSObjectBlocksKitTest.m */, + DB4CA5491B3A67A3004B70F8 /* NSOrderedSetBlocksKitTest.m */, + DB4CA54A1B3A67A3004B70F8 /* NSSetBlocksKitTest.m */, + DB4CA54B1B3A67A3004B70F8 /* NSTimerBlocksKitTest.m */, ); - path = Tests; + path = Core; sourceTree = ""; }; - DBFB0925184DC2E000F37EEE /* Supporting Files */ = { + DB4CA54C1B3A67A3004B70F8 /* Dynamic Delegate */ = { isa = PBXGroup; children = ( - DB981A05185E96EA0047E817 /* iOS-Runner.m */, - DB981A03185E96A60047E817 /* Images.xcassets */, - DB981A00185E95C00047E817 /* BlocksKit-iOS-Tests-Runner-Info.plist */, - DBFB0926184DC2FB00F37EEE /* BlocksKit-iOS-Tests-Info.plist */, - DBFB0959184DC3EC00F37EEE /* BlocksKit-Mac-Tests-Info.plist */, - ); - name = "Supporting Files"; + DB4CA54D1B3A67A3004B70F8 /* A2BlockDelegateTests.m */, + DB4CA54E1B3A67A3004B70F8 /* A2BlockInvocationTests.m */, + DB4CA54F1B3A67A3004B70F8 /* A2DynamicDelegateTests.m */, + DB4CA5501B3A67A3004B70F8 /* A2DynamicTestClasses+A2BlockDelegate.h */, + DB4CA5511B3A67A3004B70F8 /* A2DynamicTestClasses+A2BlockDelegate.m */, + DB4CA5521B3A67A3004B70F8 /* A2DynamicTestClasses.h */, + DB4CA5531B3A67A3004B70F8 /* A2DynamicTestClasses.m */, + DB4CA5541B3A67A3004B70F8 /* NSCacheBlocksKitTest.m */, + DB4CA5551B3A67A3004B70F8 /* NSURLConnectionBlocksKitTest.m */, + ); + name = "Dynamic Delegate"; + path = DynamicDelegate; sourceTree = ""; }; - DBFB092F184DC36400F37EEE /* Other Frameworks */ = { + DB4CA5561B3A67A3004B70F8 /* MessageUI */ = { isa = PBXGroup; children = ( - DBFB0930184DC36400F37EEE /* Foundation.framework */, - DBFB0931184DC36400F37EEE /* CoreData.framework */, - DBFB0932184DC36400F37EEE /* AppKit.framework */, + DB4CA5571B3A67A3004B70F8 /* MFMailComposeViewControllerBlocksKitTest.m */, + DB4CA5581B3A67A3004B70F8 /* MFMessageComposeViewControllerBlocksKitTest.m */, ); - name = "Other Frameworks"; + path = MessageUI; sourceTree = ""; }; - DBFB095A184DC41D00F37EEE /* Supporting Files */ = { + DB4CA5591B3A67A3004B70F8 /* QuickLook */ = { isa = PBXGroup; children = ( - DBFB095B184DC42800F37EEE /* BlocksKit-Info.plist */, + DB4CA55A1B3A67A3004B70F8 /* QLPreviewControllerBlocksKitTest.m */, ); - name = "Supporting Files"; + path = QuickLook; sourceTree = ""; }; - DBFB095C184DC4FB00F37EEE /* Configurations */ = { + DB4CA55B1B3A67A3004B70F8 /* UIKit */ = { isa = PBXGroup; children = ( - DBFB0A42184DC84F00F37EEE /* MacBundledFramework.xcconfig */, - DBFB095D184DC4FB00F37EEE /* Versions.xcconfig */, + DB4CA55C1B3A67A3004B70F8 /* UIActionSheetBlocksKitTest.m */, + DB4CA55D1B3A67A3004B70F8 /* UIAlertViewBlocksKitTest.m */, + DB4CA55E1B3A67A3004B70F8 /* UIControlBlocksKitTest.m */, + DB4CA55F1B3A67A3004B70F8 /* UIImagePickerControllerBlocksKitTest.m */, + DB4CA5601B3A67A3004B70F8 /* UITextFieldBlocksKitTest.m */, + DB4CA5611B3A67A3004B70F8 /* UIWebViewBlocksKitTest.m */, ); - path = Configurations; + path = UIKit; sourceTree = ""; }; - DBFB098C184DC7AF00F37EEE /* Core */ = { + DB4CA5C51B3A67AF004B70F8 /* Supported Files */ = { isa = PBXGroup; children = ( - DBFB098D184DC7AF00F37EEE /* BKMacros.h */, - DBFB098E184DC7AF00F37EEE /* NSArray+BlocksKit.h */, - DBFB098F184DC7AF00F37EEE /* NSArray+BlocksKit.m */, - DBFB0990184DC7AF00F37EEE /* NSDictionary+BlocksKit.h */, - DBFB0991184DC7AF00F37EEE /* NSDictionary+BlocksKit.m */, - DBFB0992184DC7AF00F37EEE /* NSIndexSet+BlocksKit.h */, - DBFB0993184DC7AF00F37EEE /* NSIndexSet+BlocksKit.m */, - DBFB0994184DC7AF00F37EEE /* NSInvocation+BlocksKit.h */, - DBFB0995184DC7AF00F37EEE /* NSInvocation+BlocksKit.m */, - A3E3ED9919F797A3008E0ECB /* NSMapTable+BlocksKit.h */, - A3E3ED9A19F797A3008E0ECB /* NSMapTable+BlocksKit.m */, - DBFB0996184DC7AF00F37EEE /* NSMutableArray+BlocksKit.h */, - DBFB0997184DC7B000F37EEE /* NSMutableArray+BlocksKit.m */, - DBFB0998184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.h */, - DBFB0999184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.m */, - DBFB099A184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.h */, - DBFB099B184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.m */, - DBFB099C184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.h */, - DBFB099D184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.m */, - DBFB099E184DC7B000F37EEE /* NSMutableSet+BlocksKit.h */, - DBFB099F184DC7B000F37EEE /* NSMutableSet+BlocksKit.m */, - DBFB09A0184DC7B000F37EEE /* NSObject+BKAssociatedObjects.h */, - DBFB09A1184DC7B000F37EEE /* NSObject+BKAssociatedObjects.m */, - DBFB09A2184DC7B000F37EEE /* NSObject+BKBlockExecution.h */, - DBFB09A3184DC7B000F37EEE /* NSObject+BKBlockExecution.m */, - DBFB09A4184DC7B000F37EEE /* NSObject+BKBlockObservation.h */, - DBFB09A5184DC7B000F37EEE /* NSObject+BKBlockObservation.m */, - DBFB09A6184DC7B000F37EEE /* NSOrderedSet+BlocksKit.h */, - DBFB09A7184DC7B000F37EEE /* NSOrderedSet+BlocksKit.m */, - DBFB09A8184DC7B000F37EEE /* NSSet+BlocksKit.h */, - DBFB09A9184DC7B000F37EEE /* NSSet+BlocksKit.m */, - DBFB09AA184DC7B000F37EEE /* NSTimer+BlocksKit.h */, - DBFB09AB184DC7B000F37EEE /* NSTimer+BlocksKit.m */, + DB9B96291B3A52A700940D20 /* Info.plist */, ); - path = Core; + name = "Supported Files"; sourceTree = ""; }; - DBFB09EC184DC7E400F37EEE /* DynamicDelegate */ = { + DB4CA5C61B3A6810004B70F8 /* Mac Demo */ = { isa = PBXGroup; children = ( - DBFB09ED184DC7E400F37EEE /* A2BlockInvocation.h */, - DBFB09EE184DC7E400F37EEE /* A2BlockInvocation.m */, - DBFB09EF184DC7E400F37EEE /* A2DynamicDelegate.h */, - DBFB09F0184DC7E400F37EEE /* A2DynamicDelegate.m */, - DBFB09F7184DC7E400F37EEE /* NSObject+A2BlockDelegate.h */, - DBFB09F8184DC7E400F37EEE /* NSObject+A2BlockDelegate.m */, - DBFB09F9184DC7E400F37EEE /* NSObject+A2DynamicDelegate.h */, - DBFB09FA184DC7E400F37EEE /* NSObject+A2DynamicDelegate.m */, - DBFB09F2184DC7E400F37EEE /* Foundation */, + DB4CA5C91B3A6810004B70F8 /* BKApp.h */, + DB4CA5CA1B3A6810004B70F8 /* BKApp.m */, + DB4CA5C71B3A6810004B70F8 /* MainMenu.xib */, + DB4CA5CE1B3A6836004B70F8 /* Supporting Files */, ); - path = DynamicDelegate; + path = "Mac Demo"; sourceTree = ""; }; - DBFB09F2184DC7E400F37EEE /* Foundation */ = { + DB4CA5CE1B3A6836004B70F8 /* Supporting Files */ = { isa = PBXGroup; children = ( - DBFB09F3184DC7E400F37EEE /* NSCache+BlocksKit.h */, - DBFB09F4184DC7E400F37EEE /* NSCache+BlocksKit.m */, - DBFB09F5184DC7E400F37EEE /* NSURLConnection+BlocksKit.h */, - DBFB09F6184DC7E400F37EEE /* NSURLConnection+BlocksKit.m */, + DB4CA5CB1B3A6810004B70F8 /* Info.plist */, + DB4CA5CC1B3A6810004B70F8 /* main.m */, ); - path = Foundation; + name = "Supporting Files"; sourceTree = ""; }; - DBFB0A14184DC82000F37EEE /* MessageUI */ = { + DB9B960E1B3A52A700940D20 = { isa = PBXGroup; children = ( - DBFB0A15184DC82000F37EEE /* MFMailComposeViewController+BlocksKit.h */, - DBFB0A16184DC82000F37EEE /* MFMailComposeViewController+BlocksKit.m */, - DBFB0A17184DC82100F37EEE /* MFMessageComposeViewController+BlocksKit.h */, - DBFB0A18184DC82100F37EEE /* MFMessageComposeViewController+BlocksKit.m */, + DB9B961A1B3A52A700940D20 /* BlocksKit */, + DB9B96261B3A52A700940D20 /* Tests */, + DBBDD2281B3A5782008909B0 /* Configurations */, + DB9B96191B3A52A700940D20 /* Products */, ); - path = MessageUI; sourceTree = ""; }; - DBFB0A1D184DC83200F37EEE /* UIKit */ = { + DB9B96191B3A52A700940D20 /* Products */ = { isa = PBXGroup; children = ( - DBFB0A1E184DC83200F37EEE /* UIActionSheet+BlocksKit.h */, - DBFB0A1F184DC83200F37EEE /* UIActionSheet+BlocksKit.m */, - DBFB0A20184DC83200F37EEE /* UIAlertView+BlocksKit.h */, - DBFB0A21184DC83200F37EEE /* UIAlertView+BlocksKit.m */, - DBFB0A22184DC83200F37EEE /* UIBarButtonItem+BlocksKit.h */, - DBFB0A23184DC83200F37EEE /* UIBarButtonItem+BlocksKit.m */, - DBFB0A24184DC83200F37EEE /* UIControl+BlocksKit.h */, - DBFB0A25184DC83200F37EEE /* UIControl+BlocksKit.m */, - DBFB0A26184DC83200F37EEE /* UIGestureRecognizer+BlocksKit.h */, - DBFB0A27184DC83200F37EEE /* UIGestureRecognizer+BlocksKit.m */, - DBFB0A28184DC83200F37EEE /* UIPopoverController+BlocksKit.h */, - DBFB0A29184DC83200F37EEE /* UIPopoverController+BlocksKit.m */, - DBFB0A2A184DC83200F37EEE /* UITextField+BlocksKit.h */, - DBFB0A2B184DC83200F37EEE /* UITextField+BlocksKit.m */, - DBFB0A2C184DC83200F37EEE /* UIView+BlocksKit.h */, - DBFB0A2D184DC83200F37EEE /* UIView+BlocksKit.m */, - DBFB0A2E184DC83200F37EEE /* UIWebView+BlocksKit.h */, - DBFB0A2F184DC83200F37EEE /* UIWebView+BlocksKit.m */, - 2BB8A49A18BE7927006AF0F6 /* UIImagePickerController+BlocksKit.h */, - 2BB8A49B18BE7927006AF0F6 /* UIImagePickerController+BlocksKit.m */, + DB9B96181B3A52A700940D20 /* BlocksKit.framework */, + DB9B96221B3A52A700940D20 /* BlocksKitTests.xctest */, + DB9B96371B3A52E500940D20 /* BlocksKit.framework */, + DB9B96401B3A52E500940D20 /* BlocksKitTests.xctest */, + DB9B96521B3A531F00940D20 /* libMobileBlocksKitLegacy.a */, + DBBDD1E51B3A553E008909B0 /* BlocksKit Mac Demo.app */, ); - path = UIKit; + name = Products; sourceTree = ""; }; - DBFB0AB6184DCC9400F37EEE /* MacDemo */ = { + DB9B961A1B3A52A700940D20 /* BlocksKit */ = { isa = PBXGroup; children = ( - DBFB0AB7184DCC9400F37EEE /* MainMenu.xib */, - DBFB0AB9184DCC9400F37EEE /* BKApp.h */, - DBFB0ABA184DCC9400F37EEE /* BKApp.m */, - DBFB0ABB184DCC9400F37EEE /* BlocksKit-Mac-Demo-Info.plist */, - DBFB0ABC184DCC9400F37EEE /* main.m */, + DB9B961B1B3A52A700940D20 /* BlocksKit.h */, + DBA576A21B3A7B9700E41A6B /* BKDefines.h */, + DB4CA5091B3A6720004B70F8 /* BlocksKit+MessageUI.h */, + DB4CA50A1B3A6720004B70F8 /* BlocksKit+QuickLook.h */, + DB4CA50B1B3A6720004B70F8 /* BlocksKit+UIKit.h */, + DB4CA4041B3A662A004B70F8 /* Core */, + DB4CA4781B3A6656004B70F8 /* DynamicDelegate */, + DB4CA4861B3A6657004B70F8 /* MessageUI */, + DB4CA48B1B3A6657004B70F8 /* QuickLook */, + DB4CA48E1B3A6657004B70F8 /* UIKit */, + DB4CA4031B3A65FA004B70F8 /* Supporting Files */, ); - path = MacDemo; + path = BlocksKit; sourceTree = ""; }; - DBFB0B1B184DCD7300F37EEE /* UIKit */ = { + DB9B96261B3A52A700940D20 /* Tests */ = { isa = PBXGroup; children = ( - DBFB0AF5184DCD6200F37EEE /* UIActionSheetBlocksKitTest.m */, - DBFB0AF7184DCD6200F37EEE /* UIAlertViewBlocksKitTest.m */, - DBFB0AF9184DCD6200F37EEE /* UIControlBlocksKitTest.m */, - DBFB0AFB184DCD6200F37EEE /* UITextFieldBlocksKitTest.m */, - DBFB0AFD184DCD6200F37EEE /* UIWebViewBlocksKitTest.m */, - 2BB8A49418BE7740006AF0F6 /* UIImagePickerControllerBlocksKitTest.m */, - 43CE09E319866C2300F91137 /* QLPreviewControllerBlocksKitTest.m */, - ); - name = UIKit; + DB4CA53A1B3A67A3004B70F8 /* Core */, + DB4CA54C1B3A67A3004B70F8 /* Dynamic Delegate */, + DB4CA5C61B3A6810004B70F8 /* Mac Demo */, + DB4CA5561B3A67A3004B70F8 /* MessageUI */, + DB4CA5591B3A67A3004B70F8 /* QuickLook */, + DB4CA55B1B3A67A3004B70F8 /* UIKit */, + DB4CA5C51B3A67AF004B70F8 /* Supported Files */, + ); + path = Tests; sourceTree = ""; }; - DBFB0B1C184DCD7900F37EEE /* MessageUI */ = { + DBBDD2281B3A5782008909B0 /* Configurations */ = { isa = PBXGroup; children = ( - DBFB0ACF184DCD6200F37EEE /* MFMailComposeViewControllerBlocksKitTest.m */, - DBFB0AD1184DCD6200F37EEE /* MFMessageComposeViewControllerBlocksKitTest.m */, + DBBDD23E1B3A5782008909B0 /* Project-Debug.xcconfig */, + DBBDD23F1B3A5782008909B0 /* Project-Release.xcconfig */, + DBBDD2401B3A5782008909B0 /* Project-Common.xcconfig */, + DBBDD2411B3A5A2C008909B0 /* Project-Version.xcconfig */, + DB4CA3F91B3A624B004B70F8 /* Common-Framework.xcconfig */, + DB4CA3FA1B3A624B004B70F8 /* iOS-Base.xcconfig */, + DB4CA3FB1B3A624B004B70F8 /* iOS-Framework.xcconfig */, + DB4CA3FC1B3A624B004B70F8 /* iOS-StaticLibrary.xcconfig */, + DB4CA4021B3A6450004B70F8 /* iOS-Test.xcconfig */, + DB4CA3FE1B3A624B004B70F8 /* Mac-Application.xcconfig */, + DB4CA3FF1B3A624B004B70F8 /* Mac-Base.xcconfig */, + DB4CA4001B3A624B004B70F8 /* Mac-Framework.xcconfig */, + DB4CA4011B3A624B004B70F8 /* Mac-Test.xcconfig */, ); - name = MessageUI; + path = Configurations; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - DBFB0929184DC36400F37EEE /* Headers */ = { + DB9B96151B3A52A700940D20 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + DB4CA44C1B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.h in Headers */, + DB4CA4CE1B3A6657004B70F8 /* QLPreviewController+BlocksKit.h in Headers */, + DB4CA4561B3A662A004B70F8 /* NSMutableSet+BlocksKit.h in Headers */, + DB4CA4271B3A662A004B70F8 /* BKMacros.h in Headers */, + DB4CA4511B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.h in Headers */, + DB4CA4AB1B3A6657004B70F8 /* A2DynamicDelegate.h in Headers */, + DB4CA4381B3A662A004B70F8 /* NSInvocation+BlocksKit.h in Headers */, + DB4CA4F11B3A6657004B70F8 /* UIImagePickerController+BlocksKit.h in Headers */, + DB4CA46A1B3A662A004B70F8 /* NSOrderedSet+BlocksKit.h in Headers */, + DB4CA46F1B3A662A004B70F8 /* NSSet+BlocksKit.h in Headers */, + DB4CA4BF1B3A6657004B70F8 /* NSObject+A2DynamicDelegate.h in Headers */, + DB4CA4C91B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.h in Headers */, + DB4CA4E71B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.h in Headers */, + DB4CA45B1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.h in Headers */, + DB4CA50D1B3A6720004B70F8 /* BlocksKit+MessageUI.h in Headers */, + DB5C6C501C52009700778E5F /* UITextView+BlocksKit.h in Headers */, + DB4CA4D81B3A6657004B70F8 /* UIAlertView+BlocksKit.h in Headers */, + DB4CA4471B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.h in Headers */, + DB4CA4421B3A662A004B70F8 /* NSMutableArray+BlocksKit.h in Headers */, + DB4CA4DD1B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.h in Headers */, + DB4CA50F1B3A6720004B70F8 /* BlocksKit+QuickLook.h in Headers */, + DB4CA4FB1B3A6657004B70F8 /* UITextField+BlocksKit.h in Headers */, + DB4CA4331B3A662A004B70F8 /* NSIndexSet+BlocksKit.h in Headers */, + DBA576A41B3A7B9700E41A6B /* BKDefines.h in Headers */, + DB4CA4B01B3A6657004B70F8 /* NSCache+BlocksKit.h in Headers */, + DB4CA4741B3A662A004B70F8 /* NSTimer+BlocksKit.h in Headers */, + DB4CA4EC1B3A6657004B70F8 /* UIImage+BlocksKit.h in Headers */, + DB4CA4B51B3A6657004B70F8 /* NSURLConnection+BlocksKit.h in Headers */, + DB4CA4A61B3A6657004B70F8 /* A2BlockInvocation.h in Headers */, + DB4CA5001B3A6657004B70F8 /* UIView+BlocksKit.h in Headers */, + DB4CA4D31B3A6657004B70F8 /* UIActionSheet+BlocksKit.h in Headers */, + DB5C6C491C52005900778E5F /* NSNumber+BlocksKit.h in Headers */, + DB4CA4651B3A662A004B70F8 /* NSObject+BKBlockObservation.h in Headers */, + DB4CA4C41B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.h in Headers */, + DB4CA43D1B3A662A004B70F8 /* NSMapTable+BlocksKit.h in Headers */, + DB4CA4291B3A662A004B70F8 /* NSArray+BlocksKit.h in Headers */, + DB4CA5051B3A6657004B70F8 /* UIWebView+BlocksKit.h in Headers */, + DB4CA4E21B3A6657004B70F8 /* UIControl+BlocksKit.h in Headers */, + DB4CA5111B3A6720004B70F8 /* BlocksKit+UIKit.h in Headers */, + DB4CA4BA1B3A6657004B70F8 /* NSObject+A2BlockDelegate.h in Headers */, + DB4CA42E1B3A662A004B70F8 /* NSDictionary+BlocksKit.h in Headers */, + DB9B961C1B3A52A700940D20 /* BlocksKit.h in Headers */, + DB4CA4601B3A662A004B70F8 /* NSObject+BKBlockExecution.h in Headers */, + DB4CA4F61B3A6657004B70F8 /* UIPopoverController+BlocksKit.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB9B96341B3A52E500940D20 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - DBFB09CE184DC7B000F37EEE /* NSObject+BKBlockObservation.h in Headers */, - DBFB09B9184DC7B000F37EEE /* NSMutableArray+BlocksKit.h in Headers */, - DBFB09B6184DC7B000F37EEE /* NSInvocation+BlocksKit.h in Headers */, - DBFB09D7184DC7B000F37EEE /* NSTimer+BlocksKit.h in Headers */, - DBFB09C8184DC7B000F37EEE /* NSObject+BKAssociatedObjects.h in Headers */, - DBFB09AD184DC7B000F37EEE /* NSArray+BlocksKit.h in Headers */, - DBFB09D4184DC7B000F37EEE /* NSSet+BlocksKit.h in Headers */, - DBFB09C2184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.h in Headers */, - DBFB09CB184DC7B000F37EEE /* NSObject+BKBlockExecution.h in Headers */, - DBFB09B3184DC7B000F37EEE /* NSIndexSet+BlocksKit.h in Headers */, - DBFB09B0184DC7B000F37EEE /* NSDictionary+BlocksKit.h in Headers */, - DBFB09D1184DC7B000F37EEE /* NSOrderedSet+BlocksKit.h in Headers */, - DBFB0A05184DC7E400F37EEE /* NSURLConnection+BlocksKit.h in Headers */, - DBFB0A02184DC7E400F37EEE /* NSCache+BlocksKit.h in Headers */, - DBFB0A0B184DC7E400F37EEE /* NSObject+A2DynamicDelegate.h in Headers */, - DBFB09FE184DC7E400F37EEE /* A2DynamicDelegate.h in Headers */, - DBFB09FB184DC7E400F37EEE /* A2BlockInvocation.h in Headers */, - DBFB0A08184DC7E400F37EEE /* NSObject+A2BlockDelegate.h in Headers */, - DBFB09C5184DC7B000F37EEE /* NSMutableSet+BlocksKit.h in Headers */, - DBFB09BF184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.h in Headers */, - A3E3ED9B19F797A3008E0ECB /* NSMapTable+BlocksKit.h in Headers */, - DBFB09BC184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.h in Headers */, - DBFB09AC184DC7B000F37EEE /* BKMacros.h in Headers */, - DBFB0955184DC3AB00F37EEE /* BlocksKit.h in Headers */, + DB4CA4B41B3A6657004B70F8 /* NSURLConnection+BlocksKit.h in Headers */, + DB4CA4641B3A662A004B70F8 /* NSObject+BKBlockObservation.h in Headers */, + DB4CA4691B3A662A004B70F8 /* NSOrderedSet+BlocksKit.h in Headers */, + DB4CA4371B3A662A004B70F8 /* NSInvocation+BlocksKit.h in Headers */, + DB4CA4281B3A662A004B70F8 /* NSArray+BlocksKit.h in Headers */, + DB4CA4731B3A662A004B70F8 /* NSTimer+BlocksKit.h in Headers */, + DB4CA4AF1B3A6657004B70F8 /* NSCache+BlocksKit.h in Headers */, + DB5C6C481C52005900778E5F /* NSNumber+BlocksKit.h in Headers */, + DB4CA4BE1B3A6657004B70F8 /* NSObject+A2DynamicDelegate.h in Headers */, + DB4CA4501B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.h in Headers */, + DB4CA4261B3A662A004B70F8 /* BKMacros.h in Headers */, + DB4CA45A1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.h in Headers */, + DB4CA4411B3A662A004B70F8 /* NSMutableArray+BlocksKit.h in Headers */, + DB4CA4461B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.h in Headers */, + DB4CA4551B3A662A004B70F8 /* NSMutableSet+BlocksKit.h in Headers */, + DB4CA4AA1B3A6657004B70F8 /* A2DynamicDelegate.h in Headers */, + DB4CA46E1B3A662A004B70F8 /* NSSet+BlocksKit.h in Headers */, + DB4CA4B91B3A6657004B70F8 /* NSObject+A2BlockDelegate.h in Headers */, + DB4CA45F1B3A662A004B70F8 /* NSObject+BKBlockExecution.h in Headers */, + DB4CA4321B3A662A004B70F8 /* NSIndexSet+BlocksKit.h in Headers */, + DB4CA43C1B3A662A004B70F8 /* NSMapTable+BlocksKit.h in Headers */, + DBA576A31B3A7B9700E41A6B /* BKDefines.h in Headers */, + DB4CA44B1B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.h in Headers */, + DB4CA42D1B3A662A004B70F8 /* NSDictionary+BlocksKit.h in Headers */, + DB9B96681B3A533900940D20 /* BlocksKit.h in Headers */, + DB4CA4A51B3A6657004B70F8 /* A2BlockInvocation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - DB5BF87E185E909300FF2A0B /* BlocksKit iOS Tests Runner */ = { + DB9B96171B3A52A700940D20 /* MobileBlocksKit */ = { isa = PBXNativeTarget; - buildConfigurationList = DB5BF8A3185E909400FF2A0B /* Build configuration list for PBXNativeTarget "BlocksKit iOS Tests Runner" */; + buildConfigurationList = DB9B962C1B3A52A700940D20 /* Build configuration list for PBXNativeTarget "MobileBlocksKit" */; buildPhases = ( - DB5BF87B185E909300FF2A0B /* Sources */, - DB5BF87C185E909300FF2A0B /* Frameworks */, - DB5BF87D185E909300FF2A0B /* Resources */, + DB9B96131B3A52A700940D20 /* Sources */, + DB9B96141B3A52A700940D20 /* Frameworks */, + DB9B96151B3A52A700940D20 /* Headers */, + DB9B96161B3A52A700940D20 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = "BlocksKit iOS Tests Runner"; - productName = "BlocksKit Test"; - productReference = DB5BF87F185E909300FF2A0B /* BK Tests.app */; - productType = "com.apple.product-type.application"; + name = MobileBlocksKit; + productName = BlocksKit; + productReference = DB9B96181B3A52A700940D20 /* BlocksKit.framework */; + productType = "com.apple.product-type.framework"; }; - DBFB08AD184DC23000F37EEE /* BlocksKit iOS */ = { + DB9B96211B3A52A700940D20 /* MobileBlocksKitTests */ = { isa = PBXNativeTarget; - buildConfigurationList = DBFB08D3184DC23000F37EEE /* Build configuration list for PBXNativeTarget "BlocksKit iOS" */; + buildConfigurationList = DB9B962F1B3A52A700940D20 /* Build configuration list for PBXNativeTarget "MobileBlocksKitTests" */; buildPhases = ( - DBFB08AA184DC23000F37EEE /* Sources */, - DBFB08AB184DC23000F37EEE /* Frameworks */, - DBFB08AC184DC23000F37EEE /* CopyFiles */, + DB9B961E1B3A52A700940D20 /* Sources */, + DB9B961F1B3A52A700940D20 /* Frameworks */, + DB9B96201B3A52A700940D20 /* Resources */, ); buildRules = ( ); dependencies = ( + DB9B96251B3A52A700940D20 /* PBXTargetDependency */, ); - name = "BlocksKit iOS"; - productName = BlocksKit; - productReference = DBFB08AE184DC23000F37EEE /* libBlocksKit.a */; - productType = "com.apple.product-type.library.static"; + name = MobileBlocksKitTests; + productName = BlocksKitTests; + productReference = DB9B96221B3A52A700940D20 /* BlocksKitTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; - DBFB08BD184DC23000F37EEE /* BlocksKit iOS Tests */ = { + DB9B96361B3A52E500940D20 /* BlocksKit */ = { isa = PBXNativeTarget; - buildConfigurationList = DBFB08D4184DC23000F37EEE /* Build configuration list for PBXNativeTarget "BlocksKit iOS Tests" */; + buildConfigurationList = DB9B96481B3A52E500940D20 /* Build configuration list for PBXNativeTarget "BlocksKit" */; buildPhases = ( - DBFB08BA184DC23000F37EEE /* Sources */, - DBFB08BB184DC23000F37EEE /* Frameworks */, - DBFB08BC184DC23000F37EEE /* Resources */, + DB9B96321B3A52E500940D20 /* Sources */, + DB9B96331B3A52E500940D20 /* Frameworks */, + DB9B96341B3A52E500940D20 /* Headers */, + DB9B96351B3A52E500940D20 /* Resources */, ); buildRules = ( ); dependencies = ( - DB981A02185E96240047E817 /* PBXTargetDependency */, ); - name = "BlocksKit iOS Tests"; - productName = BlocksKitTests; - productReference = DBFB08BE184DC23000F37EEE /* BlocksKit-iOS-Tests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; + name = BlocksKit; + productName = BlocksKitMac; + productReference = DB9B96371B3A52E500940D20 /* BlocksKit.framework */; + productType = "com.apple.product-type.framework"; }; - DBFB092B184DC36400F37EEE /* BlocksKit Mac */ = { + DB9B963F1B3A52E500940D20 /* BlocksKitTests */ = { isa = PBXNativeTarget; - buildConfigurationList = DBFB094F184DC36500F37EEE /* Build configuration list for PBXNativeTarget "BlocksKit Mac" */; + buildConfigurationList = DB9B964B1B3A52E500940D20 /* Build configuration list for PBXNativeTarget "BlocksKitTests" */; buildPhases = ( - DBFB0927184DC36400F37EEE /* Sources */, - DBFB0928184DC36400F37EEE /* Frameworks */, - DBFB0929184DC36400F37EEE /* Headers */, - DBFB092A184DC36400F37EEE /* Resources */, + DB9B963C1B3A52E500940D20 /* Sources */, + DB9B963D1B3A52E500940D20 /* Frameworks */, + DB9B963E1B3A52E500940D20 /* Resources */, ); buildRules = ( ); dependencies = ( + DB9B96431B3A52E500940D20 /* PBXTargetDependency */, ); - name = "BlocksKit Mac"; - productName = BlocksKit; - productReference = DBFB092C184DC36400F37EEE /* BlocksKit.framework */; - productType = "com.apple.product-type.framework"; + name = BlocksKitTests; + productName = BlocksKitMacTests; + productReference = DB9B96401B3A52E500940D20 /* BlocksKitTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; - DBFB0940184DC36400F37EEE /* BlocksKit Mac Tests */ = { + DB9B96511B3A531F00940D20 /* MobileBlocksKitLegacy */ = { isa = PBXNativeTarget; - buildConfigurationList = DBFB0952184DC36500F37EEE /* Build configuration list for PBXNativeTarget "BlocksKit Mac Tests" */; + buildConfigurationList = DB9B96621B3A531F00940D20 /* Build configuration list for PBXNativeTarget "MobileBlocksKitLegacy" */; buildPhases = ( - DBFB093D184DC36400F37EEE /* Sources */, - DBFB093E184DC36400F37EEE /* Frameworks */, - DBFB093F184DC36400F37EEE /* Resources */, + DB9B964E1B3A531F00940D20 /* Sources */, + DB9B964F1B3A531F00940D20 /* Frameworks */, + DB9B96501B3A531F00940D20 /* CopyFiles */, ); buildRules = ( ); dependencies = ( - DBFB0945184DC36400F37EEE /* PBXTargetDependency */, ); - name = "BlocksKit Mac Tests"; - productName = BlocksKitTests; - productReference = DBFB0941184DC36400F37EEE /* BlocksKit-Mac-Tests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; + name = MobileBlocksKitLegacy; + productName = MobileBlocksKitLegacy; + productReference = DB9B96521B3A531F00940D20 /* libMobileBlocksKitLegacy.a */; + productType = "com.apple.product-type.library.static"; }; - DBFB0A86184DCBCC00F37EEE /* Mac Demo */ = { + DBBDD1E41B3A553E008909B0 /* BlocksKit Mac Demo */ = { isa = PBXNativeTarget; - buildConfigurationList = DBFB0AAE184DCBCD00F37EEE /* Build configuration list for PBXNativeTarget "Mac Demo" */; + buildConfigurationList = DBBDD1F51B3A553E008909B0 /* Build configuration list for PBXNativeTarget "BlocksKit Mac Demo" */; buildPhases = ( - DBFB0A83184DCBCC00F37EEE /* Sources */, - DBFB0A84184DCBCC00F37EEE /* Frameworks */, - DBFB0A85184DCBCC00F37EEE /* Resources */, - DBFB0AC2184DCCB500F37EEE /* CopyFiles */, + DBBDD1E11B3A553E008909B0 /* Sources */, + DBBDD1E21B3A553E008909B0 /* Frameworks */, + DBBDD1E31B3A553E008909B0 /* Resources */, + DB4CA5D41B3A7A08004B70F8 /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( - DBFB0AB5184DCC0000F37EEE /* PBXTargetDependency */, + DB4CA5D31B3A7A08004B70F8 /* PBXTargetDependency */, ); - name = "Mac Demo"; - productName = "Mac Demo"; - productReference = DBFB0A87184DCBCC00F37EEE /* BlocksKit Mac Demo.app */; + name = "BlocksKit Mac Demo"; + productName = "BlocksKit Mac Demo"; + productReference = DBBDD1E51B3A553E008909B0 /* BlocksKit Mac Demo.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - DBFB08A4184DC21500F37EEE /* Project object */ = { + DB9B960F1B3A52A700940D20 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0600; + CLASSPREFIX = BK; + LastUpgradeCheck = 0720; + ORGANIZATIONNAME = "Zachary Waldowski and Pandamonia LLC"; TargetAttributes = { - DBFB08BD184DC23000F37EEE = { - TestTargetID = DBFB092B184DC36400F37EEE; + DB9B96171B3A52A700940D20 = { + CreatedOnToolsVersion = 7.0; }; - DBFB0940184DC36400F37EEE = { - TestTargetID = DBFB092B184DC36400F37EEE; + DB9B96211B3A52A700940D20 = { + CreatedOnToolsVersion = 7.0; + }; + DB9B96361B3A52E500940D20 = { + CreatedOnToolsVersion = 7.0; + }; + DB9B963F1B3A52E500940D20 = { + CreatedOnToolsVersion = 7.0; + }; + DB9B96511B3A531F00940D20 = { + CreatedOnToolsVersion = 7.0; + }; + DBBDD1E41B3A553E008909B0 = { + CreatedOnToolsVersion = 7.0; }; }; }; - buildConfigurationList = DBFB08A7184DC21500F37EEE /* Build configuration list for PBXProject "BlocksKit" */; + buildConfigurationList = DB9B96121B3A52A700940D20 /* Build configuration list for PBXProject "BlocksKit" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -981,248 +1110,286 @@ en, Base, ); - mainGroup = DBFB08A3184DC21500F37EEE; - productRefGroup = DBFB08AF184DC23000F37EEE /* Products */; + mainGroup = DB9B960E1B3A52A700940D20; + productRefGroup = DB9B96191B3A52A700940D20 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - DBFB08AD184DC23000F37EEE /* BlocksKit iOS */, - DBFB08BD184DC23000F37EEE /* BlocksKit iOS Tests */, - DBFB092B184DC36400F37EEE /* BlocksKit Mac */, - DBFB0940184DC36400F37EEE /* BlocksKit Mac Tests */, - DBFB0A86184DCBCC00F37EEE /* Mac Demo */, - DB5BF87E185E909300FF2A0B /* BlocksKit iOS Tests Runner */, + DB9B96361B3A52E500940D20 /* BlocksKit */, + DB9B963F1B3A52E500940D20 /* BlocksKitTests */, + DB9B96171B3A52A700940D20 /* MobileBlocksKit */, + DB9B96211B3A52A700940D20 /* MobileBlocksKitTests */, + DB9B96511B3A531F00940D20 /* MobileBlocksKitLegacy */, + DBBDD1E41B3A553E008909B0 /* BlocksKit Mac Demo */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - DB5BF87D185E909300FF2A0B /* Resources */ = { + DB9B96161B3A52A700940D20 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - DB981A04185E96A60047E817 /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB08BC184DC23000F37EEE /* Resources */ = { + DB9B96201B3A52A700940D20 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB092A184DC36400F37EEE /* Resources */ = { + DB9B96351B3A52E500940D20 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB093F184DC36400F37EEE /* Resources */ = { + DB9B963E1B3A52E500940D20 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB0A85184DCBCC00F37EEE /* Resources */ = { + DBBDD1E31B3A553E008909B0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - DBFB0ABD184DCC9400F37EEE /* MainMenu.xib in Resources */, + DB4CA5D61B3A7A22004B70F8 /* MainMenu.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - DB5BF87B185E909300FF2A0B /* Sources */ = { + DB9B96131B3A52A700940D20 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DB981A06185E96EA0047E817 /* iOS-Runner.m in Sources */, + DB4CA4E91B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.m in Sources */, + DB4CA44E1B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.m in Sources */, + DB4CA4F31B3A6657004B70F8 /* UIImagePickerController+BlocksKit.m in Sources */, + DB4CA5021B3A6657004B70F8 /* UIView+BlocksKit.m in Sources */, + DB4CA4DA1B3A6657004B70F8 /* UIAlertView+BlocksKit.m in Sources */, + DB4CA4761B3A662A004B70F8 /* NSTimer+BlocksKit.m in Sources */, + DB4CA4A81B3A6657004B70F8 /* A2BlockInvocation.m in Sources */, + DB4CA4351B3A662A004B70F8 /* NSIndexSet+BlocksKit.m in Sources */, + DB4CA4D01B3A6657004B70F8 /* QLPreviewController+BlocksKit.m in Sources */, + DB4CA4F81B3A6657004B70F8 /* UIPopoverController+BlocksKit.m in Sources */, + DB4CA42B1B3A662A004B70F8 /* NSArray+BlocksKit.m in Sources */, + DB4CA4C61B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.m in Sources */, + DB4CA4491B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.m in Sources */, + DB4CA4301B3A662A004B70F8 /* NSDictionary+BlocksKit.m in Sources */, + DB4CA4B71B3A6657004B70F8 /* NSURLConnection+BlocksKit.m in Sources */, + DB4CA4AD1B3A6657004B70F8 /* A2DynamicDelegate.m in Sources */, + DB4CA4BC1B3A6657004B70F8 /* NSObject+A2BlockDelegate.m in Sources */, + DB4CA4D51B3A6657004B70F8 /* UIActionSheet+BlocksKit.m in Sources */, + DB4CA4CB1B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.m in Sources */, + DB4CA4EE1B3A6657004B70F8 /* UIImage+BlocksKit.m in Sources */, + DB4CA5071B3A6657004B70F8 /* UIWebView+BlocksKit.m in Sources */, + DB4CA4621B3A662A004B70F8 /* NSObject+BKBlockExecution.m in Sources */, + DB4CA4FD1B3A6657004B70F8 /* UITextField+BlocksKit.m in Sources */, + DB4CA43A1B3A662A004B70F8 /* NSInvocation+BlocksKit.m in Sources */, + DB4CA4DF1B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.m in Sources */, + DB4CA4711B3A662A004B70F8 /* NSSet+BlocksKit.m in Sources */, + DB4CA4B21B3A6657004B70F8 /* NSCache+BlocksKit.m in Sources */, + DB4CA4441B3A662A004B70F8 /* NSMutableArray+BlocksKit.m in Sources */, + DB5C6C4B1C52005900778E5F /* NSNumber+BlocksKit.m in Sources */, + DB4CA4E41B3A6657004B70F8 /* UIControl+BlocksKit.m in Sources */, + DB4CA4C11B3A6657004B70F8 /* NSObject+A2DynamicDelegate.m in Sources */, + DB4CA45D1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.m in Sources */, + DB4CA43F1B3A662A004B70F8 /* NSMapTable+BlocksKit.m in Sources */, + DB4CA4671B3A662A004B70F8 /* NSObject+BKBlockObservation.m in Sources */, + DB5C6C511C52009700778E5F /* UITextView+BlocksKit.m in Sources */, + DB4CA4531B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.m in Sources */, + DB4CA46C1B3A662A004B70F8 /* NSOrderedSet+BlocksKit.m in Sources */, + DB4CA4581B3A662A004B70F8 /* NSMutableSet+BlocksKit.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB08AA184DC23000F37EEE /* Sources */ = { + DB9B961E1B3A52A700940D20 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DBFB0A06184DC7E400F37EEE /* NSURLConnection+BlocksKit.m in Sources */, - DBFB0A03184DC7E400F37EEE /* NSCache+BlocksKit.m in Sources */, - DBFB0A31184DC83200F37EEE /* UIAlertView+BlocksKit.m in Sources */, - DBFB0A34184DC83200F37EEE /* UIGestureRecognizer+BlocksKit.m in Sources */, - DBFB09B1184DC7B000F37EEE /* NSDictionary+BlocksKit.m in Sources */, - DBFB09BA184DC7B000F37EEE /* NSMutableArray+BlocksKit.m in Sources */, - DBFB09AE184DC7B000F37EEE /* NSArray+BlocksKit.m in Sources */, - DBFB0A36184DC83200F37EEE /* UITextField+BlocksKit.m in Sources */, - DBFB09B4184DC7B000F37EEE /* NSIndexSet+BlocksKit.m in Sources */, - DBFB09D5184DC7B000F37EEE /* NSSet+BlocksKit.m in Sources */, - DBFB0A0C184DC7E400F37EEE /* NSObject+A2DynamicDelegate.m in Sources */, - DBFB09CF184DC7B000F37EEE /* NSObject+BKBlockObservation.m in Sources */, - DBFB0A09184DC7E400F37EEE /* NSObject+A2BlockDelegate.m in Sources */, - DBFB09D8184DC7B000F37EEE /* NSTimer+BlocksKit.m in Sources */, - DBFB09CC184DC7B000F37EEE /* NSObject+BKBlockExecution.m in Sources */, - DBFB0A1A184DC82100F37EEE /* MFMessageComposeViewController+BlocksKit.m in Sources */, - DBFB0A35184DC83200F37EEE /* UIPopoverController+BlocksKit.m in Sources */, - 43CE09E1198660EE00F91137 /* QLPreviewController+BlocksKit.m in Sources */, - DBFB0A37184DC83200F37EEE /* UIView+BlocksKit.m in Sources */, - A3E3ED9C19F797A3008E0ECB /* NSMapTable+BlocksKit.m in Sources */, - DBFB09FF184DC7E400F37EEE /* A2DynamicDelegate.m in Sources */, - DBFB09C6184DC7B000F37EEE /* NSMutableSet+BlocksKit.m in Sources */, - DBFB09BD184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.m in Sources */, - DBFB0A30184DC83200F37EEE /* UIActionSheet+BlocksKit.m in Sources */, - DBFB09C0184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.m in Sources */, - DBFB09C9184DC7B000F37EEE /* NSObject+BKAssociatedObjects.m in Sources */, - DBFB0A38184DC83200F37EEE /* UIWebView+BlocksKit.m in Sources */, - DBFB0A33184DC83200F37EEE /* UIControl+BlocksKit.m in Sources */, - DBFB09B7184DC7B000F37EEE /* NSInvocation+BlocksKit.m in Sources */, - DBFB0A32184DC83200F37EEE /* UIBarButtonItem+BlocksKit.m in Sources */, - 2BB8A49C18BE7927006AF0F6 /* UIImagePickerController+BlocksKit.m in Sources */, - DBFB09FC184DC7E400F37EEE /* A2BlockInvocation.m in Sources */, - DBFB09D2184DC7B000F37EEE /* NSOrderedSet+BlocksKit.m in Sources */, - DBFB0A19184DC82100F37EEE /* MFMailComposeViewController+BlocksKit.m in Sources */, - DBFB09C3184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.m in Sources */, + DB4CA5961B3A67A3004B70F8 /* A2BlockDelegateTests.m in Sources */, + DB4CA5751B3A67A3004B70F8 /* NSMutableArrayBlocksKitTest.m in Sources */, + DB4CA5991B3A67A3004B70F8 /* A2BlockInvocationTests.m in Sources */, + DB4CA58A1B3A67A3004B70F8 /* NSObjectBlocksKitTest.m in Sources */, + DB4CA5661B3A67A3004B70F8 /* NSArrayBlocksKitTest.m in Sources */, + DB4CA5B71B3A67A3004B70F8 /* UIAlertViewBlocksKitTest.m in Sources */, + DB4CA5631B3A67A3004B70F8 /* BKMacrosTest.m in Sources */, + DB4CA5B41B3A67A3004B70F8 /* UIActionSheetBlocksKitTest.m in Sources */, + DB4CA5A81B3A67A3004B70F8 /* NSURLConnectionBlocksKitTest.m in Sources */, + DB4CA5BD1B3A67A3004B70F8 /* UIImagePickerControllerBlocksKitTest.m in Sources */, + DB4CA5871B3A67A3004B70F8 /* NSObjectBlockObservationTest.m in Sources */, + DB4CA5901B3A67A3004B70F8 /* NSSetBlocksKitTest.m in Sources */, + DB4CA5AB1B3A67A3004B70F8 /* MFMailComposeViewControllerBlocksKitTest.m in Sources */, + DB4CA5841B3A67A3004B70F8 /* NSObjectAssociatedObjectTest.m in Sources */, + DB4CA57B1B3A67A3004B70F8 /* NSMutableIndexSetBlocksKitTest.m in Sources */, + DB4CA56C1B3A67A3004B70F8 /* NSIndexSetBlocksKitTest.m in Sources */, + DB4CA5721B3A67A3004B70F8 /* NSMapTableBlocksKitTest.m in Sources */, + DB4CA5931B3A67A3004B70F8 /* NSTimerBlocksKitTest.m in Sources */, + DB4CA59C1B3A67A3004B70F8 /* A2DynamicDelegateTests.m in Sources */, + DB4CA5781B3A67A3004B70F8 /* NSMutableDictionaryBlocksKitTest.m in Sources */, + DB4CA5B11B3A67A3004B70F8 /* QLPreviewControllerBlocksKitTest.m in Sources */, + DB4CA5691B3A67A3004B70F8 /* NSDictionaryBlocksKitTest.m in Sources */, + DB4CA56F1B3A67A3004B70F8 /* NSInvocationBlocksKitTest.m in Sources */, + DB4CA5C31B3A67A3004B70F8 /* UIWebViewBlocksKitTest.m in Sources */, + DB4CA57E1B3A67A3004B70F8 /* NSMutableOrderedSetBlocksKitTest.m in Sources */, + DB4CA5A21B3A67A3004B70F8 /* A2DynamicTestClasses.m in Sources */, + DB4CA5BA1B3A67A3004B70F8 /* UIControlBlocksKitTest.m in Sources */, + DB4CA5A51B3A67A3004B70F8 /* NSCacheBlocksKitTest.m in Sources */, + DB4CA5AE1B3A67A3004B70F8 /* MFMessageComposeViewControllerBlocksKitTest.m in Sources */, + DB4CA59F1B3A67A3004B70F8 /* A2DynamicTestClasses+A2BlockDelegate.m in Sources */, + DB4CA5C01B3A67A3004B70F8 /* UITextFieldBlocksKitTest.m in Sources */, + DB4CA58D1B3A67A3004B70F8 /* NSOrderedSetBlocksKitTest.m in Sources */, + DB4CA5811B3A67A3004B70F8 /* NSMutableSetBlocksKitTest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB08BA184DC23000F37EEE /* Sources */ = { + DB9B96321B3A52E500940D20 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DBFB0B04184DCD6200F37EEE /* MFMessageComposeViewControllerBlocksKitTest.m in Sources */, - DBE126D8184DDD8B0023AFAD /* A2DynamicTestClasses+A2BlockDelegate.m in Sources */, - DBFB0B03184DCD6200F37EEE /* MFMailComposeViewControllerBlocksKitTest.m in Sources */, - DBFB0B0B184DCD6200F37EEE /* NSMutableDictionaryBlocksKitTest.m in Sources */, - DBFB0B12184DCD6200F37EEE /* NSOrderedSetBlocksKitTest.m in Sources */, - DBFB0B17184DCD6200F37EEE /* UIAlertViewBlocksKitTest.m in Sources */, - DBFB0B06184DCD6200F37EEE /* NSCacheBlocksKitTest.m in Sources */, - DBFB0B0C184DCD6200F37EEE /* NSMutableIndexSetBlocksKitTest.m in Sources */, - DBFB0B10184DCD6200F37EEE /* NSObjectBlockObservationTest.m in Sources */, - DBFB0B02184DCD6200F37EEE /* BKMacrosTest.m in Sources */, - 2BB8A49518BE7740006AF0F6 /* UIImagePickerControllerBlocksKitTest.m in Sources */, - DBFB0AFF184DCD6200F37EEE /* A2BlockInvocationTests.m in Sources */, - DBFB0B19184DCD6200F37EEE /* UITextFieldBlocksKitTest.m in Sources */, - DBFB0B0A184DCD6200F37EEE /* NSMutableArrayBlocksKitTest.m in Sources */, - DBFB0B07184DCD6200F37EEE /* NSDictionaryBlocksKitTest.m in Sources */, - DBFB0B15184DCD6200F37EEE /* NSURLConnectionBlocksKitTest.m in Sources */, - DBFB0AFE184DCD6200F37EEE /* A2BlockDelegateTests.m in Sources */, - DBFB0B00184DCD6200F37EEE /* A2DynamicDelegateTests.m in Sources */, - DBD7875418E0CE3A008DC59D /* XCTestCase+BKAsyncTestCase.m in Sources */, - DBFB0B0D184DCD6200F37EEE /* NSMutableOrderedSetBlocksKitTest.m in Sources */, - DBFB0B13184DCD6200F37EEE /* NSSetBlocksKitTest.m in Sources */, - 43CE09E419866C2300F91137 /* QLPreviewControllerBlocksKitTest.m in Sources */, - DBFB0B08184DCD6200F37EEE /* NSIndexSetBlocksKitTest.m in Sources */, - DBFB0B14184DCD6200F37EEE /* NSTimerBlocksKitTest.m in Sources */, - DBFB0B1A184DCD6200F37EEE /* UIWebViewBlocksKitTest.m in Sources */, - DBFB0B0E184DCD6200F37EEE /* NSMutableSetBlocksKitTest.m in Sources */, - DBFB0B16184DCD6200F37EEE /* UIActionSheetBlocksKitTest.m in Sources */, - A3E3EDA119F798C6008E0ECB /* NSMapTableBlocksKitTest.m in Sources */, - DBFB0B11184DCD6200F37EEE /* NSObjectBlocksKitTest.m in Sources */, - DBE126DA184DDD8F0023AFAD /* A2DynamicTestClasses.m in Sources */, - DBFB0B05184DCD6200F37EEE /* NSArrayBlocksKitTest.m in Sources */, - DBFB0B18184DCD6200F37EEE /* UIControlBlocksKitTest.m in Sources */, - DBFB0B0F184DCD6200F37EEE /* NSObjectAssociatedObjectTest.m in Sources */, - DBFB0B09184DCD6200F37EEE /* NSInvocationBlocksKitTest.m in Sources */, + DB4CA44D1B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.m in Sources */, + DB5C6C4A1C52005900778E5F /* NSNumber+BlocksKit.m in Sources */, + DB4CA4751B3A662A004B70F8 /* NSTimer+BlocksKit.m in Sources */, + DB4CA4A71B3A6657004B70F8 /* A2BlockInvocation.m in Sources */, + DB4CA4341B3A662A004B70F8 /* NSIndexSet+BlocksKit.m in Sources */, + DB4CA42A1B3A662A004B70F8 /* NSArray+BlocksKit.m in Sources */, + DB4CA4481B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.m in Sources */, + DB4CA42F1B3A662A004B70F8 /* NSDictionary+BlocksKit.m in Sources */, + DB4CA4B61B3A6657004B70F8 /* NSURLConnection+BlocksKit.m in Sources */, + DB4CA4AC1B3A6657004B70F8 /* A2DynamicDelegate.m in Sources */, + DB4CA4BB1B3A6657004B70F8 /* NSObject+A2BlockDelegate.m in Sources */, + DB4CA4611B3A662A004B70F8 /* NSObject+BKBlockExecution.m in Sources */, + DB4CA4391B3A662A004B70F8 /* NSInvocation+BlocksKit.m in Sources */, + DB4CA4701B3A662A004B70F8 /* NSSet+BlocksKit.m in Sources */, + DB4CA4B11B3A6657004B70F8 /* NSCache+BlocksKit.m in Sources */, + DB4CA4431B3A662A004B70F8 /* NSMutableArray+BlocksKit.m in Sources */, + DB4CA4C01B3A6657004B70F8 /* NSObject+A2DynamicDelegate.m in Sources */, + DB4CA45C1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.m in Sources */, + DB4CA43E1B3A662A004B70F8 /* NSMapTable+BlocksKit.m in Sources */, + DB4CA4661B3A662A004B70F8 /* NSObject+BKBlockObservation.m in Sources */, + DB4CA4521B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.m in Sources */, + DB4CA46B1B3A662A004B70F8 /* NSOrderedSet+BlocksKit.m in Sources */, + DB4CA4571B3A662A004B70F8 /* NSMutableSet+BlocksKit.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB0927184DC36400F37EEE /* Sources */ = { + DB9B963C1B3A52E500940D20 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DBFB0A07184DC7E400F37EEE /* NSURLConnection+BlocksKit.m in Sources */, - DBFB0A04184DC7E400F37EEE /* NSCache+BlocksKit.m in Sources */, - DBFB09D3184DC7B000F37EEE /* NSOrderedSet+BlocksKit.m in Sources */, - DBFB09B5184DC7B000F37EEE /* NSIndexSet+BlocksKit.m in Sources */, - DBFB09C7184DC7B000F37EEE /* NSMutableSet+BlocksKit.m in Sources */, - DBFB0A0A184DC7E400F37EEE /* NSObject+A2BlockDelegate.m in Sources */, - DBFB0A00184DC7E400F37EEE /* A2DynamicDelegate.m in Sources */, - DBFB09AF184DC7B000F37EEE /* NSArray+BlocksKit.m in Sources */, - DBFB09D0184DC7B000F37EEE /* NSObject+BKBlockObservation.m in Sources */, - DBFB09CD184DC7B000F37EEE /* NSObject+BKBlockExecution.m in Sources */, - DBFB09FD184DC7E400F37EEE /* A2BlockInvocation.m in Sources */, - A3E3ED9D19F797A3008E0ECB /* NSMapTable+BlocksKit.m in Sources */, - DBFB09B2184DC7B000F37EEE /* NSDictionary+BlocksKit.m in Sources */, - DBFB09B8184DC7B000F37EEE /* NSInvocation+BlocksKit.m in Sources */, - DBFB09D6184DC7B000F37EEE /* NSSet+BlocksKit.m in Sources */, - DBFB09CA184DC7B000F37EEE /* NSObject+BKAssociatedObjects.m in Sources */, - DBFB09BE184DC7B000F37EEE /* NSMutableDictionary+BlocksKit.m in Sources */, - DBFB09BB184DC7B000F37EEE /* NSMutableArray+BlocksKit.m in Sources */, - DBFB09C1184DC7B000F37EEE /* NSMutableIndexSet+BlocksKit.m in Sources */, - DBFB0A0D184DC7E400F37EEE /* NSObject+A2DynamicDelegate.m in Sources */, - DBFB09D9184DC7B000F37EEE /* NSTimer+BlocksKit.m in Sources */, - DBFB09C4184DC7B000F37EEE /* NSMutableOrderedSet+BlocksKit.m in Sources */, + DB4CA5951B3A67A3004B70F8 /* A2BlockDelegateTests.m in Sources */, + DB4CA5741B3A67A3004B70F8 /* NSMutableArrayBlocksKitTest.m in Sources */, + DB4CA5981B3A67A3004B70F8 /* A2BlockInvocationTests.m in Sources */, + DB4CA5891B3A67A3004B70F8 /* NSObjectBlocksKitTest.m in Sources */, + DB4CA5651B3A67A3004B70F8 /* NSArrayBlocksKitTest.m in Sources */, + DB4CA5621B3A67A3004B70F8 /* BKMacrosTest.m in Sources */, + DB4CA5A71B3A67A3004B70F8 /* NSURLConnectionBlocksKitTest.m in Sources */, + DB4CA5861B3A67A3004B70F8 /* NSObjectBlockObservationTest.m in Sources */, + DB4CA58F1B3A67A3004B70F8 /* NSSetBlocksKitTest.m in Sources */, + DB4CA5831B3A67A3004B70F8 /* NSObjectAssociatedObjectTest.m in Sources */, + DB4CA57A1B3A67A3004B70F8 /* NSMutableIndexSetBlocksKitTest.m in Sources */, + DB4CA56B1B3A67A3004B70F8 /* NSIndexSetBlocksKitTest.m in Sources */, + DB4CA5711B3A67A3004B70F8 /* NSMapTableBlocksKitTest.m in Sources */, + DB4CA5921B3A67A3004B70F8 /* NSTimerBlocksKitTest.m in Sources */, + DB4CA59B1B3A67A3004B70F8 /* A2DynamicDelegateTests.m in Sources */, + DB4CA5771B3A67A3004B70F8 /* NSMutableDictionaryBlocksKitTest.m in Sources */, + DB4CA5681B3A67A3004B70F8 /* NSDictionaryBlocksKitTest.m in Sources */, + DB4CA56E1B3A67A3004B70F8 /* NSInvocationBlocksKitTest.m in Sources */, + DB4CA57D1B3A67A3004B70F8 /* NSMutableOrderedSetBlocksKitTest.m in Sources */, + DB4CA5A11B3A67A3004B70F8 /* A2DynamicTestClasses.m in Sources */, + DB4CA5A41B3A67A3004B70F8 /* NSCacheBlocksKitTest.m in Sources */, + DB4CA59E1B3A67A3004B70F8 /* A2DynamicTestClasses+A2BlockDelegate.m in Sources */, + DB4CA58C1B3A67A3004B70F8 /* NSOrderedSetBlocksKitTest.m in Sources */, + DB4CA5801B3A67A3004B70F8 /* NSMutableSetBlocksKitTest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB093D184DC36400F37EEE /* Sources */ = { + DB9B964E1B3A531F00940D20 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DBFB0B1D184DCD9C00F37EEE /* A2BlockDelegateTests.m in Sources */, - DBFB0B1E184DCD9C00F37EEE /* A2BlockInvocationTests.m in Sources */, - DBFB0B1F184DCD9C00F37EEE /* A2DynamicDelegateTests.m in Sources */, - DBFB0B21184DCD9C00F37EEE /* BKMacrosTest.m in Sources */, - DBFB0B22184DCD9C00F37EEE /* NSArrayBlocksKitTest.m in Sources */, - DBFB0B23184DCD9C00F37EEE /* NSCacheBlocksKitTest.m in Sources */, - DBE126DB184DDD900023AFAD /* A2DynamicTestClasses.m in Sources */, - DBFB0B24184DCD9C00F37EEE /* NSDictionaryBlocksKitTest.m in Sources */, - DBFB0B25184DCD9C00F37EEE /* NSIndexSetBlocksKitTest.m in Sources */, - DBFB0B26184DCD9C00F37EEE /* NSInvocationBlocksKitTest.m in Sources */, - DBFB0B27184DCD9C00F37EEE /* NSMutableArrayBlocksKitTest.m in Sources */, - DBFB0B28184DCD9C00F37EEE /* NSMutableDictionaryBlocksKitTest.m in Sources */, - DBFB0B29184DCD9C00F37EEE /* NSMutableIndexSetBlocksKitTest.m in Sources */, - DBFB0B2A184DCD9C00F37EEE /* NSMutableOrderedSetBlocksKitTest.m in Sources */, - DBFB0B2B184DCD9C00F37EEE /* NSMutableSetBlocksKitTest.m in Sources */, - DBFB0B2C184DCD9C00F37EEE /* NSObjectAssociatedObjectTest.m in Sources */, - DBFB0B2D184DCD9C00F37EEE /* NSObjectBlockObservationTest.m in Sources */, - DBFB0B2E184DCD9C00F37EEE /* NSObjectBlocksKitTest.m in Sources */, - DBFB0B2F184DCD9C00F37EEE /* NSOrderedSetBlocksKitTest.m in Sources */, - DBFB0B30184DCD9C00F37EEE /* NSSetBlocksKitTest.m in Sources */, - DBFB0B31184DCD9C00F37EEE /* NSTimerBlocksKitTest.m in Sources */, - A3E3EDA219F798C6008E0ECB /* NSMapTableBlocksKitTest.m in Sources */, - DBFB0B32184DCD9C00F37EEE /* NSURLConnectionBlocksKitTest.m in Sources */, - DBE126D9184DDD8B0023AFAD /* A2DynamicTestClasses+A2BlockDelegate.m in Sources */, - DBD7875518E0CE3A008DC59D /* XCTestCase+BKAsyncTestCase.m in Sources */, + DB4CA4EF1B3A6657004B70F8 /* UIImage+BlocksKit.m in Sources */, + DB4CA4311B3A662A004B70F8 /* NSDictionary+BlocksKit.m in Sources */, + DB4CA44F1B3A662A004B70F8 /* NSMutableIndexSet+BlocksKit.m in Sources */, + DB4CA4B81B3A6657004B70F8 /* NSURLConnection+BlocksKit.m in Sources */, + DB4CA45E1B3A662A004B70F8 /* NSObject+BKAssociatedObjects.m in Sources */, + DB4CA4AE1B3A6657004B70F8 /* A2DynamicDelegate.m in Sources */, + DB4CA43B1B3A662A004B70F8 /* NSInvocation+BlocksKit.m in Sources */, + DB4CA46D1B3A662A004B70F8 /* NSOrderedSet+BlocksKit.m in Sources */, + DB4CA4D11B3A6657004B70F8 /* QLPreviewController+BlocksKit.m in Sources */, + DB4CA4CC1B3A6657004B70F8 /* MFMessageComposeViewController+BlocksKit.m in Sources */, + DB4CA5031B3A6657004B70F8 /* UIView+BlocksKit.m in Sources */, + DB4CA4A91B3A6657004B70F8 /* A2BlockInvocation.m in Sources */, + DB4CA4E01B3A6657004B70F8 /* UIBarButtonItem+BlocksKit.m in Sources */, + DB4CA4E51B3A6657004B70F8 /* UIControl+BlocksKit.m in Sources */, + DB4CA4EA1B3A6657004B70F8 /* UIGestureRecognizer+BlocksKit.m in Sources */, + DB4CA4B31B3A6657004B70F8 /* NSCache+BlocksKit.m in Sources */, + DB4CA4F41B3A6657004B70F8 /* UIImagePickerController+BlocksKit.m in Sources */, + DB4CA4591B3A662A004B70F8 /* NSMutableSet+BlocksKit.m in Sources */, + DB4CA4C21B3A6657004B70F8 /* NSObject+A2DynamicDelegate.m in Sources */, + DB4CA4401B3A662A004B70F8 /* NSMapTable+BlocksKit.m in Sources */, + DB4CA44A1B3A662A004B70F8 /* NSMutableDictionary+BlocksKit.m in Sources */, + DB4CA4C71B3A6657004B70F8 /* MFMailComposeViewController+BlocksKit.m in Sources */, + DB4CA4451B3A662A004B70F8 /* NSMutableArray+BlocksKit.m in Sources */, + DB4CA4D61B3A6657004B70F8 /* UIActionSheet+BlocksKit.m in Sources */, + DB4CA4721B3A662A004B70F8 /* NSSet+BlocksKit.m in Sources */, + DB4CA5081B3A6657004B70F8 /* UIWebView+BlocksKit.m in Sources */, + DB4CA42C1B3A662A004B70F8 /* NSArray+BlocksKit.m in Sources */, + DB4CA4361B3A662A004B70F8 /* NSIndexSet+BlocksKit.m in Sources */, + DB5C6C4C1C52005900778E5F /* NSNumber+BlocksKit.m in Sources */, + DB4CA4BD1B3A6657004B70F8 /* NSObject+A2BlockDelegate.m in Sources */, + DB4CA4681B3A662A004B70F8 /* NSObject+BKBlockObservation.m in Sources */, + DB4CA4DB1B3A6657004B70F8 /* UIAlertView+BlocksKit.m in Sources */, + DB4CA4FE1B3A6657004B70F8 /* UITextField+BlocksKit.m in Sources */, + DB4CA4F91B3A6657004B70F8 /* UIPopoverController+BlocksKit.m in Sources */, + DB5C6C521C52009700778E5F /* UITextView+BlocksKit.m in Sources */, + DB4CA4771B3A662A004B70F8 /* NSTimer+BlocksKit.m in Sources */, + DB4CA4541B3A662A004B70F8 /* NSMutableOrderedSet+BlocksKit.m in Sources */, + DB4CA4631B3A662A004B70F8 /* NSObject+BKBlockExecution.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DBFB0A83184DCBCC00F37EEE /* Sources */ = { + DBBDD1E11B3A553E008909B0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DBFB0ABE184DCC9400F37EEE /* BKApp.m in Sources */, - DBFB0AC0184DCC9400F37EEE /* main.m in Sources */, + DB4CA5D51B3A7A1D004B70F8 /* main.m in Sources */, + DB4CA5CD1B3A6819004B70F8 /* BKApp.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - DB981A02185E96240047E817 /* PBXTargetDependency */ = { + DB4CA5D31B3A7A08004B70F8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = DB5BF87E185E909300FF2A0B /* BlocksKit iOS Tests Runner */; - targetProxy = DB981A01185E96240047E817 /* PBXContainerItemProxy */; + target = DB9B96361B3A52E500940D20 /* BlocksKit */; + targetProxy = DB4CA5D21B3A7A08004B70F8 /* PBXContainerItemProxy */; }; - DBFB0945184DC36400F37EEE /* PBXTargetDependency */ = { + DB9B96251B3A52A700940D20 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = DBFB092B184DC36400F37EEE /* BlocksKit Mac */; - targetProxy = DBFB0944184DC36400F37EEE /* PBXContainerItemProxy */; + target = DB9B96171B3A52A700940D20 /* MobileBlocksKit */; + targetProxy = DB9B96241B3A52A700940D20 /* PBXContainerItemProxy */; }; - DBFB0AB5184DCC0000F37EEE /* PBXTargetDependency */ = { + DB9B96431B3A52E500940D20 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = DBFB092B184DC36400F37EEE /* BlocksKit Mac */; - targetProxy = DBFB0AB4184DCC0000F37EEE /* PBXContainerItemProxy */; + target = DB9B96361B3A52E500940D20 /* BlocksKit */; + targetProxy = DB9B96421B3A52E500940D20 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - DBFB0AB7184DCC9400F37EEE /* MainMenu.xib */ = { + DB4CA5C71B3A6810004B70F8 /* MainMenu.xib */ = { isa = PBXVariantGroup; children = ( - DBFB0AB8184DCC9400F37EEE /* Base */, + DB4CA5C81B3A6810004B70F8 /* Base */, ); name = MainMenu.xib; sourceTree = ""; @@ -1230,614 +1397,291 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - DB5BF8A4185E909400FF2A0B /* Debug */ = { + DB9B962A1B3A52A700940D20 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DBBDD23E1B3A5782008909B0 /* Project-Debug.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - INFOPLIST_FILE = "Tests/BlocksKit-iOS-Tests-Runner-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + ENABLE_TESTABILITY = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "BK Tests"; - SDKROOT = iphoneos; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BK Tests.app/BK Tests"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - DB5BF8A5185E909400FF2A0B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - INFOPLIST_FILE = "Tests/BlocksKit-iOS-Tests-Runner-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - PRODUCT_NAME = "BK Tests"; - SDKROOT = iphoneos; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BK Tests.app/BK Tests"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; - DBFB08A8184DC21500F37EEE /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DBFB095D184DC4FB00F37EEE /* Versions.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_STRICT_SELECTOR_MATCH = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/ffi-mini/include", - ); - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - MACOSX_DEPLOYMENT_TARGET = 10.8; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ""; - RUN_CLANG_STATIC_ANALYZER = YES; - TARGETED_DEVICE_FAMILY = "1,2"; + SDKROOT = macosx; }; name = Debug; }; - DBFB08A9184DC21500F37EEE /* Release */ = { + DB9B962B1B3A52A700940D20 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DBFB095D184DC4FB00F37EEE /* Versions.xcconfig */; + baseConfigurationReference = DBBDD23F1B3A5782008909B0 /* Project-Release.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_STRICT_SELECTOR_MATCH = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - "$(SRCROOT)/ffi-mini/include", - ); - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - MACOSX_DEPLOYMENT_TARGET = 10.8; - OTHER_LDFLAGS = ""; - RUN_CLANG_STATIC_ANALYZER = YES; - TARGETED_DEVICE_FAMILY = "1,2"; + SDKROOT = macosx; }; name = Release; }; - DBFB08CF184DC23000F37EEE /* Debug */ = { + DB9B962D1B3A52A700940D20 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DB4CA3FB1B3A624B004B70F8 /* iOS-Framework.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DSTROOT = /tmp/BlocksKit.dst; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = BlocksKit/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "BlocksKit/Module-iOS.modulemap"; + PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.BlocksKit; PRODUCT_NAME = BlocksKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; - STRIP_INSTALLED_PRODUCT = NO; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - DBFB08D0184DC23000F37EEE /* Release */ = { + DB9B962E1B3A52A700940D20 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DB4CA3FB1B3A624B004B70F8 /* iOS-Framework.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - DSTROOT = /tmp/BlocksKit.dst; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = BlocksKit/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "BlocksKit/Module-iOS.modulemap"; + PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.BlocksKit; PRODUCT_NAME = BlocksKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; - STRIP_INSTALLED_PRODUCT = NO; - VALIDATE_PRODUCT = YES; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; - DBFB08D1184DC23000F37EEE /* Debug */ = { + DB9B96301B3A52A700940D20 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DB4CA4021B3A6450004B70F8 /* iOS-Test.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/BK Tests.app/BK Tests"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "Tests/BlocksKit-iOS-Tests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); - PRODUCT_NAME = "BlocksKit-iOS-Tests"; + INFOPLIST_FILE = Tests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.BlocksKitTests; + PRODUCT_NAME = BlocksKitTests; SDKROOT = iphoneos; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BK Tests.app/BK Tests"; - WRAPPER_EXTENSION = xctest; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - DBFB08D2184DC23000F37EEE /* Release */ = { + DB9B96311B3A52A700940D20 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DB4CA4021B3A6450004B70F8 /* iOS-Test.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/BK Tests.app/BK Tests"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "Tests/BlocksKit-iOS-Tests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - ); - PRODUCT_NAME = "BlocksKit-iOS-Tests"; + INFOPLIST_FILE = Tests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.BlocksKitTests; + PRODUCT_NAME = BlocksKitTests; SDKROOT = iphoneos; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BK Tests.app/BK Tests"; - VALIDATE_PRODUCT = YES; - WRAPPER_EXTENSION = xctest; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; - DBFB0950184DC36500F37EEE /* Debug */ = { + DB9B96491B3A52E500940D20 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DBFB0A42184DC84F00F37EEE /* MacBundledFramework.xcconfig */; + baseConfigurationReference = DB4CA4001B3A624B004B70F8 /* Mac-Framework.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; + DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "BlocksKit/BlocksKit-Info.plist"; - ONLY_ACTIVE_ARCH = YES; + INFOPLIST_FILE = BlocksKit/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MODULEMAP_FILE = "BlocksKit/Module-Mac.modulemap"; + PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.BlocksKit; PRODUCT_NAME = BlocksKit; SDKROOT = macosx; - WRAPPER_EXTENSION = framework; + SKIP_INSTALL = YES; }; name = Debug; }; - DBFB0951184DC36500F37EEE /* Release */ = { + DB9B964A1B3A52E500940D20 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DBFB0A42184DC84F00F37EEE /* MacBundledFramework.xcconfig */; + baseConfigurationReference = DB4CA4001B3A624B004B70F8 /* Mac-Framework.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; - ENABLE_NS_ASSERTIONS = NO; + DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "BlocksKit/BlocksKit-Info.plist"; + INFOPLIST_FILE = BlocksKit/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MODULEMAP_FILE = "BlocksKit/Module-Mac.modulemap"; + PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.BlocksKit; PRODUCT_NAME = BlocksKit; SDKROOT = macosx; - WRAPPER_EXTENSION = framework; + SKIP_INSTALL = YES; }; name = Release; }; - DBFB0953184DC36500F37EEE /* Debug */ = { + DB9B964C1B3A52E500940D20 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DB4CA4011B3A624B004B70F8 /* Mac-Test.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/BlocksKit.framework/Versions/A/BlocksKit"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "Tests/BlocksKit-Mac-Tests-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "BlocksKit-Mac-Tests"; + INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.BlocksKitTests; + PRODUCT_NAME = BlocksKitTests; SDKROOT = macosx; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = xctest; }; name = Debug; }; - DBFB0954184DC36500F37EEE /* Release */ = { + DB9B964D1B3A52E500940D20 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DB4CA4011B3A624B004B70F8 /* Mac-Test.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/BlocksKit.framework/Versions/A/BlocksKit"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - INFOPLIST_FILE = "Tests/BlocksKit-Mac-Tests-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - PRODUCT_NAME = "BlocksKit-Mac-Tests"; + INFOPLIST_FILE = Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.BlocksKitTests; + PRODUCT_NAME = BlocksKitTests; SDKROOT = macosx; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = xctest; }; name = Release; }; - DBFB0AAF184DCBCD00F37EEE /* Debug */ = { + DB9B96631B3A531F00940D20 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DB4CA3FC1B3A624B004B70F8 /* iOS-StaticLibrary.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + MODULEMAP_FILE = "BlocksKit/Module-iOS.modulemap"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.BlocksKit; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + DB9B96641B3A531F00940D20 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DB4CA3FC1B3A624B004B70F8 /* iOS-StaticLibrary.xcconfig */; + buildSettings = { + MODULEMAP_FILE = "BlocksKit/Module-iOS.modulemap"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = us.pandamonia.BlocksKit; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + DBBDD1F31B3A553E008909B0 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DB4CA3FE1B3A624B004B70F8 /* Mac-Application.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - INFOPLIST_FILE = "Tests/MacDemo/BlocksKit-Mac-Demo-Info.plist"; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "BlocksKit Mac Demo"; - SDKROOT = macosx; - WRAPPER_EXTENSION = app; + INFOPLIST_FILE = "Tests/Mac Demo/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + PRODUCT_BUNDLE_IDENTIFIER = "com.github.mralexgray.BlocksKit-Mac-Demo"; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; - DBFB0AB0184DCBCD00F37EEE /* Release */ = { + DBBDD1F41B3A553E008909B0 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = DB4CA3FE1B3A624B004B70F8 /* Mac-Application.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - INFOPLIST_FILE = "Tests/MacDemo/BlocksKit-Mac-Demo-Info.plist"; - PRODUCT_NAME = "BlocksKit Mac Demo"; - SDKROOT = macosx; - WRAPPER_EXTENSION = app; + INFOPLIST_FILE = "Tests/Mac Demo/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; + PRODUCT_BUNDLE_IDENTIFIER = "com.github.mralexgray.BlocksKit-Mac-Demo"; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - DB5BF8A3185E909400FF2A0B /* Build configuration list for PBXNativeTarget "BlocksKit iOS Tests Runner" */ = { + DB9B96121B3A52A700940D20 /* Build configuration list for PBXProject "BlocksKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - DB5BF8A4185E909400FF2A0B /* Debug */, - DB5BF8A5185E909400FF2A0B /* Release */, + DB9B962A1B3A52A700940D20 /* Debug */, + DB9B962B1B3A52A700940D20 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DBFB08A7184DC21500F37EEE /* Build configuration list for PBXProject "BlocksKit" */ = { + DB9B962C1B3A52A700940D20 /* Build configuration list for PBXNativeTarget "MobileBlocksKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - DBFB08A8184DC21500F37EEE /* Debug */, - DBFB08A9184DC21500F37EEE /* Release */, + DB9B962D1B3A52A700940D20 /* Debug */, + DB9B962E1B3A52A700940D20 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DBFB08D3184DC23000F37EEE /* Build configuration list for PBXNativeTarget "BlocksKit iOS" */ = { + DB9B962F1B3A52A700940D20 /* Build configuration list for PBXNativeTarget "MobileBlocksKitTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - DBFB08CF184DC23000F37EEE /* Debug */, - DBFB08D0184DC23000F37EEE /* Release */, + DB9B96301B3A52A700940D20 /* Debug */, + DB9B96311B3A52A700940D20 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DBFB08D4184DC23000F37EEE /* Build configuration list for PBXNativeTarget "BlocksKit iOS Tests" */ = { + DB9B96481B3A52E500940D20 /* Build configuration list for PBXNativeTarget "BlocksKit" */ = { isa = XCConfigurationList; buildConfigurations = ( - DBFB08D1184DC23000F37EEE /* Debug */, - DBFB08D2184DC23000F37EEE /* Release */, + DB9B96491B3A52E500940D20 /* Debug */, + DB9B964A1B3A52E500940D20 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DBFB094F184DC36500F37EEE /* Build configuration list for PBXNativeTarget "BlocksKit Mac" */ = { + DB9B964B1B3A52E500940D20 /* Build configuration list for PBXNativeTarget "BlocksKitTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - DBFB0950184DC36500F37EEE /* Debug */, - DBFB0951184DC36500F37EEE /* Release */, + DB9B964C1B3A52E500940D20 /* Debug */, + DB9B964D1B3A52E500940D20 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DBFB0952184DC36500F37EEE /* Build configuration list for PBXNativeTarget "BlocksKit Mac Tests" */ = { + DB9B96621B3A531F00940D20 /* Build configuration list for PBXNativeTarget "MobileBlocksKitLegacy" */ = { isa = XCConfigurationList; buildConfigurations = ( - DBFB0953184DC36500F37EEE /* Debug */, - DBFB0954184DC36500F37EEE /* Release */, + DB9B96631B3A531F00940D20 /* Debug */, + DB9B96641B3A531F00940D20 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DBFB0AAE184DCBCD00F37EEE /* Build configuration list for PBXNativeTarget "Mac Demo" */ = { + DBBDD1F51B3A553E008909B0 /* Build configuration list for PBXNativeTarget "BlocksKit Mac Demo" */ = { isa = XCConfigurationList; buildConfigurations = ( - DBFB0AAF184DCBCD00F37EEE /* Debug */, - DBFB0AB0184DCBCD00F37EEE /* Release */, + DBBDD1F31B3A553E008909B0 /* Debug */, + DBBDD1F41B3A553E008909B0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = DBFB08A4184DC21500F37EEE /* Project object */; + rootObject = DB9B960F1B3A52A700940D20 /* Project object */; } diff --git a/BlocksKit.xcodeproj/xcshareddata/xcschemes/Mac Demo.xcscheme b/BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit (Mac).xcscheme similarity index 63% rename from BlocksKit.xcodeproj/xcshareddata/xcschemes/Mac Demo.xcscheme rename to BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit (Mac).xcscheme index c73605246..d246e4a49 100644 --- a/BlocksKit.xcodeproj/xcshareddata/xcschemes/Mac Demo.xcscheme +++ b/BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit (Mac).xcscheme @@ -1,6 +1,6 @@ + codeCoverageEnabled = "YES"> + + + + + + - + - + - + - + diff --git a/BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit Mac.xcscheme b/BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit (iOS).xcscheme similarity index 57% rename from BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit Mac.xcscheme rename to BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit (iOS).xcscheme index c2eb19f7f..58a929529 100644 --- a/BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit Mac.xcscheme +++ b/BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit (iOS).xcscheme @@ -1,6 +1,6 @@ + codeCoverageEnabled = "YES"> + + + + + + + + + + + + + + diff --git a/BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit iOS.xcscheme b/BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit iOS.xcscheme deleted file mode 100644 index dd517dd1d..000000000 --- a/BlocksKit.xcodeproj/xcshareddata/xcschemes/BlocksKit iOS.xcscheme +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BlocksKit/BKDefines.h b/BlocksKit/BKDefines.h new file mode 100644 index 000000000..5b90d64ff --- /dev/null +++ b/BlocksKit/BKDefines.h @@ -0,0 +1,66 @@ +// +// BKDefines.h +// BlocksKit + +#pragma once + +#import + +#ifndef __has_builtin +#define __has_builtin(x) 0 +#endif +#ifndef __has_include +#define __has_include(x) 0 +#endif +#ifndef __has_feature +#define __has_feature(x) 0 +#endif +#ifndef __has_attribute +#define __has_attribute(x) 0 +#endif +#ifndef __has_extension +#define __has_extension(x) 0 +#endif + +#if !defined(NS_ASSUME_NONNULL_BEGIN) +# if __has_feature(assume_nonnull) +# define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin") +# define NS_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end") +# else +# define NS_ASSUME_NONNULL_BEGIN +# define NS_ASSUME_NONNULL_END +# endif +#endif + +#if !__has_feature(nullability) +# define nonnull +# define nullable +# define null_unspecified +# define __nonnull +# define __nullable +# define __null_unspecified +#endif + +#if __has_feature(objc_generics) +# define __GENERICS(class, ...) class<__VA_ARGS__> +# define __GENERICS_TYPE(type) type +#else +# define __GENERICS(class, ...) class +# define __GENERICS_TYPE(type) id +#endif + +#if !defined(BK_INITIALIZER) +# if __has_attribute(objc_method_family) +# define BK_INITIALIZER __attribute__((objc_method_family(init))) +# else +# define BK_INITIALIZER +# endif +#endif + +#if !defined(BK_ALERT_CONTROLLER_DEPRECATED) +# define BK_ALERT_CONTROLLER_DEPRECATED(intro) NS_DEPRECATED_IOS(intro, 8_0, "The BlocksKit extensions for UIAlertView and UIActionSheet are deprecated. Use UIAlertController instead."); +#endif + +#if !defined(BK_URL_CONNECTION_DEPRECATED) +# define BK_URL_CONNECTION_DEPRECATED NS_DEPRECATED(10_5, 10_11, 2_0, 9_0, "The BlocksKit extensions for NSURLConnection are deprecated. Use NSURLSession instead."); +#endif diff --git a/BlocksKit/BlocksKit+MessageUI.h b/BlocksKit/BlocksKit+MessageUI.h index c5ca859fb..d182e24d6 100644 --- a/BlocksKit/BlocksKit+MessageUI.h +++ b/BlocksKit/BlocksKit+MessageUI.h @@ -1,5 +1,5 @@ // -// BlocksKit+MessageUI +// BlocksKit MessageUI Extensions // // The Objective-C block utilities you always wish you had. // @@ -25,5 +25,7 @@ // THE SOFTWARE. // +#import + #import #import diff --git a/BlocksKit/BlocksKit+QuickLook.h b/BlocksKit/BlocksKit+QuickLook.h index 6b948cd95..b11afe760 100644 --- a/BlocksKit/BlocksKit+QuickLook.h +++ b/BlocksKit/BlocksKit+QuickLook.h @@ -1,5 +1,5 @@ // -// BlocksKit+QuickLook +// BlocksKit QuickLook Extensions // // The Objective-C block utilities you always wish you had. // @@ -24,4 +24,6 @@ // THE SOFTWARE. // +#import + #import diff --git a/BlocksKit/BlocksKit+UIKit.h b/BlocksKit/BlocksKit+UIKit.h index 0b1951397..84625ae50 100644 --- a/BlocksKit/BlocksKit+UIKit.h +++ b/BlocksKit/BlocksKit+UIKit.h @@ -1,5 +1,5 @@ // -// BlocksKit+UIKit +// BlocksKit UIKit Extensions // // The Objective-C block utilities you always wish you had. // @@ -25,14 +25,19 @@ // THE SOFTWARE. // +#import + #import #import #import #import #import +#import +#import #import #import #import #import #import +#import #import diff --git a/BlocksKit/BlocksKit.h b/BlocksKit/BlocksKit.h index c22cbec31..37ef30e2d 100644 --- a/BlocksKit/BlocksKit.h +++ b/BlocksKit/BlocksKit.h @@ -25,10 +25,22 @@ // THE SOFTWARE. // +#import + +//! Project version number for BlocksKit. +FOUNDATION_EXPORT double BlocksKitVersionNumber; + +//! Project version string for BlocksKit. +FOUNDATION_EXPORT const unsigned char BlocksKitVersionString[]; + +#import +#import #import #import #import #import +#import +#import #import #import #import @@ -40,4 +52,4 @@ #import #import #import -#import + diff --git a/BlocksKit/Core/BKMacros.h b/BlocksKit/Core/BKMacros.h index ae5ff8e7e..d216d169b 100644 --- a/BlocksKit/Core/BKMacros.h +++ b/BlocksKit/Core/BKMacros.h @@ -5,6 +5,7 @@ // Includes code by Michael Ash. . // +#import "BKDefines.h" #import "NSArray+BlocksKit.h" #import "NSSet+BlocksKit.h" #import "NSDictionary+BlocksKit.h" @@ -41,14 +42,9 @@ static inline id BKNextHelper(NSArray *array, CFMutableDictionaryRef *eachTablePtr) { if (!*eachTablePtr) { - CFDictionaryKeyCallBacks keycb = { - 0, - kCFTypeDictionaryKeyCallBacks.retain, - kCFTypeDictionaryKeyCallBacks.release, - kCFTypeDictionaryKeyCallBacks.copyDescription, - NULL, - NULL - }; + CFDictionaryKeyCallBacks keycb = kCFTypeDictionaryKeyCallBacks; + keycb.equal = NULL; + keycb.hash = NULL; *eachTablePtr = CFDictionaryCreateMutable(NULL, 0, &keycb, &kCFTypeDictionaryValueCallBacks); } diff --git a/BlocksKit/Core/NSArray+BlocksKit.h b/BlocksKit/Core/NSArray+BlocksKit.h index e2296ddf3..3d9a8587b 100644 --- a/BlocksKit/Core/NSArray+BlocksKit.h +++ b/BlocksKit/Core/NSArray+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import -#import +#import // for CGFloat + +NS_ASSUME_NONNULL_BEGIN /** Block extensions for NSArray. @@ -23,13 +26,13 @@ @see NSDictionary(BlocksKit) @see NSSet(BlocksKit) */ -@interface NSArray (BlocksKit) +@interface __GENERICS(NSArray, ObjectType) (BlocksKit) /** Loops through an array and executes the given block with each object. @param block A single-argument, void-returning code block. */ -- (void)bk_each:(void (^)(id obj))block; +- (void)bk_each:(void (^)(ObjectType obj))block; /** Enumerates through an array concurrently and executes the given block once for each object. @@ -43,7 +46,7 @@ @param block A single-argument, void-returning code block. */ -- (void)bk_apply:(void (^)(id obj))block; +- (void)bk_apply:(void (^)(ObjectType obj))block; /** Loops through an array to find the object matching the block. @@ -54,7 +57,7 @@ @return Returns the object, if found, or `nil`. @see bk_select: */ -- (id)bk_match:(BOOL (^)(id obj))block; +- (nullable id)bk_match:(BOOL (^)(ObjectType obj))block; /** Loops through an array to find the objects matching the block. @@ -62,7 +65,7 @@ @return Returns an array of the objects found. @see bk_match: */ -- (NSArray *)bk_select:(BOOL (^)(id obj))block; +- (NSArray *)bk_select:(BOOL (^)(ObjectType obj))block; /** Loops through an array to find the objects not matching the block. @@ -76,7 +79,7 @@ @param block A single-argument, BOOL-returning code block. @return Returns an array of all objects not found. */ -- (NSArray *)bk_reject:(BOOL (^)(id obj))block; +- (NSArray *)bk_reject:(BOOL (^)(ObjectType obj))block; /** Call the block once for each object and create an array of the return values. @@ -88,7 +91,14 @@ @param block A single-argument, object-returning code block. @return Returns an array of the objects returned by the block. */ -- (NSArray *)bk_map:(id (^)(id obj))block; +- (NSArray *)bk_map:(id (^)(ObjectType obj))block; + +/** Behaves like map, but doesn't add NSNull objects if you return nil in the block. + + @param block A single-argument, object-returning code block. + @return Returns an array of the objects returned by the block. + */ +- (NSArray *)bk_compact:(id (^)(ObjectType obj))block; /** Arbitrarily accumulate objects using a block. @@ -109,7 +119,7 @@ @param block A block that takes the current sum and the next object to return the new sum. @return An accumulated value. */ -- (id)bk_reduce:(id)initial withBlock:(id (^)(id sum, id obj))block; +- (nullable id)bk_reduce:(nullable id)initial withBlock:(__nullable id (^)(__nullable id sum, ObjectType obj))block; /** Sometimes we just want to loop an objects list and reduce one property, where @@ -133,7 +143,7 @@ }]; */ -- (NSInteger)bk_reduceInteger:(NSInteger)initial withBlock:(NSInteger(^)(NSInteger result, id obj))block; +- (NSInteger)bk_reduceInteger:(NSInteger)initial withBlock:(NSInteger(^)(NSInteger result, ObjectType obj))block; /** Sometimes we just want to loop an objects list and reduce one property, where @@ -158,7 +168,7 @@ */ -- (CGFloat)bk_reduceFloat:(CGFloat)inital withBlock:(CGFloat(^)(CGFloat result, id obj))block; +- (CGFloat)bk_reduceFloat:(CGFloat)inital withBlock:(CGFloat(^)(CGFloat result, ObjectType obj))block; /** Loops through an array to find whether any object matches the block. @@ -177,7 +187,7 @@ @param block A single-argument, BOOL-returning code block. @return YES for the first time the block returns YES for an object, NO otherwise. */ -- (BOOL)bk_any:(BOOL (^)(id obj))block; +- (BOOL)bk_any:(BOOL (^)(ObjectType obj))block; /** Loops through an array to find whether no objects match the block. @@ -186,14 +196,14 @@ @param block A single-argument, BOOL-returning code block. @return YES if the block returns NO for all objects in the array, NO otherwise. */ -- (BOOL)bk_none:(BOOL (^)(id obj))block; +- (BOOL)bk_none:(BOOL (^)(ObjectType obj))block; /** Loops through an array to find whether all objects match the block. @param block A single-argument, BOOL-returning code block. @return YES if the block returns YES for all objects in the array, NO otherwise. */ -- (BOOL)bk_all:(BOOL (^)(id obj))block; +- (BOOL)bk_all:(BOOL (^)(ObjectType obj))block; /** Tests whether every element of this array relates to the corresponding element of another array according to match by block. @@ -208,6 +218,8 @@ @param block A two-argument, BOOL-returning code block. @return Returns a BOOL, true if every element of array relates to corresponding element in another array. */ -- (BOOL)bk_corresponds:(NSArray *)list withBlock:(BOOL (^)(id obj1, id obj2))block; +- (BOOL)bk_corresponds:(NSArray *)list withBlock:(BOOL (^)(ObjectType obj1, id obj2))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSArray+BlocksKit.m b/BlocksKit/Core/NSArray+BlocksKit.m index 5e51b86ae..629ce46d5 100644 --- a/BlocksKit/Core/NSArray+BlocksKit.m +++ b/BlocksKit/Core/NSArray+BlocksKit.m @@ -69,6 +69,23 @@ - (NSArray *)bk_map:(id (^)(id obj))block return result; } +- (NSArray *)bk_compact:(id (^)(id obj))block +{ + NSParameterAssert(block != nil); + + NSMutableArray *result = [NSMutableArray arrayWithCapacity:self.count]; + + [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + id value = block(obj); + if(value) + { + [result addObject:value]; + } + }]; + + return result; +} + - (id)bk_reduce:(id)initial withBlock:(id (^)(id sum, id obj))block { NSParameterAssert(block != nil); diff --git a/BlocksKit/Core/NSDictionary+BlocksKit.h b/BlocksKit/Core/NSDictionary+BlocksKit.h index 6e78b1f09..d47bc22c9 100644 --- a/BlocksKit/Core/NSDictionary+BlocksKit.h +++ b/BlocksKit/Core/NSDictionary+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block extension for NSDictionary. Both inspired by and resembling Smalltalk syntax, this utility @@ -19,13 +22,13 @@ @see NSArray(BlocksKit) @see NSSet(BlocksKit) */ -@interface NSDictionary (BlocksKit) +@interface __GENERICS(NSDictionary, KeyType, ObjectType) (BlocksKit) /** Loops through the dictionary and executes the given block using each item. @param block A block that performs an action using a key/value pair. */ -- (void)bk_each:(void (^)(id key, id obj))block; +- (void)bk_each:(void (^)(KeyType key, ObjectType obj))block; /** Enumerates through the dictionary concurrently and executes the given block once for each pair. @@ -38,7 +41,7 @@ @param block A block that performs an action using a key/value pair. */ -- (void)bk_apply:(void (^)(id key, id obj))block; +- (void)bk_apply:(void (^)(KeyType key, ObjectType obj))block; /** Loops through a dictionary to find the first key/value pair matching the block. @@ -48,14 +51,14 @@ @param block A BOOL-returning code block for a key/value pair. @return The value of the first pair found; */ -- (id)bk_match:(BOOL (^)(id key, id obj))block; +- (nullable id)bk_match:(BOOL (^)(KeyType key, ObjectType obj))block; /** Loops through a dictionary to find the key/value pairs matching the block. @param block A BOOL-returning code block for a key/value pair. @return Returns a dictionary of the objects found. */ -- (NSDictionary *)bk_select:(BOOL (^)(id key, id obj))block; +- (NSDictionary *)bk_select:(BOOL (^)(KeyType key, ObjectType obj))block; /** Loops through a dictionary to find the key/value pairs not matching the block. @@ -69,7 +72,7 @@ @param block A BOOL-returning code block for a key/value pair. @return Returns a dictionary of all objects not found. */ -- (NSDictionary *)bk_reject:(BOOL (^)(id key, id obj))block; +- (NSDictionary *)bk_reject:(BOOL (^)(KeyType key, ObjectType obj))block; /** Call the block once for each object and create a dictionary with the same keys and a new set of values. @@ -77,7 +80,7 @@ @param block A block that returns a new value for a key/value pair. @return Returns a dictionary of the objects returned by the block. */ -- (NSDictionary *)bk_map:(id (^)(id key, id obj))block; +- (NSDictionary *)bk_map:(id (^)(KeyType key, ObjectType obj))block; /** Loops through a dictionary to find whether any key/value pair matches the block. @@ -89,7 +92,7 @@ @param block A two-argument, BOOL-returning code block. @return YES for the first time the block returns YES for a key/value pair, NO otherwise. */ -- (BOOL)bk_any:(BOOL (^)(id key, id obj))block; +- (BOOL)bk_any:(BOOL (^)(KeyType key, ObjectType obj))block; /** Loops through a dictionary to find whether no key/value pairs match the block. @@ -98,13 +101,15 @@ @param block A two-argument, BOOL-returning code block. @return YES if the block returns NO for all key/value pairs in the dictionary, NO otherwise. */ -- (BOOL)bk_none:(BOOL (^)(id key, id obj))block; +- (BOOL)bk_none:(BOOL (^)(KeyType key, ObjectType obj))block; /** Loops through a dictionary to find whether all key/value pairs match the block. @param block A two-argument, BOOL-returning code block. @return YES if the block returns YES for all key/value pairs in the dictionary, NO otherwise. */ -- (BOOL)bk_all:(BOOL (^)(id key, id obj))block; +- (BOOL)bk_all:(BOOL (^)(KeyType key, ObjectType obj))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSIndexSet+BlocksKit.h b/BlocksKit/Core/NSIndexSet+BlocksKit.h index e7308517f..f29265cc5 100644 --- a/BlocksKit/Core/NSIndexSet+BlocksKit.h +++ b/BlocksKit/Core/NSIndexSet+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block extensions for NSIndexSet. Both inspired by and resembling Smalltalk syntax, these utilities @@ -117,3 +120,5 @@ - (BOOL)bk_none:(BOOL (^)(NSUInteger index))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSIndexSet+BlocksKit.m b/BlocksKit/Core/NSIndexSet+BlocksKit.m index 14139c87c..56b4d6b50 100644 --- a/BlocksKit/Core/NSIndexSet+BlocksKit.m +++ b/BlocksKit/Core/NSIndexSet+BlocksKit.m @@ -38,7 +38,6 @@ - (NSIndexSet *)bk_select:(BOOL (^)(NSUInteger index))block { return block(idx); }]; - if (!list.count) return nil; return list; } @@ -58,7 +57,6 @@ - (NSIndexSet *)bk_map:(NSUInteger (^)(NSUInteger index))block { [list addIndex:block(idx)]; }]; - if (!list.count) return nil; return list; } diff --git a/BlocksKit/Core/NSInvocation+BlocksKit.h b/BlocksKit/Core/NSInvocation+BlocksKit.h index e4a1bf6f9..5ca423157 100644 --- a/BlocksKit/Core/NSInvocation+BlocksKit.h +++ b/BlocksKit/Core/NSInvocation+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** BlocksKit extensions for NSInvocation. */ @interface NSInvocation (BlocksKit) @@ -31,3 +34,5 @@ + (NSInvocation *)bk_invocationWithTarget:(id)target block:(void (^)(id target))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSMapTable+BlocksKit.h b/BlocksKit/Core/NSMapTable+BlocksKit.h index b3045c31c..79f9882f6 100644 --- a/BlocksKit/Core/NSMapTable+BlocksKit.h +++ b/BlocksKit/Core/NSMapTable+BlocksKit.h @@ -3,15 +3,18 @@ // BlocksKit // +#import "BKDefines.h" #import -@interface NSMapTable (BlocksKit) +NS_ASSUME_NONNULL_BEGIN + +@interface __GENERICS(NSMapTable, KeyType, ObjectType) (BlocksKit) /** Loops through the maptable and executes the given block using each item. @param block A block that performs an action using a key/value pair. */ -- (void)bk_each:(void (^)(id key, id obj))block; +- (void)bk_each:(void (^)(KeyType key, ObjectType obj))block; /** Loops through a maptable to find the first key/value pair matching the block. @@ -21,14 +24,14 @@ @param block A BOOL-returning code block for a key/value pair. @return The value of the first pair found; */ -- (id)bk_match:(BOOL (^)(id key, id obj))block; +- (nullable id)bk_match:(BOOL (^)(KeyType key, ObjectType obj))block; /** Loops through a maptable to find the key/value pairs matching the block. @param block A BOOL-returning code block for a key/value pair. @return Returns a maptable of the objects found. */ -- (NSMapTable *)bk_select:(BOOL (^)(id key, id obj))block; +- (NSMapTable *)bk_select:(BOOL (^)(KeyType key, ObjectType obj))block; /** Loops through a maptable to find the key/value pairs not matching the block. @@ -42,7 +45,7 @@ @param block A BOOL-returning code block for a key/value pair. @return Returns a maptable of all objects not found. */ -- (NSMapTable *)bk_reject:(BOOL (^)(id key, id obj))block; +- (NSMapTable *)bk_reject:(BOOL (^)(KeyType key, ObjectType obj))block; /** Call the block once for each object and create a maptable with the same keys and a new set of values. @@ -50,7 +53,7 @@ @param block A block that returns a new value for a key/value pair. @return Returns a maptable of the objects returned by the block. */ -- (NSMapTable *)bk_map:(id (^)(id key, id obj))block; +- (NSMapTable *)bk_map:(id (^)(KeyType key, ObjectType obj))block; /** Loops through a maptable to find whether any key/value pair matches the block. @@ -62,7 +65,7 @@ @param block A two-argument, BOOL-returning code block. @return YES for the first time the block returns YES for a key/value pair, NO otherwise. */ -- (BOOL)bk_any:(BOOL (^)(id key, id obj))block; +- (BOOL)bk_any:(BOOL (^)(KeyType key, ObjectType obj))block; /** Loops through a maptable to find whether no key/value pairs match the block. @@ -71,21 +74,21 @@ @param block A two-argument, BOOL-returning code block. @return YES if the block returns NO for all key/value pairs in the maptable, NO otherwise. */ -- (BOOL)bk_none:(BOOL (^)(id key, id obj))block; +- (BOOL)bk_none:(BOOL (^)(KeyType key, ObjectType obj))block; /** Loops through a maptable to find whether all key/value pairs match the block. @param block A two-argument, BOOL-returning code block. @return YES if the block returns YES for all key/value pairs in the maptable, NO otherwise. */ -- (BOOL)bk_all:(BOOL (^)(id key, id obj))block; +- (BOOL)bk_all:(BOOL (^)(KeyType key, ObjectType obj))block; /** Filters a mutable dictionary to the key/value pairs matching the block. @param block A BOOL-returning code block for a key/value pair. @see bk_reject: */ -- (void)bk_performSelect:(BOOL (^)(id key, id obj))block; +- (void)bk_performSelect:(BOOL (^)(KeyType key, ObjectType obj))block; /** Filters a mutable dictionary to the key/value pairs not matching the block, the logical inverse to bk_select:. @@ -93,7 +96,7 @@ @param block A BOOL-returning code block for a key/value pair. @see bk_select: */ -- (void)bk_performReject:(BOOL (^)(id key, id obj))block; +- (void)bk_performReject:(BOOL (^)(KeyType key, ObjectType obj))block; /** Transform each value of the dictionary to a new value, as returned by the block. @@ -101,6 +104,8 @@ @param block A block that returns a new value for a given key/value pair. @see bk_map: */ -- (void)bk_performMap:(id (^)(id key, id obj))block; +- (void)bk_performMap:(id (^)(KeyType key, ObjectType obj))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSMutableArray+BlocksKit.h b/BlocksKit/Core/NSMutableArray+BlocksKit.h index 13bec3bfa..bfef218e5 100644 --- a/BlocksKit/Core/NSMutableArray+BlocksKit.h +++ b/BlocksKit/Core/NSMutableArray+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block extensions for NSMutableArray. These utilities expound upon the BlocksKit additions to the immutable @@ -18,14 +21,14 @@ @see NSArray(BlocksKit) */ -@interface NSMutableArray (BlocksKit) +@interface __GENERICS(NSMutableArray, ObjectType) (BlocksKit) /** Filters a mutable array to the objects matching the block. @param block A single-argument, BOOL-returning code block. @see bk_reject: */ -- (void)bk_performSelect:(BOOL (^)(id obj))block; +- (void)bk_performSelect:(BOOL (^)(id ObjectType))block; /** Filters a mutable array to all objects but the ones matching the block, the logical inverse to bk_select:. @@ -33,7 +36,7 @@ @param block A single-argument, BOOL-returning code block. @see bk_select: */ -- (void)bk_performReject:(BOOL (^)(id obj))block; +- (void)bk_performReject:(BOOL (^)(id ObjectType))block; /** Transform the objects in the array to the results of the block. @@ -45,6 +48,8 @@ @param block A single-argument, object-returning code block. @see bk_map: */ -- (void)bk_performMap:(id (^)(id obj))block; +- (void)bk_performMap:(id (^)(id ObjectType))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSMutableDictionary+BlocksKit.h b/BlocksKit/Core/NSMutableDictionary+BlocksKit.h index 19428c17e..cf64dce5f 100644 --- a/BlocksKit/Core/NSMutableDictionary+BlocksKit.h +++ b/BlocksKit/Core/NSMutableDictionary+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block extensions for NSMutableDictionary. These utilities expound upon the BlocksKit additions to the immutable @@ -18,14 +21,14 @@ @see NSDictionary(BlocksKit) */ -@interface NSMutableDictionary (BlocksKit) +@interface __GENERICS(NSMutableDictionary, KeyType, ObjectType) (BlocksKit) /** Filters a mutable dictionary to the key/value pairs matching the block. @param block A BOOL-returning code block for a key/value pair. @see bk_reject: */ -- (void)bk_performSelect:(BOOL (^)(id key, id obj))block; +- (void)bk_performSelect:(BOOL (^)(KeyType key, ObjectType obj))block; /** Filters a mutable dictionary to the key/value pairs not matching the block, the logical inverse to bk_select:. @@ -33,7 +36,7 @@ @param block A BOOL-returning code block for a key/value pair. @see bk_select: */ -- (void)bk_performReject:(BOOL (^)(id key, id obj))block; +- (void)bk_performReject:(BOOL (^)(KeyType key, ObjectType obj))block; /** Transform each value of the dictionary to a new value, as returned by the block. @@ -41,6 +44,8 @@ @param block A block that returns a new value for a given key/value pair. @see bk_map: */ -- (void)bk_performMap:(id (^)(id key, id obj))block; +- (void)bk_performMap:(id (^)(KeyType key, ObjectType obj))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSMutableIndexSet+BlocksKit.h b/BlocksKit/Core/NSMutableIndexSet+BlocksKit.h index a9131b04d..66c476325 100644 --- a/BlocksKit/Core/NSMutableIndexSet+BlocksKit.h +++ b/BlocksKit/Core/NSMutableIndexSet+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block extensions for NSMutableIndexSet. These utilities expound upon the BlocksKit additions to the immutable @@ -40,3 +43,5 @@ @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSMutableOrderedSet+BlocksKit.h b/BlocksKit/Core/NSMutableOrderedSet+BlocksKit.h index 6cf8fbe44..80b237e33 100644 --- a/BlocksKit/Core/NSMutableOrderedSet+BlocksKit.h +++ b/BlocksKit/Core/NSMutableOrderedSet+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block extensions for NSMutableOrderedSet. These utilities expound upon the BlocksKit additions to the immutable @@ -18,14 +21,14 @@ @see NSOrderedSet(BlocksKit) */ -@interface NSMutableOrderedSet (BlocksKit) +@interface __GENERICS(NSMutableOrderedSet, ObjectType) (BlocksKit) /** Filters a mutable ordered set to the objects matching the block. @param block A single-argument, BOOL-returning code block. @see bk_reject: */ -- (void)bk_performSelect:(BOOL (^)(id obj))block; +- (void)bk_performSelect:(BOOL (^)(id ObjectType))block; /** Filters a mutable ordered set to all objects but the ones matching the block, the logical inverse to bk_select:. @@ -33,7 +36,7 @@ @param block A single-argument, BOOL-returning code block. @see bk_select: */ -- (void)bk_performReject:(BOOL (^)(id obj))block; +- (void)bk_performReject:(BOOL (^)(id ObjectType))block; /** Transform the objects in the ordered set to the results of the block. @@ -45,6 +48,8 @@ @param block A single-argument, object-returning code block. @see bk_map: */ -- (void)bk_performMap:(id (^)(id obj))block; +- (void)bk_performMap:(id (^)(id ObjectType))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSMutableSet+BlocksKit.h b/BlocksKit/Core/NSMutableSet+BlocksKit.h index 2016bc823..decb4fa63 100644 --- a/BlocksKit/Core/NSMutableSet+BlocksKit.h +++ b/BlocksKit/Core/NSMutableSet+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block extensions for NSMutableSet. These utilities expound upon the BlocksKit additions to the immutable @@ -18,14 +21,14 @@ @see NSSet(BlocksKit) */ -@interface NSMutableSet (BlocksKit) +@interface __GENERICS(NSMutableSet, ObjectType) (BlocksKit) /** Filters a mutable set to the objects matching the block. @param block A single-argument, BOOL-returning code block. @see bk_reject: */ -- (void)bk_performSelect:(BOOL (^)(id obj))block; +- (void)bk_performSelect:(BOOL (^)(id ObjectType))block; /** Filters a mutable set to all objects but the ones matching the block, the logical inverse to bk_select:. @@ -33,7 +36,7 @@ @param block A single-argument, BOOL-returning code block. @see bk_select: */ -- (void)bk_performReject:(BOOL (^)(id obj))block; +- (void)bk_performReject:(BOOL (^)(id ObjectType))block; /** Transform the objects in the set to the results of the block. @@ -45,6 +48,8 @@ @param block A single-argument, object-returning code block. @see bk_map: */ -- (void)bk_performMap:(id (^)(id obj))block; +- (void)bk_performMap:(id (^)(id ObjectType))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSNumber+BlocksKit.h b/BlocksKit/Core/NSNumber+BlocksKit.h new file mode 100644 index 000000000..3b258af5f --- /dev/null +++ b/BlocksKit/Core/NSNumber+BlocksKit.h @@ -0,0 +1,27 @@ +// +// NSNumber+BlocksKit.h +// BlocksKit +// + +#import + +/** Block extensions for NSNumber. + + Both inspired by and resembling Smalltalk syntax, these utilities + allows for iteration of an array in a concise way that + saves quite a bit of boilerplate code for performing a task a fixed number of + times. + + Includes code by the following: + +- [Colin T.A. Gray](https://github.com/colinta) + */ +@interface NSNumber (BlocksKit) + +/** Performs a block `self` number of times + + @param block A void-returning code block that accepts no arguments. + */ +- (void)bk_times:(void (^)())block; + +@end diff --git a/BlocksKit/Core/NSNumber+BlocksKit.m b/BlocksKit/Core/NSNumber+BlocksKit.m new file mode 100644 index 000000000..e10ba0471 --- /dev/null +++ b/BlocksKit/Core/NSNumber+BlocksKit.m @@ -0,0 +1,19 @@ +// +// NSNumber+BlocksKit.m +// BlocksKit +// + +#import "NSNumber+BlocksKit.h" + +@implementation NSNumber (BlocksKit) + +- (void)bk_times:(void (^)())block +{ + NSParameterAssert(block != nil); + + for (NSInteger idx = 0 ; idx < self.integerValue ; ++idx ) { + block(); + } +} + +@end diff --git a/BlocksKit/Core/NSObject+BKAssociatedObjects.h b/BlocksKit/Core/NSObject+BKAssociatedObjects.h index af4cf9278..1216ced1c 100644 --- a/BlocksKit/Core/NSObject+BKAssociatedObjects.h +++ b/BlocksKit/Core/NSObject+BKAssociatedObjects.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Objective-C wrapper for 10.6+ associated object API. In Mac OS X Snow Leopard and iOS 3.0, Apple introduced an addition to the @@ -36,7 +39,7 @@ @param value Any object. @param key A unique key pointer. */ -- (void)bk_associateValue:(id)value withKey:(const void *)key; +- (void)bk_associateValue:(nullable id)value withKey:(const void *)key; /** Strongly associates an object with the receiving class. @@ -44,7 +47,7 @@ @param value Any object. @param key A unique key pointer. */ -+ (void)bk_associateValue:(id)value withKey:(const void *)key; ++ (void)bk_associateValue:(nullable id)value withKey:(const void *)key; /** Strongly, thread-safely associates an object with the reciever. @@ -60,7 +63,7 @@ @param value Any object. @param key A unique key pointer. */ -- (void)bk_atomicallyAssociateValue:(id)value withKey:(const void *)key; +- (void)bk_atomicallyAssociateValue:(nullable id)value withKey:(const void *)key; /** Strongly, thread-safely associates an object with the receiving class. @@ -68,7 +71,7 @@ @param value Any object. @param key A unique key pointer. */ -+ (void)bk_atomicallyAssociateValue:(id)value withKey:(const void *)key; ++ (void)bk_atomicallyAssociateValue:(nullable id)value withKey:(const void *)key; /** Associates a copy of an object with the reciever. @@ -81,7 +84,7 @@ @param value Any object, pointer, or value. @param key A unique key pointer. */ -- (void)bk_associateCopyOfValue:(id)value withKey:(const void *)key; +- (void)bk_associateCopyOfValue:(nullable id)value withKey:(const void *)key; /** Associates a copy of an object with the receiving class. @@ -89,7 +92,7 @@ @param value Any object, pointer, or value. @param key A unique key pointer. */ -+ (void)bk_associateCopyOfValue:(id)value withKey:(const void *)key; ++ (void)bk_associateCopyOfValue:(nullable id)value withKey:(const void *)key; /** Thread-safely associates a copy of an object with the reciever. @@ -103,7 +106,7 @@ @param value Any object, pointer, or value. @param key A unique key pointer. */ -- (void)bk_atomicallyAssociateCopyOfValue:(id)value withKey:(const void *)key; +- (void)bk_atomicallyAssociateCopyOfValue:(nullable id)value withKey:(const void *)key; /** Thread-safely associates a copy of an object with the receiving class. @@ -111,7 +114,7 @@ @param value Any object, pointer, or value. @param key A unique key pointer. */ -+ (void)bk_atomicallyAssociateCopyOfValue:(id)value withKey:(const void *)key; ++ (void)bk_atomicallyAssociateCopyOfValue:(nullable id)value withKey:(const void *)key; /** Weakly associates an object with the reciever. @@ -122,7 +125,7 @@ @param value Any object. @param key A unique key pointer. */ -- (void)bk_weaklyAssociateValue:(__autoreleasing id)value withKey:(const void *)key; +- (void)bk_weaklyAssociateValue:(nullable __autoreleasing id)value withKey:(const void *)key; /** Weakly associates an object with the receiving class. @@ -130,14 +133,14 @@ @param value Any object. @param key A unique key pointer. */ -+ (void)bk_weaklyAssociateValue:(__autoreleasing id)value withKey:(const void *)key; ++ (void)bk_weaklyAssociateValue:(nullable __autoreleasing id)value withKey:(const void *)key; /** Returns the associated value for a key on the reciever. @param key A unique key pointer. @return The object associated with the key, or `nil` if not found. */ -- (id)bk_associatedValueForKey:(const void *)key; +- (nullable id)bk_associatedValueForKey:(const void *)key; /** Returns the associated value for a key on the receiving class. @@ -145,7 +148,7 @@ @param key A unique key pointer. @return The object associated with the key, or `nil` if not found. */ -+ (id)bk_associatedValueForKey:(const void *)key; ++ (nullable id)bk_associatedValueForKey:(const void *)key; /** Returns the reciever to a clean state by removing all associated objects, releasing them if necessary. */ @@ -156,3 +159,5 @@ + (void)bk_removeAllAssociatedObjects; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSObject+BKAssociatedObjects.m b/BlocksKit/Core/NSObject+BKAssociatedObjects.m index b58c8e804..cf2e9f53b 100644 --- a/BlocksKit/Core/NSObject+BKAssociatedObjects.m +++ b/BlocksKit/Core/NSObject+BKAssociatedObjects.m @@ -3,8 +3,8 @@ // BlocksKit // -#import #import "NSObject+BKAssociatedObjects.h" +@import ObjectiveC.runtime; #pragma mark - Weak support diff --git a/BlocksKit/Core/NSObject+BKBlockExecution.h b/BlocksKit/Core/NSObject+BKBlockExecution.h index 4be43a30f..afc12e198 100644 --- a/BlocksKit/Core/NSObject+BKBlockExecution.h +++ b/BlocksKit/Core/NSObject+BKBlockExecution.h @@ -3,8 +3,13 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + +typedef __nonnull id BKCancellationToken; + /** Block execution on *any* object. This category overhauls the `performSelector:` utilities on @@ -23,99 +28,102 @@ /** Executes a block after a given delay on the reciever. - [array performBlock:^(id obj) { - [obj addObject:self]; - [self release]; - } afterDelay:0.5f]; + @warning *Important:* Use of the **self** reference in a block is discouraged. + The block argument @c obj should be used instead. - @warning *Important:* Use of the **self** reference in a block will - reference the current implementation context. The block argument, - `obj`, should be used instead. - - @param block A single-argument code block, where `obj` is the reciever. @param delay A measure in seconds. - @return Returns a pointer to the block that may or may not execute the given block. + @param block A single-argument code block, where @c obj is the reciever. + @return An opaque, temporary token that may be used to cancel execution. */ -- (id)bk_performBlock:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay; +- (BKCancellationToken)bk_performAfterDelay:(NSTimeInterval)delay usingBlock:(void (^)(id obj))block; /** Executes a block after a given delay. - - This class method is functionally identical to its instance method version. It still executes - asynchronously via GCD. However, the current context is not passed so that the block is performed - in a general context. - - Block execution is very useful, particularly for small events that you would like delayed. - - [object performBlock:^{ - [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; - } afterDelay:0.5f]; - - @see performBlock:afterDelay: - @param block A code block. + + @see bk_performAfterDelay:usingBlock: @param delay A measure in seconds. - @return Returns a pointer to the block that may or may not execute the given block. + @param block A code block. + @return An opaque, temporary token that may be used to cancel execution. */ -+ (id)bk_performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay; ++ (BKCancellationToken)bk_performAfterDelay:(NSTimeInterval)delay usingBlock:(void (^)(void))block; + /** Executes a block in the background after a given delay on the receiver. - This class method is functionally identical to `- (id)bk_performBlock:afterDelay:`, - except the block will be performed on a background thread instead of the main thread. + This method is functionally identical to @c -bk_performAfterDelay:usingBlock: + except the block will be performed on a background queue. - @see performBlock:afterDelay: - @param block A code block. + @warning *Important:* Use of the **self** reference in a block is discouraged. + The block argument @c obj should be used instead. + + @see bk_performAfterDelay:usingBlock: @param delay A measure in seconds. - @return Returns a pointer to the block that may or may not execute the given block. + @param block A single-argument code block, where @c obj is the reciever. + @return An opaque, temporary token that may be used to cancel execution. */ -- (id)bk_performBlockInBackground:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay; +- (BKCancellationToken)bk_performInBackgroundAfterDelay:(NSTimeInterval)delay usingBlock:(void (^)(id obj))block; /** Executes a block in the background after a given delay. - This class method is functionally identical to `+ (id)bk_performBlock:afterDelay:`, - except the block will be performed on a background thread instead of the main thread. + This method is functionally identical to @c +bk_performAfterDelay:usingBlock: + except the block will be performed on a background queue. - @see performBlock:afterDelay: - @param block A code block. + @see bk_performAfterDelay:usingBlock: @param delay A measure in seconds. - @return Returns a pointer to the block that may or may not execute the given block. + @param block A code block. + @return An opaque, temporary token that may be used to cancel execution. */ -+ (id)bk_performBlockInBackground:(void (^)(void))block afterDelay:(NSTimeInterval)delay; ++ (BKCancellationToken)bk_performInBackgroundAfterDelay:(NSTimeInterval)delay usingBlock:(void (^)(void))block; /** Executes a block in the background after a given delay. - This class method is functionally identical to `+ (id)bk_performBlock:afterDelay:`, - except the block will be performed on the specified thread instead of the main thread. + This method is functionally identical to @c -bk_performAfterDelay:usingBlock: + except the block will be performed on a background queue. - @see performBlock:afterDelay: - @param block A code block. + @warning *Important:* Use of the **self** reference in a block is discouraged. + The block argument @c obj should be used instead. + + @see bk_performAfterDelay:usingBlock: @param queue A background queue. @param delay A measure in seconds. - @return Returns a pointer to the block that may or may not execute the given block. + @param block A single-argument code block, where @c obj is the reciever. + @return An opaque, temporary token that may be used to cancel execution. */ -+ (id)bk_performBlock:(void (^)(void))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay; +- (BKCancellationToken)bk_performOnQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay usingBlock:(void (^)(id obj))block; /** Executes a block in the background after a given delay. - This class method is functionally identical to `- (id)bk_performBlock:afterDelay:`, - except the block will be performed on the specified thread instead of the main thread. + This method is functionally identical to @c +bk_performAfterDelay:usingBlock: + except the block will be performed on a background queue. - @see performBlock:afterDelay: - @param block A code block. + @see bk_performAfterDelay:usingBlock: @param queue A background queue. @param delay A measure in seconds. - @return Returns a pointer to the block that may or may not execute the given block. + @param block A code block. + @return An opaque, temporary token that may be used to cancel execution. */ -- (id)bk_performBlock:(void (^)(id obj))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay; ++ (BKCancellationToken)bk_performOnQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay usingBlock:(void (^)(void))block; /** Cancels the potential execution of a block. - + @warning *Important:* It is not recommended to cancel a block executed - with no delay (a delay of 0.0). While it it still possible to catch the block - before GCD has executed it, it has likely already been executed and disposed of. - - @param block A pointer to a containing block, as returned from one of the - `performBlock` selectors. + with a delay of @c 0. + + @param token A cancellation token, as returned from one of the `bk_perform` + methods. */ -+ (void)bk_cancelBlock:(id)block; ++ (void)bk_cancelBlock:(BKCancellationToken)token; @end + +@interface NSObject (BKBlockExecution_Deprecated) + +- (BKCancellationToken)bk_performBlock:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay DEPRECATED_MSG_ATTRIBUTE("Replaced with -bk_performAfterDelay:usingBlock:"); ++ (BKCancellationToken)bk_performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay DEPRECATED_MSG_ATTRIBUTE("Replaced with +bk_performAfterDelay:usingBlock:"); +- (BKCancellationToken)bk_performBlockInBackground:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay DEPRECATED_MSG_ATTRIBUTE("Replaced with -bk_performInBackgroundAfterDelay:usingBlock:"); ++ (BKCancellationToken)bk_performBlockInBackground:(void (^)(void))block afterDelay:(NSTimeInterval)delay DEPRECATED_MSG_ATTRIBUTE("Replaced with +bk_performInBackgroundAfterDelay:usingBlock:"); ++ (BKCancellationToken)bk_performBlock:(void (^)(void))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay DEPRECATED_MSG_ATTRIBUTE("Replaced with -bk_performOnQueue:afterDelay:usingBlock:"); +- (BKCancellationToken)bk_performBlock:(void (^)(id obj))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay DEPRECATED_MSG_ATTRIBUTE("Replaced with -bk_performOnQueue:afterDelay:usingBlock:"); + +@end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSObject+BKBlockExecution.m b/BlocksKit/Core/NSObject+BKBlockExecution.m index d411e2516..cab57de6f 100644 --- a/BlocksKit/Core/NSObject+BKBlockExecution.m +++ b/BlocksKit/Core/NSObject+BKBlockExecution.m @@ -5,75 +5,147 @@ #import "NSObject+BKBlockExecution.h" -#define BKTimeDelay(t) dispatch_time(DISPATCH_TIME_NOW, (uint64_t)(NSEC_PER_SEC * t)) +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1010) +#define DISPATCH_CANCELLATION_SUPPORTED 1 +#else +#define DISPATCH_CANCELLATION_SUPPORTED 1 +#endif + +NS_INLINE dispatch_time_t BKTimeDelay(NSTimeInterval t) { + return dispatch_time(DISPATCH_TIME_NOW, (uint64_t)(NSEC_PER_SEC * t)); +} + +NS_INLINE BOOL BKSupportsDispatchCancellation(void) { +#if DISPATCH_CANCELLATION_SUPPORTED + return (&dispatch_block_cancel != NULL); +#else + return NO; +#endif +} + +NS_INLINE dispatch_queue_t BKGetBackgroundQueue(void) { + return dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); +} + +static id BKDispatchCancellableBlock(dispatch_queue_t queue, NSTimeInterval delay, void(^block)(void)) { + dispatch_time_t time = BKTimeDelay(delay); + +#if DISPATCH_CANCELLATION_SUPPORTED + if (BKSupportsDispatchCancellation()) { + dispatch_block_t ret = dispatch_block_create(0, block); + dispatch_after(time, queue, ret); + return ret; + } +#endif + + __block BOOL cancelled = NO; + void (^wrapper)(BOOL) = ^(BOOL cancel) { + if (cancel) { + cancelled = YES; + return; + } + if (!cancelled) block(); + }; + + dispatch_after(time, queue, ^{ + wrapper(NO); + }); + + return wrapper; +} @implementation NSObject (BlocksKit) -- (id)bk_performBlock:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay +- (id )bk_performAfterDelay:(NSTimeInterval)delay usingBlock:(void (^)(id obj))block +{ + return [self bk_performOnQueue:dispatch_get_main_queue() afterDelay:delay usingBlock:block]; +} + ++ (id )bk_performAfterDelay:(NSTimeInterval)delay usingBlock:(void (^)(void))block +{ + return [NSObject bk_performOnQueue:dispatch_get_main_queue() afterDelay:delay usingBlock:block]; +} + +- (id )bk_performInBackgroundAfterDelay:(NSTimeInterval)delay usingBlock:(void (^)(id obj))block +{ + return [self bk_performOnQueue:BKGetBackgroundQueue() afterDelay:delay usingBlock:block]; +} + ++ (id )bk_performInBackgroundAfterDelay:(NSTimeInterval)delay usingBlock:(void (^)(void))block +{ + return [NSObject bk_performOnQueue:BKGetBackgroundQueue() afterDelay:delay usingBlock:block]; +} + +- (id )bk_performOnQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay usingBlock:(void (^)(id obj))block +{ + NSParameterAssert(block != nil); + + return BKDispatchCancellableBlock(queue, delay, ^{ + block(self); + }); +} + ++ (id )bk_performOnQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay usingBlock:(void (^)(void))block { - return [self bk_performBlock:block onQueue:dispatch_get_main_queue() afterDelay:delay]; + NSParameterAssert(block != nil); + + return BKDispatchCancellableBlock(queue, delay, block); } -+ (id)bk_performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay ++ (void)bk_cancelBlock:(id )block +{ + NSParameterAssert(block != nil); + +#if DISPATCH_CANCELLATION_SUPPORTED + if (BKSupportsDispatchCancellation()) { + dispatch_block_cancel((dispatch_block_t)block); + return; + } +#endif + + void (^wrapper)(BOOL) = (void(^)(BOOL))block; + wrapper(YES); +} + +@end + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" + +@implementation NSObject (BKBlockExecution_Deprecated) + +#pragma mark - Legacy verions + +- (id )bk_performBlock:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay { - return [NSObject bk_performBlock:block onQueue:dispatch_get_main_queue() afterDelay:delay]; + return [self bk_performAfterDelay:delay usingBlock:block]; } -- (id)bk_performBlockInBackground:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay ++ (id )bk_performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay { - return [self bk_performBlock:block onQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0) afterDelay:delay]; + return [self bk_performAfterDelay:delay usingBlock:block]; } -+ (id)bk_performBlockInBackground:(void (^)(void))block afterDelay:(NSTimeInterval)delay +- (id )bk_performBlockInBackground:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay { - return [NSObject bk_performBlock:block onQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0) afterDelay:delay]; + return [self bk_performInBackgroundAfterDelay:delay usingBlock:block]; } -- (id)bk_performBlock:(void (^)(id obj))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay ++ (id )bk_performBlockInBackground:(void (^)(void))block afterDelay:(NSTimeInterval)delay { - NSParameterAssert(block != nil); - - __block BOOL cancelled = NO; - - void (^wrapper)(BOOL) = ^(BOOL cancel) { - if (cancel) { - cancelled = YES; - return; - } - if (!cancelled) block(self); - }; - - dispatch_after(BKTimeDelay(delay), queue, ^{ - wrapper(NO); - }); - - return [wrapper copy]; -} - -+ (id)bk_performBlock:(void (^)(void))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay + return [self bk_performInBackgroundAfterDelay:delay usingBlock:block]; +} + +- (id )bk_performBlock:(void (^)(id obj))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay { - NSParameterAssert(block != nil); - - __block BOOL cancelled = NO; - - void (^wrapper)(BOOL) = ^(BOOL cancel) { - if (cancel) { - cancelled = YES; - return; - } - if (!cancelled) block(); - }; - - dispatch_after(BKTimeDelay(delay), queue, ^{ wrapper(NO); }); - - return [wrapper copy]; -} - -+ (void)bk_cancelBlock:(id)block + return [self bk_performOnQueue:queue afterDelay:delay usingBlock:block]; +} + ++ (id )bk_performBlock:(void (^)(void))block onQueue:(dispatch_queue_t)queue afterDelay:(NSTimeInterval)delay { - NSParameterAssert(block != nil); - void (^wrapper)(BOOL) = block; - wrapper(YES); + return [self bk_performOnQueue:queue afterDelay:delay usingBlock:block]; } @end + +#pragma clang diagnostic pop diff --git a/BlocksKit/Core/NSObject+BKBlockObservation.h b/BlocksKit/Core/NSObject+BKBlockObservation.h index 7ada6c44b..e4842eda9 100644 --- a/BlocksKit/Core/NSObject+BKBlockObservation.h +++ b/BlocksKit/Core/NSObject+BKBlockObservation.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Blocks wrapper for key-value observation. In Mac OS X Panther, Apple introduced an API called "key-value @@ -135,3 +138,5 @@ - (void)bk_removeAllBlockObservers; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSObject+BKBlockObservation.m b/BlocksKit/Core/NSObject+BKBlockObservation.m index bad3f03c8..a114cdbb6 100644 --- a/BlocksKit/Core/NSObject+BKBlockObservation.m +++ b/BlocksKit/Core/NSObject+BKBlockObservation.m @@ -3,13 +3,13 @@ // BlocksKit // -#import -#import +#import "NSObject+BKBlockObservation.h" +@import ObjectiveC.runtime; +@import ObjectiveC.message; #import "NSArray+BlocksKit.h" #import "NSDictionary+BlocksKit.h" -#import "NSObject+BKAssociatedObjects.h" -#import "NSObject+BKBlockObservation.h" #import "NSSet+BlocksKit.h" +#import "NSObject+BKAssociatedObjects.h" typedef NS_ENUM(int, BKObserverContext) { BKObserverContextKey, diff --git a/BlocksKit/Core/NSOrderedSet+BlocksKit.h b/BlocksKit/Core/NSOrderedSet+BlocksKit.h index 06b5729ef..dba2f5735 100644 --- a/BlocksKit/Core/NSOrderedSet+BlocksKit.h +++ b/BlocksKit/Core/NSOrderedSet+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block extensions for NSOrderedSet. Both inspired by and resembling Smalltalk syntax, these utilities allow for @@ -21,13 +24,13 @@ @see NSArray(BlocksKit) @see NSSet(BlocksKit) */ -@interface NSOrderedSet (BlocksKit) +@interface __GENERICS(NSOrderedSet, ObjectType) (BlocksKit) /** Loops through an ordered set and executes the given block with each object. @param block A single-argument, void-returning code block. */ -- (void)bk_each:(void (^)(id obj))block; +- (void)bk_each:(void (^)(ObjectType obj))block; /** Enumerates through an ordered set concurrently and executes the given block once for each object. @@ -40,7 +43,7 @@ @param block A single-argument, void-returning code block. */ -- (void)bk_apply:(void (^)(id obj))block; +- (void)bk_apply:(void (^)(ObjectType obj))block; /** Loops through an ordered set to find the object matching the block. @@ -51,7 +54,7 @@ @return Returns the object, if found, or `nil`. @see bk_select: */ -- (id)bk_match:(BOOL (^)(id obj))block; +- (nullable id)bk_match:(BOOL (^)(ObjectType obj))block; /** Loops through an ordered set to find the objects matching the block. @@ -59,7 +62,7 @@ @return Returns an ordered set of the objects found. @see bk_match: */ -- (NSOrderedSet *)bk_select:(BOOL (^)(id obj))block; +- (NSOrderedSet *)bk_select:(BOOL (^)(ObjectType obj))block; /** Loops through an ordered set to to find the objects not matching the block. @@ -74,7 +77,7 @@ @param block A single-argument, BOOL-returning code block. @return Returns an ordered set of all objects not found. */ -- (NSOrderedSet *)bk_reject:(BOOL (^)(id obj))block; +- (NSOrderedSet *)bk_reject:(BOOL (^)(ObjectType obj))block; /** Call the block once for each object and create an ordered set of the return values. @@ -87,7 +90,7 @@ @param block A single-argument, object-returning code block. @return Returns an ordered set of the objects returned by the block. */ -- (NSOrderedSet *)bk_map:(id (^)(id obj))block; +- (NSOrderedSet *)bk_map:(id (^)(ObjectType obj))block; /** Arbitrarily accumulate objects using a block. @@ -108,7 +111,7 @@ @param block A block that takes the current sum and the next object to return the new sum. @return An accumulated value. */ -- (id)bk_reduce:(id)initial withBlock:(id (^)(id sum, id obj))block; +- (nullable id)bk_reduce:(nullable id)initial withBlock:(__nullable id (^)(__nullable id sum, ObjectType obj))block; /** Loops through an ordered set to find whether any object matches the block. @@ -128,7 +131,7 @@ @param block A single-argument, BOOL-returning code block. @return YES for the first time the block returns YES for an object, NO otherwise. */ -- (BOOL)bk_any:(BOOL (^)(id obj))block; +- (BOOL)bk_any:(BOOL (^)(ObjectType obj))block; /** Loops through an ordered set to find whether no objects match the block. @@ -138,7 +141,7 @@ @return YES if the block returns NO for all objects in the ordered set, NO otherwise. */ -- (BOOL)bk_none:(BOOL (^)(id obj))block; +- (BOOL)bk_none:(BOOL (^)(ObjectType obj))block; /** Loops through an ordered set to find whether all objects match the block. @@ -146,7 +149,7 @@ @return YES if the block returns YES for all objects in the ordered set, NO otherwise. */ -- (BOOL)bk_all:(BOOL (^)(id obj))block; +- (BOOL)bk_all:(BOOL (^)(ObjectType obj))block; /** Tests whether every element of this ordered set relates to the corresponding element of another array according to match by block. @@ -164,5 +167,7 @@ @return Returns a BOOL, true if every element of the ordered set relates to corresponding element in another ordered set. */ -- (BOOL)bk_corresponds:(NSOrderedSet *)list withBlock:(BOOL (^)(id obj1, id obj2))block; +- (BOOL)bk_corresponds:(NSOrderedSet *)list withBlock:(BOOL (^)(ObjectType obj1, id obj2))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSSet+BlocksKit.h b/BlocksKit/Core/NSSet+BlocksKit.h index f75c33d66..016d4f6fc 100644 --- a/BlocksKit/Core/NSSet+BlocksKit.h +++ b/BlocksKit/Core/NSSet+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block extensions for NSSet. Both inspired by and resembling Smalltalk syntax, these utilities allows for @@ -21,13 +24,13 @@ @see NSArray(BlocksKit) @see NSDictionary(BlocksKit) */ -@interface NSSet (BlocksKit) +@interface __GENERICS(NSSet, ObjectType) (BlocksKit) /** Loops through a set and executes the given block with each object. @param block A single-argument, void-returning code block. */ -- (void)bk_each:(void (^)(id obj))block; +- (void)bk_each:(void (^)(ObjectType obj))block; /** Enumerates through a set concurrently and executes the given block once for each object. @@ -39,7 +42,7 @@ @param block A single-argument, void-returning code block. */ -- (void)bk_apply:(void (^)(id obj))block; +- (void)bk_apply:(void (^)(ObjectType obj))block; /** Loops through a set to find the object matching the block. @@ -50,7 +53,7 @@ @return Returns the object if found, `nil` otherwise. @see bk_select: */ -- (id)bk_match:(BOOL (^)(id obj))block; +- (nullable id)bk_match:(BOOL (^)(ObjectType obj))block; /** Loops through a set to find the objects matching the block. @@ -58,7 +61,7 @@ @return Returns a set of the objects found. @see bk_match: */ -- (NSSet *)bk_select:(BOOL (^)(id obj))block; +- (NSSet *)bk_select:(BOOL (^)(ObjectType obj))block; /** Loops through a set to find the objects not matching the block. @@ -72,7 +75,7 @@ @param block A single-argument, BOOL-returning code block. @return Returns an array of all objects not found. */ -- (NSSet *)bk_reject:(BOOL (^)(id obj))block; +- (NSSet *)bk_reject:(BOOL (^)(ObjectType obj))block; /** Call the block once for each object and create a set of the return values. @@ -84,7 +87,7 @@ @param block A single-argument, object-returning code block. @return Returns a set of the objects returned by the block. */ -- (NSSet *)bk_map:(id (^)(id obj))block; +- (NSSet *)bk_map:(id (^)(ObjectType obj))block; /** Arbitrarily accumulate objects using a block. @@ -100,7 +103,7 @@ @param block A block that takes the current sum and the next object to return the new sum. @return An accumulated value. */ -- (id)bk_reduce:(id)initial withBlock:(id (^)(id sum, id obj))block; +- (nullable id)bk_reduce:(nullable id)initial withBlock:(__nullable id (^)(__nullable id sum, ObjectType obj))block; /** Loops through a set to find whether any object matches the block. @@ -112,7 +115,7 @@ @param block A single-argument, BOOL-returning code block. @return YES for the first time the block returns YES for an object, NO otherwise. */ -- (BOOL)bk_any:(BOOL (^)(id obj))block; +- (BOOL)bk_any:(BOOL (^)(ObjectType obj))block; /** Loops through a set to find whether no objects match the block. @@ -121,13 +124,15 @@ @param block A single-argument, BOOL-returning code block. @return YES if the block returns NO for all objects in the set, NO otherwise. */ -- (BOOL)bk_none:(BOOL (^)(id obj))block; +- (BOOL)bk_none:(BOOL (^)(ObjectType obj))block; /** Loops through a set to find whether all objects match the block. @param block A single-argument, BOOL-returning code block. @return YES if the block returns YES for all objects in the set, NO otherwise. */ -- (BOOL)bk_all:(BOOL (^)(id obj))block; +- (BOOL)bk_all:(BOOL (^)(ObjectType obj))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSTimer+BlocksKit.h b/BlocksKit/Core/NSTimer+BlocksKit.h index 2183d021c..3e0c17a6c 100644 --- a/BlocksKit/Core/NSTimer+BlocksKit.h +++ b/BlocksKit/Core/NSTimer+BlocksKit.h @@ -3,34 +3,51 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Simple category on NSTimer to give it blocks capability. Created by [Jiva DeVoe](https://github.com/jivadevoe) as `NSTimer-Blocks`. */ @interface NSTimer (BlocksKit) -/** Creates and returns a block-based NSTimer object and schedules it on the current run loop. - - @param inTimeInterval The number of seconds between firings of the timer. - @param inBlock The block that the NSTimer fires. - @param inRepeats If YES, the timer will repeatedly reschedule itself until invalidated. If NO, the timer will be invalidated after it fires. - @return A new NSTimer object, configured according to the specified parameters. +/** Creates a new @c NSTimer object using the specified handler, schedules it on + * the current run loop, and returns it. + * + * @param seconds For a repeating timer, the seconds between firings of the + * timer. If seconds is less than or equal to @c 0.0, @c 0.1 is used instead. + * @param repeats If @c YES, the timer will repeatedly reschedule itself until + * invalidated. If @c NO, the timer will be invalidated after it fires. + * @param block The code unit to execute when the timer fires. + * @return A new @c NSTimer object, configured according to the specified parameters. + */ ++ (instancetype)bk_scheduleTimerWithTimeInterval:(NSTimeInterval)seconds repeats:(BOOL)repeats usingBlock:(void (^)(NSTimer *timer))block; + +/** Creates and returns a new @c NSTimer object using the specified handler. + * + * You must add the new timer to a run loop, using @c addTimer:forMode:. Upon + * firing, the timer fires the block. If the timer is configured to repeat, + * there is no need to subsequently re-add the timer to the run loop. + * + * @param seconds For a repeating timer, the seconds between firings of the + * timer. If seconds is less than or equal to @c 0.0, @c 0.1 is used instead. + * @param repeats If @c YES, the timer will repeatedly reschedule itself until + * invalidated. If @c NO, the timer will be invalidated after it fires. + * @param block The code unit to execute when the timer fires. + * @return A new @c NSTimer object, configured according to the specified parameters. */ -+ (NSTimer *)bk_scheduledTimerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))inBlock repeats:(BOOL)inRepeats; ++ (instancetype)bk_timerWithTimeInterval:(NSTimeInterval)seconds repeats:(BOOL)repeats usingBlock:(void (^)(NSTimer *timer))block; -/** Creates and returns a block-based NSTimer initialized with the specified block. +@end - You must add the new timer to a run loop, using `-addTimer:forMode:`. Then, - after seconds seconds have elapsed, the timer fires the block. If the timer - is configured to repeat, there is no need to subsequently re-add the timer. +@interface NSTimer (BlocksKit_Deprecated) - @param inTimeInterval The number of seconds between firings of the timer. - @param inBlock The block that the NSTimer fires. - @param inRepeats If YES, the timer will repeatedly reschedule itself until invalidated. If NO, the timer will be invalidated after it fires. - @return A new NSTimer object, configured according to the specified parameters. - */ -+ (NSTimer *)bk_timerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))inBlock repeats:(BOOL)inRepeats; ++ (instancetype)bk_scheduledTimerWithTimeInterval:(NSTimeInterval)seconds block:(void (^)(NSTimer *timer))block repeats:(BOOL)repeats DEPRECATED_MSG_ATTRIBUTE("Replaced with -bk_performAfterDelay:usingBlock:"); ++ (instancetype)bk_timerWithTimeInterval:(NSTimeInterval)seconds block:(void (^)(NSTimer *timer))block repeats:(BOOL)repeats DEPRECATED_MSG_ATTRIBUTE("Replaced with -bk_performAfterDelay:usingBlock:"); @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/Core/NSTimer+BlocksKit.m b/BlocksKit/Core/NSTimer+BlocksKit.m index ed1ad98fd..6a504e73d 100644 --- a/BlocksKit/Core/NSTimer+BlocksKit.m +++ b/BlocksKit/Core/NSTimer+BlocksKit.m @@ -5,29 +5,46 @@ #import "NSTimer+BlocksKit.h" -@interface NSTimer (BlocksKitPrivate) - -+ (void)bk_executeBlockFromTimer:(NSTimer *)aTimer; - -@end +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wobjc-designated-initializers" @implementation NSTimer (BlocksKit) -+ (id)bk_scheduledTimerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))block repeats:(BOOL)inRepeats ++ (instancetype)bk_scheduleTimerWithTimeInterval:(NSTimeInterval)seconds repeats:(BOOL)repeats usingBlock:(void (^)(NSTimer *timer))block { - NSParameterAssert(block != nil); - return [self scheduledTimerWithTimeInterval:inTimeInterval target:self selector:@selector(bk_executeBlockFromTimer:) userInfo:[block copy] repeats:inRepeats]; + NSTimer *timer = [self bk_timerWithTimeInterval:seconds repeats:repeats usingBlock:block]; + [NSRunLoop.currentRunLoop addTimer:timer forMode:NSDefaultRunLoopMode]; + return timer; } -+ (id)bk_timerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))block repeats:(BOOL)inRepeats ++ (instancetype)bk_timerWithTimeInterval:(NSTimeInterval)inSeconds repeats:(BOOL)repeats usingBlock:(void (^)(NSTimer *timer))block { - NSParameterAssert(block != nil); - return [self timerWithTimeInterval:inTimeInterval target:self selector:@selector(bk_executeBlockFromTimer:) userInfo:[block copy] repeats:inRepeats]; + NSParameterAssert(block != nil); + CFAbsoluteTime seconds = fmax(inSeconds, 0.0001); + CFAbsoluteTime interval = repeats ? seconds : 0; + CFAbsoluteTime fireDate = CFAbsoluteTimeGetCurrent() + seconds; + return (__bridge_transfer NSTimer *)CFRunLoopTimerCreateWithHandler(NULL, fireDate, interval, 0, 0, (void(^)(CFRunLoopTimerRef))block); } -+ (void)bk_executeBlockFromTimer:(NSTimer *)aTimer { - void (^block)(NSTimer *) = [aTimer userInfo]; - if (block) block(aTimer); +@end + +#pragma clang diagnostic pop + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-implementations" + +@implementation NSTimer (BlocksKit_Deprecated) + ++ (instancetype)bk_scheduledTimerWithTimeInterval:(NSTimeInterval)seconds block:(void (^)(NSTimer *timer))block repeats:(BOOL)repeats +{ + return [self bk_scheduleTimerWithTimeInterval:seconds repeats:repeats usingBlock:block]; +} + ++ (instancetype)bk_timerWithTimeInterval:(NSTimeInterval)seconds block:(void (^)(NSTimer *timer))block repeats:(BOOL)repeats +{ + return [self bk_timerWithTimeInterval:seconds repeats:repeats usingBlock:block]; } @end + +#pragma clang diagnostic pop diff --git a/BlocksKit/DynamicDelegate/A2BlockInvocation.h b/BlocksKit/DynamicDelegate/A2BlockInvocation.h index f54e2910b..bce5293d6 100644 --- a/BlocksKit/DynamicDelegate/A2BlockInvocation.h +++ b/BlocksKit/DynamicDelegate/A2BlockInvocation.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /// If a block invocation is instiated with an invalid method signature, /// an `NSInvalidArgumentException` is thrown containing this key in the /// user info. @@ -33,7 +36,7 @@ extern NSString *const A2IncompatibleMethodSignatureKey; @param block An Objective-C block literal @return A method signature matching the declared prototype for the block */ -+ (NSMethodSignature *)methodSignatureForBlock:(id)block; ++ (nullable NSMethodSignature *)methodSignatureForBlock:(id)block; /** @name Creating A2BlockInvocation Objects */ @@ -85,7 +88,7 @@ extern NSString *const A2IncompatibleMethodSignatureKey; @param NO if the buffer copies necessary for invocation failed, YES otherwise. @see invokeWithInvocation:returnValue: */ -- (BOOL)invokeWithInvocation:(NSInvocation *)inv returnValue:(out NSValue **)returnValue; +- (BOOL)invokeWithInvocation:(NSInvocation *)inv returnValue:(out NSValue *__nullable *__nonnull)returnValue; /** Calls the receiver's block with the arguments from the given invocation and sets the return value on the given invocation. @@ -96,3 +99,5 @@ extern NSString *const A2IncompatibleMethodSignatureKey; - (void)invokeWithInvocation:(NSInvocation *)inv; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/DynamicDelegate/A2BlockInvocation.m b/BlocksKit/DynamicDelegate/A2BlockInvocation.m index 82b681296..884fd852c 100644 --- a/BlocksKit/DynamicDelegate/A2BlockInvocation.m +++ b/BlocksKit/DynamicDelegate/A2BlockInvocation.m @@ -7,14 +7,6 @@ NSString *const A2IncompatibleMethodSignatureKey = @"incompatibleMethodSignature"; -#ifndef NSFoundationVersionNumber10_8 -#define NSFoundationVersionNumber10_8 945.00 -#endif - -#ifndef NSFoundationVersionNumber_iOS_6_0 -#define NSFoundationVersionNumber_iOS_6_0 993.00 -#endif - #pragma mark Block Internals typedef NS_OPTIONS(int, BKBlockFlags) { @@ -40,6 +32,15 @@ typedef NS_OPTIONS(int, BKBlockFlags) { // imported variables } *BKBlockRef; +NS_INLINE BOOL typesCompatible(const char *a, const char *b) { + if (a[0] == b[0]) { return YES; } + NSUInteger aSize, aAlign, bSize, bAlign; + NSGetSizeAndAlignment(a, &aSize, &aAlign); + NSGetSizeAndAlignment(a, &bSize, &bAlign); + if (aSize == bSize && aAlign == bAlign) { return YES; } + return !!strcmp(a, b); +} + @interface A2BlockInvocation () @property (nonatomic, readonly) NSMethodSignature *blockSignature; @@ -62,7 +63,7 @@ + (BOOL)isSignature:(NSMethodSignature *)signatureA compatibleWithSignature:(NSM { if (!signatureA || !signatureB) return NO; if ([signatureA isEqual:signatureB]) return YES; - if (signatureA.methodReturnType[0] != signatureB.methodReturnType[0]) return NO; + if (!typesCompatible(signatureA.methodReturnType, signatureB.methodReturnType)) return NO; NSMethodSignature *methodSignature = nil, *blockSignature = nil; if (signatureA.numberOfArguments > signatureB.numberOfArguments) { @@ -77,8 +78,9 @@ + (BOOL)isSignature:(NSMethodSignature *)signatureA compatibleWithSignature:(NSM NSUInteger numberOfArguments = methodSignature.numberOfArguments; for (NSUInteger i = 2; i < numberOfArguments; i++) { - if ([methodSignature getArgumentTypeAtIndex:i][0] != [blockSignature getArgumentTypeAtIndex:i - 1][0]) + if (!typesCompatible([methodSignature getArgumentTypeAtIndex:i], [blockSignature getArgumentTypeAtIndex:i - 1])) { return NO; + } } return YES; diff --git a/BlocksKit/DynamicDelegate/A2DynamicDelegate.h b/BlocksKit/DynamicDelegate/A2DynamicDelegate.h index 927d93536..6ca0fcfd4 100644 --- a/BlocksKit/DynamicDelegate/A2DynamicDelegate.h +++ b/BlocksKit/DynamicDelegate/A2DynamicDelegate.h @@ -3,10 +3,13 @@ // BlocksKit // +#import "BKDefines.h" #import #import #import +NS_ASSUME_NONNULL_BEGIN + /** A2DynamicDelegate implements a class's delegate, data source, or other delegated protocol by associating protocol methods with a block implementation. @@ -56,7 +59,7 @@ * @param protocol A protocol to which the dynamic delegate should conform. * @return An initialized delegate proxy. */ -- (id)initWithProtocol:(Protocol *)protocol; +- (instancetype)initWithProtocol:(Protocol *)protocol; /** The protocol delegating the dynamic delegate. */ @property (nonatomic, readonly) Protocol *protocol; @@ -68,7 +71,7 @@ /** When replacing the delegate using the A2BlockDelegate extensions, the object responding to classical delegate method implementations. */ -@property (nonatomic, weak, readonly) id realDelegate; +@property (nonatomic, weak, readonly, nullable) id realDelegate; /** @name Block Instance Method Implementations */ @@ -78,7 +81,7 @@ @param selector An encoded selector. Must not be NULL. @return A code block, or nil if no block is assigned. */ -- (id)blockImplementationForMethod:(SEL)selector; +- (nullable id)blockImplementationForMethod:(SEL)selector; /** Assigns the given block to be fired when the specified selector is called on the reciever. @@ -96,7 +99,7 @@ @param selector An encoded selector. Must not be NULL. @param block A code block with the same signature as selector. */ -- (void)implementMethod:(SEL)selector withBlock:(id)block; +- (void)implementMethod:(SEL)selector withBlock:(nullable id)block; /** Disassociates any block so that nothing will be fired when the specified selector is called on the reciever. @@ -126,7 +129,7 @@ @param selector An encoded selector. Must not be NULL. @param block A code block with the same signature as selector. */ -- (void)implementClassMethod:(SEL)selector withBlock:(id)block; +- (void)implementClassMethod:(SEL)selector withBlock:(nullable id)block; /** Disassociates any blocks so that nothing will be fired when the specified selector is called on the delegating @@ -137,3 +140,5 @@ - (void)removeBlockImplementationForClassMethod:(SEL)selector; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/DynamicDelegate/A2DynamicDelegate.m b/BlocksKit/DynamicDelegate/A2DynamicDelegate.m index cc47523e5..83ced5f2a 100644 --- a/BlocksKit/DynamicDelegate/A2DynamicDelegate.m +++ b/BlocksKit/DynamicDelegate/A2DynamicDelegate.m @@ -3,9 +3,10 @@ // BlocksKit // -#import -#import "A2BlockInvocation.h" #import "A2DynamicDelegate.h" +@import ObjectiveC.message; +@import ObjectiveC.runtime; +#import "A2BlockInvocation.h" Protocol *a2_dataSourceProtocol(Class cls); Protocol *a2_delegateProtocol(Class cls); @@ -21,6 +22,20 @@ static BOOL selectorsEqual(const void *item1, const void *item2, NSUInteger(*__u return NSStringFromSelector((SEL)item1); } +static inline BOOL protocol_declaredSelector(Protocol *protocol, SEL selector) +{ + for (int i = 0; i < 4; i++) { + BOOL required = 1 & (i); + BOOL instance = 1 & (i >> 1); + + struct objc_method_description description = protocol_getMethodDescription(protocol, selector, required, instance); + if (description.name) { + return YES; + } + } + return NO; +} + @interface NSMapTable (BKAdditions) + (instancetype)bk_selectorsToStrongObjectsMapTable; @@ -108,7 +123,7 @@ - (Class)class return [super class]; } -- (id)initWithProtocol:(Protocol *)protocol +- (instancetype)initWithProtocol:(Protocol *)protocol { _protocol = protocol; _handlers = [NSMutableDictionary dictionary]; @@ -156,7 +171,9 @@ - (BOOL)conformsToProtocol:(Protocol *)aProtocol } - (BOOL)respondsToSelector:(SEL)selector { - return [self.invocationsBySelectors bk_objectForSelector:selector] || class_respondsToSelector(object_getClass(self), selector) || [self.realDelegate respondsToSelector:selector]; + return [self.invocationsBySelectors bk_objectForSelector:selector] || + class_respondsToSelector(object_getClass(self), selector) || + (protocol_declaredSelector(self.protocol, selector) && [self.realDelegate respondsToSelector:selector]); } - (void)doesNotRecognizeSelector:(SEL)aSelector diff --git a/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.h b/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.h index 92e09db27..fa4f142f0 100644 --- a/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.h +++ b/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** NSCache with block adding of objects This category allows you to conditionally add objects to @@ -48,6 +51,8 @@ This block callback is an analog for the cache:willEviceObject: method of NSCacheDelegate. */ -@property (nonatomic, copy, setter = bk_setWillEvictBlock:) void (^bk_willEvictBlock)(NSCache *cache, id obj); +@property (nonatomic, copy, setter = bk_setWillEvictBlock:, nullable) void (^bk_willEvictBlock)(NSCache *cache, id obj); @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.m b/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.m index 3f96196fd..196718690 100644 --- a/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.m +++ b/BlocksKit/DynamicDelegate/Foundation/NSCache+BlocksKit.m @@ -3,8 +3,9 @@ // BlocksKit // -#import "A2DynamicDelegate.h" #import "NSCache+BlocksKit.h" +#import "A2DynamicDelegate.h" +#import "NSObject+A2DynamicDelegate.h" #import "NSObject+A2BlockDelegate.h" #pragma mark Custom delegate diff --git a/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.h b/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.h index b6e0c9ea5..25715a58a 100644 --- a/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.h +++ b/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.h @@ -3,6 +3,7 @@ // BlocksKit // +#import "BKDefines.h" #import /** NSURLConnection with both delegate and block callback support. @@ -56,19 +57,19 @@ in an instance of NSURLConnection. It only works on block-backed NSURLConnection instances. */ -@property (nonatomic, weak, setter = setDelegate:) id delegate; +@property (nonatomic, weak, setter = setDelegate:) id delegate BK_URL_CONNECTION_DEPRECATED; /** The block fired once the connection recieves a response from the server. This block corresponds to the connection:didReceiveResponse: method of NSURLConnectionDataDelegate. */ -@property (nonatomic, copy, setter = bk_setResponseBlock:) void (^bk_responseBlock)(NSURLConnection *connection, NSURLResponse *response); +@property (nonatomic, copy, setter = bk_setResponseBlock:) void (^bk_responseBlock)(NSURLConnection *connection, NSURLResponse *response) BK_URL_CONNECTION_DEPRECATED; /** The block fired upon the failure of the connection. This block corresponds to the connection:didFailWithError: method of NSURLConnectionDelegate. */ -@property (nonatomic, copy, setter = bk_setFailureBlock:) void (^bk_failureBlock)(NSURLConnection *connection, NSError *error); +@property (nonatomic, copy, setter = bk_setFailureBlock:) void (^bk_failureBlock)(NSURLConnection *connection, NSError *error) BK_URL_CONNECTION_DEPRECATED; /** The block that upon the successful completion of the connection. @@ -80,7 +81,7 @@ the recieved data to an instance NSMutableData is left up to the user due to the behavior of frameworks that use NSURLConnection. */ -@property (nonatomic, copy, setter = bk_setSuccessBlock:) void (^bk_successBlock)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData); +@property (nonatomic, copy, setter = bk_setSuccessBlock:) void (^bk_successBlock)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData) BK_URL_CONNECTION_DEPRECATED; /** The block fired every time new data is sent to the server, representing the current percentage of completion. @@ -89,7 +90,7 @@ connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite: method of NSURLConnectionDelegate. */ -@property (nonatomic, copy, setter = bk_setUploadBlock:) void (^bk_uploadBlock)(double percent); +@property (nonatomic, copy, setter = bk_setUploadBlock:) void (^bk_uploadBlock)(double percent) BK_URL_CONNECTION_DEPRECATED; /** The block fired every time new data is recieved from the server, representing the current percentage of completion. @@ -97,14 +98,14 @@ This block corresponds to the connection:didRecieveData: method of NSURLConnectionDelegate. */ -@property (nonatomic, copy, setter = bk_setDownloadBlock:) void (^bk_downloadBlock)(double percent); +@property (nonatomic, copy, setter = bk_setDownloadBlock:) void (^bk_downloadBlock)(double percent) BK_URL_CONNECTION_DEPRECATED; /** Creates and returns an initialized block-backed URL connection that does not begin to load the data for the URL request. @param request The URL request to load. @return An autoreleased NSURLConnection for the specified URL request. */ -+ (NSURLConnection *)bk_connectionWithRequest:(NSURLRequest *)request; ++ (NSURLConnection *)bk_connectionWithRequest:(NSURLRequest *)request BK_URL_CONNECTION_DEPRECATED; /** Creates, starts, and returns an asynchronous, block-backed URL connection @@ -113,14 +114,14 @@ @param success A code block that acts on instances of NSURLResponse and NSData in the event of a successful connection. @param failure A code block that acts on instances of NSURLResponse and NSError in the event of a failed connection. */ -+ (NSURLConnection *)bk_startConnectionWithRequest:(NSURLRequest *)request successHandler:(void (^)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData))success failureHandler:(void (^)(NSURLConnection *connection, NSError *error))failure; ++ (NSURLConnection *)bk_startConnectionWithRequest:(NSURLRequest *)request successHandler:(void (^)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData))success failureHandler:(void (^)(NSURLConnection *connection, NSError *error))failure BK_URL_CONNECTION_DEPRECATED; /** Returns an initialized block-backed URL connection. @return Newly initialized NSURLConnection with the specified properties. @param request The URL request to load. */ -- (id)bk_initWithRequest:(NSURLRequest *)request NS_REPLACES_RECEIVER; +- (instancetype)bk_initWithRequest:(NSURLRequest *)request BK_INITIALIZER BK_URL_CONNECTION_DEPRECATED; /** Returns an initialized URL connection with the specified completion handler. @@ -128,12 +129,12 @@ @param request The URL request to load. @param block A code block that acts on instances of NSURLResponse and NSData in the event of a successful connection. */ -- (id)bk_initWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData))block NS_REPLACES_RECEIVER; +- (instancetype)bk_initWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData))block BK_INITIALIZER BK_URL_CONNECTION_DEPRECATED; /** Causes the connection to begin loading data, if it has not already, with the specified block to be fired on successful completion. @param block A code block that acts on instances of NSURLResponse and NSData in the event of a successful connection. */ -- (void)bk_startWithCompletionBlock:(void (^)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData))block; +- (void)bk_startWithCompletionBlock:(void (^)(NSURLConnection *connection, NSURLResponse *response, NSData *responseData))block BK_URL_CONNECTION_DEPRECATED; @end diff --git a/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.m b/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.m index 301fcd41b..f207edb99 100644 --- a/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.m +++ b/BlocksKit/DynamicDelegate/Foundation/NSURLConnection+BlocksKit.m @@ -3,11 +3,14 @@ // BlocksKit // -#import +#import "NSURLConnection+BlocksKit.h" +@import ObjectiveC.runtime; #import "A2DynamicDelegate.h" -#import "NSObject+A2BlockDelegate.h" #import "NSObject+A2DynamicDelegate.h" -#import "NSURLConnection+BlocksKit.h" +#import "NSObject+A2BlockDelegate.h" + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" #pragma mark Private @@ -306,24 +309,6 @@ - (void)connectionDidFinishLoading:(NSURLConnection *)connection block(connection, connection.bk_response, connection.bk_responseData); } -#pragma mark - Deprecated iOS 4.x authentication methods - -- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge -{ - id realDelegate = self.realDelegate; - if (realDelegate && [realDelegate respondsToSelector:@selector(connection:didReceiveAuthenticationChallenge:)]) - [realDelegate connection:connection didReceiveAuthenticationChallenge:challenge]; -} - -- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace -{ - id realDelegate = self.realDelegate; - if (realDelegate && [realDelegate respondsToSelector:@selector(connection:canAuthenticateAgainstProtectionSpace:)]) - return [realDelegate connection:connection canAuthenticateAgainstProtectionSpace:protectionSpace]; - - return NO; -} - @end #pragma mark - Category @@ -366,12 +351,12 @@ + (NSURLConnection *)bk_startConnectionWithRequest:(NSURLRequest *)request succe return [ret initWithRequest:request delegate:dd startImmediately:YES]; } -- (id)bk_initWithRequest:(NSURLRequest *)request +- (instancetype)bk_initWithRequest:(NSURLRequest *)request { return (self = [self bk_initWithRequest:request completionHandler:nil]); } -- (id)bk_initWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLConnection *, NSURLResponse *, NSData *))block +- (instancetype)bk_initWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLConnection *, NSURLResponse *, NSData *))block { Protocol *delegateProtocol = objc_getProtocol("NSURLConnectionDelegate"); if (!delegateProtocol) @@ -424,3 +409,5 @@ - (void)bk_setDownloadBlock:(void (^)(double))block { } @end + +#pragma clang diagnostic pop diff --git a/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.h b/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.h index ca7683780..bdfb2a486 100644 --- a/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.h +++ b/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** The A2BlockDelegate category extends features provided by A2DynamicDelegate to create custom block properties in a category on a delegating object and dynamically map them to delegate (`UIAlertViewDelegate`), data source @@ -104,7 +107,7 @@ @see bk_dynamicDelegate: @return A dynamic delegate. */ -- (id)bk_ensuredDynamicDelegate; +@property (NS_NONATOMIC_IOSONLY, readonly, strong) id bk_ensuredDynamicDelegate; /** Creates or gets a dynamic protocol implementation, assuring that it is assigned to the delegate property correspending to that protocol @@ -114,3 +117,5 @@ - (id)bk_ensuredDynamicDelegateForProtocol:(Protocol *)protocol; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.m b/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.m index 13515cad4..d7238dd8a 100644 --- a/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.m +++ b/BlocksKit/DynamicDelegate/NSObject+A2BlockDelegate.m @@ -3,8 +3,9 @@ // BlocksKit // -#import #import "NSObject+A2BlockDelegate.h" +@import ObjectiveC.message; +#import "A2DynamicDelegate.h" #import "NSObject+A2DynamicDelegate.h" #pragma mark - Declarations and macros diff --git a/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.h b/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.h index a99cfdcad..b09c33913 100644 --- a/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.h +++ b/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.h @@ -3,9 +3,11 @@ // BlocksKit // -#import +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** The A2DynamicDelegate category to NSObject provides the primary interface by which dynamic delegates are generated for a given object. */ @interface NSObject (A2DynamicDelegate) @@ -26,7 +28,7 @@ @see blockImplementationForMethod: @return A dynamic data source. */ -- (id)bk_dynamicDataSource; +@property (readonly, strong) id bk_dynamicDataSource; /** Creates or gets a dynamic delegate for the reciever. @@ -44,7 +46,7 @@ @see blockImplementationForMethod: @return A dynamic delegate. */ -- (id)bk_dynamicDelegate; +@property (readonly, strong) id bk_dynamicDelegate; /** Creates or gets a dynamic protocol implementation for the reciever. The designated initializer. @@ -65,3 +67,5 @@ - (id)bk_dynamicDelegateForProtocol:(Protocol *)protocol; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.m b/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.m index 4ec24c816..17854a4e4 100644 --- a/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.m +++ b/BlocksKit/DynamicDelegate/NSObject+A2DynamicDelegate.m @@ -3,8 +3,9 @@ // BlocksKit // -#import #import "NSObject+A2DynamicDelegate.h" +@import ObjectiveC.runtime; +#import "A2DynamicDelegate.h" extern Protocol *a2_dataSourceProtocol(Class cls); extern Protocol *a2_delegateProtocol(Class cls); diff --git a/BlocksKit/BlocksKit-Info.plist b/BlocksKit/Info.plist similarity index 62% rename from BlocksKit/BlocksKit-Info.plist rename to BlocksKit/Info.plist index b27cb48e8..5fb995e79 100644 --- a/BlocksKit/BlocksKit-Info.plist +++ b/BlocksKit/Info.plist @@ -3,28 +3,24 @@ CFBundleDevelopmentRegion - English + en CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - + $(EXECUTABLE_NAME) CFBundleIdentifier - us.pandamonia.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName - ${PRODUCT_NAME} + $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString - 2.2 + 1.0 CFBundleSignature ???? CFBundleVersion - 2.2.5 + $(CURRENT_PROJECT_VERSION) NSHumanReadableCopyright - Copyright © 2011-2014 Zachary Waldowski and Pandamonia LLC. All rights reserved. - NSPrincipalClass - + Copyright © 2011-2015 Zachary Waldowski and Pandamonia LLC. All rights reserved. diff --git a/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.h b/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.h index 3675e603b..8ddc5aae4 100644 --- a/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.h +++ b/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** MFMailComposeViewController with block callbacks. If you provide a completion handler to an instance of @@ -25,6 +28,8 @@ mailComposeController:didFinishWithResult:error:method of MFMailComposeViewControllerDelegate. */ -@property (nonatomic, copy, setter = bk_setCompletionBlock:) void (^bk_completionBlock)(MFMailComposeViewController *controller, MFMailComposeResult result, NSError *error); +@property (nonatomic, copy, setter = bk_setCompletionBlock:, nullable) void (^bk_completionBlock)(MFMailComposeViewController *controller, MFMailComposeResult result, NSError *error); @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.m b/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.m index fdab4b6e3..f16f2bb65 100644 --- a/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.m +++ b/BlocksKit/MessageUI/MFMailComposeViewController+BlocksKit.m @@ -3,8 +3,9 @@ // BlocksKit // -#import "A2DynamicDelegate.h" #import "MFMailComposeViewController+BlocksKit.h" +#import "A2DynamicDelegate.h" +#import "NSObject+A2DynamicDelegate.h" #import "NSObject+A2BlockDelegate.h" #pragma mark Custom delegate diff --git a/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.h b/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.h index 6dc97a4e9..794a80ef2 100644 --- a/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.h +++ b/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** MFMessageComposeViewController with block callback in addition to delegation. If you provide a completion handler to an instance of @@ -25,6 +28,8 @@ messageComposeViewController:didFinishWithResult: method of MFMessageComposeViewControllerDelegate. */ -@property (nonatomic, copy, setter = bk_setCompletionBlock:) void (^bk_completionBlock)(MFMessageComposeViewController *controller, MessageComposeResult result); +@property (nonatomic, copy, setter = bk_setCompletionBlock:, nullable) void (^bk_completionBlock)(MFMessageComposeViewController *controller, MessageComposeResult result); @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.m b/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.m index 5fd4d288f..06986ffcf 100644 --- a/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.m +++ b/BlocksKit/MessageUI/MFMessageComposeViewController+BlocksKit.m @@ -3,8 +3,9 @@ // BlocksKit // -#import "A2DynamicDelegate.h" #import "MFMessageComposeViewController+BlocksKit.h" +#import "A2DynamicDelegate.h" +#import "NSObject+A2DynamicDelegate.h" #import "NSObject+A2BlockDelegate.h" #pragma mark Custom delegate diff --git a/BlocksKit/Module-Mac.modulemap b/BlocksKit/Module-Mac.modulemap new file mode 100644 index 000000000..fd18cabee --- /dev/null +++ b/BlocksKit/Module-Mac.modulemap @@ -0,0 +1,26 @@ +framework module BlocksKit { + umbrella header "BlocksKit.h" + requires objc + + module Dynamic { + header "A2BlockInvocation.h" + header "A2DynamicDelegate.h" + header "NSObject+A2BlockDelegate.h" + header "NSObject+A2DynamicDelegate.h" + link framework "Foundation" + + module Foundation { + // if we get any more than two this should become an umbrella + header "NSCache+BlocksKit.h" + header "NSURLConnection+BlocksKit.h" + link framework "Foundation" + export Dynamic + export * + } + + export Foundation + } + + export * + module * { export * } +} diff --git a/BlocksKit/Module-iOS.modulemap b/BlocksKit/Module-iOS.modulemap new file mode 100644 index 000000000..78d81a28e --- /dev/null +++ b/BlocksKit/Module-iOS.modulemap @@ -0,0 +1,47 @@ +framework module BlocksKit { + umbrella header "BlocksKit.h" + requires objc + + module Dynamic { + header "A2BlockInvocation.h" + header "A2DynamicDelegate.h" + header "NSObject+A2BlockDelegate.h" + header "NSObject+A2DynamicDelegate.h" + link framework "Foundation" + + module Foundation { + // if we get any more than two this should become an umbrella + header "NSCache+BlocksKit.h" + header "NSURLConnection+BlocksKit.h" + link framework "Foundation" + export Dynamic + export * + } + + module MessageUI { + header "BlocksKit+MessageUI.h" + link framework "MessageUI" + export Dynamic + export * + } + + module QuickLook { + header "BlocksKit+QuickLook.h" + link framework "QuickLook" + export Dynamic + export * + } + + module UIKit { + header "BlocksKit+UIKit.h" + link framework "UIKit" + export Dynamic + export * + } + + export Foundation + } + + export * + module * { export * } +} diff --git a/BlocksKit/QuickLook/QLPreviewController+BlocksKit.h b/BlocksKit/QuickLook/QLPreviewController+BlocksKit.h index 2884024af..61a262524 100644 --- a/BlocksKit/QuickLook/QLPreviewController+BlocksKit.h +++ b/BlocksKit/QuickLook/QLPreviewController+BlocksKit.h @@ -3,20 +3,25 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + @interface QLPreviewController (BlocksKit) -@property (nonatomic, copy, setter = bk_setFrameForPreviewItemInSourceView:) CGRect (^bk_frameForPreviewItem)(QLPreviewController *controller, iditem, UIView **sourceView); +@property (nonatomic, copy, setter = bk_setFrameForPreviewItemInSourceView:, nullable) CGRect (^bk_frameForPreviewItem)(QLPreviewController *controller, iditem, UIView *_Nullable *_Nonnull); -@property (nonatomic, copy, setter = bk_setTransitionImageForPreviewItem:) UIImage *(^bk_transitionImageForPreviewItem)(QLPreviewController *controller, id item, CGRect *contentRect); +@property (nonatomic, copy, setter = bk_setTransitionImageForPreviewItem:, nullable) UIImage *(^bk_transitionImageForPreviewItem)(QLPreviewController *controller, id item, CGRect *contentRect); -@property (nonatomic, copy, setter = bk_setShouldOpenURLForPreviewItem:) BOOL (^bk_shouldOpenURLForPreviewItem)(QLPreviewController *controller, NSURL *url, id item); +@property (nonatomic, copy, setter = bk_setShouldOpenURLForPreviewItem:, nullable) BOOL (^bk_shouldOpenURLForPreviewItem)(QLPreviewController *controller, NSURL *url, id item); /** The block to be fired before the Quick Look controller will dismiss. */ -@property (nonatomic, copy, setter = bk_setWillDismissBlock:) void (^bk_willDismissBlock)(QLPreviewController *controller); +@property (nonatomic, copy, setter = bk_setWillDismissBlock:, nullable) void (^bk_willDismissBlock)(QLPreviewController *controller); /** The block to be fired after the Quick Look controller did dismiss. */ -@property (nonatomic, copy, setter = bk_setDidDismissBlock:) void (^bk_didDismissBlock)(QLPreviewController *controller); +@property (nonatomic, copy, setter = bk_setDidDismissBlock:, nullable) void (^bk_didDismissBlock)(QLPreviewController *controller); @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/QuickLook/QLPreviewController+BlocksKit.m b/BlocksKit/QuickLook/QLPreviewController+BlocksKit.m index 4e5cc66bb..22a55812a 100644 --- a/BlocksKit/QuickLook/QLPreviewController+BlocksKit.m +++ b/BlocksKit/QuickLook/QLPreviewController+BlocksKit.m @@ -3,9 +3,10 @@ // BlocksKit // -#import "NSObject+A2BlockDelegate.h" -#import "NSObject+A2DynamicDelegate.h" #import "QLPreviewController+BlocksKit.h" +#import "A2DynamicDelegate.h" +#import "NSObject+A2DynamicDelegate.h" +#import "NSObject+A2BlockDelegate.h" #pragma mark Custom delegate diff --git a/BlocksKit/UIKit/UIActionSheet+BlocksKit.h b/BlocksKit/UIKit/UIActionSheet+BlocksKit.h index 599690da5..f04abe32b 100644 --- a/BlocksKit/UIKit/UIActionSheet+BlocksKit.h +++ b/BlocksKit/UIKit/UIActionSheet+BlocksKit.h @@ -4,6 +4,7 @@ // #import +#import "BKDefines.h" /** UIActionSheet without delegates! @@ -41,14 +42,14 @@ @param title The header of the action sheet. @return A newly created action sheet. */ -+ (id)bk_actionSheetWithTitle:(NSString *)title; ++ (instancetype)bk_actionSheetWithTitle:(NSString *)title BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** Returns a configured action sheet with only a title and cancel button. @param title The header of the action sheet. @return An instantiated actionSheet. */ -- (id)bk_initWithTitle:(NSString *)title NS_REPLACES_RECEIVER; +- (instancetype)bk_initWithTitle:(NSString *)title BK_INITIALIZER BK_ALERT_CONTROLLER_DEPRECATED(2_0); ///----------------------------------- /// @name Adding buttons @@ -59,7 +60,7 @@ @param title The text of the button. @param block A block of code. */ -- (NSInteger)bk_addButtonWithTitle:(NSString *)title handler:(void (^)(void))block; +- (NSInteger)bk_addButtonWithTitle:(NSString *)title handler:(void (^)(void))block BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** Set the destructive (red) button with an associated code block. @@ -70,7 +71,7 @@ @param title The text of the button. @param block A block of code. */ -- (NSInteger)bk_setDestructiveButtonWithTitle:(NSString *)title handler:(void (^)(void))block; +- (NSInteger)bk_setDestructiveButtonWithTitle:(NSString *)title handler:(void (^)(void))block BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** Set the title and trigger of the cancel button. @@ -83,7 +84,7 @@ @param title The text of the button. @param block A block of code. */ -- (NSInteger)bk_setCancelButtonWithTitle:(NSString *)title handler:(void (^)(void))block; +- (NSInteger)bk_setCancelButtonWithTitle:(NSString *)title handler:(void (^)(void))block BK_ALERT_CONTROLLER_DEPRECATED(2_0); ///----------------------------------- /// @name Altering actions @@ -94,14 +95,14 @@ @param block A code block, or nil to set no response. @param index The index of a button already added to the action sheet. */ -- (void)bk_setHandler:(void (^)(void))block forButtonAtIndex:(NSInteger)index; +- (void)bk_setHandler:(void (^)(void))block forButtonAtIndex:(NSInteger)index BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block that is to be fired when a button is pressed. @param index The index of a button already added to the action sheet. @return A code block, or nil if no block is assigned. */ -- (void (^)(void))bk_handlerForButtonAtIndex:(NSInteger)index; +- (void (^)(void))bk_handlerForButtonAtIndex:(NSInteger)index BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block to be fired when the action sheet is dismissed with the cancel button and/or action. @@ -111,18 +112,18 @@ you can set this property multiple times and multiple cancel buttons will not be generated. */ -@property (nonatomic, copy, setter = bk_setCancelBlock:) void (^bk_cancelBlock)(void); +@property (nonatomic, copy, setter = bk_setCancelBlock:) void (^bk_cancelBlock)(void) BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block to be fired before the action sheet will show. */ -@property (nonatomic, copy, setter = bk_setWillShowBlock:) void (^bk_willShowBlock)(UIActionSheet *actionSheet); +@property (nonatomic, copy, setter = bk_setWillShowBlock:) void (^bk_willShowBlock)(UIActionSheet *actionSheet) BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block to be fired when the action sheet shows. */ -@property (nonatomic, copy, setter = bk_setDidShowBlock:) void (^bk_didShowBlock)(UIActionSheet *actionSheet); +@property (nonatomic, copy, setter = bk_setDidShowBlock:) void (^bk_didShowBlock)(UIActionSheet *actionSheet) BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block to be fired before the action sheet will dismiss. */ -@property (nonatomic, copy, setter = bk_setWillDismissBlock:) void (^bk_willDismissBlock)(UIActionSheet *actionSheet, NSInteger buttonIndex); +@property (nonatomic, copy, setter = bk_setWillDismissBlock:) void (^bk_willDismissBlock)(UIActionSheet *actionSheet, NSInteger buttonIndex) BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block to be fired after the action sheet dismisses. */ -@property (nonatomic, copy, setter = bk_setDidDismissBlock:) void (^bk_didDismissBlock)(UIActionSheet *actionSheet, NSInteger buttonIndex); +@property (nonatomic, copy, setter = bk_setDidDismissBlock:) void (^bk_didDismissBlock)(UIActionSheet *actionSheet, NSInteger buttonIndex) BK_ALERT_CONTROLLER_DEPRECATED(2_0); @end diff --git a/BlocksKit/UIKit/UIActionSheet+BlocksKit.m b/BlocksKit/UIKit/UIActionSheet+BlocksKit.m index 6d7166899..6cb54e51d 100644 --- a/BlocksKit/UIKit/UIActionSheet+BlocksKit.m +++ b/BlocksKit/UIKit/UIActionSheet+BlocksKit.m @@ -3,9 +3,13 @@ // BlocksKit // -#import "NSObject+A2BlockDelegate.h" -#import "NSObject+A2DynamicDelegate.h" #import "UIActionSheet+BlocksKit.h" +#import "A2DynamicDelegate.h" +#import "NSObject+A2DynamicDelegate.h" +#import "NSObject+A2BlockDelegate.h" + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" #pragma mark Custom delegate @@ -22,20 +26,18 @@ - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger id realDelegate = self.realDelegate; if (realDelegate && [realDelegate respondsToSelector:@selector(actionSheet:clickedButtonAtIndex:)]) [realDelegate actionSheet:actionSheet clickedButtonAtIndex:buttonIndex]; - - void (^block)(void) = self.handlers[@(buttonIndex)]; - // Note: On iPad with iOS 8 GM seed, `actionSheet:clickedButtonAtIndex:` always gets called twice if you tap any button other than Cancel; - // In other words, assume you have two buttons: OK and Cancel; if you tap OK, this method will be called once for the OK button and once - // for the Cancel button. This could result in some really obscure bugs, so adding `didHandleButtonClick` property maintains iOS 7 compatibility. - if (block && self.didHandleButtonClick == NO) { - self.didHandleButtonClick = YES; + void (^handler)(void) = self.handlers[@(buttonIndex)]; + + // Note: On iPad with iOS 8 GM seed, `actionSheet:clickedButtonAtIndex:` always gets called twice if you tap any button other than Cancel; + // In other words, assume you have two buttons: OK and Cancel; if you tap OK, this method will be called once for the OK button and once + // for the Cancel button. This could result in some really obscure bugs, so adding `didHandleButtonClick` property maintains iOS 7 compatibility. + if (handler && self.didHandleButtonClick == NO) { + self.didHandleButtonClick = YES; - // Presenting view controllers from within action sheet delegate does not work on iPad running iOS 8 GM seed, without delay - dispatch_async(dispatch_get_main_queue(), ^{ - block(); - }); - } + // Presenting view controllers from within action sheet delegate does not work on iPad running iOS 8 GM seed, without delay + dispatch_async(dispatch_get_main_queue(), handler); + } } - (void)willPresentActionSheet:(UIActionSheet *)actionSheet @@ -53,7 +55,7 @@ - (void)didPresentActionSheet:(UIActionSheet *)actionSheet id realDelegate = self.realDelegate; if (realDelegate && [realDelegate respondsToSelector:@selector(didPresentActionSheet:)]) [realDelegate didPresentActionSheet:actionSheet]; - + void (^block)(UIActionSheet *) = [self blockImplementationForMethod:_cmd]; if (block) block(actionSheet); } @@ -63,7 +65,7 @@ - (void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSI id realDelegate = self.realDelegate; if (realDelegate && [realDelegate respondsToSelector:@selector(actionSheet:willDismissWithButtonIndex:)]) [realDelegate actionSheet:actionSheet willDismissWithButtonIndex:buttonIndex]; - + void (^block)(UIActionSheet *, NSInteger) = [self blockImplementationForMethod:_cmd]; if (block) block(actionSheet, buttonIndex); } @@ -76,6 +78,7 @@ - (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSIn void (^block)(UIActionSheet *, NSInteger) = [self blockImplementationForMethod:_cmd]; if (block) block(actionSheet, buttonIndex); + self.didHandleButtonClick = NO; } - (void)actionSheetCancel:(UIActionSheet *)actionSheet @@ -83,7 +86,7 @@ - (void)actionSheetCancel:(UIActionSheet *)actionSheet id realDelegate = self.realDelegate; if (realDelegate && [realDelegate respondsToSelector:@selector(actionSheetCancel:)]) [realDelegate actionSheetCancel:actionSheet]; - + void (^block)(void) = actionSheet.bk_cancelBlock; if (block) block(); } @@ -111,11 +114,11 @@ + (void)load #pragma mark Initializers -+ (id)bk_actionSheetWithTitle:(NSString *)title { ++ (instancetype)bk_actionSheetWithTitle:(NSString *)title { return [[[self class] alloc] bk_initWithTitle:title]; } -- (id)bk_initWithTitle:(NSString *)title { +- (instancetype)bk_initWithTitle:(NSString *)title { self = [self initWithTitle:title delegate:self.bk_dynamicDelegate cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; if (!self) { return nil; } self.delegate = self.bk_dynamicDelegate; @@ -136,7 +139,7 @@ - (NSInteger)bk_setDestructiveButtonWithTitle:(NSString *)title handler:(void (^ self.destructiveButtonIndex = index; return index; } - + - (NSInteger)bk_setCancelButtonWithTitle:(NSString *)title handler:(void (^)(void))block { NSInteger cancelButtonIndex = self.cancelButtonIndex; @@ -179,3 +182,5 @@ - (void)bk_setCancelBlock:(void (^)(void))block } @end + +#pragma clang diagnostic pop diff --git a/BlocksKit/UIKit/UIAlertView+BlocksKit.h b/BlocksKit/UIKit/UIAlertView+BlocksKit.h index 923706db9..8bc855790 100644 --- a/BlocksKit/UIKit/UIAlertView+BlocksKit.h +++ b/BlocksKit/UIKit/UIAlertView+BlocksKit.h @@ -4,6 +4,7 @@ // #import +#import "BKDefines.h" /** UIAlertView without delegates! @@ -48,14 +49,14 @@ @return The UIAlertView. */ -+ (UIAlertView*)bk_showAlertViewWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSArray *)otherButtonTitles handler:(void (^)(UIAlertView *alertView, NSInteger buttonIndex))block; ++ (instancetype)bk_showAlertViewWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSArray *)otherButtonTitles handler:(void (^)(UIAlertView *alertView, NSInteger buttonIndex))block BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** Creates and returns a new alert view with only a title and cancel button. @param title The title of the alert view. @return A newly created alert view. */ -+ (id)bk_alertViewWithTitle:(NSString *)title; ++ (instancetype)bk_alertViewWithTitle:(NSString *)title BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** Creates and returns a new alert view with only a title, message, and cancel button. @@ -63,7 +64,7 @@ @param message The message content of the alert. @return A newly created alert view. */ -+ (id)bk_alertViewWithTitle:(NSString *)title message:(NSString *)message; ++ (instancetype)bk_alertViewWithTitle:(NSString *)title message:(NSString *)message BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** Returns a configured alert view with only a title, message, and cancel button. @@ -71,7 +72,7 @@ @param message The message content of the alert. @return An instantiated alert view. */ -- (id)bk_initWithTitle:(NSString *)title message:(NSString *)message NS_REPLACES_RECEIVER; +- (instancetype)bk_initWithTitle:(NSString *)title message:(NSString *)message BK_INITIALIZER BK_ALERT_CONTROLLER_DEPRECATED(2_0); ///----------------------------------- /// @name Adding buttons @@ -82,14 +83,14 @@ @param title The text of the button. @param block A block of code. */ -- (NSInteger)bk_addButtonWithTitle:(NSString *)title handler:(void (^)(void))block; +- (NSInteger)bk_addButtonWithTitle:(NSString *)title handler:(void (^)(void))block BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** Set the title and trigger of the cancel button. @param title The text of the button. @param block A block of code. */ -- (NSInteger)bk_setCancelButtonWithTitle:(NSString *)title handler:(void (^)(void))block; +- (NSInteger)bk_setCancelButtonWithTitle:(NSString *)title handler:(void (^)(void))block BK_ALERT_CONTROLLER_DEPRECATED(2_0); ///----------------------------------- /// @name Altering actions @@ -100,14 +101,14 @@ @param block A code block, or nil to set no response. @param index The index of a button already added to the action sheet. */ -- (void)bk_setHandler:(void (^)(void))block forButtonAtIndex:(NSInteger)index; +- (void)bk_setHandler:(void (^)(void))block forButtonAtIndex:(NSInteger)index BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block that is to be fired when a button is pressed. @param index The index of the button already added to the alert view. @return A code block, or nil if no block yet assigned. */ -- (void (^)(void))bk_handlerForButtonAtIndex:(NSInteger)index; +- (void (^)(void))bk_handlerForButtonAtIndex:(NSInteger)index BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block to be fired when the action sheet is dismissed with the cancel button. @@ -116,21 +117,21 @@ property multiple times but multiple cancel buttons will not be generated. */ -@property (nonatomic, copy, setter = bk_setCancelBlock:) void (^bk_cancelBlock)(void); +@property (nonatomic, copy, setter = bk_setCancelBlock:) void (^bk_cancelBlock)(void) BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block to be fired before the alert view will show. */ -@property (nonatomic, copy, setter = bk_setWillShowBlock:) void (^bk_willShowBlock)(UIAlertView *alertView); +@property (nonatomic, copy, setter = bk_setWillShowBlock:) void (^bk_willShowBlock)(UIAlertView *alertView) BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block to be fired when the alert view shows. */ -@property (nonatomic, copy, setter = bk_setDidShowBlock:) void (^bk_didShowBlock)(UIAlertView *alertView); +@property (nonatomic, copy, setter = bk_setDidShowBlock:) void (^bk_didShowBlock)(UIAlertView *alertView) BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block to be fired before the alert view will dismiss. */ -@property (nonatomic, copy, setter = bk_setWillDismissBlock:) void (^bk_willDismissBlock)(UIAlertView *alertView, NSInteger buttonIndex); +@property (nonatomic, copy, setter = bk_setWillDismissBlock:) void (^bk_willDismissBlock)(UIAlertView *alertView, NSInteger buttonIndex) BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block to be fired after the alert view dismisses. */ -@property (nonatomic, copy, setter = bk_setDidDismissBlock:) void (^bk_didDismissBlock)(UIAlertView *alertView, NSInteger buttonIndex); +@property (nonatomic, copy, setter = bk_setDidDismissBlock:) void (^bk_didDismissBlock)(UIAlertView *alertView, NSInteger buttonIndex) BK_ALERT_CONTROLLER_DEPRECATED(2_0); /** The block to be fired to determine whether the first non-cancel should be enabled */ -@property (nonatomic, copy, setter = bk_SetShouldEnableFirstOtherButtonBlock:) BOOL (^bk_shouldEnableFirstOtherButtonBlock)(UIAlertView *alertView) NS_AVAILABLE_IOS(5_0); +@property (nonatomic, copy, setter = bk_SetShouldEnableFirstOtherButtonBlock:) BOOL (^bk_shouldEnableFirstOtherButtonBlock)(UIAlertView *alertView) BK_ALERT_CONTROLLER_DEPRECATED(5_0); @end diff --git a/BlocksKit/UIKit/UIAlertView+BlocksKit.m b/BlocksKit/UIKit/UIAlertView+BlocksKit.m index ac6e1fe6d..0262c3630 100644 --- a/BlocksKit/UIKit/UIAlertView+BlocksKit.m +++ b/BlocksKit/UIKit/UIAlertView+BlocksKit.m @@ -3,10 +3,13 @@ // BlocksKit // +#import "UIAlertView+BlocksKit.h" #import "A2DynamicDelegate.h" #import "NSObject+A2BlockDelegate.h" #import "NSObject+A2DynamicDelegate.h" -#import "UIAlertView+BlocksKit.h" + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" #pragma mark Delegate @@ -127,7 +130,7 @@ + (void)load #pragma mark Convenience -+ (UIAlertView*)bk_showAlertViewWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSArray *)otherButtonTitles handler:(void (^)(UIAlertView *alertView, NSInteger buttonIndex))block ++ (instancetype)bk_showAlertViewWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSArray *)otherButtonTitles handler:(void (^)(UIAlertView *alertView, NSInteger buttonIndex))block { // If no buttons were specified, cancel button becomes "Dismiss" if (!cancelButtonTitle.length && !otherButtonTitles.count) @@ -151,17 +154,17 @@ + (UIAlertView*)bk_showAlertViewWithTitle:(NSString *)title message:(NSString *) #pragma mark Initializers -+ (id)bk_alertViewWithTitle:(NSString *)title ++ (instancetype)bk_alertViewWithTitle:(NSString *)title { return [self bk_alertViewWithTitle:title message:nil]; } -+ (id)bk_alertViewWithTitle:(NSString *)title message:(NSString *)message ++ (instancetype)bk_alertViewWithTitle:(NSString *)title message:(NSString *)message { return [[[self class] alloc] bk_initWithTitle:title message:message]; } -- (id)bk_initWithTitle:(NSString *)title message:(NSString *)message +- (instancetype)bk_initWithTitle:(NSString *)title message:(NSString *)message { self = [self initWithTitle:title message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:nil]; if (!self) return nil; @@ -223,3 +226,5 @@ - (void)bk_setCancelBlock:(void (^)(void))block } @end + +#pragma clang diagnostic pop diff --git a/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.h b/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.h index a070e11db..2718f3da4 100644 --- a/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.h +++ b/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block event initialization for UIBarButtonItem. This set of extensions has near-drop-in replacements @@ -26,7 +29,7 @@ @param systemItem The system item to use as the item representation. One of the constants defined in UIBarButtonSystemItem. @param action The block that gets fired on the button press. */ -- (id)bk_initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem handler:(void (^)(id sender))action NS_REPLACES_RECEIVER; +- (instancetype)bk_initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem handler:(void (^)(id sender))action BK_INITIALIZER; /** Creates and returns a configured item using the specified image and style. @@ -37,7 +40,7 @@ @param style The style of the item. One of the constants defined in UIBarButtonItemStyle. @param action The block that gets fired on the button press. */ -- (id)bk_initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action NS_REPLACES_RECEIVER; +- (instancetype)bk_initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action BK_INITIALIZER; /** Creates and returns a configured item using the specified image and style. @@ -47,7 +50,7 @@ @param style The style of the item. One of the constants defined in UIBarButtonItemStyle. @param action The block that gets fired on the button press. */ -- (id)bk_initWithImage:(UIImage *)image landscapeImagePhone:(UIImage *)landscapeImagePhone style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action NS_REPLACES_RECEIVER NS_AVAILABLE_IOS(5_0); +- (instancetype)bk_initWithImage:(UIImage *)image landscapeImagePhone:(UIImage *)landscapeImagePhone style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action BK_INITIALIZER; /** Creates and returns a configured item using the specified text and style. @@ -56,6 +59,8 @@ @param style The style of the item. One of the constants defined in UIBarButtonItemStyle. @param action The block that gets fired on the button press. */ -- (id)bk_initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action NS_REPLACES_RECEIVER; +- (instancetype)bk_initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action BK_INITIALIZER; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.m b/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.m index e54bbd349..3f7e58e69 100644 --- a/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.m +++ b/BlocksKit/UIKit/UIBarButtonItem+BlocksKit.m @@ -3,8 +3,8 @@ // BlocksKit // -#import #import "UIBarButtonItem+BlocksKit.h" +@import ObjectiveC.runtime; static const void *BKBarButtonItemBlockKey = &BKBarButtonItemBlockKey; @@ -16,7 +16,7 @@ - (void)bk_handleAction:(UIBarButtonItem *)sender; @implementation UIBarButtonItem (BlocksKit) -- (id)bk_initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem handler:(void (^)(id sender))action +- (instancetype)bk_initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem handler:(void (^)(id sender))action { self = [self initWithBarButtonSystemItem:systemItem target:self action:@selector(bk_handleAction:)]; if (!self) return nil; @@ -26,7 +26,7 @@ - (id)bk_initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem handler:( return self; } -- (id)bk_initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action +- (instancetype)bk_initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action { self = [self initWithImage:image style:style target:self action:@selector(bk_handleAction:)]; if (!self) return nil; @@ -36,7 +36,7 @@ - (id)bk_initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style handle return self; } -- (id)bk_initWithImage:(UIImage *)image landscapeImagePhone:(UIImage *)landscapeImagePhone style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action +- (instancetype)bk_initWithImage:(UIImage *)image landscapeImagePhone:(UIImage *)landscapeImagePhone style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action { self = [self initWithImage:image landscapeImagePhone:landscapeImagePhone style:style target:self action:@selector(bk_handleAction:)]; if (!self) return nil; @@ -46,7 +46,7 @@ - (id)bk_initWithImage:(UIImage *)image landscapeImagePhone:(UIImage *)landscape return self; } -- (id)bk_initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action +- (instancetype)bk_initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style handler:(void (^)(id sender))action { self = [self initWithTitle:title style:style target:self action:@selector(bk_handleAction:)]; if (!self) return nil; @@ -59,7 +59,7 @@ - (id)bk_initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style handl - (void)bk_handleAction:(UIBarButtonItem *)sender { void (^block)(id) = objc_getAssociatedObject(self, BKBarButtonItemBlockKey); - if (block) block(self); + if (block) block(sender); } @end diff --git a/BlocksKit/UIKit/UIControl+BlocksKit.h b/BlocksKit/UIKit/UIControl+BlocksKit.h index 4de0cf3f8..05e3c1985 100644 --- a/BlocksKit/UIKit/UIControl+BlocksKit.h +++ b/BlocksKit/UIKit/UIControl+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block control event handling for UIControl. Includes code by the following: @@ -28,9 +31,14 @@ */ - (void)bk_addEventHandler:(void (^)(id sender))handler forControlEvents:(UIControlEvents)controlEvents; -/** Removes all blocks for a particular event combination. - @param controlEvents A bitmask specifying the control events for which the block will be removed. - @see addEventHandler:forControlEvents: +/** Removes all control event blocks associated with the given mask of control + * events. + * + * Do note that, like @c UIControl, this method will not decompose control + * events; thus, only a handler matching an exact given bitmask will be removed. + * + * @param controlEvents A bitmask specifying the control events for which the block will be removed. + * @see addEventHandler:forControlEvents: */ - (void)bk_removeEventHandlersForControlEvents:(UIControlEvents)controlEvents; @@ -42,3 +50,5 @@ - (BOOL)bk_hasEventHandlersForControlEvents:(UIControlEvents)controlEvents; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/UIKit/UIControl+BlocksKit.m b/BlocksKit/UIKit/UIControl+BlocksKit.m index 35f34f05d..674356f23 100644 --- a/BlocksKit/UIKit/UIControl+BlocksKit.m +++ b/BlocksKit/UIKit/UIControl+BlocksKit.m @@ -3,8 +3,8 @@ // BlocksKit // -#import #import "UIControl+BlocksKit.h" +@import ObjectiveC.runtime; static const void *BKControlHandlersKey = &BKControlHandlersKey; diff --git a/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.h b/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.h index c331741a3..2fb9fcfa7 100644 --- a/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.h +++ b/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block functionality for UIGestureRecognizer. Use of the delay property is pretty straightforward, although @@ -49,7 +52,7 @@ @param block The block which handles an executed gesture. @param delay A number of seconds after which the block will fire. */ -+ (id)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay; ++ (instancetype)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay; /** Initializes an allocated gesture recognizer that will call the given block after a given delay. @@ -60,7 +63,7 @@ @param block The block which handles an executed gesture. @param delay A number of seconds after which the block will fire. */ -- (id)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay NS_REPLACES_RECEIVER; +- (instancetype)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay BK_INITIALIZER; /** An autoreleased gesture recognizer that will call the given block. @@ -71,7 +74,7 @@ subclass, or `nil`. @param block The block which handles an executed gesture. */ -+ (id)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block; ++ (instancetype)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block; /** Initializes an allocated gesture recognizer that will call the given block. @@ -80,12 +83,12 @@ @return An initialized instance of a concrete UIGestureRecognizer subclass or `nil`. @param block The block which handles an executed gesture. */ -- (id)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block NS_REPLACES_RECEIVER; +- (instancetype)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block BK_INITIALIZER; /** Allows the block that will be fired by the gesture recognizer to be modified after the fact. */ -@property (nonatomic, copy, setter = bk_setHandler:) void (^bk_handler)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location); +@property (nonatomic, copy, setter = bk_setHandler:, nullable) void (^bk_handler)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location); /** Allows the length of the delay after which the gesture recognizer will be fired to modify. */ @@ -102,3 +105,5 @@ - (void)bk_cancel; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.m b/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.m index 6ee792049..73f344a31 100644 --- a/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.m +++ b/BlocksKit/UIKit/UIGestureRecognizer+BlocksKit.m @@ -3,8 +3,9 @@ // BlocksKit // -#import #import "UIGestureRecognizer+BlocksKit.h" +#import "NSObject+BKBlockExecution.h" +@import ObjectiveC.runtime; static const void *BKGestureRecognizerBlockKey = &BKGestureRecognizerBlockKey; static const void *BKGestureRecognizerDelayKey = &BKGestureRecognizerDelayKey; @@ -20,12 +21,12 @@ - (void)bk_handleAction:(UIGestureRecognizer *)recognizer; @implementation UIGestureRecognizer (BlocksKit) -+ (id)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay ++ (instancetype)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay { return [[[self class] alloc] bk_initWithHandler:block delay:delay]; } -- (id)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay +- (instancetype)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block delay:(NSTimeInterval)delay { self = [self initWithTarget:self action:@selector(bk_handleAction:)]; if (!self) return nil; @@ -36,12 +37,12 @@ - (id)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecogni return self; } -+ (id)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block ++ (instancetype)bk_recognizerWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block { return [self bk_recognizerWithHandler:block delay:0.0]; } -- (id)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block +- (instancetype)bk_initWithHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))block { return (self = [self bk_initWithHandler:block delay:0.0]); } @@ -60,13 +61,7 @@ - (void)bk_handleAction:(UIGestureRecognizer *)recognizer self.bk_shouldHandleAction = YES; - if (!delay) { - block(); - return; - } - - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)); - dispatch_after(popTime, dispatch_get_main_queue(), block); + [NSObject bk_performAfterDelay:delay usingBlock:block]; } - (void)bk_setHandler:(void (^)(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location))handler diff --git a/BlocksKit/UIKit/UIImage+BlocksKit.h b/BlocksKit/UIKit/UIImage+BlocksKit.h new file mode 100644 index 000000000..eda81f11d --- /dev/null +++ b/BlocksKit/UIKit/UIImage+BlocksKit.h @@ -0,0 +1,26 @@ +// +// UIImage+Blockskit.h +// BlocksKit +// + +#import "BKDefines.h" +#import + +NS_ASSUME_NONNULL_BEGIN + +/** Camera Roll export without selectors. + + Includes code by the following: + + - [Yusuke Murata](https://github.com/muratayusuke) + + @warning UIImage is only available on a platform with UIKit. + */ + +// Adds a photo to the saved photos album. +UIKIT_EXTERN void BKImageWriteToSavedPhotosAlbum(UIImage *image, void(^completionBlock)(NSError *)); + +// Adds a video to the saved photos album. +UIKIT_EXTERN void BKSaveVideoAtURLToSavedPhotosAlbum(NSURL *videoURL, void(^completionBlock)(NSError *)); + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/UIKit/UIImage+BlocksKit.m b/BlocksKit/UIKit/UIImage+BlocksKit.m new file mode 100644 index 000000000..2e2210f14 --- /dev/null +++ b/BlocksKit/UIKit/UIImage+BlocksKit.m @@ -0,0 +1,36 @@ +// +// UIImage+Blockskit.m +// BlocksKit +// + +#import "UIImage+BlocksKit.h" + +@implementation UIImage (BKPhotoLibraryExport) + ++ (void)bk_image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo +{ + void(^block)(NSError *) = (__bridge_transfer id)contextInfo; + if (!block) { return; } + block(error); +} + ++ (void)bk_videoAtPath:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo; +{ + void(^block)(NSError *) = (__bridge_transfer id)contextInfo; + if (!block) { return; } + block(error); +} + +@end + +void BKImageWriteToSavedPhotosAlbum(UIImage *image, void(^completionBlock)(NSError *)) +{ + void *blockAsContext = (__bridge_retained void *)[completionBlock copy]; + UIImageWriteToSavedPhotosAlbum(image, UIImage.class, @selector(bk_image:didFinishSavingWithError:contextInfo:), blockAsContext); +} + +void BKSaveVideoAtURLToSavedPhotosAlbum(NSURL *videoURL, void(^completionBlock)(NSError *)) +{ + void *blockAsContext = (__bridge_retained void *)[completionBlock copy]; + UISaveVideoAtPathToSavedPhotosAlbum(videoURL.path, UIImage.class, @selector(bk_videoAtPath:didFinishSavingWithError:contextInfo:), blockAsContext); +} diff --git a/BlocksKit/UIKit/UIImagePickerController+BlocksKit.h b/BlocksKit/UIKit/UIImagePickerController+BlocksKit.h index 2a064867a..853945787 100644 --- a/BlocksKit/UIKit/UIImagePickerController+BlocksKit.h +++ b/BlocksKit/UIKit/UIImagePickerController+BlocksKit.h @@ -5,8 +5,11 @@ // Contributed by Yas Kuraishi. // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** UIImagePickerController with block callback. Created by [Yas Kuraishi](https://github.com/YasKuraishi) and contributed to @@ -20,11 +23,13 @@ /** * The block that fires after the receiver finished picking up an image */ -@property (nonatomic, copy) void(^bk_didFinishPickingMediaBlock)(UIImagePickerController *, NSDictionary *); +@property (nonatomic, copy, nullable) void(^bk_didFinishPickingMediaBlock)(UIImagePickerController *, NSDictionary *); /** * The block that fires after the user cancels out of picker */ -@property (nonatomic, copy) void(^bk_didCancelBlock)(UIImagePickerController *); +@property (nonatomic, copy, nullable) void(^bk_didCancelBlock)(UIImagePickerController *); @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/UIKit/UIImagePickerController+BlocksKit.m b/BlocksKit/UIKit/UIImagePickerController+BlocksKit.m index 476ffc65b..5b5c6e4df 100644 --- a/BlocksKit/UIKit/UIImagePickerController+BlocksKit.m +++ b/BlocksKit/UIKit/UIImagePickerController+BlocksKit.m @@ -3,9 +3,10 @@ // BlocksKit // +#import "UIImagePickerController+BlocksKit.h" #import "A2DynamicDelegate.h" +#import "NSObject+A2DynamicDelegate.h" #import "NSObject+A2BlockDelegate.h" -#import "UIImagePickerController+BlocksKit.h" #pragma mark Custom delegate diff --git a/BlocksKit/UIKit/UIPopoverController+BlocksKit.h b/BlocksKit/UIKit/UIPopoverController+BlocksKit.h index c96838a3b..838a52509 100644 --- a/BlocksKit/UIKit/UIPopoverController+BlocksKit.h +++ b/BlocksKit/UIKit/UIPopoverController+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block functionality for UIPopoverController. Created by [Alexsander Akers](https://github.com/a2) and contributed to BlocksKit. @@ -14,9 +17,11 @@ @interface UIPopoverController (BlocksKit) /** The block to be called when the popover controller will dismiss the popover. Return NO to prevent the dismissal of the view. */ -@property (nonatomic, copy, setter = bk_setShouldDismissBlock:) BOOL (^bk_shouldDismissBlock)(UIPopoverController *popoverController); +@property (nonatomic, copy, setter = bk_setShouldDismissBlock:, nullable) BOOL (^bk_shouldDismissBlock)(UIPopoverController *popoverController); /** The block to be called when the user has taken action to dismiss the popover. This is not called when -dismissPopoverAnimated: is called directly. */ -@property (nonatomic, copy, setter = bk_setDidDismissBlock:) void (^bk_didDismissBlock)(UIPopoverController *popoverController); +@property (nonatomic, copy, setter = bk_setDidDismissBlock:, nullable) void (^bk_didDismissBlock)(UIPopoverController *popoverController); @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/UIKit/UIPopoverController+BlocksKit.m b/BlocksKit/UIKit/UIPopoverController+BlocksKit.m index f4d30dee0..7ed35cfaf 100644 --- a/BlocksKit/UIKit/UIPopoverController+BlocksKit.m +++ b/BlocksKit/UIKit/UIPopoverController+BlocksKit.m @@ -3,9 +3,10 @@ // BlocksKit // +#import "UIPopoverController+BlocksKit.h" #import "A2DynamicDelegate.h" +#import "NSObject+A2DynamicDelegate.h" #import "NSObject+A2BlockDelegate.h" -#import "UIPopoverController+BlocksKit.h" #pragma mark - Delegate diff --git a/BlocksKit/UIKit/UITextField+BlocksKit.h b/BlocksKit/UIKit/UITextField+BlocksKit.h index 2f658c73d..b5d0cb131 100644 --- a/BlocksKit/UIKit/UITextField+BlocksKit.h +++ b/BlocksKit/UIKit/UITextField+BlocksKit.h @@ -5,8 +5,10 @@ // Contributed by Samuel E. Giddins. // -#import -#import "BlocksKit.h" +#import "BKDefines.h" +#import + +NS_ASSUME_NONNULL_BEGIN /** Block callbacks for UITextField. @@ -22,44 +24,46 @@ * * The return value indicates whether the receiver should begin editing */ -@property (nonatomic, copy) BOOL(^bk_shouldBeginEditingBlock)(UITextField *textField); +@property (nonatomic, copy, nullable) BOOL(^bk_shouldBeginEditingBlock)(UITextField *textField); /** * The block that fires after the receiver begins editing */ -@property (nonatomic, copy) void(^bk_didBeginEditingBlock)(UITextField *textField); +@property (nonatomic, copy, nullable) void(^bk_didBeginEditingBlock)(UITextField *textField); /** * The block that fires before the receiver ends editing * * The return value indicates whether the receiver should end editing */ -@property (nonatomic, copy) BOOL(^bk_shouldEndEditingBlock)(UITextField *textField); +@property (nonatomic, copy, nullable) BOOL(^bk_shouldEndEditingBlock)(UITextField *textField); /** * The block that fires after the receiver ends editing */ -@property (nonatomic, copy) void(^bk_didEndEditingBlock)(UITextField *textField); +@property (nonatomic, copy, nullable) void(^bk_didEndEditingBlock)(UITextField *textField); /** * The block that fires when the receiver's text will change * * The return value indicates whether the receiver should replace the characters in the given range with the replacement string */ -@property (nonatomic, copy) BOOL(^bk_shouldChangeCharactersInRangeWithReplacementStringBlock)(UITextField *textField, NSRange range, NSString *string); +@property (nonatomic, copy, nullable) BOOL(^bk_shouldChangeCharactersInRangeWithReplacementStringBlock)(UITextField *textField, NSRange range, NSString *string); /** * The block that fires when the receiver's clear button is pressed * * The return value indicates whether the receiver should clear its contents */ -@property (nonatomic, copy) BOOL(^bk_shouldClearBlock)(UITextField *textField); +@property (nonatomic, copy, nullable) BOOL(^bk_shouldClearBlock)(UITextField *textField); /** * The block that fires when the keyboard's return button is pressed and the receiver is the first responder * * The return value indicates whether the receiver should return */ -@property (nonatomic, copy) BOOL(^bk_shouldReturnBlock)(UITextField *textField); +@property (nonatomic, copy, nullable) BOOL(^bk_shouldReturnBlock)(UITextField *textField); @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/UIKit/UITextField+BlocksKit.m b/BlocksKit/UIKit/UITextField+BlocksKit.m index b12678986..ea936cd37 100644 --- a/BlocksKit/UIKit/UITextField+BlocksKit.m +++ b/BlocksKit/UIKit/UITextField+BlocksKit.m @@ -5,6 +5,7 @@ #import "UITextField+BlocksKit.h" #import "A2DynamicDelegate.h" +#import "NSObject+A2DynamicDelegate.h" #import "NSObject+A2BlockDelegate.h" #pragma mark Delegate diff --git a/BlocksKit/UIKit/UITextView+BlocksKit.h b/BlocksKit/UIKit/UITextView+BlocksKit.h new file mode 100644 index 000000000..06447babb --- /dev/null +++ b/BlocksKit/UIKit/UITextView+BlocksKit.h @@ -0,0 +1,74 @@ +// +// UITextView+BlocksKit.h +// BlocksKit +// +// Contributed by Su, Hsing-Yu +// + +#import + +/** Block callbacks for UITextView. + + @warning UITextView is only available on a platform with UIKit. + + Created by Su, Hsing-Yu (https://github.com/aipeople) and + contributed to BlocksKit. + */ +@interface UITextView (BlocksKit) + +/** + * The block that fires before the receiver begins editing + * + * The return value indicates whether the receiver should begin editing + */ +@property (nonatomic, copy) BOOL(^bk_shouldBeginEditingBlock)(__kindof UITextView *textView); + +/** + * The block that fires after the receiver begins editing + */ +@property (nonatomic, copy) void(^bk_didBeginEditingBlock)(__kindof UITextView *textView); + +/** + * The block that fires before the receiver ends editing + * + * The return value indicates whether the receiver should end editing + */ +@property (nonatomic, copy) BOOL(^bk_shouldEndEditingBlock)(__kindof UITextView *textView); + +/** + * The block that fires after the receiver ends editing + */ +@property (nonatomic, copy) void(^bk_didEndEditingBlock)(__kindof UITextView *textView); + +/** + * The block that fires when the receiver's text will change + * + * The return value indicates whether the receiver should replace the characters in the given range with the replacement string + */ +@property (nonatomic, copy) BOOL(^bk_shouldChangeCharactersInRangeWithReplacementTextBlock)(__kindof UITextView *textView, NSRange range, NSString *text); + +/** + * The block that fires after the receiver's text changed + */ +@property (nonatomic, copy) void(^bk_didChangeBlock)(__kindof UITextView *textView); + +/** + * The block that fires after the receiver changes selection + */ +@property (nonatomic, copy) void(^bk_didChangeSelecionBlock)(__kindof UITextView *textView); + +/** + * The block that fires when the user tring to interact with the receiver's text attachment + * + * The return value indicates whether the user should interact with the text attachment + */ +@property (nonatomic, copy) BOOL(^bk_shouldInteractWithTextAttachmentInRangeBlock)(__kindof UITextView *textView, NSTextAttachment *attachment, NSRange range); + +/** + * The block that fires when the user tring to interact with an URL in the given range + * + * The return value indicates whether the receiver should response to the interaction or not + */ +@property (nonatomic, copy) BOOL(^bk_shouldInteractWithURLInRangeBlock)(__kindof UITextView *textView, NSURL *url, NSRange range); + +@end diff --git a/BlocksKit/UIKit/UITextView+BlocksKit.m b/BlocksKit/UIKit/UITextView+BlocksKit.m new file mode 100644 index 000000000..f7ce438a8 --- /dev/null +++ b/BlocksKit/UIKit/UITextView+BlocksKit.m @@ -0,0 +1,158 @@ +// +// UITextView+BlocksKit.h +// BlocksKit +// + +#import "UITextView+BlocksKit.h" +#import "A2DynamicDelegate.h" +#import "NSObject+A2BlockDelegate.h" + +#pragma mark Delegate + +@interface A2DynamicUITextViewDelegate : A2DynamicDelegate + +@end + +@implementation A2DynamicUITextViewDelegate + +- (BOOL)textViewShouldBeginEditing:(UITextView *)textView +{ + BOOL ret = YES; + id realDelegate = self.realDelegate; + if (realDelegate && [realDelegate respondsToSelector:@selector(textViewShouldBeginEditing:)]) + ret = [realDelegate textViewShouldBeginEditing:textView]; + BOOL (^block)(UITextView *) = [self blockImplementationForMethod:_cmd]; + if (block) + ret &= block(textView); + return ret; +} + +- (void)textViewDidBeginEditing:(UITextView *)textView +{ + id realDelegate = self.realDelegate; + if (realDelegate && [realDelegate respondsToSelector:@selector(textViewDidBeginEditing:)]) + [realDelegate textViewDidBeginEditing:textView]; + void (^block)(UITextView *) = [self blockImplementationForMethod:_cmd]; + if (block) + block(textView); +} + +- (BOOL)textViewShouldEndEditing:(UITextView *)textView +{ + BOOL ret = YES; + id realDelegate = self.realDelegate; + if (realDelegate && [realDelegate respondsToSelector:@selector(textViewShouldEndEditing:)]) + ret = [realDelegate textViewShouldEndEditing:textView]; + BOOL (^block)(UITextView *) = [self blockImplementationForMethod:_cmd]; + if (block) + ret &= block(textView); + return ret; +} + +- (void)textViewDidEndEditing:(UITextView *)textView +{ + id realDelegate = self.realDelegate; + if (realDelegate && [realDelegate respondsToSelector:@selector(textViewDidEndEditing:)]) + [realDelegate textViewDidEndEditing:textView]; + void (^block)(UITextView *) = [self blockImplementationForMethod:_cmd]; + if (block) + block(textView); +} + +- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text +{ + BOOL ret = YES; + id realDelegate = self.realDelegate; + if (realDelegate && [realDelegate respondsToSelector:@selector(textView:shouldChangeTextInRange:replacementText:)]) + ret = [realDelegate textView:textView shouldChangeTextInRange:range replacementText:text]; + BOOL (^block)(UITextView *, NSRange, NSString *) = [self blockImplementationForMethod:_cmd]; + if (block) + ret &= block(textView, range, text); + return ret; +} + +- (void)textViewDidChange:(UITextView *)textView +{ + id realDelegate = self.realDelegate; + if (realDelegate && [realDelegate respondsToSelector:@selector(textViewDidChange:)]) + [realDelegate textViewDidChange:textView]; + void (^block)(UITextView *) = [self blockImplementationForMethod:_cmd]; + if (block) + block(textView); +} + +- (void)textViewDidChangeSelection:(UITextView *)textView +{ + id realDelegate = self.realDelegate; + if (realDelegate && [realDelegate respondsToSelector:@selector(textViewDidChangeSelection:)]) + [realDelegate textViewDidChangeSelection:textView]; + void (^block)(UITextView *) = [self blockImplementationForMethod:_cmd]; + if (block) + block(textView); +} + +- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange +{ + BOOL ret = YES; + id realDelegate = self.realDelegate; + if (realDelegate && [realDelegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:)]) + ret = [realDelegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:characterRange]; + BOOL (^block)(UITextView *, NSTextAttachment *, NSRange) = [self blockImplementationForMethod:_cmd]; + if (block) + ret &= block(textView, textAttachment, characterRange); + return ret; +} + +- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange +{ + BOOL ret = YES; + id realDelegate = self.realDelegate; + if (realDelegate && [realDelegate respondsToSelector:@selector(textView:shouldInteractWithURL:inRange:)]) + ret = [realDelegate textView:textView shouldInteractWithURL:URL inRange:characterRange]; + BOOL (^block)(UITextView *, NSURL *, NSRange) = [self blockImplementationForMethod:_cmd]; + if (block) + ret &= block(textView, URL, characterRange); + return ret; +} + +@end + +#pragma mark - Category + +@implementation UITextView (BlocksKit) + +@dynamic bk_shouldBeginEditingBlock, bk_didBeginEditingBlock, bk_shouldEndEditingBlock, bk_didEndEditingBlock, bk_shouldChangeCharactersInRangeWithReplacementTextBlock, bk_didChangeBlock, bk_didChangeSelecionBlock, bk_shouldInteractWithTextAttachmentInRangeBlock, bk_shouldInteractWithURLInRangeBlock; + ++ (void)load { + [self bk_registerDynamicDelegate]; + [self bk_linkDelegateMethods: @{ + @"bk_shouldBeginEditingBlock": + @"textViewShouldBeginEditing:", + + @"bk_didBeginEditingBlock": + @"textViewDidBeginEditing:", + + @"bk_shouldEndEditingBlock": + @"textViewDidBeginEditing:", + + @"bk_didEndEditingBlock" : + @"textViewDidEndEditing:", + + @"bk_shouldChangeCharactersInRangeWithReplacementTextBlock" : + @"textView:shouldChangeTextInRange:replacementText:", + + @"bk_didChangeBlock" : + @"textViewDidChange:", + + @"bk_didChangeSelecionBlock" : + @"textViewDidChangeSelection:", + + @"bk_shouldInteractWithTextAttachmentInRangeBlock" : + @"textView:shouldInteractWithTextAttachment:inRange:", + + @"bk_shouldInteractWithURLInRangeBlock" : + @"textView:shouldInteractWithURL:inRange:", + }]; +} + +@end diff --git a/BlocksKit/UIKit/UIView+BlocksKit.h b/BlocksKit/UIKit/UIView+BlocksKit.h index aed8bb0a3..e9f04ca45 100644 --- a/BlocksKit/UIKit/UIView+BlocksKit.h +++ b/BlocksKit/UIKit/UIView+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Convenience on-touch methods for UIView. Includes code by the following: @@ -67,3 +70,5 @@ - (void)bk_eachSubview:(void (^)(UIView *subview))block; @end + +NS_ASSUME_NONNULL_END diff --git a/BlocksKit/UIKit/UIView+BlocksKit.m b/BlocksKit/UIKit/UIView+BlocksKit.m index 38a34a414..d80c94b65 100644 --- a/BlocksKit/UIKit/UIView+BlocksKit.m +++ b/BlocksKit/UIKit/UIView+BlocksKit.m @@ -3,8 +3,8 @@ // BlocksKit // -#import "UIGestureRecognizer+BlocksKit.h" #import "UIView+BlocksKit.h" +#import "UIGestureRecognizer+BlocksKit.h" @implementation UIView (BlocksKit) @@ -40,7 +40,7 @@ - (void)bk_whenTapped:(void (^)(void))block - (void)bk_whenDoubleTapped:(void (^)(void))block { - [self bk_whenTouches:2 tapped:1 handler:block]; + [self bk_whenTouches:1 tapped:2 handler:block]; } - (void)bk_eachSubview:(void (^)(UIView *subview))block diff --git a/BlocksKit/UIKit/UIWebView+BlocksKit.h b/BlocksKit/UIKit/UIWebView+BlocksKit.h index 216fd8ab7..779997fb9 100644 --- a/BlocksKit/UIKit/UIWebView+BlocksKit.h +++ b/BlocksKit/UIKit/UIWebView+BlocksKit.h @@ -3,8 +3,11 @@ // BlocksKit // +#import "BKDefines.h" #import +NS_ASSUME_NONNULL_BEGIN + /** Block callbacks for UIWebView. @warning UIWebView is only available on a platform with UIKit. @@ -17,15 +20,17 @@ @warning If the delegate implements webView:shouldStartLoadWithRequest:navigationType:, the return values of both the delegate method and the block will be considered. */ -@property (nonatomic, copy, setter = bk_setShouldStartLoadBlock:) BOOL (^bk_shouldStartLoadBlock)(UIWebView *webView, NSURLRequest *request, UIWebViewNavigationType navigationType); +@property (nonatomic, copy, setter = bk_setShouldStartLoadBlock:, nullable) BOOL (^bk_shouldStartLoadBlock)(UIWebView *webView, NSURLRequest *request, UIWebViewNavigationType navigationType); /** The block that is fired when the web view starts loading. */ -@property (nonatomic, copy, setter = bk_setDidStartLoadBlock:) void (^bk_didStartLoadBlock)(UIWebView *webView); +@property (nonatomic, copy, setter = bk_setDidStartLoadBlock:, nullable) void (^bk_didStartLoadBlock)(UIWebView *webView); /** The block that is fired when the web view finishes loading. */ -@property (nonatomic, copy, setter = bk_setDidFinishLoadBlock:) void (^bk_didFinishLoadBlock)(UIWebView *webView); +@property (nonatomic, copy, setter = bk_setDidFinishLoadBlock:, nullable) void (^bk_didFinishLoadBlock)(UIWebView *webView); /** The block that is fired when the web view stops loading due to an error. */ -@property (nonatomic, copy, setter = bk_setDidFinishWithErrorBlock:) void (^bk_didFinishWithErrorBlock)(UIWebView *webView, NSError *error); +@property (nonatomic, copy, setter = bk_setDidFinishWithErrorBlock:, nullable) void (^bk_didFinishWithErrorBlock)(UIWebView *webView, NSError *error); @end + +NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/BlocksKit/UIKit/UIWebView+BlocksKit.m b/BlocksKit/UIKit/UIWebView+BlocksKit.m index 6605b1b72..ae4c659fd 100644 --- a/BlocksKit/UIKit/UIWebView+BlocksKit.m +++ b/BlocksKit/UIKit/UIWebView+BlocksKit.m @@ -3,9 +3,10 @@ // BlocksKit // +#import "UIWebView+BlocksKit.h" #import "A2DynamicDelegate.h" +#import "NSObject+A2DynamicDelegate.h" #import "NSObject+A2BlockDelegate.h" -#import "UIWebView+BlocksKit.h" #pragma mark Custom delegate diff --git a/Configurations/Common-Framework.xcconfig b/Configurations/Common-Framework.xcconfig new file mode 100755 index 000000000..02342e417 --- /dev/null +++ b/Configurations/Common-Framework.xcconfig @@ -0,0 +1,33 @@ +// +// This file defines additional configuration options that are appropriate only +// for a framework. Typically, you want to use a platform-specific variant +// instead. +// + +// Whether to strip out code that isn't called from anywhere +DEAD_CODE_STRIPPING = NO + +// Whether this framework should define an LLVM module +DEFINES_MODULE = YES + +// Dynamic Library Install Name Base +// +// Sets the base value for the internal "install path" (LC_ID_DYLIB) in a dynamic +// library. This will be combined with the EXECUTABLE_PATH to form the full install path. +// Setting LD_DYLIB_INSTALL_NAME directly will override this setting. This setting +// defaults to the target's INSTALL_PATH. It is ignored when building any product other +// than a dynamic library. [-install_name] + +DYLIB_INSTALL_NAME_BASE = @rpath + +// Installation Directory +// +// The directory to install the build products in. This path is prepended by the +// 'Installation Build Products Location' (i.e., $(DSTROOT)). +INSTALL_PATH = $(LOCAL_LIBRARY_DIR)/Frameworks + +// Skip Install +// +// Activating this setting when deployment locations are used causes the product to be +// built into an alternative location instead of the install location. +SKIP_INSTALL = YES diff --git a/Configurations/Mac-Application.xcconfig b/Configurations/Mac-Application.xcconfig new file mode 100755 index 000000000..480ab99cb --- /dev/null +++ b/Configurations/Mac-Application.xcconfig @@ -0,0 +1,14 @@ +// +// This file defines additional configuration options that are appropriate only +// for an application on Mac OS X. This should be set at the target level for +// each project configuration. +// + +// Apply common settings specific to Mac OS X +#include "Mac-Base.xcconfig" + +// Null code signing identity +CODE_SIGN_IDENTITY = - + +// Whether to strip out code that isn't called from anywhere +DEAD_CODE_STRIPPING = NO diff --git a/Configurations/Mac-Base.xcconfig b/Configurations/Mac-Base.xcconfig new file mode 100755 index 000000000..6b6a73b6a --- /dev/null +++ b/Configurations/Mac-Base.xcconfig @@ -0,0 +1,12 @@ +// +// This file defines additional configuration options that are appropriate only +// for Mac OS X. This file is not standalone -- it is meant to be included into +// a configuration file for a specific type of target. +// + +// Whether to combine multiple image resolutions into a multirepresentational +// TIFF +COMBINE_HIDPI_IMAGES = YES + +// Where to find embedded frameworks +LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks diff --git a/Configurations/Mac-Framework.xcconfig b/Configurations/Mac-Framework.xcconfig new file mode 100755 index 000000000..fa80c73e9 --- /dev/null +++ b/Configurations/Mac-Framework.xcconfig @@ -0,0 +1,18 @@ +// +// This file defines additional configuration options that are appropriate only +// for a framework on OS X. This should be set at the target level for each +// project configuration. +// + +// Import base framework settings +#include "Common-Framework.xcconfig" + +// Import common settings specific to Mac OS X +#include "Mac-Base.xcconfig" + +// Framework Version +// +// Framework bundles are versioned by having contents in subfolders of a version folder +// that has links to the current version and its contents. + +FRAMEWORK_VERSION = A diff --git a/Configurations/Mac-Test.xcconfig b/Configurations/Mac-Test.xcconfig new file mode 100755 index 000000000..2993619fe --- /dev/null +++ b/Configurations/Mac-Test.xcconfig @@ -0,0 +1,10 @@ +// +// This file defines additional configuration options that are appropriate only +// for a unit testing bundle on OS X. This should be set at the target level for +// each project configuration. +// + +// Apply common settings specific to Mac OS X +#include "Mac-Base.xcconfig" + +FRAMEWORK_SEARCH_PATHS = $(inherited) $(DEVELOPER_FRAMEWORKS_DIR) diff --git a/Configurations/MacBundledFramework.xcconfig b/Configurations/MacBundledFramework.xcconfig deleted file mode 100644 index a040d46d4..000000000 --- a/Configurations/MacBundledFramework.xcconfig +++ /dev/null @@ -1,50 +0,0 @@ -// -// BundledFramework.xcconfig -// BlocksKit -// -// Contributed by Alex Gray -// - -// You have TWO options for linking any framework, including BlocksKit, in an -// OS X app. -// -// a) Inside your YourApp.app, as a private framework. -// This is how the included "Mac Demo App" does it, and how the project -// is configured by default. -// b) Inside YourKit.framework, as a "sub-umbrella" framework. -// -// Steps: -// 1) For either option, drag (or "Add Files...") BlocksKit.xcodeproj to YOUR -// Xcode project using the Navigator. -// 2) Add the target "BlocksKit Mac" to your target's "Target Dependencies". -// 2) Add a "Copy Files" phase to your app or framework's target: -// - Set the Destination to "Frameworks" -// - Select and add "BlocksKit.framework" from Products in the Navigator. -// 3) Link your application to the BlocksKit framework in the -// "Link Binary With Libraries" build phase. -// 4) `#import ` -// -// By using the following install path directive, applications that link the -// BlocksKit framework will search for BlocksKit at runtime in any Frameworks -// folder inside your app bundle. -// - -INSTALL_PATH = @loader_path/../Frameworks - -// -// So, for Option (A), your app will look like this: -// - App executable: MyApp.app/Contents/MacOS/MyApp -// - BlocksKit: MyApp.app/Contents/Frameworks/BlocksKit.framework -// -// Or, for Option (B), an app linking your framework will look like this: -// - App executable: MyApp.app/Contents/MacOS/MyApp -// - Frameworks: MyApp.app/Contents/Frameworks/YourFramework.framework -// - Framework executable: YourFramework.framework/Contents/MacOS/YourFramework -// - BlocksKit: YourFramework.framework/Contents/Frameworks/BlocksKit.framework -// -// Or an app could theoretically combine/share dependencies: -// - App executable: MyApp.app/Contents/MacOS/MyApp -// - Frameworks path: MyApp.app/Contents/Frameworks -// -- Framework: YourFramework.framework -// -- BlocksKit: BlocksKit.framework -// diff --git a/Configurations/Project-Common.xcconfig b/Configurations/Project-Common.xcconfig new file mode 100644 index 000000000..815c91907 --- /dev/null +++ b/Configurations/Project-Common.xcconfig @@ -0,0 +1,202 @@ +// +// This file defines common settings that should be enabled for every new +// project. Typically, you want to use Debug, Release, or a similar variant +// instead. +// + +#include "Project-Version.xcconfig" + +// Disable legacy-compatible header searching +ALWAYS_SEARCH_USER_PATHS = NO + +// Whether to warn when a floating-point value is used as a loop counter +CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES + +// Whether to warn about use of rand() and random() being used instead of arc4random() +CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES + +// Whether to warn about strcpy() and strcat() +CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES + +// C++ Language Dialect +// +// GNU++11: Accept the ISO C++ 2011 standard with amendments and GNU extensions. +CLANG_CXX_LANGUAGE_STANDARD = gnu++11 + +// C++ Standard Library +// +// libc++: highly optimized C++ standard library that works only with the LLVM Compiler, +// and is designed to support new C++11 features. +CLANG_CXX_LIBRARY = libc++ + +// Enable Modules (C and Objective-C) +CLANG_ENABLE_MODULES = YES + +// Objective-C Automatic Reference Counting +CLANG_ENABLE_OBJC_ARC = YES + +// Warn about declaring the same method more than once within the same @interface. +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES + +// Implicit Boolean Conversions +// +// Warn about implicit conversions to boolean values that are suspicious. For example, +// writing 'if (foo)' with 'foo' being the name a function will trigger a warning. +// [-Wbool-conversion] +CLANG_WARN_BOOL_CONVERSION = YES + +// Implicit Constant Conversions +// +// Warn about implicit conversions of constant values that cause the constant value to +// change, either through a loss of precision, or entirely in its meaning. +// [-Wconstant-conversion] +CLANG_WARN_CONSTANT_CONVERSION = YES + +// Whether to warn when overriding deprecated methods +CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES + +// Warn about direct accesses to the Objective-C 'isa' pointer instead of using a runtime API. +CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR + +// Warn about loop bodies that are suspiciously empty. +CLANG_WARN_EMPTY_BODY = YES + +// Warn about implicit conversions between different kinds of enum values. +// For example, this can catch issues when using the wrong enum flag as an argument to a function or method. +CLANG_WARN_ENUM_CONVERSION = YES + +// Whether to warn on implicit conversions between signed/unsigned types +CLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO + +// Warn about implicit conversions between pointers and integers. +// For example, this can catch issues when one incorrectly intermixes using NSNumbers and raw integers. +CLANG_WARN_INT_CONVERSION = YES + +// Don't warn about repeatedly using a weak reference without assigning the weak reference to a strong reference. Too many false positives. +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = NO + +// Warn about classes that unintentionally do not subclass a root class (such as NSObject). +CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR + +// Whether to warn on suspicious implicit conversions +CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES + +// Warn about potentially unreachable code +CLANG_WARN_UNREACHABLE_CODE = YES + +// Code Signing Identity +// +// The name ("common name") of a valid code-signing certificate in a keychain within your +// keychain path. A missing or invalid certificate will cause a build error. +CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Developer + +// Strip Debug Symbols During Copy +// +// Activating this setting causes binary files which are copied during the build (e.g., +// in a Copy Bundle Resources or Copy Files build phase) to be stripped of debugging +// symbols. It does not cause the linked product of a target to be stripped (use Strip +// Linked Product for that). +COPY_PHASE_STRIP = NO + +// Enable new-world bytecode compilation +ENABLE_BITCODE = NO + +// Enable Strict Checking of objc_msgSend Calls +// +// Controls whether objc_msgSend calls must be cast to the appropriate function pointer +// type before being called. +ENABLE_STRICT_OBJC_MSGSEND = YES + +// Whether to require objc_msgSend to be cast before invocation +ENABLE_STRICT_OBJC_MSGSEND = YES + +// Which C variant to use +GCC_C_LANGUAGE_STANDARD = gnu11 + +// Whether to enable strict aliasing, meaning that two pointers of different +// types (other than void * or any id type) cannot point to the same memory +// location +GCC_STRICT_ALIASING = YES + +// In C, allocate even uninitialized global variables in the data section of the +// object file, rather than generating them as common blocks. +GCC_NO_COMMON_BLOCKS = YES + +// Whether to warn about 64-bit values being implicitly shortened to 32 bits +GCC_WARN_64_TO_32_BIT_CONVERSION = YES + +// Whether to warn about fields missing from structure initializers (only if +// designated initializers aren't used) +GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES + +// Whether to warn about missing function prototypes +GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO + +// Whether to warn about implicit conversions in the signedness of the type +// a pointer is pointing to (e.g., 'int *' getting converted to 'unsigned int *') +GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES + +// Whether to warn when the value returned from a function/method/block does not +// match its return type +GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR + +// Whether to warn on a class not implementing all the required methods of +// a protocol it declares conformance to +GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES + +// Whether to warn when switching on an enum value, and all possibilities are +// not accounted for +GCC_WARN_CHECK_SWITCH_STATEMENTS = YES + +// Whether to warn about the use of four-character constants +GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES + +// Whether to warn about an aggregate data type's initializer not being fully +// bracketed (e.g., array initializer syntax) +GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES + +// Whether to warn about missing braces or parentheses that make the meaning of +// the code ambiguous +GCC_WARN_MISSING_PARENTHESES = YES + +// Whether to warn about unsafe comparisons between values of different +// signedness +GCC_WARN_SIGN_COMPARE = YES + +// Whether to warn about the arguments to printf-style functions not matching +// the format specifiers +GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES + +// Warn if a "@selector(...)" expression referring to an undeclared selector is found +GCC_WARN_UNDECLARED_SELECTOR = YES + +// Warn if a variable might be clobbered by a setjmp call or if an automatic variable is used without prior initialization. +GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE + +// Whether to warn about static functions that are unused +GCC_WARN_UNUSED_FUNCTION = YES + +// Whether to warn about labels that are unused +GCC_WARN_UNUSED_LABEL = YES + +// Whether to warn about variables that are never used +GCC_WARN_UNUSED_VARIABLE = YES + +// OS X Deployment Target +MACOSX_DEPLOYMENT_TARGET = 10.8 + +// The base SDK to use (if no version is specified, the latest version is +// assumed) +SDKROOT = macosx + +// Versioning Name Prefix +VERSION_INFO_PREFIX = + +// Versioning System +// +// Apple Generic - Use the current project version setting. +VERSIONING_SYSTEM = apple-generic + +// Don't treat unknown warnings as errors, disable GCC compatibility +// warnings, and disable unused static const variable warnings +WARNING_CFLAGS = -Wno-error=unknown-warning-option -Wno-gcc-compat -Wno-unused-const-variable diff --git a/Configurations/Project-Debug.xcconfig b/Configurations/Project-Debug.xcconfig new file mode 100644 index 000000000..aaf39e295 --- /dev/null +++ b/Configurations/Project-Debug.xcconfig @@ -0,0 +1,30 @@ +// +// This file defines the base configuration for a Debug build of any project. +// This should be set at the project level for the Debug configuration. +// + +#include "Project-Common.xcconfig" + +// The format of debugging symbols +DEBUG_INFORMATION_FORMAT = dwarf + +// Expose internal symbols for unit testing +ENABLE_TESTABILITY = YES + +// Whether to compile assertions in +ENABLE_NS_ASSERTIONS = YES + +// Disable faster function calls for applications, not for shared libraries +GCC_DYNAMIC_NO_PIC = NO + +// The optimization level (0, 1, 2, 3, s) for the produced binary +GCC_OPTIMIZATION_LEVEL = 0 + +// Preproccessor definitions to apply to each file compiled +GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 $(inherited) + +// Catch some errors in integer arithmetic +OTHER_CFLAGS = -ftrapv $(inherited) + +// Let only the active architecture is built for faster debugging turnaround +ONLY_ACTIVE_ARCH = YES diff --git a/Configurations/Project-Release.xcconfig b/Configurations/Project-Release.xcconfig new file mode 100755 index 000000000..445c60227 --- /dev/null +++ b/Configurations/Project-Release.xcconfig @@ -0,0 +1,27 @@ +// +// This file defines the base configuration for a Release build of any project. +// This should be set at the project level for the Release configuration. +// + +#include "Project-Common.xcconfig" + +// The format of debugging symbols +DEBUG_INFORMATION_FORMAT = dwarf-with-dsym + +// Expose internal symbols for unit testing +ENABLE_TESTABILITY = NO + +// Whether to compile assertions in +ENABLE_NS_ASSERTIONS = NO + +// Whether to run the static analyzer with every build +RUN_CLANG_STATIC_ANALYZER = YES + +// The optimization level (0, 1, 2, 3, s) for the produced binary +GCC_OPTIMIZATION_LEVEL = s + +// Preproccessor definitions to apply to each file compiled +GCC_PREPROCESSOR_DEFINITIONS = NDEBUG=1 $(inherited) + +// Whether to perform App Store validation checks +VALIDATE_PRODUCT = YES diff --git a/Configurations/Project-Version.xcconfig b/Configurations/Project-Version.xcconfig new file mode 100644 index 000000000..416e09806 --- /dev/null +++ b/Configurations/Project-Version.xcconfig @@ -0,0 +1,4 @@ + +CURRENT_PROJECT_VERSION=2.4.0 +DYLIB_CURRENT_VERSION=2.4.0 +DYLIB_COMPATIBILITY_VERSION=2.4 diff --git a/Configurations/Versions.xcconfig b/Configurations/Versions.xcconfig deleted file mode 100644 index 1e72712f7..000000000 --- a/Configurations/Versions.xcconfig +++ /dev/null @@ -1,3 +0,0 @@ -CURRENT_PROJECT_VERSION=2.2.5 -DYLIB_CURRENT_VERSION=2.2.5 -DYLIB_COMPATIBILITY_VERSION=2.2 diff --git a/Configurations/iOS-Base.xcconfig b/Configurations/iOS-Base.xcconfig new file mode 100755 index 000000000..22edd3109 --- /dev/null +++ b/Configurations/iOS-Base.xcconfig @@ -0,0 +1,18 @@ +// +// This file defines additional configuration options that are appropriate only +// for iOS. This file is not standalone -- it is meant to be included into +// a configuration file for a specific type of target. +// + +// Where to find embedded frameworks +LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/Frameworks @loader_path/Frameworks + +// The base SDK to use (if no version is specified, the latest version is +// assumed) +SDKROOT = iphoneos + +// iOS Deployment Target +IPHONEOS_DEPLOYMENT_TARGET = 6.0 + +// The build system uses the selected device for a target's Info.plist. +TARGETED_DEVICE_FAMILY = 1,2 diff --git a/Configurations/iOS-Framework.xcconfig b/Configurations/iOS-Framework.xcconfig new file mode 100755 index 000000000..bd9a219aa --- /dev/null +++ b/Configurations/iOS-Framework.xcconfig @@ -0,0 +1,14 @@ +// +// This file defines additional configuration options that are appropriate only +// for a framework on iOS. This should be set at the target level for each +// project configuration. +// + +// Import base framework settings +#include "Common-Framework.xcconfig" + +// Import common settings specific to iOS +#include "iOS-Base.xcconfig" + +// Code will load on this and later versions of iOS. +IPHONEOS_DEPLOYMENT_TARGET = 8.0 diff --git a/Configurations/iOS-StaticLibrary.xcconfig b/Configurations/iOS-StaticLibrary.xcconfig new file mode 100755 index 000000000..61ff89334 --- /dev/null +++ b/Configurations/iOS-StaticLibrary.xcconfig @@ -0,0 +1,38 @@ +// +// This file defines additional configuration options that are appropriate only +// for a static library on iOS. This should be set at the target level for each +// project configuration. +// + +// Apply common settings specific to iOS +#include "iOS-Base.xcconfig" + +// Whether to strip debugging symbols when copying resources (like included +// binaries). +// +// Overrides Release.xcconfig when used at the target level. +COPY_PHASE_STRIP = NO + +// Whether to strip out code that isn't called from anywhere +DEAD_CODE_STRIPPING = NO + +// Xcode needs this to find archived headers if SKIP_INSTALL is set +HEADER_SEARCH_PATHS = $(OBJROOT)/UninstalledProducts/include + +// Other Linker Flags +// +// Options defined in this setting are passed to invocations of the linker. +OTHER_LDFLAGS = -ObjC + +// Copy headers to "include/LibraryName" in the build folder by default. This +// lets consumers use #import syntax even for static +// libraries +PUBLIC_HEADERS_FOLDER_PATH = include/$PRODUCT_NAME + +// When compiling this library, look for imports (written with quotes) in the +// library's own folder first. This avoids conflicts from other headers in the +// build folder. +USER_HEADER_SEARCH_PATHS = ./** + +// Don't include in an xcarchive +SKIP_INSTALL = YES diff --git a/Configurations/iOS-Test.xcconfig b/Configurations/iOS-Test.xcconfig new file mode 100755 index 000000000..a8ca3bdf2 --- /dev/null +++ b/Configurations/iOS-Test.xcconfig @@ -0,0 +1,11 @@ +// +// This file defines additional configuration options that are appropriate only +// for a unit testing bundle on iOS. This should be set at the target level for +// each project configuration. +// + +// Apply common settings specific to iOS +#include "iOS-Base.xcconfig" + +// iOS Deployment Target +IPHONEOS_DEPLOYMENT_TARGET = 8.0 diff --git a/LICENSE b/LICENSE index 37aabca5e..bff8b91f9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,12 +1,19 @@ -// -// LICENSE -// BlocksKit -// +Copyright (c) 2011-2015 Zachary Waldowski, Alexsander Akers, and the BlocksKit Contributors -Copyright (c) 2011-2014 Zachary Waldowski, Alexsander Akers, and the BlocksKit Contributors +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Makefile b/Makefile index b304cd2b2..947f3355d 100644 --- a/Makefile +++ b/Makefile @@ -26,8 +26,8 @@ # SHELL = /bin/bash -e -o pipefail -IPHONE32 = -scheme 'BlocksKit iOS' -sdk iphonesimulator -destination 'name=iPhone Retina (4-inch)' -IPHONE64 = -scheme 'BlocksKit iOS' -sdk iphonesimulator -destination 'name=iPhone Retina (4-inch 64-bit)' +IPHONE32 = -scheme 'BlocksKit iOS Legacy' -sdk iphonesimulator -destination 'name=iPhone Retina (4-inch)' +IPHONE64 = -scheme 'BlocksKit iOS Legacy' -sdk iphonesimulator -destination 'name=iPhone Retina (4-inch 64-bit)' MACOSX = -scheme 'BlocksKit Mac' -sdk macosx XCODEBUILD = xcodebuild -project BlocksKit.xcodeproj @@ -37,7 +37,7 @@ clean: $(XCODEBUILD) clean ios: - $(XCODEBUILD) -scheme 'BlocksKit iOS' build + $(XCODEBUILD) -scheme 'BlocksKit iOS Legacy' build macosx: $(XCODEBUILD) -scheme 'BlocksKit Mac' build diff --git a/README.md b/README.md index be674e7d7..5dde267f5 100755 --- a/README.md +++ b/README.md @@ -3,19 +3,28 @@ Blocks in C and Objective-C are downright magical. They make coding easier and potentially quicker, not to mention faster on the front end with multithreading and Grand Central Dispatch. BlocksKit hopes to facilitate this kind of programming by removing some of the annoying - and, in some cases, impeding - limits on coding with blocks. -BlocksKit is a framework for OS X Mountain Lion and newer and a static library for iOS 6 and newer. +BlocksKit is a framework for OS X Mountain Lion and newer, a static library for iOS 6 and iOS 7, and a framework for iOS 8 and newer. -BlocksKit was created by [Zachary Waldowski](https://github.com/zwaldowski) and [Alexsander Akers](https://github.com/a2) and is maintained by Zachary Waldowski. +BlocksKit was created by [Zachary Waldowski](https://github.com/zwaldowski) and [Alexsander Akers](https://github.com/a2) and is maintained by the former. Installation ============ BlocksKit can be added to a project using [CocoaPods](https://github.com/cocoapods/cocoapods). One may also use targets included in the project. -### Library +### Framework * Download a release of BlocksKit. -* Run "Archive" in XCode. +* Drag (or "Add Files...") `BlocksKit.xcodeproj` to *your* Xcode project using +the Navigator. +* From the "General" pane of your application or framework, add +`BlocksKit.framework` to the "Embedded Binaries" list. +* `@import BlocksKit;` + +### Static Library + +* Download a release of BlocksKit. +* Run "Archive" in Xcode. * By default the static library will be compiled to `~/Library/Developer/Xcode/DerivedData`. * Move libBlocksKit.a and Headers to your project's folder, preferably a subfolder like "Vendor". * In "Build Phases", Drag libBlocksKit.a into your target's "Link Binary With Libraries" build phase. @@ -23,10 +32,6 @@ BlocksKit can be added to a project using [CocoaPods](https://github.com/cocoapo * Change (or add) to "Header Search Paths" the relative path to BlocksKit's headers, like `$(SRCROOT)/Vendor/Headers`. * Insert `#import ` in your project's prefix header. -### Framework - -See the included `Configurations/MacBundleFramework.xcconfig` for more information. - Documentation ============= @@ -40,3 +45,6 @@ BlocksKit is maintained under the MIT license. **The project itself is free for Unsure about your rights? [Read more.](http://opensource.org/licenses/MIT) Individual credits for included code exist in the header files and documentation. We thank them for their contributions to the open source community. + +Documentation help has been contributed by [Alex Gray](https://github.com/mralexgray). + diff --git a/Tests/BlocksKit-iOS-Tests-Info.plist b/Tests/BlocksKit-iOS-Tests-Info.plist deleted file mode 100644 index 37df57ae3..000000000 --- a/Tests/BlocksKit-iOS-Tests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - us.pandamonia.BlocksKit.iOS-Tests - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/Tests/BlocksKit-iOS-Tests-Runner-Info.plist b/Tests/BlocksKit-iOS-Tests-Runner-Info.plist deleted file mode 100644 index 9f76eba62..000000000 --- a/Tests/BlocksKit-iOS-Tests-Runner-Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - us.pandamonia.BlocksKit.iOS-Tests-Runner - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/Tests/BKMacrosTest.m b/Tests/Core/BKMacrosTest.m similarity index 98% rename from Tests/BKMacrosTest.m rename to Tests/Core/BKMacrosTest.m index bfecfa98d..0174cd0af 100644 --- a/Tests/BKMacrosTest.m +++ b/Tests/Core/BKMacrosTest.m @@ -5,8 +5,8 @@ // Contributed by Nikolaj Schumacher // -#import -#import +@import XCTest; +@import BlocksKit; @interface BKMacrosTest : XCTestCase @end diff --git a/Tests/NSArrayBlocksKitTest.m b/Tests/Core/NSArrayBlocksKitTest.m similarity index 91% rename from Tests/NSArrayBlocksKitTest.m rename to Tests/Core/NSArrayBlocksKitTest.m index 631982515..a5b0029ed 100644 --- a/Tests/NSArrayBlocksKitTest.m +++ b/Tests/Core/NSArrayBlocksKitTest.m @@ -5,8 +5,8 @@ // Contributed by Kai Wu. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSArrayBlocksKitTest : XCTestCase @@ -126,6 +126,25 @@ - (void)testMap { XCTAssertEqualObjects(transformed, target, @"transformed items are %@", transformed); } +- (void)testCompact { + __block NSUInteger iterations = 0; + NSArray *mixed = @[@"foo", @2, @"bar", @YES]; + + NSArray *transformed = [mixed bk_compact:^id(id obj) { + iterations++; + if([obj isKindOfClass:[NSString class]]) + { + NSString *string = obj; + return [string stringByAppendingString:@".png"]; + } + return nil; + }]; + + XCTAssertEqual(iterations, (NSUInteger)4, @"iterated %i times", (int) iterations); + NSArray *target = @[ @"foo.png", @"bar.png" ]; + XCTAssertEqualObjects(transformed, target, @"transformed items are %@", transformed); +} + - (void)testReduceWithBlock { id(^accumlationBlock)(id, id) = ^(id sum,id obj) { return [sum stringByAppendingString:obj]; diff --git a/Tests/NSDictionaryBlocksKitTest.m b/Tests/Core/NSDictionaryBlocksKitTest.m similarity index 98% rename from Tests/NSDictionaryBlocksKitTest.m rename to Tests/Core/NSDictionaryBlocksKitTest.m index 660c0ddea..94ace8c8f 100644 --- a/Tests/NSDictionaryBlocksKitTest.m +++ b/Tests/Core/NSDictionaryBlocksKitTest.m @@ -5,8 +5,8 @@ // Contributed by Kai Wu. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSDictionaryBlocksKitTest : XCTestCase diff --git a/Tests/NSIndexSetBlocksKitTest.m b/Tests/Core/NSIndexSetBlocksKitTest.m similarity index 66% rename from Tests/NSIndexSetBlocksKitTest.m rename to Tests/Core/NSIndexSetBlocksKitTest.m index c5b136fa1..512f44cde 100644 --- a/Tests/NSIndexSetBlocksKitTest.m +++ b/Tests/Core/NSIndexSetBlocksKitTest.m @@ -5,8 +5,8 @@ // Contributed by Kai Wu. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSIndexSetBlocksKitTest : XCTestCase @@ -84,7 +84,8 @@ - (void)testSelectedNone { }; NSIndexSet *found = [_subject bk_select:indexValidationBlock]; XCTAssertTrue([order isEqualToString:@"123"], @"the index loop order is %@", order); - XCTAssertNil(found,@"no index found"); + XCTAssertNotNil(found, @"result should not be nil"); + XCTAssertEqual(found.count, (NSUInteger)0, @"no index found"); } - (void)testReject { @@ -96,19 +97,50 @@ - (void)testReject { }; NSIndexSet *found = [_subject bk_reject:indexValidationBlock]; XCTAssertTrue([order isEqualToString:@"123"], @"the index loop order is %@", order); - XCTAssertNil(found,@"all indexes are rejected"); + XCTAssertEqual(found.count, (NSUInteger)0, @"all indexes are rejected"); } - (void)testRejectedNone { - NSMutableString *order = [NSMutableString string]; - BOOL(^indexValidationBlock)(NSUInteger) = ^(NSUInteger index) { - [order appendFormat:@"%lu", (unsigned long)index]; - BOOL match = [_target[index] isEqual:@"0"] ? NO : YES; - return match; - }; - NSIndexSet *found = [_subject bk_reject:indexValidationBlock]; - XCTAssertTrue([order isEqualToString:@"123"], @"the index loop order is %@", order); - XCTAssertEqualObjects(found, _subject, @"all indexes that are not rejected %@", found); + NSMutableString *order = [NSMutableString string]; + BOOL(^indexValidationBlock)(NSUInteger) = ^(NSUInteger index) { + [order appendFormat:@"%lu", (unsigned long)index]; + BOOL match = [_target[index] isEqual:@"0"] ? NO : YES; + return match; + }; + NSIndexSet *found = [_subject bk_reject:indexValidationBlock]; + XCTAssertTrue([order isEqualToString:@"123"], @"the index loop order is %@", order); + XCTAssertEqualObjects(found, _subject, @"all indexes that are not rejected %@", found); +} + +- (void)testRejectedAll { + BOOL(^indexValidationBlock)(NSUInteger) = ^(NSUInteger index) { + return YES; + }; + NSIndexSet *found = [_subject bk_reject:indexValidationBlock]; + XCTAssertNotNil(found); + XCTAssertEqual(found.count, (NSUInteger)0, @"all indexes have been rejected"); +} + +- (void)testMap { + NSMutableString *order = [NSMutableString string]; + NSUInteger(^indexValidationBlock)(NSUInteger) = ^(NSUInteger index) { + [order appendFormat:@"%lu", (unsigned long)index]; + return index+_subject.count; + }; + NSIndexSet *result = [_subject bk_map:indexValidationBlock]; + XCTAssertTrue([order isEqualToString:@"123"], @"the index loop order is %@", order); + NSIndexSet *target = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(4,3)]; + XCTAssertEqualObjects(result, target, @"the selected index set is %@", result); +} + +- (void)testMapNone { + NSIndexSet *subject = [NSIndexSet new]; + NSUInteger(^indexValidationBlock)(NSUInteger) = ^(NSUInteger index) { + return index; + }; + NSIndexSet *result = [subject bk_map:indexValidationBlock]; + XCTAssertNotNil(result, @"result should not be nil"); + XCTAssertEqual(result.count, (NSUInteger)0, @"no index found"); } - (void)testAny { diff --git a/Tests/NSInvocationBlocksKitTest.m b/Tests/Core/NSInvocationBlocksKitTest.m similarity index 90% rename from Tests/NSInvocationBlocksKitTest.m rename to Tests/Core/NSInvocationBlocksKitTest.m index 8831aa97d..909db8746 100644 --- a/Tests/NSInvocationBlocksKitTest.m +++ b/Tests/Core/NSInvocationBlocksKitTest.m @@ -5,8 +5,8 @@ // Contributed by Kai Wu. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSInvocationBlocksKitTest : XCTestCase diff --git a/Tests/NSMapTableBlocksKitTest.m b/Tests/Core/NSMapTableBlocksKitTest.m similarity index 97% rename from Tests/NSMapTableBlocksKitTest.m rename to Tests/Core/NSMapTableBlocksKitTest.m index d290ba331..f1d9dec17 100644 --- a/Tests/NSMapTableBlocksKitTest.m +++ b/Tests/Core/NSMapTableBlocksKitTest.m @@ -2,8 +2,8 @@ // Created by Agens AS for BlocksKit on 21.10.14. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSMapTableBlocksKitTest : XCTestCase @@ -174,7 +174,7 @@ - (void)testPerformSelectedNone { }; [_subject bk_performSelect:validationBlock]; - XCTAssertEqual(_subject.count, 0, @"no item is selected"); + XCTAssertEqual(_subject.count, (NSUInteger)0, @"no item is selected"); } - (void)testPerformReject { @@ -197,7 +197,7 @@ - (void)testPerformRejectedAll { }; [_subject bk_performReject:validationBlock]; - XCTAssertEqual(_subject.count, 0, @"all items are rejected"); + XCTAssertEqual(_subject.count, (NSUInteger)0, @"all items are rejected"); } - (void)testPerformMap { diff --git a/Tests/NSMutableArrayBlocksKitTest.m b/Tests/Core/NSMutableArrayBlocksKitTest.m similarity index 97% rename from Tests/NSMutableArrayBlocksKitTest.m rename to Tests/Core/NSMutableArrayBlocksKitTest.m index 3d5115237..263c3ff79 100644 --- a/Tests/NSMutableArrayBlocksKitTest.m +++ b/Tests/Core/NSMutableArrayBlocksKitTest.m @@ -5,8 +5,8 @@ // Contributed by Kai Wu. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSMutableArrayBlocksKitTest : XCTestCase diff --git a/Tests/NSMutableDictionaryBlocksKitTest.m b/Tests/Core/NSMutableDictionaryBlocksKitTest.m similarity index 89% rename from Tests/NSMutableDictionaryBlocksKitTest.m rename to Tests/Core/NSMutableDictionaryBlocksKitTest.m index 62912b161..1db0c5f7e 100644 --- a/Tests/NSMutableDictionaryBlocksKitTest.m +++ b/Tests/Core/NSMutableDictionaryBlocksKitTest.m @@ -5,8 +5,8 @@ // Contributed by Kai Wu. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSMutableDictionaryBlocksKitTest : XCTestCase @@ -42,7 +42,7 @@ - (void)testSelectedNone { }; [_subject bk_performSelect:validationBlock]; - XCTAssertEqual(_subject.count, 0, @"no item is selected"); + XCTAssertEqual(_subject.count, (NSUInteger)0, @"no item is selected"); } - (void)testReject { @@ -63,7 +63,7 @@ - (void)testRejectedAll { }; [_subject bk_performReject:validationBlock]; - XCTAssertEqual(_subject.count, 0, @"all items are rejected"); + XCTAssertEqual(_subject.count, (NSUInteger)0, @"all items are rejected"); } - (void)testMap { diff --git a/Tests/NSMutableIndexSetBlocksKitTest.m b/Tests/Core/NSMutableIndexSetBlocksKitTest.m similarity index 97% rename from Tests/NSMutableIndexSetBlocksKitTest.m rename to Tests/Core/NSMutableIndexSetBlocksKitTest.m index baf5a0bdb..5d6ce529d 100644 --- a/Tests/NSMutableIndexSetBlocksKitTest.m +++ b/Tests/Core/NSMutableIndexSetBlocksKitTest.m @@ -5,8 +5,8 @@ // Contributed by Kai Wu. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSMutableIndexSetBlocksKitTest : XCTestCase diff --git a/Tests/NSMutableOrderedSetBlocksKitTest.m b/Tests/Core/NSMutableOrderedSetBlocksKitTest.m similarity index 97% rename from Tests/NSMutableOrderedSetBlocksKitTest.m rename to Tests/Core/NSMutableOrderedSetBlocksKitTest.m index 77e7ab1cd..3b3ca0f28 100644 --- a/Tests/NSMutableOrderedSetBlocksKitTest.m +++ b/Tests/Core/NSMutableOrderedSetBlocksKitTest.m @@ -3,8 +3,8 @@ // BlocksKit Unit Tests // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSMutableOrderedSetBlocksKitTest : XCTestCase diff --git a/Tests/NSMutableSetBlocksKitTest.m b/Tests/Core/NSMutableSetBlocksKitTest.m similarity index 97% rename from Tests/NSMutableSetBlocksKitTest.m rename to Tests/Core/NSMutableSetBlocksKitTest.m index 82997608c..f2d0d2206 100644 --- a/Tests/NSMutableSetBlocksKitTest.m +++ b/Tests/Core/NSMutableSetBlocksKitTest.m @@ -5,8 +5,8 @@ // Contributed by Kai Wu. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSMutableSetBlocksKitTest : XCTestCase diff --git a/Tests/NSObjectAssociatedObjectTest.m b/Tests/Core/NSObjectAssociatedObjectTest.m similarity index 95% rename from Tests/NSObjectAssociatedObjectTest.m rename to Tests/Core/NSObjectAssociatedObjectTest.m index 6e8a88201..de5ee8c04 100644 --- a/Tests/NSObjectAssociatedObjectTest.m +++ b/Tests/Core/NSObjectAssociatedObjectTest.m @@ -5,8 +5,8 @@ // Contributed by Kai Wu. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSObjectAssociatedObjectTest : XCTestCase diff --git a/Tests/NSObjectBlockObservationTest.m b/Tests/Core/NSObjectBlockObservationTest.m similarity index 98% rename from Tests/NSObjectBlockObservationTest.m rename to Tests/Core/NSObjectBlockObservationTest.m index 5c5d2f125..d9efd8b6a 100644 --- a/Tests/NSObjectBlockObservationTest.m +++ b/Tests/Core/NSObjectBlockObservationTest.m @@ -5,8 +5,8 @@ // Contributed by Kai Wu. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSObjectBlockObservationTest : XCTestCase diff --git a/Tests/Core/NSObjectBlocksKitTest.m b/Tests/Core/NSObjectBlocksKitTest.m new file mode 100644 index 000000000..830b5508a --- /dev/null +++ b/Tests/Core/NSObjectBlocksKitTest.m @@ -0,0 +1,138 @@ +// +// NSObjectBlocksKitTest.m +// BlocksKit Unit Tests +// +// Contributed by Kai Wu. +// + +@import XCTest; +@import BlocksKit; + +static const NSTimeInterval BKObjectTestInterval = 0.025; +static const NSTimeInterval BKObjectTestTimeout = 1.0; + +static const void *BKObjectTestIsOnQueueKey = &BKObjectTestIsOnQueueKey; +NS_INLINE BOOL BKObjectTestIsOnQueue(void) { + return dispatch_get_specific(BKObjectTestIsOnQueueKey) != NULL; +} + +NS_INLINE BOOL BKObjectTestIsOnMainQueue(void) { + return NSThread.isMainThread; +} + +NS_INLINE BOOL BKObjectTestIsOnGlobalQueue(void) { + return !BKObjectTestIsOnQueue() && !BKObjectTestIsOnMainQueue(); +} + +@interface NSObjectBlocksKitTest : XCTestCase { + dispatch_queue_t _queue; +} + +@end + +@implementation NSObjectBlocksKitTest + +- (void)setUp +{ + _queue = dispatch_queue_create(NSStringFromClass(self.class).UTF8String, 0); + dispatch_queue_set_specific(_queue, BKObjectTestIsOnQueueKey, (__bridge void *)self, NULL); +} + +- (void)tearDown +{ + _queue = nil; +} + +- (void)testInstancePerformBlockAfterDelay { + XCTestExpectation *expectation = [self expectationWithDescription:@"Perform sender block after delay"]; + id token = [self bk_performAfterDelay:BKObjectTestInterval usingBlock:^(id sender) { + [expectation fulfill]; + + XCTAssertNotNil(sender); + XCTAssertTrue(BKObjectTestIsOnMainQueue()); + }]; + + XCTAssertNotNil(token); + + [self waitForExpectationsWithTimeout:BKObjectTestTimeout handler:NULL]; +} + +- (void)testPerformBlockAfterDelay { + XCTestExpectation *expectation = [self expectationWithDescription:@"Perform block after delay"]; + id token = [NSObject bk_performAfterDelay:BKObjectTestInterval usingBlock:^{ + [expectation fulfill]; + XCTAssertTrue(BKObjectTestIsOnMainQueue()); + }]; + + XCTAssertNotNil(token); + + [self waitForExpectationsWithTimeout:BKObjectTestTimeout handler:NULL]; +} + +- (void)testInstancePerformBlockOnQueueAfterDelay { + XCTestExpectation *expectation = [self expectationWithDescription:@"Perform block after delay"]; + id token = [self bk_performOnQueue:_queue afterDelay:BKObjectTestInterval usingBlock:^(id sender){ + [expectation fulfill]; + + XCTAssertNotNil(sender); + XCTAssertTrue(BKObjectTestIsOnQueue()); + }]; + + XCTAssertNotNil(token); + + [self waitForExpectationsWithTimeout:BKObjectTestTimeout handler:NULL]; +} + +- (void)testPerformBlockOnQueueAfterDelay { + XCTestExpectation *expectation = [self expectationWithDescription:@"Perform block after delay"]; + id token = [NSObject bk_performOnQueue:_queue afterDelay:BKObjectTestInterval usingBlock:^{ + [expectation fulfill]; + XCTAssertTrue(BKObjectTestIsOnQueue()); + }]; + + XCTAssertNotNil(token); + + [self waitForExpectationsWithTimeout:BKObjectTestTimeout handler:NULL]; +} + +- (void)testInstancePerformBlockInBackgroundAfterDelay { + XCTestExpectation *expectation = [self expectationWithDescription:@"Perform block after delay"]; + id token = [self bk_performInBackgroundAfterDelay:BKObjectTestInterval usingBlock:^(id sender){ + [expectation fulfill]; + XCTAssertTrue(BKObjectTestIsOnGlobalQueue()); + }]; + + XCTAssertNotNil(token); + + [self waitForExpectationsWithTimeout:BKObjectTestTimeout handler:NULL]; +} + +- (void)testPerformBlockInBackgroundAfterDelay { + XCTestExpectation *expectation = [self expectationWithDescription:@"Perform block after delay"]; + id token = [NSObject bk_performInBackgroundAfterDelay:BKObjectTestInterval usingBlock:^{ + [expectation fulfill]; + XCTAssertTrue(BKObjectTestIsOnGlobalQueue()); + }]; + + XCTAssertNotNil(token); + + [self waitForExpectationsWithTimeout:BKObjectTestTimeout handler:NULL]; +} + +- (void)testCancelPerformBlock { + XCTestExpectation *expectation = [self expectationWithDescription:@"Cancel performed block"]; + id token = [NSObject bk_performOnQueue:_queue afterDelay:BKObjectTestInterval usingBlock:^{ + XCTFail(); + }]; + + XCTAssertNotNil(token); + [NSObject bk_cancelBlock:token]; + + [NSObject bk_performAfterDelay:BKObjectTestInterval usingBlock:^{ + [expectation fulfill]; + }]; + + [self waitForExpectationsWithTimeout:BKObjectTestTimeout handler:NULL]; +} + +@end diff --git a/Tests/NSOrderedSetBlocksKitTest.m b/Tests/Core/NSOrderedSetBlocksKitTest.m similarity index 98% rename from Tests/NSOrderedSetBlocksKitTest.m rename to Tests/Core/NSOrderedSetBlocksKitTest.m index b7e900e3c..b0df864d5 100644 --- a/Tests/NSOrderedSetBlocksKitTest.m +++ b/Tests/Core/NSOrderedSetBlocksKitTest.m @@ -3,8 +3,8 @@ // BlocksKit Unit Tests // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSOrderedSetBlocksKitTest : XCTestCase diff --git a/Tests/NSSetBlocksKitTest.m b/Tests/Core/NSSetBlocksKitTest.m similarity index 98% rename from Tests/NSSetBlocksKitTest.m rename to Tests/Core/NSSetBlocksKitTest.m index a198f9957..89e08a5c0 100644 --- a/Tests/NSSetBlocksKitTest.m +++ b/Tests/Core/NSSetBlocksKitTest.m @@ -5,8 +5,8 @@ // Contributed by Kai Wu. // -#import -#import +@import XCTest; +@import BlocksKit; @interface NSSetBlocksKitTest : XCTestCase diff --git a/Tests/Core/NSTimerBlocksKitTest.m b/Tests/Core/NSTimerBlocksKitTest.m new file mode 100644 index 000000000..6da610895 --- /dev/null +++ b/Tests/Core/NSTimerBlocksKitTest.m @@ -0,0 +1,51 @@ +// +// NSTimerBlocksKitTest.m +// BlocksKit Unit Tests +// +// Contributed by Kai Wu. +// + +@import XCTest; +@import BlocksKit; + +static const NSTimeInterval BKTimerTestLeniency = 10; +static const NSTimeInterval BKTimerTestInterval = 0.025; + +static inline NSTimeInterval Timeout(NSInteger count) { + return count * BKTimerTestLeniency * BKTimerTestInterval; +} + +@interface NSTimerBlocksKitTest : XCTestCase + +@end + +@implementation NSTimerBlocksKitTest + +- (void)commonTestTimerRepeating:(BOOL)repeats expectation:(NSInteger)count +{ + NSString *description = [NSString stringWithFormat:@"Timer x%ld", (long)count]; + XCTestExpectation *expectation = [self expectationWithDescription:description]; + const NSTimeInterval timeout = Timeout(count); + __block NSInteger total = 0; + + NSTimer *timer = [NSTimer bk_scheduleTimerWithTimeInterval:BKTimerTestInterval repeats:repeats usingBlock:^(NSTimer *timer) { + if (++total >= count) { + [expectation fulfill]; + } + }]; + + [self waitForExpectationsWithTimeout:timeout handler:^(NSError *__unused err) { + [timer invalidate]; + XCTAssertEqual(total, count); + }]; +} + +- (void)testTimer { + [self commonTestTimerRepeating:NO expectation:1]; +} + +- (void)testRepeatedTimer { + [self commonTestTimerRepeating:YES expectation:5]; +} + +@end diff --git a/Tests/A2BlockDelegateTests.m b/Tests/DynamicDelegate/A2BlockDelegateTests.m similarity index 98% rename from Tests/A2BlockDelegateTests.m rename to Tests/DynamicDelegate/A2BlockDelegateTests.m index 751299ced..e5b437a70 100644 --- a/Tests/A2BlockDelegateTests.m +++ b/Tests/DynamicDelegate/A2BlockDelegateTests.m @@ -3,8 +3,8 @@ // BlocksKit Unit Tests // -#import -#import +@import XCTest; +@import BlocksKit.Dynamic; #import "A2DynamicTestClasses+A2BlockDelegate.h" @interface A2BlockDelegateTests : XCTestCase diff --git a/Tests/A2BlockInvocationTests.m b/Tests/DynamicDelegate/A2BlockInvocationTests.m similarity index 99% rename from Tests/A2BlockInvocationTests.m rename to Tests/DynamicDelegate/A2BlockInvocationTests.m index 15f7a0b4d..a2bb4e5cb 100644 --- a/Tests/A2BlockInvocationTests.m +++ b/Tests/DynamicDelegate/A2BlockInvocationTests.m @@ -3,8 +3,8 @@ // BlocksKit Unit Tests // -#import -#import +@import XCTest; +@import BlocksKit.Dynamic; static const void *A2BlockInvocationTestPass = &A2BlockInvocationTestPass; diff --git a/Tests/A2DynamicDelegateTests.m b/Tests/DynamicDelegate/A2DynamicDelegateTests.m similarity index 99% rename from Tests/A2DynamicDelegateTests.m rename to Tests/DynamicDelegate/A2DynamicDelegateTests.m index 72dbf1b17..a74fe4f93 100644 --- a/Tests/A2DynamicDelegateTests.m +++ b/Tests/DynamicDelegate/A2DynamicDelegateTests.m @@ -3,8 +3,8 @@ // BlocksKit Unit Tests // -#import -#import +@import XCTest; +@import BlocksKit.Dynamic; #import "A2DynamicTestClasses.h" @interface A2DynamicDelegateTests : XCTestCase diff --git a/Tests/A2DynamicTestClasses+A2BlockDelegate.h b/Tests/DynamicDelegate/A2DynamicTestClasses+A2BlockDelegate.h similarity index 98% rename from Tests/A2DynamicTestClasses+A2BlockDelegate.h rename to Tests/DynamicDelegate/A2DynamicTestClasses+A2BlockDelegate.h index f782aeab0..e50d8bd61 100644 --- a/Tests/A2DynamicTestClasses+A2BlockDelegate.h +++ b/Tests/DynamicDelegate/A2DynamicTestClasses+A2BlockDelegate.h @@ -6,7 +6,7 @@ // // -#import +@import Foundation; #import "A2DynamicTestClasses.h" #pragma mark - diff --git a/Tests/A2DynamicTestClasses+A2BlockDelegate.m b/Tests/DynamicDelegate/A2DynamicTestClasses+A2BlockDelegate.m similarity index 99% rename from Tests/A2DynamicTestClasses+A2BlockDelegate.m rename to Tests/DynamicDelegate/A2DynamicTestClasses+A2BlockDelegate.m index 07e07a86b..024949183 100644 --- a/Tests/A2DynamicTestClasses+A2BlockDelegate.m +++ b/Tests/DynamicDelegate/A2DynamicTestClasses+A2BlockDelegate.m @@ -7,7 +7,7 @@ // #import "A2DynamicTestClasses+A2BlockDelegate.h" -#import "NSObject+A2BlockDelegate.h" +@import BlocksKit.Dynamic; @implementation TestReturnObject (A2BlockDelegate) diff --git a/Tests/A2DynamicTestClasses.h b/Tests/DynamicDelegate/A2DynamicTestClasses.h similarity index 99% rename from Tests/A2DynamicTestClasses.h rename to Tests/DynamicDelegate/A2DynamicTestClasses.h index 2d56f47f1..a9a3834d2 100644 --- a/Tests/A2DynamicTestClasses.h +++ b/Tests/DynamicDelegate/A2DynamicTestClasses.h @@ -3,7 +3,7 @@ // BlocksKit Unit Tests // -#import +@import Foundation; #pragma mark - diff --git a/Tests/A2DynamicTestClasses.m b/Tests/DynamicDelegate/A2DynamicTestClasses.m similarity index 100% rename from Tests/A2DynamicTestClasses.m rename to Tests/DynamicDelegate/A2DynamicTestClasses.m diff --git a/Tests/NSCacheBlocksKitTest.m b/Tests/DynamicDelegate/NSCacheBlocksKitTest.m similarity index 79% rename from Tests/NSCacheBlocksKitTest.m rename to Tests/DynamicDelegate/NSCacheBlocksKitTest.m index f9417fa35..0cfc163cd 100644 --- a/Tests/NSCacheBlocksKitTest.m +++ b/Tests/DynamicDelegate/NSCacheBlocksKitTest.m @@ -3,9 +3,8 @@ // BlocksKit Unit Tests // -#import -#import -#import +@import XCTest; +@import BlocksKit.Dynamic.Foundation; @interface NSCacheBlocksKitTest : XCTestCase @@ -39,7 +38,7 @@ - (void)testDelegate { _subject.bk_willEvictBlock = ^(NSCache *cache, id obj) { weakSelf->_total--; }; - [_subject.bk_dynamicDelegate cache:_subject willEvictObject:nil]; + [_subject.bk_dynamicDelegate cache:_subject willEvictObject:NSObject.new]; XCTAssertEqual(_total, (NSInteger)0, @"The delegates should have been called!"); } diff --git a/Tests/DynamicDelegate/NSURLConnectionBlocksKitTest.m b/Tests/DynamicDelegate/NSURLConnectionBlocksKitTest.m new file mode 100644 index 000000000..ce8ee71e4 --- /dev/null +++ b/Tests/DynamicDelegate/NSURLConnectionBlocksKitTest.m @@ -0,0 +1,33 @@ +// +// NSURLConnectionBlocksKitTest.m +// BlocksKit Unit Tests +// + +@import XCTest; +@import BlocksKit.Dynamic.Foundation; + +@interface NSURLConnectionBlocksKitTest : XCTestCase + +@end + +@implementation NSURLConnectionBlocksKitTest + +- (void)testAsyncConnection { + XCTestExpectation *expectation = [self expectationWithDescription:@"Block callbacks reached"]; + + NSURL *URL = [NSURL URLWithString:@"http://google.com/"]; + NSURLRequest *request = [NSURLRequest requestWithURL:URL]; + NSURLConnection *conn = [[NSURLConnection alloc] bk_initWithRequest:request]; + conn.bk_successBlock = ^(NSURLConnection *connection, NSURLResponse *response, NSData *data) { + [expectation fulfill]; + }; + conn.bk_failureBlock = ^(NSURLConnection *connection, NSError *err) { + [expectation fulfill]; + }; + + [conn start]; + + [self waitForExpectationsWithTimeout:10 handler:NULL]; +} + +@end diff --git a/Tests/Images.xcassets/AppIcon.appiconset/Contents.json b/Tests/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index a396706db..000000000 --- a/Tests/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Tests/Images.xcassets/LaunchImage.launchimage/Contents.json b/Tests/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index c79ebd3ad..000000000 --- a/Tests/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "subtype" : "retina4", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Tests/BlocksKit-Mac-Tests-Info.plist b/Tests/Info.plist similarity index 80% rename from Tests/BlocksKit-Mac-Tests-Info.plist rename to Tests/Info.plist index 81e3f2a75..ba72822e8 100644 --- a/Tests/BlocksKit-Mac-Tests-Info.plist +++ b/Tests/Info.plist @@ -5,11 +5,13 @@ CFBundleDevelopmentRegion en CFBundleExecutable - ${EXECUTABLE_NAME} + $(EXECUTABLE_NAME) CFBundleIdentifier - us.pandamonia.BlocksKit.Mac-Tests + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 + CFBundleName + $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString diff --git a/Tests/Mac Demo/BKApp.h b/Tests/Mac Demo/BKApp.h new file mode 100644 index 000000000..7ea15b618 --- /dev/null +++ b/Tests/Mac Demo/BKApp.h @@ -0,0 +1,20 @@ +// +// BKApp.h +// BlocksKit Mac Demo +// +// Contributed by Alex Gray. +// + +@import Cocoa; + +@class A2DynamicDelegate; + +@interface BKApp : NSObject + +@property NSWindow *window; +@property NSTimer *tmr; +@property A2DynamicDelegate * ddSrc; +@property IBOutlet NSTableView *tv; +@property NSUInteger displayCt; + +@end diff --git a/Tests/MacDemo/BKApp.m b/Tests/Mac Demo/BKApp.m similarity index 87% rename from Tests/MacDemo/BKApp.m rename to Tests/Mac Demo/BKApp.m index f21f8c10a..dddcacc87 100644 --- a/Tests/MacDemo/BKApp.m +++ b/Tests/Mac Demo/BKApp.m @@ -6,8 +6,15 @@ // #import "BKApp.h" +@import BlocksKit; +@import BlocksKit.Dynamic; -@implementation BKApp - (void) awakeFromNib { +@interface BKColorfulCell : NSCell +@end + +@implementation BKApp + +- (void) awakeFromNib { // Get a colorlist we'll use as content for our tableView NSColorList *clrLst = [NSColorList colorListNamed:@"Crayons"]; @@ -58,6 +65,7 @@ @implementation BKApp - (void) awakeFromNib { // Here we access the array of dictionaries we saved to "self", returning the appropriate "objectValueForTableColumn:row:" return [self bk_associatedValueForKey:@"assocCryns"][row][[tv.tableColumns indexOfObject:tc] ? @"color" : @"name"]; }; + // Tell A2DynamicDelegate to implement the datasource method with the block we just defined. (these populate the table!). [_ddSrc implementMethod:numberOfRowsMethod withBlock: numberOfRowsBlock]; [_ddSrc implementMethod:objectValueForColRowMethod withBlock:objectValueForColRowBlock]; @@ -66,9 +74,18 @@ @implementation BKApp - (void) awakeFromNib { _tv.dataSource = (id)_ddSrc; } -- (IBAction)reset:(id)sender { self.displayCt = 0; } /* Reset Button to reset the action */ @end +- (IBAction)reset:(id)sender { + self.displayCt = 0; +} /* Reset Button to reset the action */ -@implementation BKColorfulCell // A simple cell class to display the color object in the table. +@end -- (void)drawWithFrame:(NSRect)cF inView:(NSView*)cV { [(NSColor*)[self objectValue]set]; NSRectFill(cF);} @end +// A simple cell class to display the color object in the table. +@implementation BKColorfulCell + +- (void)drawWithFrame:(NSRect)cF inView:(NSView*)cV { + [(NSColor *)[self objectValue]set]; + NSRectFill(cF); +} +@end diff --git a/Tests/MacDemo/Base.lproj/MainMenu.xib b/Tests/Mac Demo/Base.lproj/MainMenu.xib similarity index 94% rename from Tests/MacDemo/Base.lproj/MainMenu.xib rename to Tests/Mac Demo/Base.lproj/MainMenu.xib index e76e8500c..ccecd9bc8 100644 --- a/Tests/MacDemo/Base.lproj/MainMenu.xib +++ b/Tests/Mac Demo/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - + - - + + @@ -11,7 +11,7 @@ - + @@ -105,8 +105,8 @@ - - + + @@ -125,7 +125,7 @@ - + @@ -141,13 +141,13 @@ - + -