├── tea.yaml ├── ChuzzleKit.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── WorkspaceSettings.xcsettings ├── xcshareddata │ └── xcschemes │ │ └── ChuzzleKit.xcscheme └── project.pbxproj ├── .travis.yml ├── ChuzzleKit.podspec ├── Sources ├── Info.plist ├── ChuzzleKit.h └── ChuzzleKit.m ├── LICENSE ├── Tests └── ChuzzleTests.m └── README.markdown /tea.yaml: -------------------------------------------------------------------------------- 1 | # https://tea.xyz/what-is-this-file 2 | # created with https://mash.pkgx.sh/mxcl/tea-register 3 | --- 4 | version: 1.0.0 5 | codeOwners: 6 | - '0x5E2DE4A68df811AAAD32d71fb065e6946fA5C8d9' # mxcl 7 | quorum: 1 8 | -------------------------------------------------------------------------------- /ChuzzleKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ChuzzleKit.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode8 3 | 4 | env: 5 | - ACTION=test PLATFORM=Mac DESTINATION='platform=OS X' 6 | - ACTION=test PLATFORM=iOS DESTINATION='platform=iOS Simulator,name=iPhone 6S' UUID='64DF30D4-4118-480F-9ADD-DCC32194B63D' 7 | - ACTION=build PLATFORM=watchOS DESTINATION='platform=watchOS Simulator,name=Apple Watch - 38mm' 8 | - ACTION=test PLATFORM=tvOS DESTINATION='platform=tvOS Simulator,name=Apple TV 1080p' UUID='273D776F-196E-4F2A-AEF2-E1E3EAE99B47' 9 | 10 | script: 11 | - if [ -n "$UUID" ]; then xcrun instruments -w "$UUID" || true; sleep 15; fi 12 | - set -o pipefail && xcodebuild -scheme ChuzzleKit -destination "$DESTINATION" $ACTION | xcpretty 13 | -------------------------------------------------------------------------------- /ChuzzleKit.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'ChuzzleKit' 3 | 4 | `xcodebuild -project #{s.name}.xcodeproj -showBuildSettings` =~ /CURRENT_PROJECT_VERSION = ((\d+\.)+\d+)/ 5 | abort("No version detected") if $1.nil? 6 | 7 | s.ios.deployment_target = '13.0' 8 | s.osx.deployment_target = '10.11' 9 | s.watchos.deployment_target = '2.0' 10 | s.tvos.deployment_target = '9.0' 11 | s.visionos.deployment_target = '1.0' 12 | 13 | s.version = $1 14 | s.requires_arc = true 15 | s.source_files = 'Sources/*.{m,h}' 16 | s.source = { :git => "https://github.com/mxcl/#{s.name}.git", :tag => s.version } 17 | s.license = 'MIT' 18 | s.summary = 'A chuzzled object is `nil` if it is falsy, otherwise it has its falsy parts removed.' 19 | 20 | s.homepage = "http://github.com/mxcl/#{s.name}" 21 | s.social_media_url = 'https://twitter.com/mxcl' 22 | s.authors = { 'Max Howell' => 'mxcl@me.com' } 23 | end 24 | -------------------------------------------------------------------------------- /Sources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | $(CURRENT_PROJECT_VERSION) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Sources/ChuzzleKit.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import 4 | #import 5 | 6 | 7 | @interface NSString (Chuzzle) 8 | /// - Returns: The receiver with whitespace trimmed from both ends, if the resulting string is empty, returns `nil`. 9 | - (NSString * _Nullable)chuzzle; 10 | @end 11 | 12 | @interface NSArray (Chuzzle) 13 | /// - Returns: The receiver with all elements chuzzled (if they support it), if the resulting array is empty, returns `nil`. 14 | - (NSArray * _Nullable)chuzzle; 15 | @end 16 | 17 | @interface NSDictionary (Chuzzle) 18 | /// - Returns: The receiver with all values chuzzled (if they support it), if the resulting dictionary is empty, returns `nil`. 19 | - (NSDictionary * _Nullable)chuzzle; 20 | @end 21 | 22 | @interface NSNull (Chuzzle) 23 | /// - Returns: `nil` 24 | - (id _Nullable)chuzzle; 25 | @end 26 | 27 | @interface NSObject (Chuzzle) 28 | /// - Returns: `self` 29 | - (id _Nullable)chuzzle; 30 | @end 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2016, Max Howell; mxcl@me.com 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a 4 | copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included 12 | in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 18 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 19 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 20 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Tests/ChuzzleTests.m: -------------------------------------------------------------------------------- 1 | @import ChuzzleKit; 2 | @import XCTest; 3 | 4 | @implementation ChuzzleTests: XCTestCase 5 | 6 | - (void)test_everything { 7 | id b = @[@{@"a": @"", @2: @"", @3: @[], @4: [NSNull null]}]; 8 | id a = @[NSNull.null, @"\t", @{@1: @" ", @2: b}, @1].chuzzle; 9 | XCTAssertEqualObjects(a, @[@1]); 10 | } 11 | 12 | - (void)test_no_chuzzle { 13 | NSDictionary *a = @{@1: @"1", @2: @"2"}; 14 | id b = a.chuzzle; 15 | XCTAssertEqualObjects(a, b); 16 | } 17 | 18 | - (void)test_another_test { 19 | NSDictionary *d = @{@1: @"", @2: @" 2 "}.chuzzle; 20 | XCTAssertEqualObjects(d, @{@2: @"2"}); 21 | } 22 | - (void)test_nsobject { 23 | id o = [NSObject new]; 24 | XCTAssertEqual(o, [o chuzzle]); 25 | } 26 | - (void)test_giant_array { 27 | // using a very large number of objectcs to illustrate the problem 28 | // and make the test trip on powerful desktop machines, but issues 29 | // would obviously manifest sooner on mobile devices with less memory 30 | NSUInteger size = 50000000; 31 | NSMutableArray* a = [NSMutableArray arrayWithCapacity:size]; 32 | for (int i = 0; i < size; i++) { 33 | [a addObject:i % 2 ? @(i) : NSNull.null]; 34 | } 35 | a = [NSArray arrayWithArray:a]; 36 | NSArray* b; 37 | XCTAssertNoThrow(b = a.chuzzle); 38 | XCTAssertEqual(b.count, a.count / 2); 39 | } 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /Sources/ChuzzleKit.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import "ChuzzleKit.h" 3 | 4 | @implementation NSString (Chuzzle) 5 | 6 | - (NSString *)chuzzle { 7 | NSString *s = [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 8 | return s.length == 0 ? nil : s; 9 | } 10 | 11 | @end 12 | 13 | 14 | @implementation NSDictionary (Chuzzle) 15 | 16 | - (id)chuzzle { 17 | if (self.count == 0) { 18 | return nil; 19 | } 20 | NSMutableArray* objs = [NSMutableArray arrayWithCapacity:self.count]; 21 | NSMutableArray* keys = [NSMutableArray arrayWithCapacity:self.count]; 22 | for (id key in self) { 23 | id obj = self[key]; 24 | if ([obj respondsToSelector:@selector(chuzzle)]) { 25 | obj = [obj chuzzle]; 26 | } 27 | if (obj) { 28 | [objs addObject:obj]; 29 | [keys addObject:key]; 30 | } 31 | } 32 | return (objs.count == 0) ? nil : [NSDictionary dictionaryWithObjects:objs forKeys:keys]; 33 | } 34 | 35 | @end 36 | 37 | 38 | @implementation NSArray (Chuzzle) 39 | 40 | - (instancetype)chuzzle { 41 | if (self.count == 0) { 42 | return nil; 43 | } 44 | NSMutableArray* result = [NSMutableArray arrayWithCapacity:self.count]; 45 | for (__strong id obj in self) { 46 | if ([obj respondsToSelector:@selector(chuzzle)]) { 47 | obj = [obj chuzzle]; 48 | } 49 | if (obj) { 50 | [result addObject:obj]; 51 | } 52 | } 53 | return result.count == 0 ? nil : [NSArray arrayWithArray:result]; 54 | } 55 | 56 | @end 57 | 58 | 59 | @implementation NSNull (Chuzzle) 60 | 61 | - (id)chuzzle { 62 | return nil; 63 | } 64 | 65 | @end 66 | 67 | 68 | @implementation NSObject (Chuzzle) 69 | 70 | - (id)chuzzle { 71 | return self; 72 | } 73 | 74 | @end 75 | -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | # ChuzzleKit [![Build Status](https://travis-ci.org/mxcl/ChuzzleKit.svg?branch=master)](https://travis-ci.org/mxcl/ChuzzleKit) 2 | 3 | A chuzzled object is nil if it is *falsy*, otherwise it has its *falsy* parts 4 | removed. 5 | 6 | For example: 7 | 8 | * `@"".chuzzle` is `nil` 9 | * Also `@" ".chuzzle` is `nil` 10 | * And `@"\r\t".chuzzle` is `nil` 11 | * `@" 2 ".chuzzle` is `@"2"` 12 | * `@[].chuzzle` is `nil` 13 | * `@[@"", @1].chuzzle` is `@[@1]` 14 | * `[NSNull null].chuzzle` is `nil` 15 | * `@{}.chuzzle` is `nil` 16 | * `@{@1: @""}.chuzzle` is `nil` 17 | * `@{@1: @"", @2: @" 2 "}.chuzzle` is `@{@2: @"2"}` 18 | 19 | 20 | > Note that: `@" 2 3 "` chuzzles to: `@"2 3"`, that is, it only trims the string, it doesn’t eat the internal whitespace. This is because the “falsy” whitespace is just the trailing whitespace, not the internal whitespace. This is probably what you expected. 21 | 22 | 23 | Mutable Chuzzling 24 | ================= 25 | We removed mutable chuzzling. There are issues with adding category methods to mutable variants in Cocoa, which led to us having to enact hacks. However there were unexpected issues, eg: https://github.com/mxcl/ChuzzleKit/issues/3 26 | 27 | 28 | Custom Chuzzling 29 | ================ 30 | All our `chuzzle` methods on container classes will call `chuzzle` on the objects they contain, if it is implemented. 31 | 32 | So if you want to support recursive chuzzling on your own objects, simply implement a `chuzzle` method. 33 | 34 | 35 | Making JSON PLIST-Compliant 36 | =========================== 37 | Since `NSNull` cannot be encoded into a PLIST, a convenient (but by **no means** the primary) usage of ChuzzleKit is to make saving JSON to a plist not crash (eg. via `writeToFile:atomically`). 38 | 39 | 40 | Stripping Strings 41 | ================= 42 | `-chuzzle` can be a less enormous alternative to `-stringByTrimmingCharactersInSet:`, just don’t forget to expect `nil` in the response. 43 | -------------------------------------------------------------------------------- /ChuzzleKit.xcodeproj/xcshareddata/xcschemes/ChuzzleKit.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 45 | 46 | 48 | 54 | 55 | 56 | 57 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 79 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 98 | 104 | 105 | 106 | 107 | 109 | 110 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /ChuzzleKit.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 6321D1151A801D9100559508 /* ChuzzleKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 6321D1141A801D9100559508 /* ChuzzleKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 6321D11B1A801D9100559508 /* ChuzzleKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6321D10F1A801D9100559508 /* ChuzzleKit.framework */; }; 12 | 6321D1221A801D9100559508 /* ChuzzleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6321D1211A801D9100559508 /* ChuzzleTests.m */; }; 13 | 6321D12C1A801DF800559508 /* ChuzzleKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 6321D12A1A801DF800559508 /* ChuzzleKit.m */; }; 14 | /* End PBXBuildFile section */ 15 | 16 | /* Begin PBXContainerItemProxy section */ 17 | 6321D11C1A801D9100559508 /* PBXContainerItemProxy */ = { 18 | isa = PBXContainerItemProxy; 19 | containerPortal = 63F11F821A801D7100AE5B0E /* Project object */; 20 | proxyType = 1; 21 | remoteGlobalIDString = 6321D10E1A801D9100559508; 22 | remoteInfo = ChuzzleKit; 23 | }; 24 | /* End PBXContainerItemProxy section */ 25 | 26 | /* Begin PBXFileReference section */ 27 | 6321D10F1A801D9100559508 /* ChuzzleKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ChuzzleKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 28 | 6321D1131A801D9100559508 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Sources/Info.plist; sourceTree = SOURCE_ROOT; }; 29 | 6321D1141A801D9100559508 /* ChuzzleKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ChuzzleKit.h; path = Sources/ChuzzleKit.h; sourceTree = SOURCE_ROOT; }; 30 | 6321D11A1A801D9100559508 /* ChuzzleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChuzzleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 31 | 6321D1211A801D9100559508 /* ChuzzleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ChuzzleTests.m; path = Tests/ChuzzleTests.m; sourceTree = SOURCE_ROOT; }; 32 | 6321D12A1A801DF800559508 /* ChuzzleKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ChuzzleKit.m; path = Sources/ChuzzleKit.m; sourceTree = SOURCE_ROOT; }; 33 | 639DCB471D73A5A2000938BF /* README.markdown */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.markdown; sourceTree = ""; }; 34 | 639DCB481D73A5A8000938BF /* ChuzzleKit.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = ChuzzleKit.podspec; sourceTree = ""; }; 35 | /* End PBXFileReference section */ 36 | 37 | /* Begin PBXFrameworksBuildPhase section */ 38 | 6321D10B1A801D9100559508 /* Frameworks */ = { 39 | isa = PBXFrameworksBuildPhase; 40 | buildActionMask = 2147483647; 41 | files = ( 42 | ); 43 | runOnlyForDeploymentPostprocessing = 0; 44 | }; 45 | 6321D1171A801D9100559508 /* Frameworks */ = { 46 | isa = PBXFrameworksBuildPhase; 47 | buildActionMask = 2147483647; 48 | files = ( 49 | 6321D11B1A801D9100559508 /* ChuzzleKit.framework in Frameworks */, 50 | ); 51 | runOnlyForDeploymentPostprocessing = 0; 52 | }; 53 | /* End PBXFrameworksBuildPhase section */ 54 | 55 | /* Begin PBXGroup section */ 56 | 63F11F811A801D7100AE5B0E = { 57 | isa = PBXGroup; 58 | children = ( 59 | 6321D1141A801D9100559508 /* ChuzzleKit.h */, 60 | 6321D12A1A801DF800559508 /* ChuzzleKit.m */, 61 | 6321D10F1A801D9100559508 /* ChuzzleKit.framework */, 62 | 639DCB481D73A5A8000938BF /* ChuzzleKit.podspec */, 63 | 6321D1211A801D9100559508 /* ChuzzleTests.m */, 64 | 6321D11A1A801D9100559508 /* ChuzzleTests.xctest */, 65 | 6321D1131A801D9100559508 /* Info.plist */, 66 | 639DCB471D73A5A2000938BF /* README.markdown */, 67 | ); 68 | sourceTree = ""; 69 | }; 70 | /* End PBXGroup section */ 71 | 72 | /* Begin PBXHeadersBuildPhase section */ 73 | 6321D10C1A801D9100559508 /* Headers */ = { 74 | isa = PBXHeadersBuildPhase; 75 | buildActionMask = 2147483647; 76 | files = ( 77 | 6321D1151A801D9100559508 /* ChuzzleKit.h in Headers */, 78 | ); 79 | runOnlyForDeploymentPostprocessing = 0; 80 | }; 81 | /* End PBXHeadersBuildPhase section */ 82 | 83 | /* Begin PBXNativeTarget section */ 84 | 6321D10E1A801D9100559508 /* ChuzzleKit */ = { 85 | isa = PBXNativeTarget; 86 | buildConfigurationList = 6321D1271A801D9100559508 /* Build configuration list for PBXNativeTarget "ChuzzleKit" */; 87 | buildPhases = ( 88 | 6321D10A1A801D9100559508 /* Sources */, 89 | 6321D10B1A801D9100559508 /* Frameworks */, 90 | 6321D10C1A801D9100559508 /* Headers */, 91 | 6321D10D1A801D9100559508 /* Resources */, 92 | ); 93 | buildRules = ( 94 | ); 95 | dependencies = ( 96 | ); 97 | name = ChuzzleKit; 98 | productName = ChuzzleKit; 99 | productReference = 6321D10F1A801D9100559508 /* ChuzzleKit.framework */; 100 | productType = "com.apple.product-type.framework"; 101 | }; 102 | 6321D1191A801D9100559508 /* ChuzzleTests */ = { 103 | isa = PBXNativeTarget; 104 | buildConfigurationList = 6321D1281A801D9100559508 /* Build configuration list for PBXNativeTarget "ChuzzleTests" */; 105 | buildPhases = ( 106 | 6321D1161A801D9100559508 /* Sources */, 107 | 6321D1171A801D9100559508 /* Frameworks */, 108 | 6321D1181A801D9100559508 /* Resources */, 109 | ); 110 | buildRules = ( 111 | ); 112 | dependencies = ( 113 | 6321D11D1A801D9100559508 /* PBXTargetDependency */, 114 | ); 115 | name = ChuzzleTests; 116 | productName = ChuzzleKitTests; 117 | productReference = 6321D11A1A801D9100559508 /* ChuzzleTests.xctest */; 118 | productType = "com.apple.product-type.bundle.unit-test"; 119 | }; 120 | /* End PBXNativeTarget section */ 121 | 122 | /* Begin PBXProject section */ 123 | 63F11F821A801D7100AE5B0E /* Project object */ = { 124 | isa = PBXProject; 125 | attributes = { 126 | LastUpgradeCheck = 0800; 127 | TargetAttributes = { 128 | 6321D10E1A801D9100559508 = { 129 | CreatedOnToolsVersion = 6.1.1; 130 | }; 131 | 6321D1191A801D9100559508 = { 132 | CreatedOnToolsVersion = 6.1.1; 133 | }; 134 | }; 135 | }; 136 | buildConfigurationList = 63F11F851A801D7100AE5B0E /* Build configuration list for PBXProject "ChuzzleKit" */; 137 | compatibilityVersion = "Xcode 3.2"; 138 | developmentRegion = English; 139 | hasScannedForEncodings = 0; 140 | knownRegions = ( 141 | en, 142 | ); 143 | mainGroup = 63F11F811A801D7100AE5B0E; 144 | productRefGroup = 63F11F811A801D7100AE5B0E; 145 | projectDirPath = ""; 146 | projectRoot = ""; 147 | targets = ( 148 | 6321D10E1A801D9100559508 /* ChuzzleKit */, 149 | 6321D1191A801D9100559508 /* ChuzzleTests */, 150 | ); 151 | }; 152 | /* End PBXProject section */ 153 | 154 | /* Begin PBXResourcesBuildPhase section */ 155 | 6321D10D1A801D9100559508 /* Resources */ = { 156 | isa = PBXResourcesBuildPhase; 157 | buildActionMask = 2147483647; 158 | files = ( 159 | ); 160 | runOnlyForDeploymentPostprocessing = 0; 161 | }; 162 | 6321D1181A801D9100559508 /* Resources */ = { 163 | isa = PBXResourcesBuildPhase; 164 | buildActionMask = 2147483647; 165 | files = ( 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXResourcesBuildPhase section */ 170 | 171 | /* Begin PBXSourcesBuildPhase section */ 172 | 6321D10A1A801D9100559508 /* Sources */ = { 173 | isa = PBXSourcesBuildPhase; 174 | buildActionMask = 2147483647; 175 | files = ( 176 | 6321D12C1A801DF800559508 /* ChuzzleKit.m in Sources */, 177 | ); 178 | runOnlyForDeploymentPostprocessing = 0; 179 | }; 180 | 6321D1161A801D9100559508 /* Sources */ = { 181 | isa = PBXSourcesBuildPhase; 182 | buildActionMask = 2147483647; 183 | files = ( 184 | 6321D1221A801D9100559508 /* ChuzzleTests.m in Sources */, 185 | ); 186 | runOnlyForDeploymentPostprocessing = 0; 187 | }; 188 | /* End PBXSourcesBuildPhase section */ 189 | 190 | /* Begin PBXTargetDependency section */ 191 | 6321D11D1A801D9100559508 /* PBXTargetDependency */ = { 192 | isa = PBXTargetDependency; 193 | target = 6321D10E1A801D9100559508 /* ChuzzleKit */; 194 | targetProxy = 6321D11C1A801D9100559508 /* PBXContainerItemProxy */; 195 | }; 196 | /* End PBXTargetDependency section */ 197 | 198 | /* Begin XCBuildConfiguration section */ 199 | 6321D1231A801D9100559508 /* Debug */ = { 200 | isa = XCBuildConfiguration; 201 | buildSettings = { 202 | ALWAYS_SEARCH_USER_PATHS = NO; 203 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 204 | CLANG_CXX_LIBRARY = "libc++"; 205 | CLANG_ENABLE_MODULES = YES; 206 | CLANG_ENABLE_OBJC_ARC = YES; 207 | CLANG_WARN_BOOL_CONVERSION = YES; 208 | CLANG_WARN_CONSTANT_CONVERSION = YES; 209 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 210 | CLANG_WARN_EMPTY_BODY = YES; 211 | CLANG_WARN_ENUM_CONVERSION = YES; 212 | CLANG_WARN_INT_CONVERSION = YES; 213 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 214 | CLANG_WARN_UNREACHABLE_CODE = YES; 215 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 216 | COPY_PHASE_STRIP = NO; 217 | DEFINES_MODULE = YES; 218 | DYLIB_COMPATIBILITY_VERSION = 1; 219 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 220 | ENABLE_STRICT_OBJC_MSGSEND = YES; 221 | GCC_C_LANGUAGE_STANDARD = gnu99; 222 | GCC_DYNAMIC_NO_PIC = NO; 223 | GCC_OPTIMIZATION_LEVEL = 0; 224 | GCC_PREPROCESSOR_DEFINITIONS = ( 225 | "DEBUG=1", 226 | "$(inherited)", 227 | ); 228 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 229 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 230 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 231 | GCC_WARN_UNDECLARED_SELECTOR = YES; 232 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 233 | GCC_WARN_UNUSED_FUNCTION = YES; 234 | GCC_WARN_UNUSED_VARIABLE = YES; 235 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 236 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 237 | MTL_ENABLE_DEBUG_INFO = YES; 238 | PRODUCT_NAME = "$(TARGET_NAME)"; 239 | SKIP_INSTALL = YES; 240 | VERSIONING_SYSTEM = "apple-generic"; 241 | VERSION_INFO_PREFIX = ""; 242 | }; 243 | name = Debug; 244 | }; 245 | 6321D1241A801D9100559508 /* Release */ = { 246 | isa = XCBuildConfiguration; 247 | buildSettings = { 248 | ALWAYS_SEARCH_USER_PATHS = NO; 249 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 250 | CLANG_CXX_LIBRARY = "libc++"; 251 | CLANG_ENABLE_MODULES = YES; 252 | CLANG_ENABLE_OBJC_ARC = YES; 253 | CLANG_WARN_BOOL_CONVERSION = YES; 254 | CLANG_WARN_CONSTANT_CONVERSION = YES; 255 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 256 | CLANG_WARN_EMPTY_BODY = YES; 257 | CLANG_WARN_ENUM_CONVERSION = YES; 258 | CLANG_WARN_INT_CONVERSION = YES; 259 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 260 | CLANG_WARN_UNREACHABLE_CODE = YES; 261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 262 | COPY_PHASE_STRIP = YES; 263 | DEFINES_MODULE = YES; 264 | DYLIB_COMPATIBILITY_VERSION = 1; 265 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 266 | ENABLE_NS_ASSERTIONS = NO; 267 | ENABLE_STRICT_OBJC_MSGSEND = YES; 268 | GCC_C_LANGUAGE_STANDARD = gnu99; 269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 271 | GCC_WARN_UNDECLARED_SELECTOR = YES; 272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 273 | GCC_WARN_UNUSED_FUNCTION = YES; 274 | GCC_WARN_UNUSED_VARIABLE = YES; 275 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 276 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 277 | MTL_ENABLE_DEBUG_INFO = NO; 278 | PRODUCT_NAME = "$(TARGET_NAME)"; 279 | SKIP_INSTALL = YES; 280 | VALIDATE_PRODUCT = YES; 281 | VERSIONING_SYSTEM = "apple-generic"; 282 | VERSION_INFO_PREFIX = ""; 283 | }; 284 | name = Release; 285 | }; 286 | 6321D1251A801D9100559508 /* Debug */ = { 287 | isa = XCBuildConfiguration; 288 | buildSettings = { 289 | ALWAYS_SEARCH_USER_PATHS = NO; 290 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 291 | CLANG_CXX_LIBRARY = "libc++"; 292 | CLANG_ENABLE_MODULES = YES; 293 | CLANG_ENABLE_OBJC_ARC = YES; 294 | CLANG_WARN_BOOL_CONVERSION = YES; 295 | CLANG_WARN_CONSTANT_CONVERSION = YES; 296 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 297 | CLANG_WARN_EMPTY_BODY = YES; 298 | CLANG_WARN_ENUM_CONVERSION = YES; 299 | CLANG_WARN_INT_CONVERSION = YES; 300 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 301 | CLANG_WARN_UNREACHABLE_CODE = YES; 302 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 303 | COPY_PHASE_STRIP = NO; 304 | ENABLE_STRICT_OBJC_MSGSEND = YES; 305 | GCC_C_LANGUAGE_STANDARD = gnu99; 306 | GCC_DYNAMIC_NO_PIC = NO; 307 | GCC_OPTIMIZATION_LEVEL = 0; 308 | GCC_PREPROCESSOR_DEFINITIONS = ( 309 | "DEBUG=1", 310 | "$(inherited)", 311 | ); 312 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 313 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 314 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 315 | GCC_WARN_INHIBIT_ALL_WARNINGS = YES; 316 | GCC_WARN_UNDECLARED_SELECTOR = YES; 317 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 318 | GCC_WARN_UNUSED_FUNCTION = YES; 319 | GCC_WARN_UNUSED_VARIABLE = YES; 320 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 321 | MTL_ENABLE_DEBUG_INFO = YES; 322 | PRODUCT_NAME = "$(TARGET_NAME)"; 323 | }; 324 | name = Debug; 325 | }; 326 | 6321D1261A801D9100559508 /* Release */ = { 327 | isa = XCBuildConfiguration; 328 | buildSettings = { 329 | ALWAYS_SEARCH_USER_PATHS = NO; 330 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 331 | CLANG_CXX_LIBRARY = "libc++"; 332 | CLANG_ENABLE_MODULES = YES; 333 | CLANG_ENABLE_OBJC_ARC = YES; 334 | CLANG_WARN_BOOL_CONVERSION = YES; 335 | CLANG_WARN_CONSTANT_CONVERSION = YES; 336 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 337 | CLANG_WARN_EMPTY_BODY = YES; 338 | CLANG_WARN_ENUM_CONVERSION = YES; 339 | CLANG_WARN_INT_CONVERSION = YES; 340 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 341 | CLANG_WARN_UNREACHABLE_CODE = YES; 342 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 343 | COPY_PHASE_STRIP = YES; 344 | ENABLE_NS_ASSERTIONS = NO; 345 | ENABLE_STRICT_OBJC_MSGSEND = YES; 346 | GCC_C_LANGUAGE_STANDARD = gnu99; 347 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 348 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 349 | GCC_WARN_INHIBIT_ALL_WARNINGS = YES; 350 | GCC_WARN_UNDECLARED_SELECTOR = YES; 351 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 352 | GCC_WARN_UNUSED_FUNCTION = YES; 353 | GCC_WARN_UNUSED_VARIABLE = YES; 354 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 355 | MTL_ENABLE_DEBUG_INFO = NO; 356 | PRODUCT_NAME = "$(TARGET_NAME)"; 357 | VALIDATE_PRODUCT = YES; 358 | }; 359 | name = Release; 360 | }; 361 | 63F11F861A801D7100AE5B0E /* Debug */ = { 362 | isa = XCBuildConfiguration; 363 | buildSettings = { 364 | CLANG_WARN_BOOL_CONVERSION = YES; 365 | CLANG_WARN_CONSTANT_CONVERSION = YES; 366 | CLANG_WARN_EMPTY_BODY = YES; 367 | CLANG_WARN_ENUM_CONVERSION = YES; 368 | CLANG_WARN_INFINITE_RECURSION = YES; 369 | CLANG_WARN_INT_CONVERSION = YES; 370 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 371 | CLANG_WARN_UNREACHABLE_CODE = YES; 372 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 373 | CURRENT_PROJECT_VERSION = 1.0.12; 374 | DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)"; 375 | ENABLE_STRICT_OBJC_MSGSEND = YES; 376 | ENABLE_TESTABILITY = YES; 377 | GCC_NO_COMMON_BLOCKS = YES; 378 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 379 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 380 | GCC_WARN_UNDECLARED_SELECTOR = YES; 381 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 382 | GCC_WARN_UNUSED_FUNCTION = YES; 383 | GCC_WARN_UNUSED_VARIABLE = YES; 384 | INFOPLIST_FILE = Sources/Info.plist; 385 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 386 | MACOSX_DEPLOYMENT_TARGET = 10.6; 387 | ONLY_ACTIVE_ARCH = YES; 388 | PRODUCT_BUNDLE_IDENTIFIER = "dev.mxcl.$(PRODUCT_NAME:rfc1034identifier)"; 389 | SUPPORTED_PLATFORMS = "macosx watchsimulator watchos appletvsimulator appletvos iphonesimulator iphoneos"; 390 | TARGETED_DEVICE_FAMILY = "1,2,3,4"; 391 | TVOS_DEPLOYMENT_TARGET = 9.0; 392 | WATCHOS_DEPLOYMENT_TARGET = 2.0; 393 | }; 394 | name = Debug; 395 | }; 396 | 63F11F871A801D7100AE5B0E /* Release */ = { 397 | isa = XCBuildConfiguration; 398 | buildSettings = { 399 | CLANG_WARN_BOOL_CONVERSION = YES; 400 | CLANG_WARN_CONSTANT_CONVERSION = YES; 401 | CLANG_WARN_EMPTY_BODY = YES; 402 | CLANG_WARN_ENUM_CONVERSION = YES; 403 | CLANG_WARN_INFINITE_RECURSION = YES; 404 | CLANG_WARN_INT_CONVERSION = YES; 405 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 406 | CLANG_WARN_UNREACHABLE_CODE = YES; 407 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 408 | CURRENT_PROJECT_VERSION = 1.0.12; 409 | DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)"; 410 | ENABLE_STRICT_OBJC_MSGSEND = YES; 411 | GCC_NO_COMMON_BLOCKS = YES; 412 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 413 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 414 | GCC_WARN_UNDECLARED_SELECTOR = YES; 415 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 416 | GCC_WARN_UNUSED_FUNCTION = YES; 417 | GCC_WARN_UNUSED_VARIABLE = YES; 418 | INFOPLIST_FILE = Sources/Info.plist; 419 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 420 | MACOSX_DEPLOYMENT_TARGET = 10.6; 421 | PRODUCT_BUNDLE_IDENTIFIER = "dev.mxcl.$(PRODUCT_NAME:rfc1034identifier)"; 422 | SUPPORTED_PLATFORMS = "macosx watchsimulator watchos appletvsimulator appletvos iphonesimulator iphoneos"; 423 | TARGETED_DEVICE_FAMILY = "1,2,3,4"; 424 | TVOS_DEPLOYMENT_TARGET = 9.0; 425 | WATCHOS_DEPLOYMENT_TARGET = 2.0; 426 | }; 427 | name = Release; 428 | }; 429 | /* End XCBuildConfiguration section */ 430 | 431 | /* Begin XCConfigurationList section */ 432 | 6321D1271A801D9100559508 /* Build configuration list for PBXNativeTarget "ChuzzleKit" */ = { 433 | isa = XCConfigurationList; 434 | buildConfigurations = ( 435 | 6321D1231A801D9100559508 /* Debug */, 436 | 6321D1241A801D9100559508 /* Release */, 437 | ); 438 | defaultConfigurationIsVisible = 0; 439 | defaultConfigurationName = Release; 440 | }; 441 | 6321D1281A801D9100559508 /* Build configuration list for PBXNativeTarget "ChuzzleTests" */ = { 442 | isa = XCConfigurationList; 443 | buildConfigurations = ( 444 | 6321D1251A801D9100559508 /* Debug */, 445 | 6321D1261A801D9100559508 /* Release */, 446 | ); 447 | defaultConfigurationIsVisible = 0; 448 | defaultConfigurationName = Release; 449 | }; 450 | 63F11F851A801D7100AE5B0E /* Build configuration list for PBXProject "ChuzzleKit" */ = { 451 | isa = XCConfigurationList; 452 | buildConfigurations = ( 453 | 63F11F861A801D7100AE5B0E /* Debug */, 454 | 63F11F871A801D7100AE5B0E /* Release */, 455 | ); 456 | defaultConfigurationIsVisible = 0; 457 | defaultConfigurationName = Release; 458 | }; 459 | /* End XCConfigurationList section */ 460 | }; 461 | rootObject = 63F11F821A801D7100AE5B0E /* Project object */; 462 | } 463 | --------------------------------------------------------------------------------