├── .swift-version ├── Camo.xcodeproj ├── project.pbxproj └── xcshareddata │ └── xcschemes │ ├── Camo-iOS.xcscheme │ ├── Camo-macOS.xcscheme │ ├── Camo-tvOS.xcscheme │ └── Camo-watchOS.xcscheme ├── Camo ├── Camo.h ├── Camo.swift ├── Info.plist └── Tests │ ├── CamoTests.swift │ └── Info.plist ├── Cartfile ├── Cartfile.resolved ├── LICENSE └── Readme.markdown /.swift-version: -------------------------------------------------------------------------------- 1 | 3.0.1 2 | -------------------------------------------------------------------------------- /Camo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 211227E81C1390780042D93A /* Camo.h in Headers */ = {isa = PBXBuildFile; fileRef = 211227E71C1390780042D93A /* Camo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 211227EF1C1390780042D93A /* Camo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211227E41C1390780042D93A /* Camo.framework */; }; 12 | 211228041C1390D20042D93A /* CommonCrypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211228001C1390D20042D93A /* CommonCrypto.framework */; }; 13 | 211228061C1390D20042D93A /* Crypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211228021C1390D20042D93A /* Crypto.framework */; }; 14 | 211228091C1390E80042D93A /* CommonCrypto.framework.dSYM in Copy dSYM Files */ = {isa = PBXBuildFile; fileRef = 211228011C1390D20042D93A /* CommonCrypto.framework.dSYM */; }; 15 | 2112280A1C1390E80042D93A /* Crypto.framework.dSYM in Copy dSYM Files */ = {isa = PBXBuildFile; fileRef = 211228031C1390D20042D93A /* Crypto.framework.dSYM */; }; 16 | 2112280D1C13912E0042D93A /* Camo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2112280C1C13912E0042D93A /* Camo.swift */; }; 17 | 2112282A1C13946F0042D93A /* Camo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211228201C13946F0042D93A /* Camo.framework */; }; 18 | 211228461C1394C70042D93A /* Camo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2112283C1C1394C70042D93A /* Camo.framework */; }; 19 | 211228531C1394EA0042D93A /* Camo.h in Headers */ = {isa = PBXBuildFile; fileRef = 211227E71C1390780042D93A /* Camo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 20 | 211228541C1394EA0042D93A /* Camo.h in Headers */ = {isa = PBXBuildFile; fileRef = 211227E71C1390780042D93A /* Camo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 21 | 211228551C1394EB0042D93A /* Camo.h in Headers */ = {isa = PBXBuildFile; fileRef = 211227E71C1390780042D93A /* Camo.h */; settings = {ATTRIBUTES = (Public, ); }; }; 22 | 211228561C1394F20042D93A /* Camo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2112280C1C13912E0042D93A /* Camo.swift */; }; 23 | 211228571C1394F30042D93A /* Camo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2112280C1C13912E0042D93A /* Camo.swift */; }; 24 | 211228581C1394F30042D93A /* Camo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2112280C1C13912E0042D93A /* Camo.swift */; }; 25 | 2112285C1C1395050042D93A /* CamoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2112285A1C1394FE0042D93A /* CamoTests.swift */; }; 26 | 2112285D1C1395060042D93A /* CamoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2112285A1C1394FE0042D93A /* CamoTests.swift */; }; 27 | 2112285E1C1395060042D93A /* CamoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2112285A1C1394FE0042D93A /* CamoTests.swift */; }; 28 | 211228641C1395300042D93A /* CommonCrypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211228601C1395300042D93A /* CommonCrypto.framework */; }; 29 | 211228661C1395300042D93A /* Crypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211228621C1395300042D93A /* Crypto.framework */; }; 30 | 211228821C13955B0042D93A /* CommonCrypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211228781C13954D0042D93A /* CommonCrypto.framework */; }; 31 | 211228831C1395640042D93A /* Crypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2112287A1C13954D0042D93A /* Crypto.framework */; }; 32 | 211228841C13956F0042D93A /* CommonCrypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2112286A1C1395430042D93A /* CommonCrypto.framework */; }; 33 | 211228851C13956F0042D93A /* Crypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2112286C1C1395430042D93A /* Crypto.framework */; }; 34 | 211228871C13959E0042D93A /* CommonCrypto.framework.dSYM in Copy dSYM Files */ = {isa = PBXBuildFile; fileRef = 211228791C13954D0042D93A /* CommonCrypto.framework.dSYM */; }; 35 | 211228881C13959E0042D93A /* Crypto.framework.dSYM in Copy dSYM Files */ = {isa = PBXBuildFile; fileRef = 2112287B1C13954D0042D93A /* Crypto.framework.dSYM */; }; 36 | 2112288A1C1395AF0042D93A /* CommonCrypto.framework.dSYM in Copy dSYM Files */ = {isa = PBXBuildFile; fileRef = 2112286B1C1395430042D93A /* CommonCrypto.framework.dSYM */; }; 37 | 2112288B1C1395B10042D93A /* Crypto.framework.dSYM in Copy dSYM Files */ = {isa = PBXBuildFile; fileRef = 2112286D1C1395430042D93A /* Crypto.framework.dSYM */; }; 38 | 2112288D1C1395C00042D93A /* CommonCrypto.framework.dSYM in Copy dSYM Files */ = {isa = PBXBuildFile; fileRef = 211228611C1395300042D93A /* CommonCrypto.framework.dSYM */; }; 39 | 2112288E1C1395C10042D93A /* Crypto.framework.dSYM in Copy dSYM Files */ = {isa = PBXBuildFile; fileRef = 211228631C1395300042D93A /* Crypto.framework.dSYM */; }; 40 | /* End PBXBuildFile section */ 41 | 42 | /* Begin PBXContainerItemProxy section */ 43 | 211227F01C1390780042D93A /* PBXContainerItemProxy */ = { 44 | isa = PBXContainerItemProxy; 45 | containerPortal = 211227DB1C1390780042D93A /* Project object */; 46 | proxyType = 1; 47 | remoteGlobalIDString = 211227E31C1390780042D93A; 48 | remoteInfo = Camo; 49 | }; 50 | 2112282B1C13946F0042D93A /* PBXContainerItemProxy */ = { 51 | isa = PBXContainerItemProxy; 52 | containerPortal = 211227DB1C1390780042D93A /* Project object */; 53 | proxyType = 1; 54 | remoteGlobalIDString = 2112281F1C13946F0042D93A; 55 | remoteInfo = "Camo-tvOS"; 56 | }; 57 | 211228471C1394C70042D93A /* PBXContainerItemProxy */ = { 58 | isa = PBXContainerItemProxy; 59 | containerPortal = 211227DB1C1390780042D93A /* Project object */; 60 | proxyType = 1; 61 | remoteGlobalIDString = 2112283B1C1394C70042D93A; 62 | remoteInfo = "Camo-OSX"; 63 | }; 64 | /* End PBXContainerItemProxy section */ 65 | 66 | /* Begin PBXCopyFilesBuildPhase section */ 67 | 211228081C1390DC0042D93A /* Copy dSYM Files */ = { 68 | isa = PBXCopyFilesBuildPhase; 69 | buildActionMask = 2147483647; 70 | dstPath = ""; 71 | dstSubfolderSpec = 16; 72 | files = ( 73 | 211228091C1390E80042D93A /* CommonCrypto.framework.dSYM in Copy dSYM Files */, 74 | 2112280A1C1390E80042D93A /* Crypto.framework.dSYM in Copy dSYM Files */, 75 | ); 76 | name = "Copy dSYM Files"; 77 | runOnlyForDeploymentPostprocessing = 0; 78 | }; 79 | 211228861C1395920042D93A /* Copy dSYM Files */ = { 80 | isa = PBXCopyFilesBuildPhase; 81 | buildActionMask = 2147483647; 82 | dstPath = ""; 83 | dstSubfolderSpec = 16; 84 | files = ( 85 | 211228871C13959E0042D93A /* CommonCrypto.framework.dSYM in Copy dSYM Files */, 86 | 211228881C13959E0042D93A /* Crypto.framework.dSYM in Copy dSYM Files */, 87 | ); 88 | name = "Copy dSYM Files"; 89 | runOnlyForDeploymentPostprocessing = 0; 90 | }; 91 | 211228891C1395A70042D93A /* Copy dSYM Files */ = { 92 | isa = PBXCopyFilesBuildPhase; 93 | buildActionMask = 2147483647; 94 | dstPath = ""; 95 | dstSubfolderSpec = 16; 96 | files = ( 97 | 2112288A1C1395AF0042D93A /* CommonCrypto.framework.dSYM in Copy dSYM Files */, 98 | 2112288B1C1395B10042D93A /* Crypto.framework.dSYM in Copy dSYM Files */, 99 | ); 100 | name = "Copy dSYM Files"; 101 | runOnlyForDeploymentPostprocessing = 0; 102 | }; 103 | 2112288C1C1395BA0042D93A /* Copy dSYM Files */ = { 104 | isa = PBXCopyFilesBuildPhase; 105 | buildActionMask = 2147483647; 106 | dstPath = ""; 107 | dstSubfolderSpec = 7; 108 | files = ( 109 | 2112288D1C1395C00042D93A /* CommonCrypto.framework.dSYM in Copy dSYM Files */, 110 | 2112288E1C1395C10042D93A /* Crypto.framework.dSYM in Copy dSYM Files */, 111 | ); 112 | name = "Copy dSYM Files"; 113 | runOnlyForDeploymentPostprocessing = 0; 114 | }; 115 | /* End PBXCopyFilesBuildPhase section */ 116 | 117 | /* Begin PBXFileReference section */ 118 | 211227E41C1390780042D93A /* Camo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Camo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 119 | 211227E71C1390780042D93A /* Camo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Camo.h; sourceTree = ""; }; 120 | 211227E91C1390780042D93A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 121 | 211227EE1C1390780042D93A /* CamoTests-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "CamoTests-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 122 | 211228001C1390D20042D93A /* CommonCrypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CommonCrypto.framework; path = Carthage/Build/iOS/CommonCrypto.framework; sourceTree = ""; }; 123 | 211228011C1390D20042D93A /* CommonCrypto.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; name = CommonCrypto.framework.dSYM; path = Carthage/Build/iOS/CommonCrypto.framework.dSYM; sourceTree = ""; }; 124 | 211228021C1390D20042D93A /* Crypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crypto.framework; path = Carthage/Build/iOS/Crypto.framework; sourceTree = ""; }; 125 | 211228031C1390D20042D93A /* Crypto.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; name = Crypto.framework.dSYM; path = Carthage/Build/iOS/Crypto.framework.dSYM; sourceTree = ""; }; 126 | 2112280C1C13912E0042D93A /* Camo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Camo.swift; sourceTree = ""; }; 127 | 211228131C13944A0042D93A /* Camo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Camo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 128 | 211228201C13946F0042D93A /* Camo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Camo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 129 | 211228291C13946F0042D93A /* CamoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CamoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 130 | 2112283C1C1394C70042D93A /* Camo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Camo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 131 | 211228451C1394C70042D93A /* CamoTests-macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "CamoTests-macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 132 | 2112285A1C1394FE0042D93A /* CamoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CamoTests.swift; sourceTree = ""; }; 133 | 2112285B1C1394FE0042D93A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 134 | 211228601C1395300042D93A /* CommonCrypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CommonCrypto.framework; sourceTree = ""; }; 135 | 211228611C1395300042D93A /* CommonCrypto.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; path = CommonCrypto.framework.dSYM; sourceTree = ""; }; 136 | 211228621C1395300042D93A /* Crypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crypto.framework; sourceTree = ""; }; 137 | 211228631C1395300042D93A /* Crypto.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; path = Crypto.framework.dSYM; sourceTree = ""; }; 138 | 2112286A1C1395430042D93A /* CommonCrypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CommonCrypto.framework; sourceTree = ""; }; 139 | 2112286B1C1395430042D93A /* CommonCrypto.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; path = CommonCrypto.framework.dSYM; sourceTree = ""; }; 140 | 2112286C1C1395430042D93A /* Crypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crypto.framework; sourceTree = ""; }; 141 | 2112286D1C1395430042D93A /* Crypto.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; path = Crypto.framework.dSYM; sourceTree = ""; }; 142 | 211228781C13954D0042D93A /* CommonCrypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CommonCrypto.framework; sourceTree = ""; }; 143 | 211228791C13954D0042D93A /* CommonCrypto.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; path = CommonCrypto.framework.dSYM; sourceTree = ""; }; 144 | 2112287A1C13954D0042D93A /* Crypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crypto.framework; sourceTree = ""; }; 145 | 2112287B1C13954D0042D93A /* Crypto.framework.dSYM */ = {isa = PBXFileReference; lastKnownFileType = wrapper.dsym; path = Crypto.framework.dSYM; sourceTree = ""; }; 146 | /* End PBXFileReference section */ 147 | 148 | /* Begin PBXFrameworksBuildPhase section */ 149 | 211227E01C1390780042D93A /* Frameworks */ = { 150 | isa = PBXFrameworksBuildPhase; 151 | buildActionMask = 2147483647; 152 | files = ( 153 | 211228041C1390D20042D93A /* CommonCrypto.framework in Frameworks */, 154 | 211228061C1390D20042D93A /* Crypto.framework in Frameworks */, 155 | ); 156 | runOnlyForDeploymentPostprocessing = 0; 157 | }; 158 | 211227EB1C1390780042D93A /* Frameworks */ = { 159 | isa = PBXFrameworksBuildPhase; 160 | buildActionMask = 2147483647; 161 | files = ( 162 | 211227EF1C1390780042D93A /* Camo.framework in Frameworks */, 163 | ); 164 | runOnlyForDeploymentPostprocessing = 0; 165 | }; 166 | 2112280F1C13944A0042D93A /* Frameworks */ = { 167 | isa = PBXFrameworksBuildPhase; 168 | buildActionMask = 2147483647; 169 | files = ( 170 | 211228821C13955B0042D93A /* CommonCrypto.framework in Frameworks */, 171 | 211228831C1395640042D93A /* Crypto.framework in Frameworks */, 172 | ); 173 | runOnlyForDeploymentPostprocessing = 0; 174 | }; 175 | 2112281C1C13946F0042D93A /* Frameworks */ = { 176 | isa = PBXFrameworksBuildPhase; 177 | buildActionMask = 2147483647; 178 | files = ( 179 | 211228841C13956F0042D93A /* CommonCrypto.framework in Frameworks */, 180 | 211228851C13956F0042D93A /* Crypto.framework in Frameworks */, 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | }; 184 | 211228261C13946F0042D93A /* Frameworks */ = { 185 | isa = PBXFrameworksBuildPhase; 186 | buildActionMask = 2147483647; 187 | files = ( 188 | 2112282A1C13946F0042D93A /* Camo.framework in Frameworks */, 189 | ); 190 | runOnlyForDeploymentPostprocessing = 0; 191 | }; 192 | 211228381C1394C70042D93A /* Frameworks */ = { 193 | isa = PBXFrameworksBuildPhase; 194 | buildActionMask = 2147483647; 195 | files = ( 196 | 211228641C1395300042D93A /* CommonCrypto.framework in Frameworks */, 197 | 211228661C1395300042D93A /* Crypto.framework in Frameworks */, 198 | ); 199 | runOnlyForDeploymentPostprocessing = 0; 200 | }; 201 | 211228421C1394C70042D93A /* Frameworks */ = { 202 | isa = PBXFrameworksBuildPhase; 203 | buildActionMask = 2147483647; 204 | files = ( 205 | 211228461C1394C70042D93A /* Camo.framework in Frameworks */, 206 | ); 207 | runOnlyForDeploymentPostprocessing = 0; 208 | }; 209 | /* End PBXFrameworksBuildPhase section */ 210 | 211 | /* Begin PBXGroup section */ 212 | 211227DA1C1390780042D93A = { 213 | isa = PBXGroup; 214 | children = ( 215 | 211227E61C1390780042D93A /* Camo */, 216 | 211227FE1C13909F0042D93A /* Frameworks */, 217 | 211227E51C1390780042D93A /* Products */, 218 | ); 219 | sourceTree = ""; 220 | }; 221 | 211227E51C1390780042D93A /* Products */ = { 222 | isa = PBXGroup; 223 | children = ( 224 | 211227E41C1390780042D93A /* Camo.framework */, 225 | 211227EE1C1390780042D93A /* CamoTests-iOS.xctest */, 226 | 211228131C13944A0042D93A /* Camo.framework */, 227 | 211228201C13946F0042D93A /* Camo.framework */, 228 | 211228291C13946F0042D93A /* CamoTests.xctest */, 229 | 2112283C1C1394C70042D93A /* Camo.framework */, 230 | 211228451C1394C70042D93A /* CamoTests-macOS.xctest */, 231 | ); 232 | name = Products; 233 | sourceTree = ""; 234 | }; 235 | 211227E61C1390780042D93A /* Camo */ = { 236 | isa = PBXGroup; 237 | children = ( 238 | 211227E71C1390780042D93A /* Camo.h */, 239 | 2112280C1C13912E0042D93A /* Camo.swift */, 240 | 211227E91C1390780042D93A /* Info.plist */, 241 | 211228591C1394FE0042D93A /* Tests */, 242 | ); 243 | path = Camo; 244 | sourceTree = ""; 245 | }; 246 | 211227FE1C13909F0042D93A /* Frameworks */ = { 247 | isa = PBXGroup; 248 | children = ( 249 | 211227FF1C1390A40042D93A /* iOS */, 250 | 211228751C13954D0042D93A /* watchOS */, 251 | 211228681C1395430042D93A /* tvOS */, 252 | 2112285F1C1395300042D93A /* OSX */, 253 | ); 254 | name = Frameworks; 255 | sourceTree = ""; 256 | }; 257 | 211227FF1C1390A40042D93A /* iOS */ = { 258 | isa = PBXGroup; 259 | children = ( 260 | 211228001C1390D20042D93A /* CommonCrypto.framework */, 261 | 211228011C1390D20042D93A /* CommonCrypto.framework.dSYM */, 262 | 211228021C1390D20042D93A /* Crypto.framework */, 263 | 211228031C1390D20042D93A /* Crypto.framework.dSYM */, 264 | ); 265 | name = iOS; 266 | sourceTree = ""; 267 | }; 268 | 211228591C1394FE0042D93A /* Tests */ = { 269 | isa = PBXGroup; 270 | children = ( 271 | 2112285A1C1394FE0042D93A /* CamoTests.swift */, 272 | 2112285B1C1394FE0042D93A /* Info.plist */, 273 | ); 274 | path = Tests; 275 | sourceTree = ""; 276 | }; 277 | 2112285F1C1395300042D93A /* OSX */ = { 278 | isa = PBXGroup; 279 | children = ( 280 | 211228601C1395300042D93A /* CommonCrypto.framework */, 281 | 211228611C1395300042D93A /* CommonCrypto.framework.dSYM */, 282 | 211228621C1395300042D93A /* Crypto.framework */, 283 | 211228631C1395300042D93A /* Crypto.framework.dSYM */, 284 | ); 285 | name = OSX; 286 | path = Carthage/Build/Mac; 287 | sourceTree = ""; 288 | }; 289 | 211228681C1395430042D93A /* tvOS */ = { 290 | isa = PBXGroup; 291 | children = ( 292 | 2112286A1C1395430042D93A /* CommonCrypto.framework */, 293 | 2112286B1C1395430042D93A /* CommonCrypto.framework.dSYM */, 294 | 2112286C1C1395430042D93A /* Crypto.framework */, 295 | 2112286D1C1395430042D93A /* Crypto.framework.dSYM */, 296 | ); 297 | name = tvOS; 298 | path = Carthage/Build/tvOS; 299 | sourceTree = ""; 300 | }; 301 | 211228751C13954D0042D93A /* watchOS */ = { 302 | isa = PBXGroup; 303 | children = ( 304 | 211228781C13954D0042D93A /* CommonCrypto.framework */, 305 | 211228791C13954D0042D93A /* CommonCrypto.framework.dSYM */, 306 | 2112287A1C13954D0042D93A /* Crypto.framework */, 307 | 2112287B1C13954D0042D93A /* Crypto.framework.dSYM */, 308 | ); 309 | name = watchOS; 310 | path = Carthage/Build/watchOS; 311 | sourceTree = ""; 312 | }; 313 | /* End PBXGroup section */ 314 | 315 | /* Begin PBXHeadersBuildPhase section */ 316 | 211227E11C1390780042D93A /* Headers */ = { 317 | isa = PBXHeadersBuildPhase; 318 | buildActionMask = 2147483647; 319 | files = ( 320 | 211227E81C1390780042D93A /* Camo.h in Headers */, 321 | ); 322 | runOnlyForDeploymentPostprocessing = 0; 323 | }; 324 | 211228101C13944A0042D93A /* Headers */ = { 325 | isa = PBXHeadersBuildPhase; 326 | buildActionMask = 2147483647; 327 | files = ( 328 | 211228531C1394EA0042D93A /* Camo.h in Headers */, 329 | ); 330 | runOnlyForDeploymentPostprocessing = 0; 331 | }; 332 | 2112281D1C13946F0042D93A /* Headers */ = { 333 | isa = PBXHeadersBuildPhase; 334 | buildActionMask = 2147483647; 335 | files = ( 336 | 211228541C1394EA0042D93A /* Camo.h in Headers */, 337 | ); 338 | runOnlyForDeploymentPostprocessing = 0; 339 | }; 340 | 211228391C1394C70042D93A /* Headers */ = { 341 | isa = PBXHeadersBuildPhase; 342 | buildActionMask = 2147483647; 343 | files = ( 344 | 211228551C1394EB0042D93A /* Camo.h in Headers */, 345 | ); 346 | runOnlyForDeploymentPostprocessing = 0; 347 | }; 348 | /* End PBXHeadersBuildPhase section */ 349 | 350 | /* Begin PBXNativeTarget section */ 351 | 211227E31C1390780042D93A /* Camo-iOS */ = { 352 | isa = PBXNativeTarget; 353 | buildConfigurationList = 211227F81C1390780042D93A /* Build configuration list for PBXNativeTarget "Camo-iOS" */; 354 | buildPhases = ( 355 | 211227DF1C1390780042D93A /* Sources */, 356 | 211227E01C1390780042D93A /* Frameworks */, 357 | 211227E11C1390780042D93A /* Headers */, 358 | 211227E21C1390780042D93A /* Resources */, 359 | 211228081C1390DC0042D93A /* Copy dSYM Files */, 360 | ); 361 | buildRules = ( 362 | ); 363 | dependencies = ( 364 | ); 365 | name = "Camo-iOS"; 366 | productName = Camo; 367 | productReference = 211227E41C1390780042D93A /* Camo.framework */; 368 | productType = "com.apple.product-type.framework"; 369 | }; 370 | 211227ED1C1390780042D93A /* CamoTests-iOS */ = { 371 | isa = PBXNativeTarget; 372 | buildConfigurationList = 211227FB1C1390780042D93A /* Build configuration list for PBXNativeTarget "CamoTests-iOS" */; 373 | buildPhases = ( 374 | 211227EA1C1390780042D93A /* Sources */, 375 | 211227EB1C1390780042D93A /* Frameworks */, 376 | 211227EC1C1390780042D93A /* Resources */, 377 | 2112280B1C1390F60042D93A /* Embed Carthage Frameworks */, 378 | ); 379 | buildRules = ( 380 | ); 381 | dependencies = ( 382 | 211227F11C1390780042D93A /* PBXTargetDependency */, 383 | ); 384 | name = "CamoTests-iOS"; 385 | productName = CamoTests; 386 | productReference = 211227EE1C1390780042D93A /* CamoTests-iOS.xctest */; 387 | productType = "com.apple.product-type.bundle.unit-test"; 388 | }; 389 | 211228121C13944A0042D93A /* Camo-watchOS */ = { 390 | isa = PBXNativeTarget; 391 | buildConfigurationList = 211228181C13944B0042D93A /* Build configuration list for PBXNativeTarget "Camo-watchOS" */; 392 | buildPhases = ( 393 | 2112280E1C13944A0042D93A /* Sources */, 394 | 2112280F1C13944A0042D93A /* Frameworks */, 395 | 211228101C13944A0042D93A /* Headers */, 396 | 211228111C13944A0042D93A /* Resources */, 397 | 211228861C1395920042D93A /* Copy dSYM Files */, 398 | ); 399 | buildRules = ( 400 | ); 401 | dependencies = ( 402 | ); 403 | name = "Camo-watchOS"; 404 | productName = "Camo-watchOS"; 405 | productReference = 211228131C13944A0042D93A /* Camo.framework */; 406 | productType = "com.apple.product-type.framework"; 407 | }; 408 | 2112281F1C13946F0042D93A /* Camo-tvOS */ = { 409 | isa = PBXNativeTarget; 410 | buildConfigurationList = 211228311C13946F0042D93A /* Build configuration list for PBXNativeTarget "Camo-tvOS" */; 411 | buildPhases = ( 412 | 2112281B1C13946F0042D93A /* Sources */, 413 | 2112281C1C13946F0042D93A /* Frameworks */, 414 | 2112281D1C13946F0042D93A /* Headers */, 415 | 2112281E1C13946F0042D93A /* Resources */, 416 | 211228891C1395A70042D93A /* Copy dSYM Files */, 417 | ); 418 | buildRules = ( 419 | ); 420 | dependencies = ( 421 | ); 422 | name = "Camo-tvOS"; 423 | productName = "Camo-tvOS"; 424 | productReference = 211228201C13946F0042D93A /* Camo.framework */; 425 | productType = "com.apple.product-type.framework"; 426 | }; 427 | 211228281C13946F0042D93A /* CamoTests-tvOS */ = { 428 | isa = PBXNativeTarget; 429 | buildConfigurationList = 211228341C13946F0042D93A /* Build configuration list for PBXNativeTarget "CamoTests-tvOS" */; 430 | buildPhases = ( 431 | 211228251C13946F0042D93A /* Sources */, 432 | 211228261C13946F0042D93A /* Frameworks */, 433 | 211228271C13946F0042D93A /* Resources */, 434 | 2112288F1C1395EB0042D93A /* Embed Carthage Frameworks */, 435 | ); 436 | buildRules = ( 437 | ); 438 | dependencies = ( 439 | 2112282C1C13946F0042D93A /* PBXTargetDependency */, 440 | ); 441 | name = "CamoTests-tvOS"; 442 | productName = "Camo-tvOSTests"; 443 | productReference = 211228291C13946F0042D93A /* CamoTests.xctest */; 444 | productType = "com.apple.product-type.bundle.unit-test"; 445 | }; 446 | 2112283B1C1394C70042D93A /* Camo-macOS */ = { 447 | isa = PBXNativeTarget; 448 | buildConfigurationList = 2112284D1C1394C70042D93A /* Build configuration list for PBXNativeTarget "Camo-macOS" */; 449 | buildPhases = ( 450 | 211228371C1394C70042D93A /* Sources */, 451 | 211228381C1394C70042D93A /* Frameworks */, 452 | 211228391C1394C70042D93A /* Headers */, 453 | 2112283A1C1394C70042D93A /* Resources */, 454 | 2112288C1C1395BA0042D93A /* Copy dSYM Files */, 455 | ); 456 | buildRules = ( 457 | ); 458 | dependencies = ( 459 | ); 460 | name = "Camo-macOS"; 461 | productName = "Camo-OSX"; 462 | productReference = 2112283C1C1394C70042D93A /* Camo.framework */; 463 | productType = "com.apple.product-type.framework"; 464 | }; 465 | 211228441C1394C70042D93A /* CamoTests-macOS */ = { 466 | isa = PBXNativeTarget; 467 | buildConfigurationList = 211228501C1394C70042D93A /* Build configuration list for PBXNativeTarget "CamoTests-macOS" */; 468 | buildPhases = ( 469 | 211228411C1394C70042D93A /* Sources */, 470 | 211228421C1394C70042D93A /* Frameworks */, 471 | 211228431C1394C70042D93A /* Resources */, 472 | 211228901C1396050042D93A /* Embed Carthage Frameworks */, 473 | ); 474 | buildRules = ( 475 | ); 476 | dependencies = ( 477 | 211228481C1394C70042D93A /* PBXTargetDependency */, 478 | ); 479 | name = "CamoTests-macOS"; 480 | productName = "Camo-OSXTests"; 481 | productReference = 211228451C1394C70042D93A /* CamoTests-macOS.xctest */; 482 | productType = "com.apple.product-type.bundle.unit-test"; 483 | }; 484 | /* End PBXNativeTarget section */ 485 | 486 | /* Begin PBXProject section */ 487 | 211227DB1C1390780042D93A /* Project object */ = { 488 | isa = PBXProject; 489 | attributes = { 490 | LastSwiftUpdateCheck = 0710; 491 | LastUpgradeCheck = 0810; 492 | ORGANIZATIONNAME = "Sam Soffes"; 493 | TargetAttributes = { 494 | 211227E31C1390780042D93A = { 495 | CreatedOnToolsVersion = 7.1; 496 | LastSwiftMigration = 0810; 497 | }; 498 | 211227ED1C1390780042D93A = { 499 | CreatedOnToolsVersion = 7.1; 500 | LastSwiftMigration = 0810; 501 | }; 502 | 211228121C13944A0042D93A = { 503 | CreatedOnToolsVersion = 7.1; 504 | }; 505 | 2112281F1C13946F0042D93A = { 506 | CreatedOnToolsVersion = 7.1; 507 | }; 508 | 211228281C13946F0042D93A = { 509 | CreatedOnToolsVersion = 7.1; 510 | }; 511 | 2112283B1C1394C70042D93A = { 512 | CreatedOnToolsVersion = 7.1; 513 | }; 514 | 211228441C1394C70042D93A = { 515 | CreatedOnToolsVersion = 7.1; 516 | }; 517 | }; 518 | }; 519 | buildConfigurationList = 211227DE1C1390780042D93A /* Build configuration list for PBXProject "Camo" */; 520 | compatibilityVersion = "Xcode 3.2"; 521 | developmentRegion = English; 522 | hasScannedForEncodings = 0; 523 | knownRegions = ( 524 | en, 525 | ); 526 | mainGroup = 211227DA1C1390780042D93A; 527 | productRefGroup = 211227E51C1390780042D93A /* Products */; 528 | projectDirPath = ""; 529 | projectRoot = ""; 530 | targets = ( 531 | 211227E31C1390780042D93A /* Camo-iOS */, 532 | 211227ED1C1390780042D93A /* CamoTests-iOS */, 533 | 211228121C13944A0042D93A /* Camo-watchOS */, 534 | 2112281F1C13946F0042D93A /* Camo-tvOS */, 535 | 211228281C13946F0042D93A /* CamoTests-tvOS */, 536 | 2112283B1C1394C70042D93A /* Camo-macOS */, 537 | 211228441C1394C70042D93A /* CamoTests-macOS */, 538 | ); 539 | }; 540 | /* End PBXProject section */ 541 | 542 | /* Begin PBXResourcesBuildPhase section */ 543 | 211227E21C1390780042D93A /* Resources */ = { 544 | isa = PBXResourcesBuildPhase; 545 | buildActionMask = 2147483647; 546 | files = ( 547 | ); 548 | runOnlyForDeploymentPostprocessing = 0; 549 | }; 550 | 211227EC1C1390780042D93A /* Resources */ = { 551 | isa = PBXResourcesBuildPhase; 552 | buildActionMask = 2147483647; 553 | files = ( 554 | ); 555 | runOnlyForDeploymentPostprocessing = 0; 556 | }; 557 | 211228111C13944A0042D93A /* Resources */ = { 558 | isa = PBXResourcesBuildPhase; 559 | buildActionMask = 2147483647; 560 | files = ( 561 | ); 562 | runOnlyForDeploymentPostprocessing = 0; 563 | }; 564 | 2112281E1C13946F0042D93A /* Resources */ = { 565 | isa = PBXResourcesBuildPhase; 566 | buildActionMask = 2147483647; 567 | files = ( 568 | ); 569 | runOnlyForDeploymentPostprocessing = 0; 570 | }; 571 | 211228271C13946F0042D93A /* Resources */ = { 572 | isa = PBXResourcesBuildPhase; 573 | buildActionMask = 2147483647; 574 | files = ( 575 | ); 576 | runOnlyForDeploymentPostprocessing = 0; 577 | }; 578 | 2112283A1C1394C70042D93A /* Resources */ = { 579 | isa = PBXResourcesBuildPhase; 580 | buildActionMask = 2147483647; 581 | files = ( 582 | ); 583 | runOnlyForDeploymentPostprocessing = 0; 584 | }; 585 | 211228431C1394C70042D93A /* Resources */ = { 586 | isa = PBXResourcesBuildPhase; 587 | buildActionMask = 2147483647; 588 | files = ( 589 | ); 590 | runOnlyForDeploymentPostprocessing = 0; 591 | }; 592 | /* End PBXResourcesBuildPhase section */ 593 | 594 | /* Begin PBXShellScriptBuildPhase section */ 595 | 2112280B1C1390F60042D93A /* Embed Carthage Frameworks */ = { 596 | isa = PBXShellScriptBuildPhase; 597 | buildActionMask = 2147483647; 598 | files = ( 599 | ); 600 | inputPaths = ( 601 | "$(SRCROOT)/Carthage/Build/iOS/Crypto.framework", 602 | "$(SRCROOT)/Carthage/Build/iOS/CommonCrypto.framework", 603 | ); 604 | name = "Embed Carthage Frameworks"; 605 | outputPaths = ( 606 | ); 607 | runOnlyForDeploymentPostprocessing = 0; 608 | shellPath = /bin/sh; 609 | shellScript = "/usr/local/bin/carthage copy-frameworks"; 610 | }; 611 | 2112288F1C1395EB0042D93A /* Embed Carthage Frameworks */ = { 612 | isa = PBXShellScriptBuildPhase; 613 | buildActionMask = 2147483647; 614 | files = ( 615 | ); 616 | inputPaths = ( 617 | "$(SRCROOT)/Carthage/Build/tvOS/Crypto.framework", 618 | "$(SRCROOT)/Carthage/Build/tvOS/CommonCrypto.framework", 619 | ); 620 | name = "Embed Carthage Frameworks"; 621 | outputPaths = ( 622 | ); 623 | runOnlyForDeploymentPostprocessing = 0; 624 | shellPath = /bin/sh; 625 | shellScript = "/usr/local/bin/carthage copy-frameworks"; 626 | }; 627 | 211228901C1396050042D93A /* Embed Carthage Frameworks */ = { 628 | isa = PBXShellScriptBuildPhase; 629 | buildActionMask = 2147483647; 630 | files = ( 631 | ); 632 | inputPaths = ( 633 | "$(SRCROOT)/Carthage/Build/Mac/Crypto.framework", 634 | "$(SRCROOT)/Carthage/Build/Mac/CommonCrypto.framework", 635 | ); 636 | name = "Embed Carthage Frameworks"; 637 | outputPaths = ( 638 | ); 639 | runOnlyForDeploymentPostprocessing = 0; 640 | shellPath = /bin/sh; 641 | shellScript = "/usr/local/bin/carthage copy-frameworks"; 642 | }; 643 | /* End PBXShellScriptBuildPhase section */ 644 | 645 | /* Begin PBXSourcesBuildPhase section */ 646 | 211227DF1C1390780042D93A /* Sources */ = { 647 | isa = PBXSourcesBuildPhase; 648 | buildActionMask = 2147483647; 649 | files = ( 650 | 2112280D1C13912E0042D93A /* Camo.swift in Sources */, 651 | ); 652 | runOnlyForDeploymentPostprocessing = 0; 653 | }; 654 | 211227EA1C1390780042D93A /* Sources */ = { 655 | isa = PBXSourcesBuildPhase; 656 | buildActionMask = 2147483647; 657 | files = ( 658 | 2112285C1C1395050042D93A /* CamoTests.swift in Sources */, 659 | ); 660 | runOnlyForDeploymentPostprocessing = 0; 661 | }; 662 | 2112280E1C13944A0042D93A /* Sources */ = { 663 | isa = PBXSourcesBuildPhase; 664 | buildActionMask = 2147483647; 665 | files = ( 666 | 211228561C1394F20042D93A /* Camo.swift in Sources */, 667 | ); 668 | runOnlyForDeploymentPostprocessing = 0; 669 | }; 670 | 2112281B1C13946F0042D93A /* Sources */ = { 671 | isa = PBXSourcesBuildPhase; 672 | buildActionMask = 2147483647; 673 | files = ( 674 | 211228571C1394F30042D93A /* Camo.swift in Sources */, 675 | ); 676 | runOnlyForDeploymentPostprocessing = 0; 677 | }; 678 | 211228251C13946F0042D93A /* Sources */ = { 679 | isa = PBXSourcesBuildPhase; 680 | buildActionMask = 2147483647; 681 | files = ( 682 | 2112285D1C1395060042D93A /* CamoTests.swift in Sources */, 683 | ); 684 | runOnlyForDeploymentPostprocessing = 0; 685 | }; 686 | 211228371C1394C70042D93A /* Sources */ = { 687 | isa = PBXSourcesBuildPhase; 688 | buildActionMask = 2147483647; 689 | files = ( 690 | 211228581C1394F30042D93A /* Camo.swift in Sources */, 691 | ); 692 | runOnlyForDeploymentPostprocessing = 0; 693 | }; 694 | 211228411C1394C70042D93A /* Sources */ = { 695 | isa = PBXSourcesBuildPhase; 696 | buildActionMask = 2147483647; 697 | files = ( 698 | 2112285E1C1395060042D93A /* CamoTests.swift in Sources */, 699 | ); 700 | runOnlyForDeploymentPostprocessing = 0; 701 | }; 702 | /* End PBXSourcesBuildPhase section */ 703 | 704 | /* Begin PBXTargetDependency section */ 705 | 211227F11C1390780042D93A /* PBXTargetDependency */ = { 706 | isa = PBXTargetDependency; 707 | target = 211227E31C1390780042D93A /* Camo-iOS */; 708 | targetProxy = 211227F01C1390780042D93A /* PBXContainerItemProxy */; 709 | }; 710 | 2112282C1C13946F0042D93A /* PBXTargetDependency */ = { 711 | isa = PBXTargetDependency; 712 | target = 2112281F1C13946F0042D93A /* Camo-tvOS */; 713 | targetProxy = 2112282B1C13946F0042D93A /* PBXContainerItemProxy */; 714 | }; 715 | 211228481C1394C70042D93A /* PBXTargetDependency */ = { 716 | isa = PBXTargetDependency; 717 | target = 2112283B1C1394C70042D93A /* Camo-macOS */; 718 | targetProxy = 211228471C1394C70042D93A /* PBXContainerItemProxy */; 719 | }; 720 | /* End PBXTargetDependency section */ 721 | 722 | /* Begin XCBuildConfiguration section */ 723 | 211227F61C1390780042D93A /* Debug */ = { 724 | isa = XCBuildConfiguration; 725 | buildSettings = { 726 | ALWAYS_SEARCH_USER_PATHS = NO; 727 | APPLICATION_EXTENSION_API_ONLY = YES; 728 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 729 | CLANG_CXX_LIBRARY = "libc++"; 730 | CLANG_ENABLE_MODULES = YES; 731 | CLANG_ENABLE_OBJC_ARC = YES; 732 | CLANG_WARN_BOOL_CONVERSION = YES; 733 | CLANG_WARN_CONSTANT_CONVERSION = YES; 734 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 735 | CLANG_WARN_EMPTY_BODY = YES; 736 | CLANG_WARN_ENUM_CONVERSION = YES; 737 | CLANG_WARN_INFINITE_RECURSION = YES; 738 | CLANG_WARN_INT_CONVERSION = YES; 739 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 740 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 741 | CLANG_WARN_UNREACHABLE_CODE = YES; 742 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 743 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 744 | COPY_PHASE_STRIP = NO; 745 | CURRENT_PROJECT_VERSION = 1; 746 | DEBUG_INFORMATION_FORMAT = dwarf; 747 | ENABLE_STRICT_OBJC_MSGSEND = YES; 748 | ENABLE_TESTABILITY = YES; 749 | GCC_C_LANGUAGE_STANDARD = gnu99; 750 | GCC_DYNAMIC_NO_PIC = NO; 751 | GCC_NO_COMMON_BLOCKS = YES; 752 | GCC_OPTIMIZATION_LEVEL = 0; 753 | GCC_PREPROCESSOR_DEFINITIONS = ( 754 | "DEBUG=1", 755 | "$(inherited)", 756 | ); 757 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 758 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 759 | GCC_WARN_UNDECLARED_SELECTOR = YES; 760 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 761 | GCC_WARN_UNUSED_FUNCTION = YES; 762 | GCC_WARN_UNUSED_VARIABLE = YES; 763 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 764 | MACOSX_DEPLOYMENT_TARGET = 10.10; 765 | MTL_ENABLE_DEBUG_INFO = YES; 766 | ONLY_ACTIVE_ARCH = YES; 767 | SDKROOT = iphoneos; 768 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 769 | SWIFT_VERSION = 3.0.1; 770 | TARGETED_DEVICE_FAMILY = "1,2"; 771 | VERSIONING_SYSTEM = "apple-generic"; 772 | VERSION_INFO_PREFIX = ""; 773 | }; 774 | name = Debug; 775 | }; 776 | 211227F71C1390780042D93A /* Release */ = { 777 | isa = XCBuildConfiguration; 778 | buildSettings = { 779 | ALWAYS_SEARCH_USER_PATHS = NO; 780 | APPLICATION_EXTENSION_API_ONLY = YES; 781 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 782 | CLANG_CXX_LIBRARY = "libc++"; 783 | CLANG_ENABLE_MODULES = YES; 784 | CLANG_ENABLE_OBJC_ARC = YES; 785 | CLANG_WARN_BOOL_CONVERSION = YES; 786 | CLANG_WARN_CONSTANT_CONVERSION = YES; 787 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 788 | CLANG_WARN_EMPTY_BODY = YES; 789 | CLANG_WARN_ENUM_CONVERSION = YES; 790 | CLANG_WARN_INFINITE_RECURSION = YES; 791 | CLANG_WARN_INT_CONVERSION = YES; 792 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 793 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 794 | CLANG_WARN_UNREACHABLE_CODE = YES; 795 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 796 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 797 | COPY_PHASE_STRIP = NO; 798 | CURRENT_PROJECT_VERSION = 1; 799 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 800 | ENABLE_NS_ASSERTIONS = NO; 801 | ENABLE_STRICT_OBJC_MSGSEND = YES; 802 | GCC_C_LANGUAGE_STANDARD = gnu99; 803 | GCC_NO_COMMON_BLOCKS = YES; 804 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 805 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 806 | GCC_WARN_UNDECLARED_SELECTOR = YES; 807 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 808 | GCC_WARN_UNUSED_FUNCTION = YES; 809 | GCC_WARN_UNUSED_VARIABLE = YES; 810 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 811 | MACOSX_DEPLOYMENT_TARGET = 10.10; 812 | MTL_ENABLE_DEBUG_INFO = NO; 813 | SDKROOT = iphoneos; 814 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 815 | SWIFT_VERSION = 3.0.1; 816 | TARGETED_DEVICE_FAMILY = "1,2"; 817 | VALIDATE_PRODUCT = YES; 818 | VERSIONING_SYSTEM = "apple-generic"; 819 | VERSION_INFO_PREFIX = ""; 820 | }; 821 | name = Release; 822 | }; 823 | 211227F91C1390780042D93A /* Debug */ = { 824 | isa = XCBuildConfiguration; 825 | buildSettings = { 826 | CLANG_ENABLE_MODULES = YES; 827 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 828 | DEFINES_MODULE = YES; 829 | DYLIB_COMPATIBILITY_VERSION = 1; 830 | DYLIB_CURRENT_VERSION = 1; 831 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 832 | FRAMEWORK_SEARCH_PATHS = ( 833 | "$(inherited)", 834 | "$(PROJECT_DIR)/Carthage/Build/iOS", 835 | ); 836 | INFOPLIST_FILE = Camo/Info.plist; 837 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 838 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 839 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.camo; 840 | PRODUCT_NAME = Camo; 841 | SKIP_INSTALL = YES; 842 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 843 | }; 844 | name = Debug; 845 | }; 846 | 211227FA1C1390780042D93A /* Release */ = { 847 | isa = XCBuildConfiguration; 848 | buildSettings = { 849 | CLANG_ENABLE_MODULES = YES; 850 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 851 | DEFINES_MODULE = YES; 852 | DYLIB_COMPATIBILITY_VERSION = 1; 853 | DYLIB_CURRENT_VERSION = 1; 854 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 855 | FRAMEWORK_SEARCH_PATHS = ( 856 | "$(inherited)", 857 | "$(PROJECT_DIR)/Carthage/Build/iOS", 858 | ); 859 | INFOPLIST_FILE = Camo/Info.plist; 860 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 861 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 862 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.camo; 863 | PRODUCT_NAME = Camo; 864 | SKIP_INSTALL = YES; 865 | }; 866 | name = Release; 867 | }; 868 | 211227FC1C1390780042D93A /* Debug */ = { 869 | isa = XCBuildConfiguration; 870 | buildSettings = { 871 | APPLICATION_EXTENSION_API_ONLY = NO; 872 | INFOPLIST_FILE = Camo/Tests/Info.plist; 873 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 874 | PRODUCT_BUNDLE_IDENTIFIER = "com.samsoffes.camotests-ios"; 875 | PRODUCT_NAME = "$(TARGET_NAME)"; 876 | }; 877 | name = Debug; 878 | }; 879 | 211227FD1C1390780042D93A /* Release */ = { 880 | isa = XCBuildConfiguration; 881 | buildSettings = { 882 | APPLICATION_EXTENSION_API_ONLY = NO; 883 | INFOPLIST_FILE = Camo/Tests/Info.plist; 884 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 885 | PRODUCT_BUNDLE_IDENTIFIER = "com.samsoffes.camotests-ios"; 886 | PRODUCT_NAME = "$(TARGET_NAME)"; 887 | }; 888 | name = Release; 889 | }; 890 | 211228191C13944B0042D93A /* Debug */ = { 891 | isa = XCBuildConfiguration; 892 | buildSettings = { 893 | APPLICATION_EXTENSION_API_ONLY = YES; 894 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 895 | DEFINES_MODULE = YES; 896 | DYLIB_COMPATIBILITY_VERSION = 1; 897 | DYLIB_CURRENT_VERSION = 1; 898 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 899 | ENABLE_BITCODE = YES; 900 | FRAMEWORK_SEARCH_PATHS = ( 901 | "$(inherited)", 902 | "$(PROJECT_DIR)/Carthage/Build/watchOS", 903 | ); 904 | INFOPLIST_FILE = Camo/Info.plist; 905 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 906 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 907 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.camo; 908 | PRODUCT_NAME = Camo; 909 | SDKROOT = watchos; 910 | SKIP_INSTALL = YES; 911 | TARGETED_DEVICE_FAMILY = 4; 912 | WATCHOS_DEPLOYMENT_TARGET = 2.0; 913 | }; 914 | name = Debug; 915 | }; 916 | 2112281A1C13944B0042D93A /* Release */ = { 917 | isa = XCBuildConfiguration; 918 | buildSettings = { 919 | APPLICATION_EXTENSION_API_ONLY = YES; 920 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 921 | DEFINES_MODULE = YES; 922 | DYLIB_COMPATIBILITY_VERSION = 1; 923 | DYLIB_CURRENT_VERSION = 1; 924 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 925 | ENABLE_BITCODE = YES; 926 | FRAMEWORK_SEARCH_PATHS = ( 927 | "$(inherited)", 928 | "$(PROJECT_DIR)/Carthage/Build/watchOS", 929 | ); 930 | INFOPLIST_FILE = Camo/Info.plist; 931 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 932 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 933 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.camo; 934 | PRODUCT_NAME = Camo; 935 | SDKROOT = watchos; 936 | SKIP_INSTALL = YES; 937 | TARGETED_DEVICE_FAMILY = 4; 938 | WATCHOS_DEPLOYMENT_TARGET = 2.0; 939 | }; 940 | name = Release; 941 | }; 942 | 211228321C13946F0042D93A /* Debug */ = { 943 | isa = XCBuildConfiguration; 944 | buildSettings = { 945 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 946 | DEFINES_MODULE = YES; 947 | DYLIB_COMPATIBILITY_VERSION = 1; 948 | DYLIB_CURRENT_VERSION = 1; 949 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 950 | ENABLE_BITCODE = YES; 951 | FRAMEWORK_SEARCH_PATHS = ( 952 | "$(inherited)", 953 | "$(PROJECT_DIR)/Carthage/Build/tvOS", 954 | ); 955 | INFOPLIST_FILE = Camo/Info.plist; 956 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 957 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 958 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.camo; 959 | PRODUCT_NAME = Camo; 960 | SDKROOT = appletvos; 961 | SKIP_INSTALL = YES; 962 | TARGETED_DEVICE_FAMILY = 3; 963 | TVOS_DEPLOYMENT_TARGET = 9.0; 964 | }; 965 | name = Debug; 966 | }; 967 | 211228331C13946F0042D93A /* Release */ = { 968 | isa = XCBuildConfiguration; 969 | buildSettings = { 970 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 971 | DEFINES_MODULE = YES; 972 | DYLIB_COMPATIBILITY_VERSION = 1; 973 | DYLIB_CURRENT_VERSION = 1; 974 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 975 | ENABLE_BITCODE = YES; 976 | FRAMEWORK_SEARCH_PATHS = ( 977 | "$(inherited)", 978 | "$(PROJECT_DIR)/Carthage/Build/tvOS", 979 | ); 980 | INFOPLIST_FILE = Camo/Info.plist; 981 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 982 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 983 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.camo; 984 | PRODUCT_NAME = Camo; 985 | SDKROOT = appletvos; 986 | SKIP_INSTALL = YES; 987 | TARGETED_DEVICE_FAMILY = 3; 988 | TVOS_DEPLOYMENT_TARGET = 9.0; 989 | }; 990 | name = Release; 991 | }; 992 | 211228351C13946F0042D93A /* Debug */ = { 993 | isa = XCBuildConfiguration; 994 | buildSettings = { 995 | APPLICATION_EXTENSION_API_ONLY = NO; 996 | INFOPLIST_FILE = Camo/Tests/Info.plist; 997 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 998 | PRODUCT_BUNDLE_IDENTIFIER = "com.samsoffes.camotests-tvos"; 999 | PRODUCT_NAME = CamoTests; 1000 | SDKROOT = appletvos; 1001 | TVOS_DEPLOYMENT_TARGET = 9.0; 1002 | }; 1003 | name = Debug; 1004 | }; 1005 | 211228361C13946F0042D93A /* Release */ = { 1006 | isa = XCBuildConfiguration; 1007 | buildSettings = { 1008 | APPLICATION_EXTENSION_API_ONLY = NO; 1009 | INFOPLIST_FILE = Camo/Tests/Info.plist; 1010 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1011 | PRODUCT_BUNDLE_IDENTIFIER = "com.samsoffes.camotests-tvos"; 1012 | PRODUCT_NAME = CamoTests; 1013 | SDKROOT = appletvos; 1014 | TVOS_DEPLOYMENT_TARGET = 9.0; 1015 | }; 1016 | name = Release; 1017 | }; 1018 | 2112284E1C1394C70042D93A /* Debug */ = { 1019 | isa = XCBuildConfiguration; 1020 | buildSettings = { 1021 | CODE_SIGN_IDENTITY = "-"; 1022 | COMBINE_HIDPI_IMAGES = YES; 1023 | DEFINES_MODULE = YES; 1024 | DYLIB_COMPATIBILITY_VERSION = 1; 1025 | DYLIB_CURRENT_VERSION = 1; 1026 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 1027 | FRAMEWORK_SEARCH_PATHS = ( 1028 | "$(inherited)", 1029 | "$(PROJECT_DIR)/Carthage/Build/Mac", 1030 | ); 1031 | FRAMEWORK_VERSION = A; 1032 | INFOPLIST_FILE = Camo/Info.plist; 1033 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 1034 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 1035 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.camo; 1036 | PRODUCT_NAME = Camo; 1037 | SDKROOT = macosx; 1038 | SKIP_INSTALL = YES; 1039 | }; 1040 | name = Debug; 1041 | }; 1042 | 2112284F1C1394C70042D93A /* Release */ = { 1043 | isa = XCBuildConfiguration; 1044 | buildSettings = { 1045 | CODE_SIGN_IDENTITY = "-"; 1046 | COMBINE_HIDPI_IMAGES = YES; 1047 | DEFINES_MODULE = YES; 1048 | DYLIB_COMPATIBILITY_VERSION = 1; 1049 | DYLIB_CURRENT_VERSION = 1; 1050 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 1051 | FRAMEWORK_SEARCH_PATHS = ( 1052 | "$(inherited)", 1053 | "$(PROJECT_DIR)/Carthage/Build/Mac", 1054 | ); 1055 | FRAMEWORK_VERSION = A; 1056 | INFOPLIST_FILE = Camo/Info.plist; 1057 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 1058 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 1059 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.camo; 1060 | PRODUCT_NAME = Camo; 1061 | SDKROOT = macosx; 1062 | SKIP_INSTALL = YES; 1063 | }; 1064 | name = Release; 1065 | }; 1066 | 211228511C1394C70042D93A /* Debug */ = { 1067 | isa = XCBuildConfiguration; 1068 | buildSettings = { 1069 | APPLICATION_EXTENSION_API_ONLY = NO; 1070 | CODE_SIGN_IDENTITY = "-"; 1071 | COMBINE_HIDPI_IMAGES = YES; 1072 | INFOPLIST_FILE = Camo/Tests/Info.plist; 1073 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 1074 | MACOSX_DEPLOYMENT_TARGET = 10.11; 1075 | PRODUCT_BUNDLE_IDENTIFIER = "com.samsoffes.camotests-osx"; 1076 | PRODUCT_NAME = "$(TARGET_NAME)"; 1077 | SDKROOT = macosx; 1078 | }; 1079 | name = Debug; 1080 | }; 1081 | 211228521C1394C70042D93A /* Release */ = { 1082 | isa = XCBuildConfiguration; 1083 | buildSettings = { 1084 | APPLICATION_EXTENSION_API_ONLY = NO; 1085 | CODE_SIGN_IDENTITY = "-"; 1086 | COMBINE_HIDPI_IMAGES = YES; 1087 | INFOPLIST_FILE = Camo/Tests/Info.plist; 1088 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 1089 | MACOSX_DEPLOYMENT_TARGET = 10.11; 1090 | PRODUCT_BUNDLE_IDENTIFIER = "com.samsoffes.camotests-osx"; 1091 | PRODUCT_NAME = "$(TARGET_NAME)"; 1092 | SDKROOT = macosx; 1093 | }; 1094 | name = Release; 1095 | }; 1096 | /* End XCBuildConfiguration section */ 1097 | 1098 | /* Begin XCConfigurationList section */ 1099 | 211227DE1C1390780042D93A /* Build configuration list for PBXProject "Camo" */ = { 1100 | isa = XCConfigurationList; 1101 | buildConfigurations = ( 1102 | 211227F61C1390780042D93A /* Debug */, 1103 | 211227F71C1390780042D93A /* Release */, 1104 | ); 1105 | defaultConfigurationIsVisible = 0; 1106 | defaultConfigurationName = Release; 1107 | }; 1108 | 211227F81C1390780042D93A /* Build configuration list for PBXNativeTarget "Camo-iOS" */ = { 1109 | isa = XCConfigurationList; 1110 | buildConfigurations = ( 1111 | 211227F91C1390780042D93A /* Debug */, 1112 | 211227FA1C1390780042D93A /* Release */, 1113 | ); 1114 | defaultConfigurationIsVisible = 0; 1115 | defaultConfigurationName = Release; 1116 | }; 1117 | 211227FB1C1390780042D93A /* Build configuration list for PBXNativeTarget "CamoTests-iOS" */ = { 1118 | isa = XCConfigurationList; 1119 | buildConfigurations = ( 1120 | 211227FC1C1390780042D93A /* Debug */, 1121 | 211227FD1C1390780042D93A /* Release */, 1122 | ); 1123 | defaultConfigurationIsVisible = 0; 1124 | defaultConfigurationName = Release; 1125 | }; 1126 | 211228181C13944B0042D93A /* Build configuration list for PBXNativeTarget "Camo-watchOS" */ = { 1127 | isa = XCConfigurationList; 1128 | buildConfigurations = ( 1129 | 211228191C13944B0042D93A /* Debug */, 1130 | 2112281A1C13944B0042D93A /* Release */, 1131 | ); 1132 | defaultConfigurationIsVisible = 0; 1133 | defaultConfigurationName = Release; 1134 | }; 1135 | 211228311C13946F0042D93A /* Build configuration list for PBXNativeTarget "Camo-tvOS" */ = { 1136 | isa = XCConfigurationList; 1137 | buildConfigurations = ( 1138 | 211228321C13946F0042D93A /* Debug */, 1139 | 211228331C13946F0042D93A /* Release */, 1140 | ); 1141 | defaultConfigurationIsVisible = 0; 1142 | defaultConfigurationName = Release; 1143 | }; 1144 | 211228341C13946F0042D93A /* Build configuration list for PBXNativeTarget "CamoTests-tvOS" */ = { 1145 | isa = XCConfigurationList; 1146 | buildConfigurations = ( 1147 | 211228351C13946F0042D93A /* Debug */, 1148 | 211228361C13946F0042D93A /* Release */, 1149 | ); 1150 | defaultConfigurationIsVisible = 0; 1151 | defaultConfigurationName = Release; 1152 | }; 1153 | 2112284D1C1394C70042D93A /* Build configuration list for PBXNativeTarget "Camo-macOS" */ = { 1154 | isa = XCConfigurationList; 1155 | buildConfigurations = ( 1156 | 2112284E1C1394C70042D93A /* Debug */, 1157 | 2112284F1C1394C70042D93A /* Release */, 1158 | ); 1159 | defaultConfigurationIsVisible = 0; 1160 | defaultConfigurationName = Release; 1161 | }; 1162 | 211228501C1394C70042D93A /* Build configuration list for PBXNativeTarget "CamoTests-macOS" */ = { 1163 | isa = XCConfigurationList; 1164 | buildConfigurations = ( 1165 | 211228511C1394C70042D93A /* Debug */, 1166 | 211228521C1394C70042D93A /* Release */, 1167 | ); 1168 | defaultConfigurationIsVisible = 0; 1169 | defaultConfigurationName = Release; 1170 | }; 1171 | /* End XCConfigurationList section */ 1172 | }; 1173 | rootObject = 211227DB1C1390780042D93A /* Project object */; 1174 | } 1175 | -------------------------------------------------------------------------------- /Camo.xcodeproj/xcshareddata/xcschemes/Camo-iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /Camo.xcodeproj/xcshareddata/xcschemes/Camo-macOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /Camo.xcodeproj/xcshareddata/xcschemes/Camo-tvOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /Camo.xcodeproj/xcshareddata/xcschemes/Camo-watchOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Camo/Camo.h: -------------------------------------------------------------------------------- 1 | // 2 | // Camo.h 3 | // Camo 4 | // 5 | // Created by Sam Soffes on 12/5/15. 6 | // Copyright © 2015 Sam Soffes. All rights reserved. 7 | // 8 | 9 | @import Foundation; 10 | 11 | //! Project version number for Camo. 12 | FOUNDATION_EXPORT double CamoVersionNumber; 13 | 14 | //! Project version string for Camo. 15 | FOUNDATION_EXPORT const unsigned char CamoVersionString[]; 16 | -------------------------------------------------------------------------------- /Camo/Camo.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Camo.swift 3 | // Camo 4 | // 5 | // Created by Sam Soffes on 12/5/15. 6 | // Copyright © 2015 Sam Soffes. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Crypto 11 | 12 | public struct Camo { 13 | 14 | // MARK: - Properties 15 | 16 | public let secret: String 17 | public let baseURL: URL 18 | public let hmacAlgorithm: HMAC.Algorithm 19 | 20 | 21 | // MARK: - Initializers 22 | 23 | public init(secret: String, baseURL: URL, hmacAlgorithm: HMAC.Algorithm = .sha1) { 24 | self.secret = secret 25 | self.baseURL = baseURL 26 | self.hmacAlgorithm = hmacAlgorithm 27 | } 28 | 29 | 30 | // MARK: - URL Signing 31 | 32 | public func sign(URL: Foundation.URL) -> Foundation.URL? { 33 | guard let signature = HMAC.sign(message: URL.absoluteString, algorithm: hmacAlgorithm, key: secret), 34 | var components = URLComponents(url: baseURL, resolvingAgainstBaseURL: true) 35 | else { return nil } 36 | 37 | components.path = "/\(signature)" 38 | components.queryItems = [ 39 | URLQueryItem(name: "url", value: URL.absoluteString) 40 | ] 41 | 42 | return components.url 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Camo/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 | 0.2.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Camo/Tests/CamoTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CamoTests.swift 3 | // CamoTests 4 | // 5 | // Created by Sam Soffes on 12/5/15. 6 | // Copyright © 2015 Sam Soffes. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | import Camo 11 | 12 | class CamoTests: XCTestCase { 13 | 14 | let camo = Camo(secret: "something-secret", baseURL: URL(string: "https://camo.example.com/")!) 15 | 16 | func testSigning() { 17 | let URL = Foundation.URL(string: "http://soffes-assets.s3.amazonaws.com/images/Sam-Soffes.jpg")! 18 | XCTAssertEqual(Foundation.URL(string: "https://camo.example.com/c426621ed24dd05c47d766e5372de822c5601789?url=http://soffes-assets.s3.amazonaws.com/images/Sam-Soffes.jpg")!, camo.sign(URL: URL)) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Camo/Tests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | github "soffes/Crypto" 2 | -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "soffes/CommonCrypto" "v1.1.0" 2 | github "soffes/Crypto" "v0.5.1" 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 Venmo 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a 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 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Readme.markdown: -------------------------------------------------------------------------------- 1 | # Camo 2 | 3 | [![Version](https://img.shields.io/github/release/soffes/Camo.svg)](https://github.com/soffes/Camo/releases) 4 | ![Swift Version](https://img.shields.io/badge/swift-3.0.1-orange.svg) 5 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 6 | 7 | Swift client for [Camo](https://github.com/atmos/camo). 8 | 9 | Camo depends on [Crypto](https://github.com/soffes/Crypto). Released under the MIT license. 10 | 11 | 12 | 13 | ## Installation 14 | 15 | [Carthage](https://github.com/carthage/carthage) is the recommended way to install Crypto. Add the following to your Cartfile: 16 | 17 | ``` ruby 18 | github "soffes/Camo" 19 | ``` 20 | 21 | 22 | ## Usage 23 | 24 | ```swift 25 | import Camo 26 | 27 | // Setup Camo with your secret and base URL. 28 | // You can also optionally set the HMAC algorithm. The default is SHA1 29 | let camo = Camo(secret: "something-secret", baseURL: NSURL(string: "https://camo.example.com/")!) 30 | 31 | // Get a URL to sign 32 | let imageURL = NSURL(string: "http://soffes-assets.s3.amazonaws.com/images/Sam-Soffes.jpg")! 33 | 34 | // Get a camo'd URL 35 | camo.sign(URL: URL) // "https://camo.example.com/c426621ed24dd05c47d766e5372de822c5601789?url=http://soffes-assets.s3.amazonaws.com/images/Sam-Soffes.jpg" 36 | ``` 37 | --------------------------------------------------------------------------------