├── FizzBuzz.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcuserdata │ └── yvette.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── FizzBuzz.xcscheme │ └── xcschememanagement.plist ├── FizzBuzz ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── button_border.imageset │ │ ├── Contents.json │ │ └── button_border.png │ ├── champagne.imageset │ │ ├── Contents.json │ │ ├── champagne100.png │ │ ├── champagne200.png │ │ └── champagne80.png │ ├── lightning.imageset │ │ ├── Contents.json │ │ ├── lightning100.png │ │ ├── lightning200.png │ │ └── lightning80.png │ └── space.imageset │ │ ├── Contents.json │ │ ├── space100.png │ │ ├── space200.png │ │ └── space80.png ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Brain.swift ├── Game.swift ├── Info.plist ├── Move.swift └── ViewController.swift ├── FizzBuzzTests ├── BrainTests.swift ├── GameTests.swift ├── Info.plist └── ViewControllerUnitTests.swift ├── FizzBuzzUITests ├── Info.plist └── ViewControllerUITests.swift ├── README.md └── Resources ├── Mock Up.png ├── button_border.png ├── champagne.imageset ├── Contents.json ├── champagne100.png ├── champagne200.png └── champagne80.png ├── lightning.imageset ├── Contents.json ├── lightning100.png ├── lightning200.png └── lightning80.png └── space.imageset ├── Contents.json ├── space100.png ├── space200.png └── space80.png /FizzBuzz.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1AA0E3291C31A42B00FCCFCE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AA0E3281C31A42B00FCCFCE /* AppDelegate.swift */; }; 11 | 1AA0E32B1C31A42B00FCCFCE /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AA0E32A1C31A42B00FCCFCE /* ViewController.swift */; }; 12 | 1AA0E32E1C31A42B00FCCFCE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1AA0E32C1C31A42B00FCCFCE /* Main.storyboard */; }; 13 | 1AA0E3301C31A42B00FCCFCE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1AA0E32F1C31A42B00FCCFCE /* Assets.xcassets */; }; 14 | 1AA0E3331C31A42B00FCCFCE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1AA0E3311C31A42B00FCCFCE /* LaunchScreen.storyboard */; }; 15 | 1AA0E3571C31A5A300FCCFCE /* BrainTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AA0E3561C31A5A300FCCFCE /* BrainTests.swift */; }; 16 | 1AA0E3591C31A6C800FCCFCE /* Brain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AA0E3581C31A6C800FCCFCE /* Brain.swift */; }; 17 | 1AA0E35D1C31AE4600FCCFCE /* GameTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AA0E35C1C31AE4600FCCFCE /* GameTests.swift */; }; 18 | 1AA0E35F1C31AE7A00FCCFCE /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AA0E35E1C31AE7A00FCCFCE /* Game.swift */; }; 19 | 1AA0E3611C31B62D00FCCFCE /* ViewControllerUnitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AA0E3601C31B62D00FCCFCE /* ViewControllerUnitTests.swift */; }; 20 | 1AA0E3631C31BD0900FCCFCE /* ViewControllerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AA0E3621C31BD0900FCCFCE /* ViewControllerUITests.swift */; }; 21 | 1AA0E3651C31C0D600FCCFCE /* Move.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AA0E3641C31C0D600FCCFCE /* Move.swift */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXContainerItemProxy section */ 25 | 1AA0E33A1C31A42B00FCCFCE /* PBXContainerItemProxy */ = { 26 | isa = PBXContainerItemProxy; 27 | containerPortal = 1AA0E31D1C31A42B00FCCFCE /* Project object */; 28 | proxyType = 1; 29 | remoteGlobalIDString = 1AA0E3241C31A42B00FCCFCE; 30 | remoteInfo = FizzBuzz; 31 | }; 32 | 1AA0E3451C31A42B00FCCFCE /* PBXContainerItemProxy */ = { 33 | isa = PBXContainerItemProxy; 34 | containerPortal = 1AA0E31D1C31A42B00FCCFCE /* Project object */; 35 | proxyType = 1; 36 | remoteGlobalIDString = 1AA0E3241C31A42B00FCCFCE; 37 | remoteInfo = FizzBuzz; 38 | }; 39 | /* End PBXContainerItemProxy section */ 40 | 41 | /* Begin PBXFileReference section */ 42 | 1AA0E3251C31A42B00FCCFCE /* FizzBuzz.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FizzBuzz.app; sourceTree = BUILT_PRODUCTS_DIR; }; 43 | 1AA0E3281C31A42B00FCCFCE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 44 | 1AA0E32A1C31A42B00FCCFCE /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 45 | 1AA0E32D1C31A42B00FCCFCE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 46 | 1AA0E32F1C31A42B00FCCFCE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 47 | 1AA0E3321C31A42B00FCCFCE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 48 | 1AA0E3341C31A42B00FCCFCE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 49 | 1AA0E3391C31A42B00FCCFCE /* FizzBuzzTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FizzBuzzTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | 1AA0E33F1C31A42B00FCCFCE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 51 | 1AA0E3441C31A42B00FCCFCE /* FizzBuzzUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FizzBuzzUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | 1AA0E34A1C31A42B00FCCFCE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 53 | 1AA0E3561C31A5A300FCCFCE /* BrainTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrainTests.swift; sourceTree = ""; }; 54 | 1AA0E3581C31A6C800FCCFCE /* Brain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Brain.swift; sourceTree = ""; }; 55 | 1AA0E35C1C31AE4600FCCFCE /* GameTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameTests.swift; sourceTree = ""; }; 56 | 1AA0E35E1C31AE7A00FCCFCE /* Game.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Game.swift; sourceTree = ""; }; 57 | 1AA0E3601C31B62D00FCCFCE /* ViewControllerUnitTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewControllerUnitTests.swift; sourceTree = ""; }; 58 | 1AA0E3621C31BD0900FCCFCE /* ViewControllerUITests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewControllerUITests.swift; sourceTree = ""; }; 59 | 1AA0E3641C31C0D600FCCFCE /* Move.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Move.swift; sourceTree = ""; }; 60 | /* End PBXFileReference section */ 61 | 62 | /* Begin PBXFrameworksBuildPhase section */ 63 | 1AA0E3221C31A42B00FCCFCE /* Frameworks */ = { 64 | isa = PBXFrameworksBuildPhase; 65 | buildActionMask = 2147483647; 66 | files = ( 67 | ); 68 | runOnlyForDeploymentPostprocessing = 0; 69 | }; 70 | 1AA0E3361C31A42B00FCCFCE /* Frameworks */ = { 71 | isa = PBXFrameworksBuildPhase; 72 | buildActionMask = 2147483647; 73 | files = ( 74 | ); 75 | runOnlyForDeploymentPostprocessing = 0; 76 | }; 77 | 1AA0E3411C31A42B00FCCFCE /* Frameworks */ = { 78 | isa = PBXFrameworksBuildPhase; 79 | buildActionMask = 2147483647; 80 | files = ( 81 | ); 82 | runOnlyForDeploymentPostprocessing = 0; 83 | }; 84 | /* End PBXFrameworksBuildPhase section */ 85 | 86 | /* Begin PBXGroup section */ 87 | 1AA0E31C1C31A42B00FCCFCE = { 88 | isa = PBXGroup; 89 | children = ( 90 | 1AA0E3271C31A42B00FCCFCE /* FizzBuzz */, 91 | 1AA0E33C1C31A42B00FCCFCE /* FizzBuzzTests */, 92 | 1AA0E3471C31A42B00FCCFCE /* FizzBuzzUITests */, 93 | 1AA0E3261C31A42B00FCCFCE /* Products */, 94 | ); 95 | sourceTree = ""; 96 | }; 97 | 1AA0E3261C31A42B00FCCFCE /* Products */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | 1AA0E3251C31A42B00FCCFCE /* FizzBuzz.app */, 101 | 1AA0E3391C31A42B00FCCFCE /* FizzBuzzTests.xctest */, 102 | 1AA0E3441C31A42B00FCCFCE /* FizzBuzzUITests.xctest */, 103 | ); 104 | name = Products; 105 | sourceTree = ""; 106 | }; 107 | 1AA0E3271C31A42B00FCCFCE /* FizzBuzz */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 1AA0E3281C31A42B00FCCFCE /* AppDelegate.swift */, 111 | 1AA0E32A1C31A42B00FCCFCE /* ViewController.swift */, 112 | 1AA0E32C1C31A42B00FCCFCE /* Main.storyboard */, 113 | 1AA0E32F1C31A42B00FCCFCE /* Assets.xcassets */, 114 | 1AA0E3311C31A42B00FCCFCE /* LaunchScreen.storyboard */, 115 | 1AA0E3341C31A42B00FCCFCE /* Info.plist */, 116 | 1AA0E3581C31A6C800FCCFCE /* Brain.swift */, 117 | 1AA0E35E1C31AE7A00FCCFCE /* Game.swift */, 118 | 1AA0E3641C31C0D600FCCFCE /* Move.swift */, 119 | ); 120 | path = FizzBuzz; 121 | sourceTree = ""; 122 | }; 123 | 1AA0E33C1C31A42B00FCCFCE /* FizzBuzzTests */ = { 124 | isa = PBXGroup; 125 | children = ( 126 | 1AA0E33F1C31A42B00FCCFCE /* Info.plist */, 127 | 1AA0E3561C31A5A300FCCFCE /* BrainTests.swift */, 128 | 1AA0E35C1C31AE4600FCCFCE /* GameTests.swift */, 129 | 1AA0E3601C31B62D00FCCFCE /* ViewControllerUnitTests.swift */, 130 | ); 131 | path = FizzBuzzTests; 132 | sourceTree = ""; 133 | }; 134 | 1AA0E3471C31A42B00FCCFCE /* FizzBuzzUITests */ = { 135 | isa = PBXGroup; 136 | children = ( 137 | 1AA0E34A1C31A42B00FCCFCE /* Info.plist */, 138 | 1AA0E3621C31BD0900FCCFCE /* ViewControllerUITests.swift */, 139 | ); 140 | path = FizzBuzzUITests; 141 | sourceTree = ""; 142 | }; 143 | /* End PBXGroup section */ 144 | 145 | /* Begin PBXNativeTarget section */ 146 | 1AA0E3241C31A42B00FCCFCE /* FizzBuzz */ = { 147 | isa = PBXNativeTarget; 148 | buildConfigurationList = 1AA0E34D1C31A42B00FCCFCE /* Build configuration list for PBXNativeTarget "FizzBuzz" */; 149 | buildPhases = ( 150 | 1AA0E3211C31A42B00FCCFCE /* Sources */, 151 | 1AA0E3221C31A42B00FCCFCE /* Frameworks */, 152 | 1AA0E3231C31A42B00FCCFCE /* Resources */, 153 | ); 154 | buildRules = ( 155 | ); 156 | dependencies = ( 157 | ); 158 | name = FizzBuzz; 159 | productName = FizzBuzz; 160 | productReference = 1AA0E3251C31A42B00FCCFCE /* FizzBuzz.app */; 161 | productType = "com.apple.product-type.application"; 162 | }; 163 | 1AA0E3381C31A42B00FCCFCE /* FizzBuzzTests */ = { 164 | isa = PBXNativeTarget; 165 | buildConfigurationList = 1AA0E3501C31A42B00FCCFCE /* Build configuration list for PBXNativeTarget "FizzBuzzTests" */; 166 | buildPhases = ( 167 | 1AA0E3351C31A42B00FCCFCE /* Sources */, 168 | 1AA0E3361C31A42B00FCCFCE /* Frameworks */, 169 | 1AA0E3371C31A42B00FCCFCE /* Resources */, 170 | ); 171 | buildRules = ( 172 | ); 173 | dependencies = ( 174 | 1AA0E33B1C31A42B00FCCFCE /* PBXTargetDependency */, 175 | ); 176 | name = FizzBuzzTests; 177 | productName = FizzBuzzTests; 178 | productReference = 1AA0E3391C31A42B00FCCFCE /* FizzBuzzTests.xctest */; 179 | productType = "com.apple.product-type.bundle.unit-test"; 180 | }; 181 | 1AA0E3431C31A42B00FCCFCE /* FizzBuzzUITests */ = { 182 | isa = PBXNativeTarget; 183 | buildConfigurationList = 1AA0E3531C31A42B00FCCFCE /* Build configuration list for PBXNativeTarget "FizzBuzzUITests" */; 184 | buildPhases = ( 185 | 1AA0E3401C31A42B00FCCFCE /* Sources */, 186 | 1AA0E3411C31A42B00FCCFCE /* Frameworks */, 187 | 1AA0E3421C31A42B00FCCFCE /* Resources */, 188 | ); 189 | buildRules = ( 190 | ); 191 | dependencies = ( 192 | 1AA0E3461C31A42B00FCCFCE /* PBXTargetDependency */, 193 | ); 194 | name = FizzBuzzUITests; 195 | productName = FizzBuzzUITests; 196 | productReference = 1AA0E3441C31A42B00FCCFCE /* FizzBuzzUITests.xctest */; 197 | productType = "com.apple.product-type.bundle.ui-testing"; 198 | }; 199 | /* End PBXNativeTarget section */ 200 | 201 | /* Begin PBXProject section */ 202 | 1AA0E31D1C31A42B00FCCFCE /* Project object */ = { 203 | isa = PBXProject; 204 | attributes = { 205 | LastSwiftUpdateCheck = 0720; 206 | LastUpgradeCheck = 0720; 207 | ORGANIZATIONNAME = Yvette; 208 | TargetAttributes = { 209 | 1AA0E3241C31A42B00FCCFCE = { 210 | CreatedOnToolsVersion = 7.2; 211 | }; 212 | 1AA0E3381C31A42B00FCCFCE = { 213 | CreatedOnToolsVersion = 7.2; 214 | TestTargetID = 1AA0E3241C31A42B00FCCFCE; 215 | }; 216 | 1AA0E3431C31A42B00FCCFCE = { 217 | CreatedOnToolsVersion = 7.2; 218 | TestTargetID = 1AA0E3241C31A42B00FCCFCE; 219 | }; 220 | }; 221 | }; 222 | buildConfigurationList = 1AA0E3201C31A42B00FCCFCE /* Build configuration list for PBXProject "FizzBuzz" */; 223 | compatibilityVersion = "Xcode 3.2"; 224 | developmentRegion = English; 225 | hasScannedForEncodings = 0; 226 | knownRegions = ( 227 | en, 228 | Base, 229 | ); 230 | mainGroup = 1AA0E31C1C31A42B00FCCFCE; 231 | productRefGroup = 1AA0E3261C31A42B00FCCFCE /* Products */; 232 | projectDirPath = ""; 233 | projectRoot = ""; 234 | targets = ( 235 | 1AA0E3241C31A42B00FCCFCE /* FizzBuzz */, 236 | 1AA0E3381C31A42B00FCCFCE /* FizzBuzzTests */, 237 | 1AA0E3431C31A42B00FCCFCE /* FizzBuzzUITests */, 238 | ); 239 | }; 240 | /* End PBXProject section */ 241 | 242 | /* Begin PBXResourcesBuildPhase section */ 243 | 1AA0E3231C31A42B00FCCFCE /* Resources */ = { 244 | isa = PBXResourcesBuildPhase; 245 | buildActionMask = 2147483647; 246 | files = ( 247 | 1AA0E3331C31A42B00FCCFCE /* LaunchScreen.storyboard in Resources */, 248 | 1AA0E3301C31A42B00FCCFCE /* Assets.xcassets in Resources */, 249 | 1AA0E32E1C31A42B00FCCFCE /* Main.storyboard in Resources */, 250 | ); 251 | runOnlyForDeploymentPostprocessing = 0; 252 | }; 253 | 1AA0E3371C31A42B00FCCFCE /* Resources */ = { 254 | isa = PBXResourcesBuildPhase; 255 | buildActionMask = 2147483647; 256 | files = ( 257 | ); 258 | runOnlyForDeploymentPostprocessing = 0; 259 | }; 260 | 1AA0E3421C31A42B00FCCFCE /* Resources */ = { 261 | isa = PBXResourcesBuildPhase; 262 | buildActionMask = 2147483647; 263 | files = ( 264 | ); 265 | runOnlyForDeploymentPostprocessing = 0; 266 | }; 267 | /* End PBXResourcesBuildPhase section */ 268 | 269 | /* Begin PBXSourcesBuildPhase section */ 270 | 1AA0E3211C31A42B00FCCFCE /* Sources */ = { 271 | isa = PBXSourcesBuildPhase; 272 | buildActionMask = 2147483647; 273 | files = ( 274 | 1AA0E3651C31C0D600FCCFCE /* Move.swift in Sources */, 275 | 1AA0E32B1C31A42B00FCCFCE /* ViewController.swift in Sources */, 276 | 1AA0E3591C31A6C800FCCFCE /* Brain.swift in Sources */, 277 | 1AA0E3291C31A42B00FCCFCE /* AppDelegate.swift in Sources */, 278 | 1AA0E35F1C31AE7A00FCCFCE /* Game.swift in Sources */, 279 | ); 280 | runOnlyForDeploymentPostprocessing = 0; 281 | }; 282 | 1AA0E3351C31A42B00FCCFCE /* Sources */ = { 283 | isa = PBXSourcesBuildPhase; 284 | buildActionMask = 2147483647; 285 | files = ( 286 | 1AA0E3571C31A5A300FCCFCE /* BrainTests.swift in Sources */, 287 | 1AA0E35D1C31AE4600FCCFCE /* GameTests.swift in Sources */, 288 | 1AA0E3611C31B62D00FCCFCE /* ViewControllerUnitTests.swift in Sources */, 289 | ); 290 | runOnlyForDeploymentPostprocessing = 0; 291 | }; 292 | 1AA0E3401C31A42B00FCCFCE /* Sources */ = { 293 | isa = PBXSourcesBuildPhase; 294 | buildActionMask = 2147483647; 295 | files = ( 296 | 1AA0E3631C31BD0900FCCFCE /* ViewControllerUITests.swift in Sources */, 297 | ); 298 | runOnlyForDeploymentPostprocessing = 0; 299 | }; 300 | /* End PBXSourcesBuildPhase section */ 301 | 302 | /* Begin PBXTargetDependency section */ 303 | 1AA0E33B1C31A42B00FCCFCE /* PBXTargetDependency */ = { 304 | isa = PBXTargetDependency; 305 | target = 1AA0E3241C31A42B00FCCFCE /* FizzBuzz */; 306 | targetProxy = 1AA0E33A1C31A42B00FCCFCE /* PBXContainerItemProxy */; 307 | }; 308 | 1AA0E3461C31A42B00FCCFCE /* PBXTargetDependency */ = { 309 | isa = PBXTargetDependency; 310 | target = 1AA0E3241C31A42B00FCCFCE /* FizzBuzz */; 311 | targetProxy = 1AA0E3451C31A42B00FCCFCE /* PBXContainerItemProxy */; 312 | }; 313 | /* End PBXTargetDependency section */ 314 | 315 | /* Begin PBXVariantGroup section */ 316 | 1AA0E32C1C31A42B00FCCFCE /* Main.storyboard */ = { 317 | isa = PBXVariantGroup; 318 | children = ( 319 | 1AA0E32D1C31A42B00FCCFCE /* Base */, 320 | ); 321 | name = Main.storyboard; 322 | sourceTree = ""; 323 | }; 324 | 1AA0E3311C31A42B00FCCFCE /* LaunchScreen.storyboard */ = { 325 | isa = PBXVariantGroup; 326 | children = ( 327 | 1AA0E3321C31A42B00FCCFCE /* Base */, 328 | ); 329 | name = LaunchScreen.storyboard; 330 | sourceTree = ""; 331 | }; 332 | /* End PBXVariantGroup section */ 333 | 334 | /* Begin XCBuildConfiguration section */ 335 | 1AA0E34B1C31A42B00FCCFCE /* Debug */ = { 336 | isa = XCBuildConfiguration; 337 | buildSettings = { 338 | ALWAYS_SEARCH_USER_PATHS = NO; 339 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 340 | CLANG_CXX_LIBRARY = "libc++"; 341 | CLANG_ENABLE_MODULES = YES; 342 | CLANG_ENABLE_OBJC_ARC = YES; 343 | CLANG_WARN_BOOL_CONVERSION = YES; 344 | CLANG_WARN_CONSTANT_CONVERSION = YES; 345 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 346 | CLANG_WARN_EMPTY_BODY = YES; 347 | CLANG_WARN_ENUM_CONVERSION = YES; 348 | CLANG_WARN_INT_CONVERSION = YES; 349 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 350 | CLANG_WARN_UNREACHABLE_CODE = YES; 351 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 352 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 353 | COPY_PHASE_STRIP = NO; 354 | DEBUG_INFORMATION_FORMAT = dwarf; 355 | ENABLE_STRICT_OBJC_MSGSEND = YES; 356 | ENABLE_TESTABILITY = YES; 357 | GCC_C_LANGUAGE_STANDARD = gnu99; 358 | GCC_DYNAMIC_NO_PIC = NO; 359 | GCC_NO_COMMON_BLOCKS = YES; 360 | GCC_OPTIMIZATION_LEVEL = 0; 361 | GCC_PREPROCESSOR_DEFINITIONS = ( 362 | "DEBUG=1", 363 | "$(inherited)", 364 | ); 365 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 366 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 367 | GCC_WARN_UNDECLARED_SELECTOR = YES; 368 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 369 | GCC_WARN_UNUSED_FUNCTION = YES; 370 | GCC_WARN_UNUSED_VARIABLE = YES; 371 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 372 | MTL_ENABLE_DEBUG_INFO = YES; 373 | ONLY_ACTIVE_ARCH = YES; 374 | SDKROOT = iphoneos; 375 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 376 | TARGETED_DEVICE_FAMILY = "1,2"; 377 | }; 378 | name = Debug; 379 | }; 380 | 1AA0E34C1C31A42B00FCCFCE /* Release */ = { 381 | isa = XCBuildConfiguration; 382 | buildSettings = { 383 | ALWAYS_SEARCH_USER_PATHS = NO; 384 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 385 | CLANG_CXX_LIBRARY = "libc++"; 386 | CLANG_ENABLE_MODULES = YES; 387 | CLANG_ENABLE_OBJC_ARC = YES; 388 | CLANG_WARN_BOOL_CONVERSION = YES; 389 | CLANG_WARN_CONSTANT_CONVERSION = YES; 390 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 391 | CLANG_WARN_EMPTY_BODY = YES; 392 | CLANG_WARN_ENUM_CONVERSION = YES; 393 | CLANG_WARN_INT_CONVERSION = YES; 394 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 395 | CLANG_WARN_UNREACHABLE_CODE = YES; 396 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 397 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 398 | COPY_PHASE_STRIP = NO; 399 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 400 | ENABLE_NS_ASSERTIONS = NO; 401 | ENABLE_STRICT_OBJC_MSGSEND = YES; 402 | GCC_C_LANGUAGE_STANDARD = gnu99; 403 | GCC_NO_COMMON_BLOCKS = YES; 404 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 405 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 406 | GCC_WARN_UNDECLARED_SELECTOR = YES; 407 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 408 | GCC_WARN_UNUSED_FUNCTION = YES; 409 | GCC_WARN_UNUSED_VARIABLE = YES; 410 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 411 | MTL_ENABLE_DEBUG_INFO = NO; 412 | SDKROOT = iphoneos; 413 | TARGETED_DEVICE_FAMILY = "1,2"; 414 | VALIDATE_PRODUCT = YES; 415 | }; 416 | name = Release; 417 | }; 418 | 1AA0E34E1C31A42B00FCCFCE /* Debug */ = { 419 | isa = XCBuildConfiguration; 420 | buildSettings = { 421 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 422 | INFOPLIST_FILE = FizzBuzz/Info.plist; 423 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 424 | PRODUCT_BUNDLE_IDENTIFIER = com.Yvette.FizzBuzz; 425 | PRODUCT_NAME = "$(TARGET_NAME)"; 426 | }; 427 | name = Debug; 428 | }; 429 | 1AA0E34F1C31A42B00FCCFCE /* Release */ = { 430 | isa = XCBuildConfiguration; 431 | buildSettings = { 432 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 433 | INFOPLIST_FILE = FizzBuzz/Info.plist; 434 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 435 | PRODUCT_BUNDLE_IDENTIFIER = com.Yvette.FizzBuzz; 436 | PRODUCT_NAME = "$(TARGET_NAME)"; 437 | }; 438 | name = Release; 439 | }; 440 | 1AA0E3511C31A42B00FCCFCE /* Debug */ = { 441 | isa = XCBuildConfiguration; 442 | buildSettings = { 443 | BUNDLE_LOADER = "$(TEST_HOST)"; 444 | CLANG_ENABLE_MODULES = YES; 445 | INFOPLIST_FILE = FizzBuzzTests/Info.plist; 446 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 447 | PRODUCT_BUNDLE_IDENTIFIER = com.Yvette.FizzBuzzTests; 448 | PRODUCT_NAME = "$(TARGET_NAME)"; 449 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 450 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FizzBuzz.app/FizzBuzz"; 451 | }; 452 | name = Debug; 453 | }; 454 | 1AA0E3521C31A42B00FCCFCE /* Release */ = { 455 | isa = XCBuildConfiguration; 456 | buildSettings = { 457 | BUNDLE_LOADER = "$(TEST_HOST)"; 458 | CLANG_ENABLE_MODULES = YES; 459 | INFOPLIST_FILE = FizzBuzzTests/Info.plist; 460 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 461 | PRODUCT_BUNDLE_IDENTIFIER = com.Yvette.FizzBuzzTests; 462 | PRODUCT_NAME = "$(TARGET_NAME)"; 463 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FizzBuzz.app/FizzBuzz"; 464 | }; 465 | name = Release; 466 | }; 467 | 1AA0E3541C31A42B00FCCFCE /* Debug */ = { 468 | isa = XCBuildConfiguration; 469 | buildSettings = { 470 | CLANG_ENABLE_MODULES = YES; 471 | INFOPLIST_FILE = FizzBuzzUITests/Info.plist; 472 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 473 | PRODUCT_BUNDLE_IDENTIFIER = com.Yvette.FizzBuzzUITests; 474 | PRODUCT_NAME = "$(TARGET_NAME)"; 475 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 476 | TEST_TARGET_NAME = FizzBuzz; 477 | USES_XCTRUNNER = YES; 478 | }; 479 | name = Debug; 480 | }; 481 | 1AA0E3551C31A42B00FCCFCE /* Release */ = { 482 | isa = XCBuildConfiguration; 483 | buildSettings = { 484 | CLANG_ENABLE_MODULES = YES; 485 | INFOPLIST_FILE = FizzBuzzUITests/Info.plist; 486 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 487 | PRODUCT_BUNDLE_IDENTIFIER = com.Yvette.FizzBuzzUITests; 488 | PRODUCT_NAME = "$(TARGET_NAME)"; 489 | TEST_TARGET_NAME = FizzBuzz; 490 | USES_XCTRUNNER = YES; 491 | }; 492 | name = Release; 493 | }; 494 | /* End XCBuildConfiguration section */ 495 | 496 | /* Begin XCConfigurationList section */ 497 | 1AA0E3201C31A42B00FCCFCE /* Build configuration list for PBXProject "FizzBuzz" */ = { 498 | isa = XCConfigurationList; 499 | buildConfigurations = ( 500 | 1AA0E34B1C31A42B00FCCFCE /* Debug */, 501 | 1AA0E34C1C31A42B00FCCFCE /* Release */, 502 | ); 503 | defaultConfigurationIsVisible = 0; 504 | defaultConfigurationName = Release; 505 | }; 506 | 1AA0E34D1C31A42B00FCCFCE /* Build configuration list for PBXNativeTarget "FizzBuzz" */ = { 507 | isa = XCConfigurationList; 508 | buildConfigurations = ( 509 | 1AA0E34E1C31A42B00FCCFCE /* Debug */, 510 | 1AA0E34F1C31A42B00FCCFCE /* Release */, 511 | ); 512 | defaultConfigurationIsVisible = 0; 513 | }; 514 | 1AA0E3501C31A42B00FCCFCE /* Build configuration list for PBXNativeTarget "FizzBuzzTests" */ = { 515 | isa = XCConfigurationList; 516 | buildConfigurations = ( 517 | 1AA0E3511C31A42B00FCCFCE /* Debug */, 518 | 1AA0E3521C31A42B00FCCFCE /* Release */, 519 | ); 520 | defaultConfigurationIsVisible = 0; 521 | }; 522 | 1AA0E3531C31A42B00FCCFCE /* Build configuration list for PBXNativeTarget "FizzBuzzUITests" */ = { 523 | isa = XCConfigurationList; 524 | buildConfigurations = ( 525 | 1AA0E3541C31A42B00FCCFCE /* Debug */, 526 | 1AA0E3551C31A42B00FCCFCE /* Release */, 527 | ); 528 | defaultConfigurationIsVisible = 0; 529 | }; 530 | /* End XCConfigurationList section */ 531 | }; 532 | rootObject = 1AA0E31D1C31A42B00FCCFCE /* Project object */; 533 | } 534 | -------------------------------------------------------------------------------- /FizzBuzz.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /FizzBuzz.xcodeproj/xcuserdata/yvette.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /FizzBuzz.xcodeproj/xcuserdata/yvette.xcuserdatad/xcschemes/FizzBuzz.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /FizzBuzz.xcodeproj/xcuserdata/yvette.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | FizzBuzz.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 1AA0E3241C31A42B00FCCFCE 16 | 17 | primary 18 | 19 | 20 | 1AA0E3381C31A42B00FCCFCE 21 | 22 | primary 23 | 24 | 25 | 1AA0E3431C31A42B00FCCFCE 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /FizzBuzz/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // FizzBuzz 4 | // 5 | // Created by Yvette Cook on 28/12/2015. 6 | // Copyright © 2015 Yvette. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(application: UIApplication) { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "83.5x83.5", 66 | "scale" : "2x" 67 | } 68 | ], 69 | "info" : { 70 | "version" : 1, 71 | "author" : "xcode" 72 | } 73 | } -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/button_border.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "button_border.png", 6 | "scale" : "1x" 7 | } 8 | ], 9 | "info" : { 10 | "version" : 1, 11 | "author" : "xcode" 12 | } 13 | } -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/button_border.imageset/button_border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/FizzBuzz/Assets.xcassets/button_border.imageset/button_border.png -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/champagne.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "champagne80.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "champagne100.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "champagne200.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/champagne.imageset/champagne100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/FizzBuzz/Assets.xcassets/champagne.imageset/champagne100.png -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/champagne.imageset/champagne200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/FizzBuzz/Assets.xcassets/champagne.imageset/champagne200.png -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/champagne.imageset/champagne80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/FizzBuzz/Assets.xcassets/champagne.imageset/champagne80.png -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/lightning.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "lightning80.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "lightning100.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "lightning200.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/lightning.imageset/lightning100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/FizzBuzz/Assets.xcassets/lightning.imageset/lightning100.png -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/lightning.imageset/lightning200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/FizzBuzz/Assets.xcassets/lightning.imageset/lightning200.png -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/lightning.imageset/lightning80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/FizzBuzz/Assets.xcassets/lightning.imageset/lightning80.png -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/space.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "space80.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "space100.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "space200.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/space.imageset/space100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/FizzBuzz/Assets.xcassets/space.imageset/space100.png -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/space.imageset/space200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/FizzBuzz/Assets.xcassets/space.imageset/space200.png -------------------------------------------------------------------------------- /FizzBuzz/Assets.xcassets/space.imageset/space80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/FizzBuzz/Assets.xcassets/space.imageset/space80.png -------------------------------------------------------------------------------- /FizzBuzz/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /FizzBuzz/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 30 | 36 | 37 | 38 | 39 | 50 | 60 | 70 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /FizzBuzz/Brain.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Brain.swift 3 | // FizzBuzz 4 | // 5 | // Created by Yvette Cook on 28/12/2015. 6 | // Copyright © 2015 Yvette. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class Brain: NSObject { 12 | 13 | func isDivisibleByThree(number: Int) -> Bool { 14 | return isDivisibleBy(3, number: number) 15 | } 16 | 17 | func isDivisibleByFive(number: Int) -> Bool { 18 | return isDivisibleBy(5, number: number) 19 | } 20 | 21 | func isDivisibleByFifteen(number: Int) -> Bool { 22 | return isDivisibleBy(15, number: number) 23 | } 24 | 25 | func isDivisibleBy(divisor: Int, number: Int) -> Bool { 26 | return number % divisor == 0 27 | } 28 | 29 | func check(number: Int) -> Move { 30 | if isDivisibleByFifteen(number) { 31 | return Move.FizzBuzz 32 | } else if isDivisibleByThree(number) { 33 | return Move.Fizz 34 | } else if isDivisibleByFive(number){ 35 | return Move.Buzz 36 | } else { 37 | return Move.Number 38 | } 39 | } 40 | 41 | } -------------------------------------------------------------------------------- /FizzBuzz/Game.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Game.swift 3 | // FizzBuzz 4 | // 5 | // Created by Yvette Cook on 28/12/2015. 6 | // Copyright © 2015 Yvette. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class Game: NSObject { 12 | 13 | var score: Int 14 | let brain: Brain 15 | 16 | override init() { 17 | score = 0 18 | brain = Brain() 19 | super.init() 20 | } 21 | 22 | func play(move: Move) -> (right: Bool, score: Int) { 23 | let result = brain.check(score + 1) 24 | 25 | if result == move { 26 | score++ 27 | return (true, score) 28 | } else { 29 | return (false, score) 30 | } 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /FizzBuzz/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 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /FizzBuzz/Move.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Move.swift 3 | // FizzBuzz 4 | // 5 | // Created by Yvette Cook on 28/12/2015. 6 | // Copyright © 2015 Yvette. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum Move { 12 | case Number 13 | case Fizz 14 | case Buzz 15 | case FizzBuzz 16 | } 17 | -------------------------------------------------------------------------------- /FizzBuzz/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // FizzBuzz 4 | // 5 | // Created by Yvette Cook on 28/12/2015. 6 | // Copyright © 2015 Yvette. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController { 12 | 13 | var game : Game? 14 | 15 | @IBOutlet weak var numberButton: UIButton! 16 | @IBOutlet weak var fizzButton: UIButton! 17 | @IBOutlet weak var buzzButton: UIButton! 18 | @IBOutlet weak var fizzBuzzButton: UIButton! 19 | 20 | 21 | var gameScore: Int? { 22 | didSet { 23 | guard let unwrappedScore = gameScore else { 24 | print("gameScore is nil") 25 | return 26 | } 27 | numberButton.setTitle("\(unwrappedScore)", forState: .Normal) 28 | } 29 | } 30 | 31 | override func viewDidLoad() { 32 | super.viewDidLoad() 33 | game = Game() 34 | 35 | guard let checkedGame = game else { 36 | print("Game is nil") 37 | return 38 | } 39 | 40 | gameScore = checkedGame.score 41 | } 42 | 43 | override func didReceiveMemoryWarning() { 44 | super.didReceiveMemoryWarning() 45 | } 46 | 47 | 48 | func play(move: Move) { 49 | guard let unwrappedGame = game else { 50 | print("Game is nil!") 51 | return 52 | } 53 | let response = unwrappedGame.play(move) 54 | gameScore = response.score 55 | } 56 | 57 | @IBAction func buttonTapped(sender: UIButton) { 58 | switch sender { 59 | case numberButton: 60 | play(Move.Number) 61 | case fizzButton: 62 | play(Move.Fizz) 63 | case buzzButton: 64 | play(Move.Buzz) 65 | case fizzBuzzButton: 66 | play(Move.FizzBuzz) 67 | default: 68 | print("Invalid selection") 69 | } 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /FizzBuzzTests/BrainTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BrainTests.swift 3 | // FizzBuzz 4 | // 5 | // Created by Yvette Cook on 28/12/2015. 6 | // Copyright © 2015 Yvette. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import FizzBuzz 11 | 12 | class BrainTests: XCTestCase { 13 | 14 | let brain = Brain() 15 | 16 | override func setUp() { 17 | super.setUp() 18 | // Put setup code here. This method is called before the invocation of each test method in the class. 19 | } 20 | 21 | override func tearDown() { 22 | // Put teardown code here. This method is called after the invocation of each test method in the class. 23 | super.tearDown() 24 | } 25 | 26 | func testIsDivisibleByThree() { 27 | let result = brain.isDivisibleByThree(3) 28 | XCTAssertEqual(result, true) 29 | } 30 | 31 | func testIsNotDivisibleByThree() { 32 | let result = brain.isDivisibleByThree(1) 33 | XCTAssertEqual(result, false) 34 | } 35 | 36 | func testIsDivisibleByFive() { 37 | let result = brain.isDivisibleByFive(5) 38 | XCTAssertEqual(result, true) 39 | } 40 | 41 | func testIsNotDivisibleByFive() { 42 | let result = brain.isDivisibleByFive(1) 43 | XCTAssertEqual(result, false) 44 | } 45 | 46 | func testIsDivisibleByFifteen() { 47 | let result = brain.isDivisibleByFifteen(15) 48 | XCTAssertEqual(result, true) 49 | } 50 | 51 | func testIsNotDivisibleByFifteen() { 52 | let result = brain.isDivisibleByFifteen(1) 53 | XCTAssertEqual(result, false) 54 | } 55 | 56 | func testSayFizz() { 57 | let result = brain.check(3) 58 | XCTAssertEqual(result, Move.Fizz) 59 | } 60 | 61 | func testSayBuzz() { 62 | let result = brain.check(5) 63 | XCTAssertEqual(result, Move.Buzz) 64 | } 65 | 66 | func testSayFizzBuzz() { 67 | let result = brain.check(15) 68 | XCTAssertEqual(result, Move.FizzBuzz) 69 | } 70 | 71 | func testSayNumber() { 72 | let result = brain.check(1) 73 | XCTAssertEqual(result, Move.Number) 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /FizzBuzzTests/GameTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GameTests.swift 3 | // FizzBuzz 4 | // 5 | // Created by Yvette Cook on 23/12/2015. 6 | // Copyright © 2015 Yvette. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import FizzBuzz 11 | 12 | class GameTests: XCTestCase { 13 | 14 | let game = Game() 15 | 16 | override func setUp() { 17 | super.setUp() 18 | } 19 | 20 | override func tearDown() { 21 | super.tearDown() 22 | } 23 | 24 | func testGameStartsAtZero() { 25 | XCTAssertTrue(game.score == 0) 26 | } 27 | 28 | func testOnPlayScoreIncremented() { 29 | game.play(Move.Number) 30 | XCTAssertTrue(game.score == 1) 31 | } 32 | 33 | func testIfMoveIsRight() { 34 | game.score = 2 35 | let response = game.play(Move.Fizz) 36 | let result = response.right 37 | XCTAssertEqual(result, true) 38 | } 39 | 40 | func testIfMoveIsWrong() { 41 | game.score = 1 42 | let response = game.play(Move.Fizz) 43 | let result = response.right 44 | XCTAssertEqual(result, false) 45 | } 46 | 47 | func testIfBuzzMoveRight() { 48 | game.score = 4 49 | let response = game.play(Move.Buzz) 50 | let result = response.right 51 | XCTAssertEqual(result, true) 52 | } 53 | 54 | func testIfBuzzMoveWrong() { 55 | game.score = 1 56 | let response = game.play(Move.Buzz) 57 | let result = response.right 58 | XCTAssertEqual(result, false) 59 | } 60 | 61 | func testIfFizzBuzzMoveRight() { 62 | game.score = 14 63 | let response = game.play(Move.FizzBuzz) 64 | let result = response.right 65 | XCTAssertEqual(result, true) 66 | } 67 | 68 | func testIfFizzBuzzMoveWrong() { 69 | game.score = 1 70 | let response = game.play(Move.FizzBuzz) 71 | let result = response.right 72 | XCTAssertEqual(result, false) 73 | } 74 | 75 | func testIfNumberMoveRight() { 76 | game.score = 1 77 | let response = game.play(Move.Number) 78 | let result = response.right 79 | XCTAssertEqual(result, true) 80 | } 81 | 82 | func testIfNumberMoveWrong() { 83 | game.score = 2 84 | let response = game.play(Move.Number) 85 | let result = response.right 86 | XCTAssertEqual(result, false) 87 | } 88 | 89 | func testIfMoveWrongScoreNotIncremented() { 90 | game.score = 1 91 | game.play(Move.Fizz) 92 | XCTAssertEqual(game.score, 1) 93 | } 94 | 95 | func testPlayShouldReturnIfMoveRight() { 96 | let response = game.play(Move.Number) 97 | XCTAssertNotNil(response.right) 98 | } 99 | 100 | func testPlayShouldReturnNewScore() { 101 | let response = game.play(Move.Number) 102 | XCTAssertNotNil(response.score) 103 | } 104 | 105 | } 106 | 107 | -------------------------------------------------------------------------------- /FizzBuzzTests/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 | -------------------------------------------------------------------------------- /FizzBuzzTests/ViewControllerUnitTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewControllerUnitTests.swift 3 | // FizzBuzz 4 | // 5 | // Created by Yvette Cook on 26/12/2015. 6 | // Copyright © 2015 Yvette. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import FizzBuzz 11 | 12 | class ViewControllerUnitTests: XCTestCase { 13 | 14 | var viewController : ViewController! 15 | 16 | override func setUp() { 17 | super.setUp() 18 | 19 | let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) 20 | viewController = storyboard.instantiateViewControllerWithIdentifier("ViewController") as! ViewController 21 | UIApplication.sharedApplication().keyWindow!.rootViewController = viewController 22 | 23 | let _ = viewController.view 24 | } 25 | 26 | override func tearDown() { 27 | super.tearDown() 28 | } 29 | 30 | func testMove1IncrementsScore() { 31 | viewController.play(Move.Number) 32 | let newScore = viewController.gameScore 33 | XCTAssertEqual(newScore, 1) 34 | } 35 | 36 | func testMove2IncrementScore() { 37 | viewController.play(Move.Number) 38 | viewController.play(Move.Number) 39 | let newScore = viewController.gameScore 40 | XCTAssertEqual(newScore, 2) 41 | } 42 | 43 | func testHasAGame() { 44 | XCTAssertNotNil(viewController.game) 45 | } 46 | 47 | func testFizzIncrementScore() { 48 | viewController.game?.score = 2 49 | viewController.play(Move.Fizz) 50 | let newScore = viewController.gameScore 51 | XCTAssertEqual(newScore, 3) 52 | } 53 | 54 | func testBuzzIncrementScore() { 55 | viewController.game?.score = 4 56 | viewController.play(Move.Buzz) 57 | let newScore = viewController.gameScore 58 | XCTAssertEqual(newScore, 5) 59 | } 60 | 61 | func testFizzBuzzIncrementScore() { 62 | viewController.game?.score = 14 63 | viewController.play(Move.FizzBuzz) 64 | let newScore = viewController.gameScore 65 | XCTAssertEqual(newScore, 15) 66 | } 67 | 68 | func testOnWrongMoveScoreNotIncremented() { 69 | viewController.play(Move.Fizz) 70 | let newScore = viewController.gameScore 71 | XCTAssertEqual(newScore, 0) 72 | } 73 | 74 | } -------------------------------------------------------------------------------- /FizzBuzzUITests/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 | -------------------------------------------------------------------------------- /FizzBuzzUITests/ViewControllerUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewControllerUITests.swift 3 | // FizzBuzz 4 | // 5 | // Created by Yvette Cook on 28/12/2015. 6 | // Copyright © 2015 Yvette. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class ViewControllerUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | continueAfterFailure = false 16 | XCUIApplication().launch() 17 | 18 | } 19 | 20 | override func tearDown() { 21 | super.tearDown() 22 | } 23 | 24 | func testTapNumberButtonIncrementsScore() { 25 | let app = XCUIApplication() 26 | let numberButton = app.buttons["numberButton"] 27 | 28 | numberButton.tap() 29 | let newScore = numberButton.label 30 | XCTAssertEqual(newScore, "1") 31 | } 32 | 33 | func testTapNumberButtonTwiceIncrementsTo2() { 34 | let app = XCUIApplication() 35 | let numberButton = app.buttons["numberButton"] 36 | 37 | numberButton.tap() 38 | numberButton.tap() 39 | let newScore = numberButton.label 40 | XCTAssertEqual(newScore, "2") 41 | } 42 | 43 | func testTapFizzButtonIncrementsTo3() { 44 | let app = XCUIApplication() 45 | let numberButton = app.buttons["numberButton"] 46 | let fizzButton = app.buttons["fizzButton"] 47 | 48 | numberButton.tap() 49 | numberButton.tap() 50 | fizzButton.tap() 51 | let newScore = numberButton.label 52 | XCTAssertEqual(newScore, "3") 53 | } 54 | 55 | func testTapBuzzButtonIncrementsTo5() { 56 | let app = XCUIApplication() 57 | let numberButton = app.buttons["numberButton"] 58 | let fizzButton = app.buttons["fizzButton"] 59 | let buzzButton = app.buttons["buzzButton"] 60 | 61 | numberButton.tap() 62 | numberButton.tap() 63 | fizzButton.tap() 64 | numberButton.tap() 65 | buzzButton.tap() 66 | let newScore = numberButton.label 67 | XCTAssertEqual(newScore, "5") 68 | } 69 | 70 | func testTapFizzBuzzButtonIncrementsTo15() { 71 | let app = XCUIApplication() 72 | let numberButton = app.buttons["numberButton"] 73 | let fizzbuzzButton = app.buttons["fizzBuzzButton"] 74 | 75 | playTo14() 76 | 77 | fizzbuzzButton.tap() 78 | let newScore = numberButton.label 79 | XCTAssertEqual(newScore, "15") 80 | } 81 | 82 | func playTo14() { 83 | let app = XCUIApplication() 84 | let numberButton = app.buttons["numberButton"] 85 | let fizzButton = app.buttons["fizzButton"] 86 | let buzzButton = app.buttons["buzzButton"] 87 | 88 | numberButton.tap() 89 | numberButton.tap() 90 | fizzButton.tap() 91 | numberButton.tap() 92 | buzzButton.tap() 93 | fizzButton.tap() 94 | numberButton.tap() 95 | numberButton.tap() 96 | fizzButton.tap() 97 | buzzButton.tap() 98 | numberButton.tap() 99 | fizzButton.tap() 100 | numberButton.tap() 101 | numberButton.tap() 102 | } 103 | 104 | } 105 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is the source code for the [Getting Started with TDD in Swift](https://medium.com/@ynzc/getting-started-with-tdd-in-swift-2fab3e07204b#.wj6gn2snb) tutorial. 2 | 3 | You can check out the app on the [App Store] (https://itunes.apple.com/us/app/bizzfuzz/id1065354200?mt=8) 4 | 5 | --- 6 | 7 | Look at the *Releases* tab to see the state of the project at the beginning of each part of the Tutorial. 8 | 9 | --- 10 | 11 | ## About the Tutorial 12 | The tutorial will help you write your first TDD app in Swift by building a FizzBuzz game for iOS. We’ll build it up step-by-step and learn about different aspects of building a mobile app. 13 | 14 | #### Who is the tutorial for? 15 | If you’re new to iOS development, Swift or testing in iOS then you should learn a lot from this tutorial. 16 | 17 | This tutorial does assume prior programming experience. Specifically you should have an understanding of programming concepts like variables, if statements, functions, and classes. 18 | 19 | If you’re a complete beginner to programming in general, you might find a lot of basic programming concepts are skipped over, and for a more gentle start you might want to start elsewhere. I’m a big fan of the Ruby course on Codecademy. 20 | -------------------------------------------------------------------------------- /Resources/Mock Up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/Resources/Mock Up.png -------------------------------------------------------------------------------- /Resources/button_border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/Resources/button_border.png -------------------------------------------------------------------------------- /Resources/champagne.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "champagne80.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "champagne100.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "champagne200.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Resources/champagne.imageset/champagne100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/Resources/champagne.imageset/champagne100.png -------------------------------------------------------------------------------- /Resources/champagne.imageset/champagne200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/Resources/champagne.imageset/champagne200.png -------------------------------------------------------------------------------- /Resources/champagne.imageset/champagne80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/Resources/champagne.imageset/champagne80.png -------------------------------------------------------------------------------- /Resources/lightning.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "lightning80.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "lightning100.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "lightning200.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Resources/lightning.imageset/lightning100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/Resources/lightning.imageset/lightning100.png -------------------------------------------------------------------------------- /Resources/lightning.imageset/lightning200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/Resources/lightning.imageset/lightning200.png -------------------------------------------------------------------------------- /Resources/lightning.imageset/lightning80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/Resources/lightning.imageset/lightning80.png -------------------------------------------------------------------------------- /Resources/space.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "space80.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "space100.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "space200.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Resources/space.imageset/space100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/Resources/space.imageset/space100.png -------------------------------------------------------------------------------- /Resources/space.imageset/space200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/Resources/space.imageset/space200.png -------------------------------------------------------------------------------- /Resources/space.imageset/space80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yvettecook/Getting-Started-with-TDD-in-Swift/ce631feb3232d59f7c0f7f89601b9448cfe5d4c9/Resources/space.imageset/space80.png --------------------------------------------------------------------------------