├── FlapFlap.sketch ├── fonts ├── version ├── Data ├── QuickLook │ ├── Preview.png │ └── Thumbnail.png └── metadata ├── FlapFlap ├── en.lproj │ └── InfoPlist.strings ├── .DS_Store ├── Spark.sks ├── spark.png ├── Exhaust.sks ├── Sounds │ ├── pipe.mp3 │ ├── punch.wav │ ├── punch2.mp3 │ └── punch3.mp3 ├── Images.xcassets │ ├── Cloud.imageset │ │ ├── Cloud.png │ │ ├── Cloud@2x.png │ │ └── Contents.json │ ├── Ground.imageset │ │ ├── Ground.png │ │ ├── Ground@2x.png │ │ └── Contents.json │ ├── PipeTop.imageset │ │ ├── PipeTop.png │ │ ├── PipeTop@2x.png │ │ └── Contents.json │ ├── PipeBottom.imageset │ │ ├── PipeBottom.png │ │ ├── PipeBottom@2x.png │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── LaunchImage.launchimage │ │ └── Contents.json ├── Player.m ├── Obstacle.m ├── Player.h ├── Obstacle.h ├── NewGameScene.h ├── ViewController.h ├── MainScene.h ├── AppDelegate.h ├── main.m ├── FlapFlap-Prefix.pch ├── AppDelegate.m ├── ViewController.m ├── NewGameScene.m ├── FlapFlap-Info.plist └── MainScene.m ├── SCREENSHOT.png ├── FlapFlapTests ├── en.lproj │ └── InfoPlist.strings ├── FlapFlapTests.m └── FlapFlapTests-Info.plist ├── README.md ├── FlapFlap.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata ├── xcuserdata │ └── nathan.xcuserdatad │ │ └── xcschemes │ │ ├── xcschememanagement.plist │ │ └── FlapFlap.xcscheme └── project.pbxproj ├── .gitignore └── LICENSE /FlapFlap.sketch/fonts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /FlapFlap.sketch/version: -------------------------------------------------------------------------------- 1 | 18 -------------------------------------------------------------------------------- /FlapFlap/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /SCREENSHOT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/SCREENSHOT.png -------------------------------------------------------------------------------- /FlapFlap/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/.DS_Store -------------------------------------------------------------------------------- /FlapFlap/Spark.sks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Spark.sks -------------------------------------------------------------------------------- /FlapFlap/spark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/spark.png -------------------------------------------------------------------------------- /FlapFlapTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /FlapFlap.sketch/Data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap.sketch/Data -------------------------------------------------------------------------------- /FlapFlap/Exhaust.sks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Exhaust.sks -------------------------------------------------------------------------------- /FlapFlap/Sounds/pipe.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Sounds/pipe.mp3 -------------------------------------------------------------------------------- /FlapFlap/Sounds/punch.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Sounds/punch.wav -------------------------------------------------------------------------------- /FlapFlap/Sounds/punch2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Sounds/punch2.mp3 -------------------------------------------------------------------------------- /FlapFlap/Sounds/punch3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Sounds/punch3.mp3 -------------------------------------------------------------------------------- /FlapFlap.sketch/QuickLook/Preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap.sketch/QuickLook/Preview.png -------------------------------------------------------------------------------- /FlapFlap.sketch/QuickLook/Thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap.sketch/QuickLook/Thumbnail.png -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/Cloud.imageset/Cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Images.xcassets/Cloud.imageset/Cloud.png -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/Ground.imageset/Ground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Images.xcassets/Ground.imageset/Ground.png -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/Cloud.imageset/Cloud@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Images.xcassets/Cloud.imageset/Cloud@2x.png -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/PipeTop.imageset/PipeTop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Images.xcassets/PipeTop.imageset/PipeTop.png -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/Ground.imageset/Ground@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Images.xcassets/Ground.imageset/Ground@2x.png -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/PipeTop.imageset/PipeTop@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Images.xcassets/PipeTop.imageset/PipeTop@2x.png -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/PipeBottom.imageset/PipeBottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Images.xcassets/PipeBottom.imageset/PipeBottom.png -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/PipeBottom.imageset/PipeBottom@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dimillian/FlapFlap/master/FlapFlap/Images.xcassets/PipeBottom.imageset/PipeBottom@2x.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | FlapFlap 2 | ======== 3 | 4 | Flappy Bird Clone for learning purposes—feel free to play along. 5 | 6 | Current mock 7 | ------------ 8 | 9 | ![Current Mock](https://raw.github.com/nathanborror/FlapFlap/master/SCREENSHOT.png) -------------------------------------------------------------------------------- /FlapFlap.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /FlapFlap/Player.m: -------------------------------------------------------------------------------- 1 | // 2 | // Player.m 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/8/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import "Player.h" 10 | 11 | @implementation Player 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FlapFlap/Obstacle.m: -------------------------------------------------------------------------------- 1 | // 2 | // Obstacle.m 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/8/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import "Obstacle.h" 10 | 11 | @implementation Obstacle 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FlapFlap/Player.h: -------------------------------------------------------------------------------- 1 | // 2 | // Player.h 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/8/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface Player : SKSpriteNode 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FlapFlap/Obstacle.h: -------------------------------------------------------------------------------- 1 | // 2 | // Obstacle.h 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/8/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface Obstacle : SKSpriteNode 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FlapFlap/NewGameScene.h: -------------------------------------------------------------------------------- 1 | // 2 | // NewGameScene.h 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/9/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NewGameScene : SKScene 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /FlapFlap/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/5/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface ViewController : UIViewController 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # CocoaPods 23 | Pods -------------------------------------------------------------------------------- /FlapFlap/MainScene.h: -------------------------------------------------------------------------------- 1 | // 2 | // MainScene.h 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/5/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface MainScene : SKScene 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /FlapFlap/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/5/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/Cloud.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Cloud.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "Cloud@2x.png" 12 | } 13 | ], 14 | "info" : { 15 | "version" : 1, 16 | "author" : "xcode" 17 | } 18 | } -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/Ground.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Ground.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "Ground@2x.png" 12 | } 13 | ], 14 | "info" : { 15 | "version" : 1, 16 | "author" : "xcode" 17 | } 18 | } -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/PipeTop.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "PipeTop.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "PipeTop@2x.png" 12 | } 13 | ], 14 | "info" : { 15 | "version" : 1, 16 | "author" : "xcode" 17 | } 18 | } -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/PipeBottom.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "PipeBottom.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "PipeBottom@2x.png" 12 | } 13 | ], 14 | "info" : { 15 | "version" : 1, 16 | "author" : "xcode" 17 | } 18 | } -------------------------------------------------------------------------------- /FlapFlap/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/5/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "AppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /FlapFlap/FlapFlap-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_3_0 10 | #warning "This project uses features only available in iOS SDK 3.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #endif 17 | -------------------------------------------------------------------------------- /FlapFlap/Images.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" : "40x40", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "60x60", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /FlapFlap.sketch/metadata: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | app 6 | com.bohemiancoding.sketch 7 | build 8 | 5302 9 | commit 10 | 9460a4bc62af5e9ba50dd4143578fd9401710ce5 11 | version 12 | 18 13 | 14 | 15 | -------------------------------------------------------------------------------- /FlapFlap/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /FlapFlap/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/5/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "ViewController.h" 11 | 12 | @implementation AppDelegate 13 | 14 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 15 | { 16 | _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 17 | 18 | ViewController *viewController = [[ViewController alloc] init]; 19 | [_window setRootViewController:viewController]; 20 | 21 | [_window setBackgroundColor:[UIColor whiteColor]]; 22 | [_window makeKeyAndVisible]; 23 | return YES; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /FlapFlap.xcodeproj/xcuserdata/nathan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | FlapFlap.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | D8FCAA6F18A2BB6B004B93C1 16 | 17 | primary 18 | 19 | 20 | D8FCAA8A18A2BB6B004B93C1 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /FlapFlapTests/FlapFlapTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // FlapFlapTests.m 3 | // FlapFlapTests 4 | // 5 | // Created by Nathan Borror on 2/5/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FlapFlapTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation FlapFlapTests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /FlapFlapTests/FlapFlapTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.nathanborror.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /FlapFlap/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/5/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "NewGameScene.h" 11 | 12 | @implementation ViewController 13 | 14 | - (void)loadView 15 | { 16 | self.view = [[SKView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 17 | } 18 | 19 | - (void)viewDidLoad 20 | { 21 | [super viewDidLoad]; 22 | 23 | [self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; 24 | 25 | SKView *skView = (SKView *)[self view]; 26 | [skView setShowsFPS:YES]; 27 | [skView setShowsNodeCount:YES]; 28 | 29 | SKScene *scene = [NewGameScene sceneWithSize:skView.bounds.size]; 30 | [scene setScaleMode:SKSceneScaleModeAspectFill]; 31 | 32 | [skView presentScene:scene]; 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /FlapFlap/NewGameScene.m: -------------------------------------------------------------------------------- 1 | // 2 | // NewGameScene.m 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/9/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import "NewGameScene.h" 10 | #import "MainScene.h" 11 | 12 | @implementation NewGameScene { 13 | SKSpriteNode *_button; 14 | } 15 | 16 | - (id)initWithSize:(CGSize)size 17 | { 18 | if (self = [super initWithSize:size]) { 19 | [self setBackgroundColor:[SKColor colorWithRed:.61 green:.74 blue:.86 alpha:1]]; 20 | 21 | _button = [SKSpriteNode spriteNodeWithColor:[SKColor colorWithWhite:1 alpha:1] size:CGSizeMake(128, 32)]; 22 | [_button setPosition:CGPointMake(self.size.width/2, self.size.height/2)]; 23 | [self addChild:_button]; 24 | } 25 | return self; 26 | } 27 | 28 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 29 | { 30 | SKTransition *transition = [SKTransition doorsCloseHorizontalWithDuration:.4]; 31 | MainScene *main = [[MainScene alloc] initWithSize:self.size]; 32 | [self.scene.view presentScene:main transition:transition]; 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /FlapFlap/FlapFlap-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.nathanborror.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UIStatusBarHidden 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | 37 | UIViewControllerBasedStatusBarAppearance 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) Nathan Borror 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | 1. Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | 10 | 2. Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | 14 | 3. Neither the name of FlapFlap nor the names of its contributors may be used 15 | to endorse or promote products derived from this software without 16 | specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY 22 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /FlapFlap.xcodeproj/xcuserdata/nathan.xcuserdatad/xcschemes/FlapFlap.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 61 | 62 | 68 | 69 | 70 | 71 | 72 | 73 | 79 | 80 | 86 | 87 | 88 | 89 | 91 | 92 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /FlapFlap/MainScene.m: -------------------------------------------------------------------------------- 1 | // 2 | // MainScene.m 3 | // FlapFlap 4 | // 5 | // Created by Nathan Borror on 2/5/14. 6 | // Copyright (c) 2014 Nathan Borror. All rights reserved. 7 | // 8 | 9 | #import "MainScene.h" 10 | #import "NewGameScene.h" 11 | #import "Player.h" 12 | #import "Obstacle.h" 13 | 14 | static const uint32_t kPlayerCategory = 0x1 << 0; 15 | static const uint32_t kGroundCategory = 0x1 << 1; 16 | 17 | static const CGFloat kGravity = -10; 18 | static const CGFloat kDensity = 1.15; 19 | static const CGFloat kMaxVelocity = 400; 20 | 21 | static const CGFloat kPipeSpeed = 4; 22 | static const CGFloat kPipeWidth = 56.0; 23 | static const CGFloat kPipeGap = 130; 24 | static const CGFloat kPipeFrequency = 2; 25 | 26 | static const CGFloat kGroundHeight = 56.0; 27 | 28 | static const NSInteger kNumLevels = 20; 29 | 30 | NSString * const kTopPipeName = @"topPipe"; 31 | NSString * const kBottomPipeName = @"bottomPipe"; 32 | 33 | static const CGFloat randomFloat(CGFloat Min, CGFloat Max){ 34 | return floor(((rand() % RAND_MAX) / (RAND_MAX * 1.0)) * (Max - Min) + Min); 35 | } 36 | 37 | @implementation MainScene { 38 | Player *_player; 39 | SKSpriteNode *_ground; 40 | SKLabelNode *_scoreLabel; 41 | NSInteger _score; 42 | NSTimer *_pipeTimer; 43 | NSTimer *_scoreTimer; 44 | SKAction *_pipeSound; 45 | SKAction *_punchSound; 46 | } 47 | 48 | - (id)initWithSize:(CGSize)size 49 | { 50 | if (self = [super initWithSize:size]) { 51 | _score = 0; 52 | 53 | srand((time(nil) % kNumLevels)*10000); 54 | 55 | [self setBackgroundColor:[SKColor colorWithRed:.69 green:.84 blue:.97 alpha:1]]; 56 | 57 | [self.physicsWorld setGravity:CGVectorMake(0, kGravity)]; 58 | [self.physicsWorld setContactDelegate:self]; 59 | 60 | SKSpriteNode *cloud1 = [SKSpriteNode spriteNodeWithImageNamed:@"Cloud"]; 61 | [cloud1 setPosition:CGPointMake(100, self.size.height - (cloud1.size.height*3))]; 62 | [self addChild:cloud1]; 63 | 64 | SKSpriteNode *cloud2 = [SKSpriteNode spriteNodeWithImageNamed:@"Cloud"]; 65 | [cloud2 setPosition:CGPointMake(self.size.width - (cloud2.size.width/2) + 50, self.size.height - (cloud2.size.height*5))]; 66 | [self addChild:cloud2]; 67 | 68 | _ground = [SKSpriteNode spriteNodeWithImageNamed:@"Ground"]; 69 | [_ground setCenterRect:CGRectMake(26.0/kGroundHeight, 26.0/kGroundHeight, 4.0/kGroundHeight, 4.0/kGroundHeight)]; 70 | [_ground setXScale:self.size.width/kGroundHeight]; 71 | [_ground setPosition:CGPointMake(self.size.width/2, _ground.size.height/2)]; 72 | [self addChild:_ground]; 73 | 74 | _ground.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_ground.size]; 75 | [_ground.physicsBody setCategoryBitMask:kGroundCategory]; 76 | [_ground.physicsBody setCollisionBitMask:kPlayerCategory]; 77 | [_ground.physicsBody setAffectedByGravity:NO]; 78 | [_ground.physicsBody setDynamic:NO]; 79 | 80 | _scoreLabel = [[SKLabelNode alloc] initWithFontNamed:@"Helvetica"]; 81 | [_scoreLabel setPosition:CGPointMake(self.size.width/2, self.size.height-50)]; 82 | [_scoreLabel setText:[NSString stringWithFormat:@"%@", [NSNumber numberWithInteger:_score]]]; 83 | [_scoreLabel setZPosition:100]; 84 | [self addChild:_scoreLabel]; 85 | 86 | [self setupPlayer]; 87 | 88 | _pipeTimer = [NSTimer scheduledTimerWithTimeInterval:kPipeFrequency target:self selector:@selector(addObstacle) userInfo:nil repeats:YES]; 89 | 90 | [NSTimer scheduledTimerWithTimeInterval:kPipeFrequency target:self selector:@selector(startScoreTimer) userInfo:nil repeats:NO]; 91 | 92 | _pipeSound = [SKAction playSoundFileNamed:@"pipe.mp3" waitForCompletion:NO]; 93 | _punchSound = [SKAction playSoundFileNamed:@"punch3.mp3" waitForCompletion:NO]; 94 | } 95 | return self; 96 | } 97 | 98 | - (void)setupPlayer 99 | { 100 | _player = [Player spriteNodeWithColor:[SKColor colorWithWhite:1 alpha:1] size:CGSizeMake(32, 32)]; 101 | [_player setPosition:CGPointMake(self.size.width/2, self.size.height/2)]; 102 | [self addChild:_player]; 103 | 104 | _player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_player.size]; 105 | [_player.physicsBody setDensity:kDensity]; 106 | [_player.physicsBody setAllowsRotation:NO]; 107 | [_player.physicsBody setUsesPreciseCollisionDetection:YES]; 108 | 109 | [_player.physicsBody setCategoryBitMask:kPlayerCategory]; 110 | [_player.physicsBody setContactTestBitMask:kGroundCategory]; 111 | [_player.physicsBody setCollisionBitMask:kGroundCategory]; 112 | } 113 | 114 | - (void)addObstacle 115 | { 116 | CGFloat centerY = randomFloat(kPipeGap, self.size.height-kPipeGap); 117 | CGFloat pipeTopHeight = centerY - (kPipeGap/2); 118 | CGFloat pipeBottomHeight = self.size.height - (centerY + (kPipeGap/2)); 119 | 120 | // Top Pipe 121 | Obstacle *pipeTop = [Obstacle spriteNodeWithImageNamed:@"PipeTop"]; 122 | [pipeTop setCenterRect:CGRectMake(26.0/kPipeWidth, 26.0/kPipeWidth, 4.0/kPipeWidth, 4.0/kPipeWidth)]; 123 | [pipeTop setYScale:pipeTopHeight/kPipeWidth]; 124 | [pipeTop setPosition:CGPointMake(self.size.width+(pipeTop.size.width/2), self.size.height-(pipeTop.size.height/2))]; 125 | [pipeTop setName:kTopPipeName]; 126 | [pipeTop setZPosition:0]; 127 | [self addChild:pipeTop]; 128 | 129 | // Bottom Pipe 130 | Obstacle *pipeBottom = [Obstacle spriteNodeWithImageNamed:@"PipeBottom"]; 131 | [pipeBottom setCenterRect:CGRectMake(26.0/kPipeWidth, 26.0/kPipeWidth, 4.0/kPipeWidth, 4.0/kPipeWidth)]; 132 | [pipeBottom setYScale:(pipeBottomHeight-kGroundHeight)/kPipeWidth]; 133 | [pipeBottom setPosition:CGPointMake(self.size.width+(pipeBottom.size.width/2), (pipeBottom.size.height/2)+(kGroundHeight-2))]; 134 | [pipeBottom setName:kBottomPipeName]; 135 | [pipeBottom setZPosition:0]; 136 | [self addChild:pipeBottom]; 137 | 138 | // Move top pipe 139 | SKAction *pipeTopAction = [SKAction moveToX:-(pipeTop.size.width/2) duration:kPipeSpeed]; 140 | SKAction *pipeTopSequence = [SKAction sequence:@[pipeTopAction, [SKAction runBlock:^{ 141 | [pipeTop removeFromParent]; 142 | }]]]; 143 | 144 | [pipeTop runAction:[SKAction repeatActionForever:pipeTopSequence]]; 145 | 146 | // Move bottom pipe 147 | SKAction *pipeBottomAction = [SKAction moveToX:-(pipeBottom.size.width/2) duration:kPipeSpeed]; 148 | SKAction *pipeBottomSequence = [SKAction sequence:@[pipeBottomAction, [SKAction runBlock:^{ 149 | [pipeBottom removeFromParent]; 150 | }]]]; 151 | 152 | [pipeBottom runAction:[SKAction repeatActionForever:pipeBottomSequence]]; 153 | } 154 | 155 | - (void)startScoreTimer 156 | { 157 | _scoreTimer = [NSTimer scheduledTimerWithTimeInterval:kPipeFrequency target:self selector:@selector(incrementScore) userInfo:nil repeats:YES]; 158 | } 159 | 160 | - (void)incrementScore 161 | { 162 | _score++; 163 | [_scoreLabel setText:[NSString stringWithFormat:@"%@", [NSNumber numberWithInteger:_score]]]; 164 | [self runAction:_pipeSound]; 165 | } 166 | 167 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 168 | { 169 | [_player.physicsBody setVelocity:CGVectorMake(_player.physicsBody.velocity.dx, kMaxVelocity)]; 170 | } 171 | 172 | - (void)update:(NSTimeInterval)currentTime 173 | { 174 | SKNode *topPipe = [self childNodeWithName:kTopPipeName]; 175 | SKNode *bottomPipe = [self childNodeWithName:kBottomPipeName]; 176 | if (topPipe && bottomPipe) { 177 | if ([topPipe intersectsNode:_player] || [bottomPipe intersectsNode:_player]) { 178 | [self gameOver]; 179 | } 180 | } 181 | 182 | if (_player.physicsBody.velocity.dy > kMaxVelocity) { 183 | [_player.physicsBody setVelocity:CGVectorMake(_player.physicsBody.velocity.dx, kMaxVelocity)]; 184 | } 185 | } 186 | 187 | - (void)didBeginContact:(SKPhysicsContact *)contact 188 | { 189 | SKNode *node = contact.bodyA.node; 190 | if ([node isKindOfClass:[Player class]]) { 191 | [self gameOver]; 192 | } 193 | } 194 | 195 | - (void)gameOver 196 | { 197 | [_pipeTimer invalidate]; 198 | [_scoreTimer invalidate]; 199 | [self runAction:_punchSound completion:^{ 200 | SKTransition *transition = [SKTransition doorsCloseHorizontalWithDuration:.4]; 201 | NewGameScene *newGame = [[NewGameScene alloc] initWithSize:self.size]; 202 | [self.scene.view presentScene:newGame transition:transition]; 203 | }]; 204 | } 205 | 206 | @end 207 | -------------------------------------------------------------------------------- /FlapFlap.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | D891AAF018A701AD0067BB8C /* Player.m in Sources */ = {isa = PBXBuildFile; fileRef = D891AAEF18A701AD0067BB8C /* Player.m */; }; 11 | D891AAF318A701D40067BB8C /* Obstacle.m in Sources */ = {isa = PBXBuildFile; fileRef = D891AAF218A701D40067BB8C /* Obstacle.m */; }; 12 | D891AAF618A884D50067BB8C /* NewGameScene.m in Sources */ = {isa = PBXBuildFile; fileRef = D891AAF518A884D50067BB8C /* NewGameScene.m */; }; 13 | D8FCAA7418A2BB6B004B93C1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8FCAA7318A2BB6B004B93C1 /* Foundation.framework */; }; 14 | D8FCAA7618A2BB6B004B93C1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8FCAA7518A2BB6B004B93C1 /* CoreGraphics.framework */; }; 15 | D8FCAA7818A2BB6B004B93C1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8FCAA7718A2BB6B004B93C1 /* UIKit.framework */; }; 16 | D8FCAA7E18A2BB6B004B93C1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D8FCAA7C18A2BB6B004B93C1 /* InfoPlist.strings */; }; 17 | D8FCAA8018A2BB6B004B93C1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FCAA7F18A2BB6B004B93C1 /* main.m */; }; 18 | D8FCAA8418A2BB6B004B93C1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FCAA8318A2BB6B004B93C1 /* AppDelegate.m */; }; 19 | D8FCAA8618A2BB6B004B93C1 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D8FCAA8518A2BB6B004B93C1 /* Images.xcassets */; }; 20 | D8FCAA8D18A2BB6B004B93C1 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8FCAA8C18A2BB6B004B93C1 /* XCTest.framework */; }; 21 | D8FCAA8E18A2BB6B004B93C1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8FCAA7318A2BB6B004B93C1 /* Foundation.framework */; }; 22 | D8FCAA8F18A2BB6B004B93C1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8FCAA7718A2BB6B004B93C1 /* UIKit.framework */; }; 23 | D8FCAA9718A2BB6B004B93C1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D8FCAA9518A2BB6B004B93C1 /* InfoPlist.strings */; }; 24 | D8FCAA9918A2BB6B004B93C1 /* FlapFlapTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FCAA9818A2BB6B004B93C1 /* FlapFlapTests.m */; }; 25 | D8FCAAA418A2BB96004B93C1 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FCAAA318A2BB96004B93C1 /* ViewController.m */; }; 26 | D8FCAAA618A2BBE0004B93C1 /* SpriteKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8FCAAA518A2BBE0004B93C1 /* SpriteKit.framework */; }; 27 | D8FCAAAC18A2BC1D004B93C1 /* MainScene.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FCAAAB18A2BC1D004B93C1 /* MainScene.m */; }; 28 | D8FCAAAF18A2C73D004B93C1 /* Exhaust.sks in Resources */ = {isa = PBXBuildFile; fileRef = D8FCAAAD18A2C73D004B93C1 /* Exhaust.sks */; }; 29 | D8FCAAB018A2C73D004B93C1 /* spark.png in Resources */ = {isa = PBXBuildFile; fileRef = D8FCAAAE18A2C73D004B93C1 /* spark.png */; }; 30 | D8FCAAB818A2CEA1004B93C1 /* Spark.sks in Resources */ = {isa = PBXBuildFile; fileRef = D8FCAAB718A2CEA1004B93C1 /* Spark.sks */; }; 31 | DC90502218A88B4D00AAA08A /* pipe.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = DC90502018A88B4D00AAA08A /* pipe.mp3 */; }; 32 | DC90502318A88B4D00AAA08A /* punch.wav in Resources */ = {isa = PBXBuildFile; fileRef = DC90502118A88B4D00AAA08A /* punch.wav */; }; 33 | DC90502518A88CC800AAA08A /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC90502418A88CC800AAA08A /* AVFoundation.framework */; }; 34 | DC90502718A8999100AAA08A /* punch2.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = DC90502618A8999100AAA08A /* punch2.mp3 */; }; 35 | DC90502918A89ADA00AAA08A /* punch3.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = DC90502818A89ADA00AAA08A /* punch3.mp3 */; }; 36 | /* End PBXBuildFile section */ 37 | 38 | /* Begin PBXContainerItemProxy section */ 39 | D8FCAA9018A2BB6B004B93C1 /* PBXContainerItemProxy */ = { 40 | isa = PBXContainerItemProxy; 41 | containerPortal = D8FCAA6818A2BB6B004B93C1 /* Project object */; 42 | proxyType = 1; 43 | remoteGlobalIDString = D8FCAA6F18A2BB6B004B93C1; 44 | remoteInfo = FlapFlap; 45 | }; 46 | /* End PBXContainerItemProxy section */ 47 | 48 | /* Begin PBXFileReference section */ 49 | D891AAEE18A701AD0067BB8C /* Player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Player.h; sourceTree = ""; }; 50 | D891AAEF18A701AD0067BB8C /* Player.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Player.m; sourceTree = ""; }; 51 | D891AAF118A701D40067BB8C /* Obstacle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Obstacle.h; sourceTree = ""; }; 52 | D891AAF218A701D40067BB8C /* Obstacle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Obstacle.m; sourceTree = ""; }; 53 | D891AAF418A884D50067BB8C /* NewGameScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewGameScene.h; sourceTree = ""; }; 54 | D891AAF518A884D50067BB8C /* NewGameScene.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewGameScene.m; sourceTree = ""; }; 55 | D8FCAA7018A2BB6B004B93C1 /* FlapFlap.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FlapFlap.app; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | D8FCAA7318A2BB6B004B93C1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 57 | D8FCAA7518A2BB6B004B93C1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 58 | D8FCAA7718A2BB6B004B93C1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 59 | D8FCAA7B18A2BB6B004B93C1 /* FlapFlap-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "FlapFlap-Info.plist"; sourceTree = ""; }; 60 | D8FCAA7D18A2BB6B004B93C1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 61 | D8FCAA7F18A2BB6B004B93C1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 62 | D8FCAA8118A2BB6B004B93C1 /* FlapFlap-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "FlapFlap-Prefix.pch"; sourceTree = ""; }; 63 | D8FCAA8218A2BB6B004B93C1 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 64 | D8FCAA8318A2BB6B004B93C1 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 65 | D8FCAA8518A2BB6B004B93C1 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 66 | D8FCAA8B18A2BB6B004B93C1 /* FlapFlapTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FlapFlapTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 67 | D8FCAA8C18A2BB6B004B93C1 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 68 | D8FCAA9418A2BB6B004B93C1 /* FlapFlapTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "FlapFlapTests-Info.plist"; sourceTree = ""; }; 69 | D8FCAA9618A2BB6B004B93C1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 70 | D8FCAA9818A2BB6B004B93C1 /* FlapFlapTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FlapFlapTests.m; sourceTree = ""; }; 71 | D8FCAAA218A2BB96004B93C1 /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 72 | D8FCAAA318A2BB96004B93C1 /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 73 | D8FCAAA518A2BBE0004B93C1 /* SpriteKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SpriteKit.framework; path = System/Library/Frameworks/SpriteKit.framework; sourceTree = SDKROOT; }; 74 | D8FCAAAA18A2BC1D004B93C1 /* MainScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainScene.h; sourceTree = ""; }; 75 | D8FCAAAB18A2BC1D004B93C1 /* MainScene.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainScene.m; sourceTree = ""; }; 76 | D8FCAAAD18A2C73D004B93C1 /* Exhaust.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = Exhaust.sks; sourceTree = ""; }; 77 | D8FCAAAE18A2C73D004B93C1 /* spark.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = spark.png; sourceTree = ""; }; 78 | D8FCAAB718A2CEA1004B93C1 /* Spark.sks */ = {isa = PBXFileReference; lastKnownFileType = file.sks; path = Spark.sks; sourceTree = ""; }; 79 | DC90502018A88B4D00AAA08A /* pipe.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = pipe.mp3; path = Sounds/pipe.mp3; sourceTree = ""; }; 80 | DC90502118A88B4D00AAA08A /* punch.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = punch.wav; path = Sounds/punch.wav; sourceTree = ""; }; 81 | DC90502418A88CC800AAA08A /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; 82 | DC90502618A8999100AAA08A /* punch2.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = punch2.mp3; path = Sounds/punch2.mp3; sourceTree = ""; }; 83 | DC90502818A89ADA00AAA08A /* punch3.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = punch3.mp3; path = Sounds/punch3.mp3; sourceTree = ""; }; 84 | /* End PBXFileReference section */ 85 | 86 | /* Begin PBXFrameworksBuildPhase section */ 87 | D8FCAA6D18A2BB6B004B93C1 /* Frameworks */ = { 88 | isa = PBXFrameworksBuildPhase; 89 | buildActionMask = 2147483647; 90 | files = ( 91 | DC90502518A88CC800AAA08A /* AVFoundation.framework in Frameworks */, 92 | D8FCAAA618A2BBE0004B93C1 /* SpriteKit.framework in Frameworks */, 93 | D8FCAA7618A2BB6B004B93C1 /* CoreGraphics.framework in Frameworks */, 94 | D8FCAA7818A2BB6B004B93C1 /* UIKit.framework in Frameworks */, 95 | D8FCAA7418A2BB6B004B93C1 /* Foundation.framework in Frameworks */, 96 | ); 97 | runOnlyForDeploymentPostprocessing = 0; 98 | }; 99 | D8FCAA8818A2BB6B004B93C1 /* Frameworks */ = { 100 | isa = PBXFrameworksBuildPhase; 101 | buildActionMask = 2147483647; 102 | files = ( 103 | D8FCAA8D18A2BB6B004B93C1 /* XCTest.framework in Frameworks */, 104 | D8FCAA8F18A2BB6B004B93C1 /* UIKit.framework in Frameworks */, 105 | D8FCAA8E18A2BB6B004B93C1 /* Foundation.framework in Frameworks */, 106 | ); 107 | runOnlyForDeploymentPostprocessing = 0; 108 | }; 109 | /* End PBXFrameworksBuildPhase section */ 110 | 111 | /* Begin PBXGroup section */ 112 | D891AAED18A701810067BB8C /* Game Elements */ = { 113 | isa = PBXGroup; 114 | children = ( 115 | D891AAEE18A701AD0067BB8C /* Player.h */, 116 | D891AAEF18A701AD0067BB8C /* Player.m */, 117 | D891AAF118A701D40067BB8C /* Obstacle.h */, 118 | D891AAF218A701D40067BB8C /* Obstacle.m */, 119 | ); 120 | name = "Game Elements"; 121 | sourceTree = ""; 122 | }; 123 | D8FCAA6718A2BB6B004B93C1 = { 124 | isa = PBXGroup; 125 | children = ( 126 | D8FCAA7918A2BB6B004B93C1 /* FlapFlap */, 127 | D8FCAA9218A2BB6B004B93C1 /* FlapFlapTests */, 128 | D8FCAA7218A2BB6B004B93C1 /* Frameworks */, 129 | D8FCAA7118A2BB6B004B93C1 /* Products */, 130 | ); 131 | sourceTree = ""; 132 | }; 133 | D8FCAA7118A2BB6B004B93C1 /* Products */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | D8FCAA7018A2BB6B004B93C1 /* FlapFlap.app */, 137 | D8FCAA8B18A2BB6B004B93C1 /* FlapFlapTests.xctest */, 138 | ); 139 | name = Products; 140 | sourceTree = ""; 141 | }; 142 | D8FCAA7218A2BB6B004B93C1 /* Frameworks */ = { 143 | isa = PBXGroup; 144 | children = ( 145 | DC90502418A88CC800AAA08A /* AVFoundation.framework */, 146 | D8FCAAA518A2BBE0004B93C1 /* SpriteKit.framework */, 147 | D8FCAA7318A2BB6B004B93C1 /* Foundation.framework */, 148 | D8FCAA7518A2BB6B004B93C1 /* CoreGraphics.framework */, 149 | D8FCAA7718A2BB6B004B93C1 /* UIKit.framework */, 150 | D8FCAA8C18A2BB6B004B93C1 /* XCTest.framework */, 151 | ); 152 | name = Frameworks; 153 | sourceTree = ""; 154 | }; 155 | D8FCAA7918A2BB6B004B93C1 /* FlapFlap */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | D891AAED18A701810067BB8C /* Game Elements */, 159 | D8FCAA8218A2BB6B004B93C1 /* AppDelegate.h */, 160 | D8FCAA8318A2BB6B004B93C1 /* AppDelegate.m */, 161 | D8FCAA8518A2BB6B004B93C1 /* Images.xcassets */, 162 | D8FCAA7A18A2BB6B004B93C1 /* Supporting Files */, 163 | D8FCAAA218A2BB96004B93C1 /* ViewController.h */, 164 | D8FCAAA318A2BB96004B93C1 /* ViewController.m */, 165 | D8FCAAAA18A2BC1D004B93C1 /* MainScene.h */, 166 | D8FCAAAB18A2BC1D004B93C1 /* MainScene.m */, 167 | D891AAF418A884D50067BB8C /* NewGameScene.h */, 168 | D891AAF518A884D50067BB8C /* NewGameScene.m */, 169 | DC90501F18A88B2600AAA08A /* Sounds */, 170 | D8FCAABB18A2EA22004B93C1 /* Resources */, 171 | ); 172 | path = FlapFlap; 173 | sourceTree = ""; 174 | }; 175 | D8FCAA7A18A2BB6B004B93C1 /* Supporting Files */ = { 176 | isa = PBXGroup; 177 | children = ( 178 | D8FCAA7B18A2BB6B004B93C1 /* FlapFlap-Info.plist */, 179 | D8FCAA7C18A2BB6B004B93C1 /* InfoPlist.strings */, 180 | D8FCAA7F18A2BB6B004B93C1 /* main.m */, 181 | D8FCAA8118A2BB6B004B93C1 /* FlapFlap-Prefix.pch */, 182 | ); 183 | name = "Supporting Files"; 184 | sourceTree = ""; 185 | }; 186 | D8FCAA9218A2BB6B004B93C1 /* FlapFlapTests */ = { 187 | isa = PBXGroup; 188 | children = ( 189 | D8FCAA9818A2BB6B004B93C1 /* FlapFlapTests.m */, 190 | D8FCAA9318A2BB6B004B93C1 /* Supporting Files */, 191 | ); 192 | path = FlapFlapTests; 193 | sourceTree = ""; 194 | }; 195 | D8FCAA9318A2BB6B004B93C1 /* Supporting Files */ = { 196 | isa = PBXGroup; 197 | children = ( 198 | D8FCAA9418A2BB6B004B93C1 /* FlapFlapTests-Info.plist */, 199 | D8FCAA9518A2BB6B004B93C1 /* InfoPlist.strings */, 200 | ); 201 | name = "Supporting Files"; 202 | sourceTree = ""; 203 | }; 204 | D8FCAABB18A2EA22004B93C1 /* Resources */ = { 205 | isa = PBXGroup; 206 | children = ( 207 | D8FCAAAD18A2C73D004B93C1 /* Exhaust.sks */, 208 | D8FCAAAE18A2C73D004B93C1 /* spark.png */, 209 | D8FCAAB718A2CEA1004B93C1 /* Spark.sks */, 210 | ); 211 | name = Resources; 212 | sourceTree = ""; 213 | }; 214 | DC90501F18A88B2600AAA08A /* Sounds */ = { 215 | isa = PBXGroup; 216 | children = ( 217 | DC90502818A89ADA00AAA08A /* punch3.mp3 */, 218 | DC90502618A8999100AAA08A /* punch2.mp3 */, 219 | DC90502018A88B4D00AAA08A /* pipe.mp3 */, 220 | DC90502118A88B4D00AAA08A /* punch.wav */, 221 | ); 222 | name = Sounds; 223 | sourceTree = ""; 224 | }; 225 | /* End PBXGroup section */ 226 | 227 | /* Begin PBXNativeTarget section */ 228 | D8FCAA6F18A2BB6B004B93C1 /* FlapFlap */ = { 229 | isa = PBXNativeTarget; 230 | buildConfigurationList = D8FCAA9C18A2BB6B004B93C1 /* Build configuration list for PBXNativeTarget "FlapFlap" */; 231 | buildPhases = ( 232 | D8FCAA6C18A2BB6B004B93C1 /* Sources */, 233 | D8FCAA6D18A2BB6B004B93C1 /* Frameworks */, 234 | D8FCAA6E18A2BB6B004B93C1 /* Resources */, 235 | ); 236 | buildRules = ( 237 | ); 238 | dependencies = ( 239 | ); 240 | name = FlapFlap; 241 | productName = FlapFlap; 242 | productReference = D8FCAA7018A2BB6B004B93C1 /* FlapFlap.app */; 243 | productType = "com.apple.product-type.application"; 244 | }; 245 | D8FCAA8A18A2BB6B004B93C1 /* FlapFlapTests */ = { 246 | isa = PBXNativeTarget; 247 | buildConfigurationList = D8FCAA9F18A2BB6B004B93C1 /* Build configuration list for PBXNativeTarget "FlapFlapTests" */; 248 | buildPhases = ( 249 | D8FCAA8718A2BB6B004B93C1 /* Sources */, 250 | D8FCAA8818A2BB6B004B93C1 /* Frameworks */, 251 | D8FCAA8918A2BB6B004B93C1 /* Resources */, 252 | ); 253 | buildRules = ( 254 | ); 255 | dependencies = ( 256 | D8FCAA9118A2BB6B004B93C1 /* PBXTargetDependency */, 257 | ); 258 | name = FlapFlapTests; 259 | productName = FlapFlapTests; 260 | productReference = D8FCAA8B18A2BB6B004B93C1 /* FlapFlapTests.xctest */; 261 | productType = "com.apple.product-type.bundle.unit-test"; 262 | }; 263 | /* End PBXNativeTarget section */ 264 | 265 | /* Begin PBXProject section */ 266 | D8FCAA6818A2BB6B004B93C1 /* Project object */ = { 267 | isa = PBXProject; 268 | attributes = { 269 | LastUpgradeCheck = 0500; 270 | ORGANIZATIONNAME = "Nathan Borror"; 271 | TargetAttributes = { 272 | D8FCAA8A18A2BB6B004B93C1 = { 273 | TestTargetID = D8FCAA6F18A2BB6B004B93C1; 274 | }; 275 | }; 276 | }; 277 | buildConfigurationList = D8FCAA6B18A2BB6B004B93C1 /* Build configuration list for PBXProject "FlapFlap" */; 278 | compatibilityVersion = "Xcode 3.2"; 279 | developmentRegion = English; 280 | hasScannedForEncodings = 0; 281 | knownRegions = ( 282 | en, 283 | ); 284 | mainGroup = D8FCAA6718A2BB6B004B93C1; 285 | productRefGroup = D8FCAA7118A2BB6B004B93C1 /* Products */; 286 | projectDirPath = ""; 287 | projectRoot = ""; 288 | targets = ( 289 | D8FCAA6F18A2BB6B004B93C1 /* FlapFlap */, 290 | D8FCAA8A18A2BB6B004B93C1 /* FlapFlapTests */, 291 | ); 292 | }; 293 | /* End PBXProject section */ 294 | 295 | /* Begin PBXResourcesBuildPhase section */ 296 | D8FCAA6E18A2BB6B004B93C1 /* Resources */ = { 297 | isa = PBXResourcesBuildPhase; 298 | buildActionMask = 2147483647; 299 | files = ( 300 | DC90502718A8999100AAA08A /* punch2.mp3 in Resources */, 301 | D8FCAAAF18A2C73D004B93C1 /* Exhaust.sks in Resources */, 302 | D8FCAAB018A2C73D004B93C1 /* spark.png in Resources */, 303 | DC90502218A88B4D00AAA08A /* pipe.mp3 in Resources */, 304 | DC90502918A89ADA00AAA08A /* punch3.mp3 in Resources */, 305 | D8FCAA7E18A2BB6B004B93C1 /* InfoPlist.strings in Resources */, 306 | D8FCAA8618A2BB6B004B93C1 /* Images.xcassets in Resources */, 307 | DC90502318A88B4D00AAA08A /* punch.wav in Resources */, 308 | D8FCAAB818A2CEA1004B93C1 /* Spark.sks in Resources */, 309 | ); 310 | runOnlyForDeploymentPostprocessing = 0; 311 | }; 312 | D8FCAA8918A2BB6B004B93C1 /* Resources */ = { 313 | isa = PBXResourcesBuildPhase; 314 | buildActionMask = 2147483647; 315 | files = ( 316 | D8FCAA9718A2BB6B004B93C1 /* InfoPlist.strings in Resources */, 317 | ); 318 | runOnlyForDeploymentPostprocessing = 0; 319 | }; 320 | /* End PBXResourcesBuildPhase section */ 321 | 322 | /* Begin PBXSourcesBuildPhase section */ 323 | D8FCAA6C18A2BB6B004B93C1 /* Sources */ = { 324 | isa = PBXSourcesBuildPhase; 325 | buildActionMask = 2147483647; 326 | files = ( 327 | D891AAF618A884D50067BB8C /* NewGameScene.m in Sources */, 328 | D8FCAAA418A2BB96004B93C1 /* ViewController.m in Sources */, 329 | D8FCAAAC18A2BC1D004B93C1 /* MainScene.m in Sources */, 330 | D8FCAA8418A2BB6B004B93C1 /* AppDelegate.m in Sources */, 331 | D8FCAA8018A2BB6B004B93C1 /* main.m in Sources */, 332 | D891AAF318A701D40067BB8C /* Obstacle.m in Sources */, 333 | D891AAF018A701AD0067BB8C /* Player.m in Sources */, 334 | ); 335 | runOnlyForDeploymentPostprocessing = 0; 336 | }; 337 | D8FCAA8718A2BB6B004B93C1 /* Sources */ = { 338 | isa = PBXSourcesBuildPhase; 339 | buildActionMask = 2147483647; 340 | files = ( 341 | D8FCAA9918A2BB6B004B93C1 /* FlapFlapTests.m in Sources */, 342 | ); 343 | runOnlyForDeploymentPostprocessing = 0; 344 | }; 345 | /* End PBXSourcesBuildPhase section */ 346 | 347 | /* Begin PBXTargetDependency section */ 348 | D8FCAA9118A2BB6B004B93C1 /* PBXTargetDependency */ = { 349 | isa = PBXTargetDependency; 350 | target = D8FCAA6F18A2BB6B004B93C1 /* FlapFlap */; 351 | targetProxy = D8FCAA9018A2BB6B004B93C1 /* PBXContainerItemProxy */; 352 | }; 353 | /* End PBXTargetDependency section */ 354 | 355 | /* Begin PBXVariantGroup section */ 356 | D8FCAA7C18A2BB6B004B93C1 /* InfoPlist.strings */ = { 357 | isa = PBXVariantGroup; 358 | children = ( 359 | D8FCAA7D18A2BB6B004B93C1 /* en */, 360 | ); 361 | name = InfoPlist.strings; 362 | sourceTree = ""; 363 | }; 364 | D8FCAA9518A2BB6B004B93C1 /* InfoPlist.strings */ = { 365 | isa = PBXVariantGroup; 366 | children = ( 367 | D8FCAA9618A2BB6B004B93C1 /* en */, 368 | ); 369 | name = InfoPlist.strings; 370 | sourceTree = ""; 371 | }; 372 | /* End PBXVariantGroup section */ 373 | 374 | /* Begin XCBuildConfiguration section */ 375 | D8FCAA9A18A2BB6B004B93C1 /* Debug */ = { 376 | isa = XCBuildConfiguration; 377 | buildSettings = { 378 | ALWAYS_SEARCH_USER_PATHS = NO; 379 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 380 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 381 | CLANG_CXX_LIBRARY = "libc++"; 382 | CLANG_ENABLE_MODULES = YES; 383 | CLANG_ENABLE_OBJC_ARC = YES; 384 | CLANG_WARN_BOOL_CONVERSION = YES; 385 | CLANG_WARN_CONSTANT_CONVERSION = YES; 386 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 387 | CLANG_WARN_EMPTY_BODY = YES; 388 | CLANG_WARN_ENUM_CONVERSION = YES; 389 | CLANG_WARN_INT_CONVERSION = YES; 390 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 391 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 392 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 393 | COPY_PHASE_STRIP = NO; 394 | GCC_C_LANGUAGE_STANDARD = gnu99; 395 | GCC_DYNAMIC_NO_PIC = NO; 396 | GCC_OPTIMIZATION_LEVEL = 0; 397 | GCC_PREPROCESSOR_DEFINITIONS = ( 398 | "DEBUG=1", 399 | "$(inherited)", 400 | ); 401 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 402 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 403 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 404 | GCC_WARN_UNDECLARED_SELECTOR = YES; 405 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 406 | GCC_WARN_UNUSED_FUNCTION = YES; 407 | GCC_WARN_UNUSED_VARIABLE = YES; 408 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 409 | ONLY_ACTIVE_ARCH = YES; 410 | SDKROOT = iphoneos; 411 | }; 412 | name = Debug; 413 | }; 414 | D8FCAA9B18A2BB6B004B93C1 /* Release */ = { 415 | isa = XCBuildConfiguration; 416 | buildSettings = { 417 | ALWAYS_SEARCH_USER_PATHS = NO; 418 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 419 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 420 | CLANG_CXX_LIBRARY = "libc++"; 421 | CLANG_ENABLE_MODULES = YES; 422 | CLANG_ENABLE_OBJC_ARC = YES; 423 | CLANG_WARN_BOOL_CONVERSION = YES; 424 | CLANG_WARN_CONSTANT_CONVERSION = YES; 425 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 426 | CLANG_WARN_EMPTY_BODY = YES; 427 | CLANG_WARN_ENUM_CONVERSION = YES; 428 | CLANG_WARN_INT_CONVERSION = YES; 429 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 430 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 431 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 432 | COPY_PHASE_STRIP = YES; 433 | ENABLE_NS_ASSERTIONS = NO; 434 | GCC_C_LANGUAGE_STANDARD = gnu99; 435 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 436 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 437 | GCC_WARN_UNDECLARED_SELECTOR = YES; 438 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 439 | GCC_WARN_UNUSED_FUNCTION = YES; 440 | GCC_WARN_UNUSED_VARIABLE = YES; 441 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 442 | SDKROOT = iphoneos; 443 | VALIDATE_PRODUCT = YES; 444 | }; 445 | name = Release; 446 | }; 447 | D8FCAA9D18A2BB6B004B93C1 /* Debug */ = { 448 | isa = XCBuildConfiguration; 449 | buildSettings = { 450 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 451 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 452 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 453 | GCC_PREFIX_HEADER = "FlapFlap/FlapFlap-Prefix.pch"; 454 | INFOPLIST_FILE = "FlapFlap/FlapFlap-Info.plist"; 455 | PRODUCT_NAME = "$(TARGET_NAME)"; 456 | WRAPPER_EXTENSION = app; 457 | }; 458 | name = Debug; 459 | }; 460 | D8FCAA9E18A2BB6B004B93C1 /* Release */ = { 461 | isa = XCBuildConfiguration; 462 | buildSettings = { 463 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 464 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 465 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 466 | GCC_PREFIX_HEADER = "FlapFlap/FlapFlap-Prefix.pch"; 467 | INFOPLIST_FILE = "FlapFlap/FlapFlap-Info.plist"; 468 | PRODUCT_NAME = "$(TARGET_NAME)"; 469 | WRAPPER_EXTENSION = app; 470 | }; 471 | name = Release; 472 | }; 473 | D8FCAAA018A2BB6B004B93C1 /* Debug */ = { 474 | isa = XCBuildConfiguration; 475 | buildSettings = { 476 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 477 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/FlapFlap.app/FlapFlap"; 478 | FRAMEWORK_SEARCH_PATHS = ( 479 | "$(SDKROOT)/Developer/Library/Frameworks", 480 | "$(inherited)", 481 | "$(DEVELOPER_FRAMEWORKS_DIR)", 482 | ); 483 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 484 | GCC_PREFIX_HEADER = "FlapFlap/FlapFlap-Prefix.pch"; 485 | GCC_PREPROCESSOR_DEFINITIONS = ( 486 | "DEBUG=1", 487 | "$(inherited)", 488 | ); 489 | INFOPLIST_FILE = "FlapFlapTests/FlapFlapTests-Info.plist"; 490 | PRODUCT_NAME = "$(TARGET_NAME)"; 491 | TEST_HOST = "$(BUNDLE_LOADER)"; 492 | WRAPPER_EXTENSION = xctest; 493 | }; 494 | name = Debug; 495 | }; 496 | D8FCAAA118A2BB6B004B93C1 /* Release */ = { 497 | isa = XCBuildConfiguration; 498 | buildSettings = { 499 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 500 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/FlapFlap.app/FlapFlap"; 501 | FRAMEWORK_SEARCH_PATHS = ( 502 | "$(SDKROOT)/Developer/Library/Frameworks", 503 | "$(inherited)", 504 | "$(DEVELOPER_FRAMEWORKS_DIR)", 505 | ); 506 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 507 | GCC_PREFIX_HEADER = "FlapFlap/FlapFlap-Prefix.pch"; 508 | INFOPLIST_FILE = "FlapFlapTests/FlapFlapTests-Info.plist"; 509 | PRODUCT_NAME = "$(TARGET_NAME)"; 510 | TEST_HOST = "$(BUNDLE_LOADER)"; 511 | WRAPPER_EXTENSION = xctest; 512 | }; 513 | name = Release; 514 | }; 515 | /* End XCBuildConfiguration section */ 516 | 517 | /* Begin XCConfigurationList section */ 518 | D8FCAA6B18A2BB6B004B93C1 /* Build configuration list for PBXProject "FlapFlap" */ = { 519 | isa = XCConfigurationList; 520 | buildConfigurations = ( 521 | D8FCAA9A18A2BB6B004B93C1 /* Debug */, 522 | D8FCAA9B18A2BB6B004B93C1 /* Release */, 523 | ); 524 | defaultConfigurationIsVisible = 0; 525 | defaultConfigurationName = Release; 526 | }; 527 | D8FCAA9C18A2BB6B004B93C1 /* Build configuration list for PBXNativeTarget "FlapFlap" */ = { 528 | isa = XCConfigurationList; 529 | buildConfigurations = ( 530 | D8FCAA9D18A2BB6B004B93C1 /* Debug */, 531 | D8FCAA9E18A2BB6B004B93C1 /* Release */, 532 | ); 533 | defaultConfigurationIsVisible = 0; 534 | defaultConfigurationName = Release; 535 | }; 536 | D8FCAA9F18A2BB6B004B93C1 /* Build configuration list for PBXNativeTarget "FlapFlapTests" */ = { 537 | isa = XCConfigurationList; 538 | buildConfigurations = ( 539 | D8FCAAA018A2BB6B004B93C1 /* Debug */, 540 | D8FCAAA118A2BB6B004B93C1 /* Release */, 541 | ); 542 | defaultConfigurationIsVisible = 0; 543 | defaultConfigurationName = Release; 544 | }; 545 | /* End XCConfigurationList section */ 546 | }; 547 | rootObject = D8FCAA6818A2BB6B004B93C1 /* Project object */; 548 | } 549 | --------------------------------------------------------------------------------