├── 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 | 
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------