├── TransitionBug
├── en.lproj
│ └── InfoPlist.strings
├── BCViewController.h
├── BCAppDelegate.h
├── BCTransition.h
├── main.m
├── TransitionBug-Prefix.pch
├── Images.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── LaunchImage.launchimage
│ │ └── Contents.json
├── TransitionBug-Info.plist
├── BCAppDelegate.m
├── BCViewController.m
└── BCTransition.m
├── TransitionBugTests
├── en.lproj
│ └── InfoPlist.strings
├── TransitionBugTests-Info.plist
└── TransitionBugTests.m
├── TransitionBug.xcodeproj
├── xcuserdata
│ └── bcherry.xcuserdatad
│ │ ├── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ ├── xcschememanagement.plist
│ │ └── TransitionBug.xcscheme
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── project.pbxproj
└── README.md
/TransitionBug/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/TransitionBugTests/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/TransitionBug.xcodeproj/xcuserdata/bcherry.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/TransitionBug.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/TransitionBug/BCViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // BCViewController.h
3 | // TransitionBug
4 | //
5 | // Created by Ben Cherry on 8/8/14.
6 | // Copyright (c) 2014 Ben Cherry. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface BCViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/TransitionBug/BCAppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // BCAppDelegate.h
3 | // TransitionBug
4 | //
5 | // Created by Ben Cherry on 8/8/14.
6 | // Copyright (c) 2014 Ben Cherry. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface BCAppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/TransitionBug/BCTransition.h:
--------------------------------------------------------------------------------
1 | //
2 | // BCTransition.h
3 | // TransitionBug
4 | //
5 | // Created by Ben Cherry on 8/8/14.
6 | // Copyright (c) 2014 Ben Cherry. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface BCTransition : NSObject
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/TransitionBug/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // TransitionBug
4 | //
5 | // Created by Ben Cherry on 8/8/14.
6 | // Copyright (c) 2014 Ben Cherry. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import "BCAppDelegate.h"
12 |
13 | int main(int argc, char * argv[])
14 | {
15 | @autoreleasepool {
16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([BCAppDelegate class]));
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/TransitionBug/TransitionBug-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 |
--------------------------------------------------------------------------------
/TransitionBug/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 | }
--------------------------------------------------------------------------------
/TransitionBug/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 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | TransitionBug
2 | =============
3 |
4 | This project demonstrates an apparent bug in iOS8 betas.
5 |
6 | Run the project with Xcode 6. It should present a simple interface for pushing on new modal controllers, and then dismissing them.
7 |
8 | The transition animation runs by sliding off the current controller to reveal a new one underneath.
9 |
10 | In iOS8, the animation fails, although it succeeds in iOS7. This is because, in iOS8, the `viewForKey:` method always returns `nil` for the currently presented view in a modal transition. In iOS7, you instead use the `.view` property on the view controller. If you try this in iOS8, the view hierarchy will be broken following dismissal.
11 |
--------------------------------------------------------------------------------
/TransitionBug.xcodeproj/xcuserdata/bcherry.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | TransitionBug.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | 6AE657BA1995446C0044B325
16 |
17 | primary
18 |
19 |
20 | 6AE657D51995446D0044B325
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/TransitionBugTests/TransitionBugTests-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | com.bcherry.${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 |
--------------------------------------------------------------------------------
/TransitionBugTests/TransitionBugTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // TransitionBugTests.m
3 | // TransitionBugTests
4 | //
5 | // Created by Ben Cherry on 8/8/14.
6 | // Copyright (c) 2014 Ben Cherry. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface TransitionBugTests : XCTestCase
12 |
13 | @end
14 |
15 | @implementation TransitionBugTests
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 |
--------------------------------------------------------------------------------
/TransitionBug/TransitionBug-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | ${PRODUCT_NAME}
9 | CFBundleExecutable
10 | ${EXECUTABLE_NAME}
11 | CFBundleIdentifier
12 | com.bcherry.${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 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/TransitionBug/BCAppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // BCAppDelegate.m
3 | // TransitionBug
4 | //
5 | // Created by Ben Cherry on 8/8/14.
6 | // Copyright (c) 2014 Ben Cherry. All rights reserved.
7 | //
8 |
9 | #import "BCAppDelegate.h"
10 | #import "BCViewController.h"
11 |
12 | @implementation BCAppDelegate
13 |
14 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
15 | {
16 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
17 | // Override point for customization after application launch.
18 | self.window.backgroundColor = [UIColor whiteColor];
19 | [self.window makeKeyAndVisible];
20 |
21 | BCViewController *vc = [BCViewController new];
22 | self.window.rootViewController = vc;
23 |
24 | return YES;
25 | }
26 |
27 | - (void)applicationWillResignActive:(UIApplication *)application
28 | {
29 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
30 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
31 | }
32 |
33 | - (void)applicationDidEnterBackground:(UIApplication *)application
34 | {
35 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
36 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
37 | }
38 |
39 | - (void)applicationWillEnterForeground:(UIApplication *)application
40 | {
41 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
42 | }
43 |
44 | - (void)applicationDidBecomeActive:(UIApplication *)application
45 | {
46 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
47 | }
48 |
49 | - (void)applicationWillTerminate:(UIApplication *)application
50 | {
51 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
52 | }
53 |
54 | @end
55 |
--------------------------------------------------------------------------------
/TransitionBug/BCViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // BCViewController.m
3 | // TransitionBug
4 | //
5 | // Created by Ben Cherry on 8/8/14.
6 | // Copyright (c) 2014 Ben Cherry. All rights reserved.
7 | //
8 |
9 | #import "BCViewController.h"
10 | #import "BCTransition.h"
11 |
12 | @interface BCViewController ()
13 |
14 | @property (nonatomic, strong) BCTransition *transition;
15 |
16 | @end
17 |
18 | @implementation BCViewController
19 |
20 | - (void)viewDidLoad
21 | {
22 | [super viewDidLoad];
23 |
24 | self.transition = [BCTransition new];
25 |
26 | self.view.backgroundColor = [self generateBackgroundColor];
27 |
28 | UIButton *presentButton = [UIButton buttonWithType:UIButtonTypeSystem];
29 | presentButton.tintColor = [UIColor blackColor];
30 | [presentButton setTitle:@"Present" forState:UIControlStateNormal];
31 | [presentButton sizeToFit];
32 | presentButton.center = CGPointMake(self.view.center.x, self.view.center.y - 50);
33 | [presentButton addTarget:self action:@selector(tappedPresent:) forControlEvents:UIControlEventTouchUpInside];
34 | [self.view addSubview:presentButton];
35 |
36 | if (self.presentingViewController) {
37 | UIButton *dismissButton = [UIButton buttonWithType:UIButtonTypeSystem];
38 | dismissButton.tintColor = [UIColor blackColor];
39 | [dismissButton setTitle:@"Dismiss" forState:UIControlStateNormal];
40 | [dismissButton sizeToFit];
41 | dismissButton.center = CGPointMake(self.view.center.x, self.view.center.y + 50);
42 | [dismissButton addTarget:self action:@selector(tappedDismiss:) forControlEvents:UIControlEventTouchUpInside];
43 | [self.view addSubview:dismissButton];
44 | }
45 | }
46 |
47 | - (void)tappedPresent:(id)sender
48 | {
49 | BCViewController *vc = [BCViewController new];
50 | vc.transitioningDelegate = self.transition;
51 | vc.modalPresentationStyle = UIModalPresentationCustom;
52 | [self presentViewController:vc animated:YES completion:nil];
53 | }
54 |
55 | - (void)tappedDismiss:(id)sender
56 | {
57 | if (self.presentingViewController) {
58 | [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
59 | }
60 | }
61 |
62 | - (UIColor *)generateBackgroundColor
63 | {
64 | NSArray *colors = @[[UIColor redColor], [UIColor whiteColor], [UIColor greenColor], [UIColor blueColor], [UIColor purpleColor], [UIColor yellowColor]];
65 | UIColor *color = colors[(NSUInteger)arc4random_uniform((unsigned int)[colors count])];
66 |
67 | if (self.presentingViewController && [self.presentingViewController.view.backgroundColor isEqual:color]) {
68 | return [self generateBackgroundColor];
69 | }
70 |
71 | return color;
72 | }
73 |
74 |
75 | @end
76 |
--------------------------------------------------------------------------------
/TransitionBug/BCTransition.m:
--------------------------------------------------------------------------------
1 | //
2 | // BCTransition.m
3 | // TransitionBug
4 | //
5 | // Created by Ben Cherry on 8/8/14.
6 | // Copyright (c) 2014 Ben Cherry. All rights reserved.
7 | //
8 |
9 | #import "BCTransition.h"
10 |
11 | @interface BCTransition ()
12 |
13 | @property (nonatomic, assign) BOOL presenting;
14 |
15 | @end
16 |
17 | @implementation BCTransition
18 |
19 | #pragma mark - UIViewControllerTransitioningDelegate
20 |
21 | - (id)animationControllerForPresentedController:(UIViewController *)presented
22 | presentingController:(UIViewController *)presenting
23 | sourceController:(UIViewController *)source {
24 | self.presenting = YES;
25 | return self;
26 | }
27 |
28 | - (id)animationControllerForDismissedController:(UIViewController *)dismissed
29 | {
30 | self.presenting = NO;
31 | return self;
32 | }
33 |
34 | #pragma mark - UIViewControllerAnimatedTransitioning
35 |
36 | - (NSTimeInterval)transitionDuration:(id)transitionContext
37 | {
38 | return 0.3;
39 | }
40 |
41 | - (void)animateTransition:(id)transitionContext
42 | {
43 | UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
44 | UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
45 |
46 | UIView *fromView = [transitionContext respondsToSelector:@selector(viewForKey:)] ? [transitionContext viewForKey:UITransitionContextFromViewKey] : fromViewController.view;
47 | UIView *toView = [transitionContext respondsToSelector:@selector(viewForKey:)] ? [transitionContext viewForKey:UITransitionContextToViewKey] : toViewController.view;
48 |
49 | if (self.presenting) {
50 | [transitionContext.containerView addSubview:toView];
51 | [transitionContext.containerView addSubview:fromView];
52 |
53 | [toViewController beginAppearanceTransition:YES animated:YES];
54 | [fromViewController beginAppearanceTransition:NO animated:YES];
55 | [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0 options:0 animations:^{
56 | CGRect frame = fromView.frame;
57 | frame.origin.x = -frame.size.width;
58 | fromView.frame = frame;
59 | } completion:^(BOOL finished) {
60 | [toViewController endAppearanceTransition];
61 | [fromViewController endAppearanceTransition];
62 | [transitionContext completeTransition:finished];
63 | }];
64 | } else {
65 | [transitionContext.containerView addSubview:fromView];
66 | [transitionContext.containerView addSubview:toView];
67 |
68 | [toViewController beginAppearanceTransition:YES animated:YES];
69 | [fromViewController beginAppearanceTransition:NO animated:YES];
70 | CGRect frame = toView.frame;
71 | frame.origin.x = -frame.size.width;
72 | toView.frame = frame;
73 | [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0 options:0 animations:^{
74 | CGRect frame = toView.frame;
75 | frame.origin.x = 0;
76 | toView.frame = frame;
77 | } completion:^(BOOL finished) {
78 | [toViewController endAppearanceTransition];
79 | [fromViewController endAppearanceTransition];
80 | [transitionContext completeTransition:finished];
81 | }];
82 | }
83 | }
84 |
85 |
86 | @end
87 |
--------------------------------------------------------------------------------
/TransitionBug.xcodeproj/xcuserdata/bcherry.xcuserdatad/xcschemes/TransitionBug.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 |
--------------------------------------------------------------------------------
/TransitionBug.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 6AACFC60199544F500909948 /* BCViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AACFC5F199544F500909948 /* BCViewController.m */; };
11 | 6AACFC63199549CB00909948 /* BCTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AACFC62199549CB00909948 /* BCTransition.m */; };
12 | 6AE657BF1995446D0044B325 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AE657BE1995446D0044B325 /* Foundation.framework */; };
13 | 6AE657C11995446D0044B325 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AE657C01995446D0044B325 /* CoreGraphics.framework */; };
14 | 6AE657C31995446D0044B325 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AE657C21995446D0044B325 /* UIKit.framework */; };
15 | 6AE657C91995446D0044B325 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6AE657C71995446D0044B325 /* InfoPlist.strings */; };
16 | 6AE657CB1995446D0044B325 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AE657CA1995446D0044B325 /* main.m */; };
17 | 6AE657CF1995446D0044B325 /* BCAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AE657CE1995446D0044B325 /* BCAppDelegate.m */; };
18 | 6AE657D11995446D0044B325 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6AE657D01995446D0044B325 /* Images.xcassets */; };
19 | 6AE657D81995446D0044B325 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AE657D71995446D0044B325 /* XCTest.framework */; };
20 | 6AE657D91995446D0044B325 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AE657BE1995446D0044B325 /* Foundation.framework */; };
21 | 6AE657DA1995446D0044B325 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AE657C21995446D0044B325 /* UIKit.framework */; };
22 | 6AE657E21995446D0044B325 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6AE657E01995446D0044B325 /* InfoPlist.strings */; };
23 | 6AE657E41995446D0044B325 /* TransitionBugTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6AE657E31995446D0044B325 /* TransitionBugTests.m */; };
24 | /* End PBXBuildFile section */
25 |
26 | /* Begin PBXContainerItemProxy section */
27 | 6AE657DB1995446D0044B325 /* PBXContainerItemProxy */ = {
28 | isa = PBXContainerItemProxy;
29 | containerPortal = 6AE657B31995446C0044B325 /* Project object */;
30 | proxyType = 1;
31 | remoteGlobalIDString = 6AE657BA1995446C0044B325;
32 | remoteInfo = TransitionBug;
33 | };
34 | /* End PBXContainerItemProxy section */
35 |
36 | /* Begin PBXFileReference section */
37 | 6AACFC5E199544F500909948 /* BCViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCViewController.h; sourceTree = ""; };
38 | 6AACFC5F199544F500909948 /* BCViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCViewController.m; sourceTree = ""; };
39 | 6AACFC61199549CB00909948 /* BCTransition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCTransition.h; sourceTree = ""; };
40 | 6AACFC62199549CB00909948 /* BCTransition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCTransition.m; sourceTree = ""; };
41 | 6AE657BB1995446D0044B325 /* TransitionBug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TransitionBug.app; sourceTree = BUILT_PRODUCTS_DIR; };
42 | 6AE657BE1995446D0044B325 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
43 | 6AE657C01995446D0044B325 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
44 | 6AE657C21995446D0044B325 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
45 | 6AE657C61995446D0044B325 /* TransitionBug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TransitionBug-Info.plist"; sourceTree = ""; };
46 | 6AE657C81995446D0044B325 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
47 | 6AE657CA1995446D0044B325 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
48 | 6AE657CC1995446D0044B325 /* TransitionBug-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TransitionBug-Prefix.pch"; sourceTree = ""; };
49 | 6AE657CD1995446D0044B325 /* BCAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BCAppDelegate.h; sourceTree = ""; };
50 | 6AE657CE1995446D0044B325 /* BCAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BCAppDelegate.m; sourceTree = ""; };
51 | 6AE657D01995446D0044B325 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
52 | 6AE657D61995446D0044B325 /* TransitionBugTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TransitionBugTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
53 | 6AE657D71995446D0044B325 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
54 | 6AE657DF1995446D0044B325 /* TransitionBugTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TransitionBugTests-Info.plist"; sourceTree = ""; };
55 | 6AE657E11995446D0044B325 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
56 | 6AE657E31995446D0044B325 /* TransitionBugTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TransitionBugTests.m; sourceTree = ""; };
57 | /* End PBXFileReference section */
58 |
59 | /* Begin PBXFrameworksBuildPhase section */
60 | 6AE657B81995446C0044B325 /* Frameworks */ = {
61 | isa = PBXFrameworksBuildPhase;
62 | buildActionMask = 2147483647;
63 | files = (
64 | 6AE657C11995446D0044B325 /* CoreGraphics.framework in Frameworks */,
65 | 6AE657C31995446D0044B325 /* UIKit.framework in Frameworks */,
66 | 6AE657BF1995446D0044B325 /* Foundation.framework in Frameworks */,
67 | );
68 | runOnlyForDeploymentPostprocessing = 0;
69 | };
70 | 6AE657D31995446D0044B325 /* Frameworks */ = {
71 | isa = PBXFrameworksBuildPhase;
72 | buildActionMask = 2147483647;
73 | files = (
74 | 6AE657D81995446D0044B325 /* XCTest.framework in Frameworks */,
75 | 6AE657DA1995446D0044B325 /* UIKit.framework in Frameworks */,
76 | 6AE657D91995446D0044B325 /* Foundation.framework in Frameworks */,
77 | );
78 | runOnlyForDeploymentPostprocessing = 0;
79 | };
80 | /* End PBXFrameworksBuildPhase section */
81 |
82 | /* Begin PBXGroup section */
83 | 6AE657B21995446C0044B325 = {
84 | isa = PBXGroup;
85 | children = (
86 | 6AE657C41995446D0044B325 /* TransitionBug */,
87 | 6AE657DD1995446D0044B325 /* TransitionBugTests */,
88 | 6AE657BD1995446D0044B325 /* Frameworks */,
89 | 6AE657BC1995446D0044B325 /* Products */,
90 | );
91 | sourceTree = "";
92 | };
93 | 6AE657BC1995446D0044B325 /* Products */ = {
94 | isa = PBXGroup;
95 | children = (
96 | 6AE657BB1995446D0044B325 /* TransitionBug.app */,
97 | 6AE657D61995446D0044B325 /* TransitionBugTests.xctest */,
98 | );
99 | name = Products;
100 | sourceTree = "";
101 | };
102 | 6AE657BD1995446D0044B325 /* Frameworks */ = {
103 | isa = PBXGroup;
104 | children = (
105 | 6AE657BE1995446D0044B325 /* Foundation.framework */,
106 | 6AE657C01995446D0044B325 /* CoreGraphics.framework */,
107 | 6AE657C21995446D0044B325 /* UIKit.framework */,
108 | 6AE657D71995446D0044B325 /* XCTest.framework */,
109 | );
110 | name = Frameworks;
111 | sourceTree = "";
112 | };
113 | 6AE657C41995446D0044B325 /* TransitionBug */ = {
114 | isa = PBXGroup;
115 | children = (
116 | 6AE657CD1995446D0044B325 /* BCAppDelegate.h */,
117 | 6AE657CE1995446D0044B325 /* BCAppDelegate.m */,
118 | 6AE657D01995446D0044B325 /* Images.xcassets */,
119 | 6AE657C51995446D0044B325 /* Supporting Files */,
120 | 6AACFC5E199544F500909948 /* BCViewController.h */,
121 | 6AACFC5F199544F500909948 /* BCViewController.m */,
122 | 6AACFC61199549CB00909948 /* BCTransition.h */,
123 | 6AACFC62199549CB00909948 /* BCTransition.m */,
124 | );
125 | path = TransitionBug;
126 | sourceTree = "";
127 | };
128 | 6AE657C51995446D0044B325 /* Supporting Files */ = {
129 | isa = PBXGroup;
130 | children = (
131 | 6AE657C61995446D0044B325 /* TransitionBug-Info.plist */,
132 | 6AE657C71995446D0044B325 /* InfoPlist.strings */,
133 | 6AE657CA1995446D0044B325 /* main.m */,
134 | 6AE657CC1995446D0044B325 /* TransitionBug-Prefix.pch */,
135 | );
136 | name = "Supporting Files";
137 | sourceTree = "";
138 | };
139 | 6AE657DD1995446D0044B325 /* TransitionBugTests */ = {
140 | isa = PBXGroup;
141 | children = (
142 | 6AE657E31995446D0044B325 /* TransitionBugTests.m */,
143 | 6AE657DE1995446D0044B325 /* Supporting Files */,
144 | );
145 | path = TransitionBugTests;
146 | sourceTree = "";
147 | };
148 | 6AE657DE1995446D0044B325 /* Supporting Files */ = {
149 | isa = PBXGroup;
150 | children = (
151 | 6AE657DF1995446D0044B325 /* TransitionBugTests-Info.plist */,
152 | 6AE657E01995446D0044B325 /* InfoPlist.strings */,
153 | );
154 | name = "Supporting Files";
155 | sourceTree = "";
156 | };
157 | /* End PBXGroup section */
158 |
159 | /* Begin PBXNativeTarget section */
160 | 6AE657BA1995446C0044B325 /* TransitionBug */ = {
161 | isa = PBXNativeTarget;
162 | buildConfigurationList = 6AE657E71995446D0044B325 /* Build configuration list for PBXNativeTarget "TransitionBug" */;
163 | buildPhases = (
164 | 6AE657B71995446C0044B325 /* Sources */,
165 | 6AE657B81995446C0044B325 /* Frameworks */,
166 | 6AE657B91995446C0044B325 /* Resources */,
167 | );
168 | buildRules = (
169 | );
170 | dependencies = (
171 | );
172 | name = TransitionBug;
173 | productName = TransitionBug;
174 | productReference = 6AE657BB1995446D0044B325 /* TransitionBug.app */;
175 | productType = "com.apple.product-type.application";
176 | };
177 | 6AE657D51995446D0044B325 /* TransitionBugTests */ = {
178 | isa = PBXNativeTarget;
179 | buildConfigurationList = 6AE657EA1995446D0044B325 /* Build configuration list for PBXNativeTarget "TransitionBugTests" */;
180 | buildPhases = (
181 | 6AE657D21995446D0044B325 /* Sources */,
182 | 6AE657D31995446D0044B325 /* Frameworks */,
183 | 6AE657D41995446D0044B325 /* Resources */,
184 | );
185 | buildRules = (
186 | );
187 | dependencies = (
188 | 6AE657DC1995446D0044B325 /* PBXTargetDependency */,
189 | );
190 | name = TransitionBugTests;
191 | productName = TransitionBugTests;
192 | productReference = 6AE657D61995446D0044B325 /* TransitionBugTests.xctest */;
193 | productType = "com.apple.product-type.bundle.unit-test";
194 | };
195 | /* End PBXNativeTarget section */
196 |
197 | /* Begin PBXProject section */
198 | 6AE657B31995446C0044B325 /* Project object */ = {
199 | isa = PBXProject;
200 | attributes = {
201 | CLASSPREFIX = BC;
202 | LastUpgradeCheck = 0510;
203 | ORGANIZATIONNAME = "Ben Cherry";
204 | TargetAttributes = {
205 | 6AE657D51995446D0044B325 = {
206 | TestTargetID = 6AE657BA1995446C0044B325;
207 | };
208 | };
209 | };
210 | buildConfigurationList = 6AE657B61995446C0044B325 /* Build configuration list for PBXProject "TransitionBug" */;
211 | compatibilityVersion = "Xcode 3.2";
212 | developmentRegion = English;
213 | hasScannedForEncodings = 0;
214 | knownRegions = (
215 | en,
216 | );
217 | mainGroup = 6AE657B21995446C0044B325;
218 | productRefGroup = 6AE657BC1995446D0044B325 /* Products */;
219 | projectDirPath = "";
220 | projectRoot = "";
221 | targets = (
222 | 6AE657BA1995446C0044B325 /* TransitionBug */,
223 | 6AE657D51995446D0044B325 /* TransitionBugTests */,
224 | );
225 | };
226 | /* End PBXProject section */
227 |
228 | /* Begin PBXResourcesBuildPhase section */
229 | 6AE657B91995446C0044B325 /* Resources */ = {
230 | isa = PBXResourcesBuildPhase;
231 | buildActionMask = 2147483647;
232 | files = (
233 | 6AE657C91995446D0044B325 /* InfoPlist.strings in Resources */,
234 | 6AE657D11995446D0044B325 /* Images.xcassets in Resources */,
235 | );
236 | runOnlyForDeploymentPostprocessing = 0;
237 | };
238 | 6AE657D41995446D0044B325 /* Resources */ = {
239 | isa = PBXResourcesBuildPhase;
240 | buildActionMask = 2147483647;
241 | files = (
242 | 6AE657E21995446D0044B325 /* InfoPlist.strings in Resources */,
243 | );
244 | runOnlyForDeploymentPostprocessing = 0;
245 | };
246 | /* End PBXResourcesBuildPhase section */
247 |
248 | /* Begin PBXSourcesBuildPhase section */
249 | 6AE657B71995446C0044B325 /* Sources */ = {
250 | isa = PBXSourcesBuildPhase;
251 | buildActionMask = 2147483647;
252 | files = (
253 | 6AACFC60199544F500909948 /* BCViewController.m in Sources */,
254 | 6AACFC63199549CB00909948 /* BCTransition.m in Sources */,
255 | 6AE657CB1995446D0044B325 /* main.m in Sources */,
256 | 6AE657CF1995446D0044B325 /* BCAppDelegate.m in Sources */,
257 | );
258 | runOnlyForDeploymentPostprocessing = 0;
259 | };
260 | 6AE657D21995446D0044B325 /* Sources */ = {
261 | isa = PBXSourcesBuildPhase;
262 | buildActionMask = 2147483647;
263 | files = (
264 | 6AE657E41995446D0044B325 /* TransitionBugTests.m in Sources */,
265 | );
266 | runOnlyForDeploymentPostprocessing = 0;
267 | };
268 | /* End PBXSourcesBuildPhase section */
269 |
270 | /* Begin PBXTargetDependency section */
271 | 6AE657DC1995446D0044B325 /* PBXTargetDependency */ = {
272 | isa = PBXTargetDependency;
273 | target = 6AE657BA1995446C0044B325 /* TransitionBug */;
274 | targetProxy = 6AE657DB1995446D0044B325 /* PBXContainerItemProxy */;
275 | };
276 | /* End PBXTargetDependency section */
277 |
278 | /* Begin PBXVariantGroup section */
279 | 6AE657C71995446D0044B325 /* InfoPlist.strings */ = {
280 | isa = PBXVariantGroup;
281 | children = (
282 | 6AE657C81995446D0044B325 /* en */,
283 | );
284 | name = InfoPlist.strings;
285 | sourceTree = "";
286 | };
287 | 6AE657E01995446D0044B325 /* InfoPlist.strings */ = {
288 | isa = PBXVariantGroup;
289 | children = (
290 | 6AE657E11995446D0044B325 /* en */,
291 | );
292 | name = InfoPlist.strings;
293 | sourceTree = "";
294 | };
295 | /* End PBXVariantGroup section */
296 |
297 | /* Begin XCBuildConfiguration section */
298 | 6AE657E51995446D0044B325 /* Debug */ = {
299 | isa = XCBuildConfiguration;
300 | buildSettings = {
301 | ALWAYS_SEARCH_USER_PATHS = NO;
302 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
303 | CLANG_CXX_LIBRARY = "libc++";
304 | CLANG_ENABLE_MODULES = YES;
305 | CLANG_ENABLE_OBJC_ARC = YES;
306 | CLANG_WARN_BOOL_CONVERSION = YES;
307 | CLANG_WARN_CONSTANT_CONVERSION = YES;
308 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
309 | CLANG_WARN_EMPTY_BODY = YES;
310 | CLANG_WARN_ENUM_CONVERSION = YES;
311 | CLANG_WARN_INT_CONVERSION = YES;
312 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
313 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
314 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
315 | COPY_PHASE_STRIP = NO;
316 | GCC_C_LANGUAGE_STANDARD = gnu99;
317 | GCC_DYNAMIC_NO_PIC = NO;
318 | GCC_OPTIMIZATION_LEVEL = 0;
319 | GCC_PREPROCESSOR_DEFINITIONS = (
320 | "DEBUG=1",
321 | "$(inherited)",
322 | );
323 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
324 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
325 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
326 | GCC_WARN_UNDECLARED_SELECTOR = YES;
327 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
328 | GCC_WARN_UNUSED_FUNCTION = YES;
329 | GCC_WARN_UNUSED_VARIABLE = YES;
330 | IPHONEOS_DEPLOYMENT_TARGET = 7.1;
331 | ONLY_ACTIVE_ARCH = YES;
332 | SDKROOT = iphoneos;
333 | };
334 | name = Debug;
335 | };
336 | 6AE657E61995446D0044B325 /* Release */ = {
337 | isa = XCBuildConfiguration;
338 | buildSettings = {
339 | ALWAYS_SEARCH_USER_PATHS = NO;
340 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
341 | CLANG_CXX_LIBRARY = "libc++";
342 | CLANG_ENABLE_MODULES = YES;
343 | CLANG_ENABLE_OBJC_ARC = YES;
344 | CLANG_WARN_BOOL_CONVERSION = YES;
345 | CLANG_WARN_CONSTANT_CONVERSION = YES;
346 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
347 | CLANG_WARN_EMPTY_BODY = YES;
348 | CLANG_WARN_ENUM_CONVERSION = YES;
349 | CLANG_WARN_INT_CONVERSION = YES;
350 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
351 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
352 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
353 | COPY_PHASE_STRIP = YES;
354 | ENABLE_NS_ASSERTIONS = NO;
355 | GCC_C_LANGUAGE_STANDARD = gnu99;
356 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
357 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
358 | GCC_WARN_UNDECLARED_SELECTOR = YES;
359 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
360 | GCC_WARN_UNUSED_FUNCTION = YES;
361 | GCC_WARN_UNUSED_VARIABLE = YES;
362 | IPHONEOS_DEPLOYMENT_TARGET = 7.1;
363 | SDKROOT = iphoneos;
364 | VALIDATE_PRODUCT = YES;
365 | };
366 | name = Release;
367 | };
368 | 6AE657E81995446D0044B325 /* Debug */ = {
369 | isa = XCBuildConfiguration;
370 | buildSettings = {
371 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
372 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
373 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
374 | GCC_PREFIX_HEADER = "TransitionBug/TransitionBug-Prefix.pch";
375 | INFOPLIST_FILE = "TransitionBug/TransitionBug-Info.plist";
376 | PRODUCT_NAME = "$(TARGET_NAME)";
377 | WRAPPER_EXTENSION = app;
378 | };
379 | name = Debug;
380 | };
381 | 6AE657E91995446D0044B325 /* Release */ = {
382 | isa = XCBuildConfiguration;
383 | buildSettings = {
384 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
385 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
386 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
387 | GCC_PREFIX_HEADER = "TransitionBug/TransitionBug-Prefix.pch";
388 | INFOPLIST_FILE = "TransitionBug/TransitionBug-Info.plist";
389 | PRODUCT_NAME = "$(TARGET_NAME)";
390 | WRAPPER_EXTENSION = app;
391 | };
392 | name = Release;
393 | };
394 | 6AE657EB1995446D0044B325 /* Debug */ = {
395 | isa = XCBuildConfiguration;
396 | buildSettings = {
397 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/TransitionBug.app/TransitionBug";
398 | FRAMEWORK_SEARCH_PATHS = (
399 | "$(SDKROOT)/Developer/Library/Frameworks",
400 | "$(inherited)",
401 | "$(DEVELOPER_FRAMEWORKS_DIR)",
402 | );
403 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
404 | GCC_PREFIX_HEADER = "TransitionBug/TransitionBug-Prefix.pch";
405 | GCC_PREPROCESSOR_DEFINITIONS = (
406 | "DEBUG=1",
407 | "$(inherited)",
408 | );
409 | INFOPLIST_FILE = "TransitionBugTests/TransitionBugTests-Info.plist";
410 | PRODUCT_NAME = "$(TARGET_NAME)";
411 | TEST_HOST = "$(BUNDLE_LOADER)";
412 | WRAPPER_EXTENSION = xctest;
413 | };
414 | name = Debug;
415 | };
416 | 6AE657EC1995446D0044B325 /* Release */ = {
417 | isa = XCBuildConfiguration;
418 | buildSettings = {
419 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/TransitionBug.app/TransitionBug";
420 | FRAMEWORK_SEARCH_PATHS = (
421 | "$(SDKROOT)/Developer/Library/Frameworks",
422 | "$(inherited)",
423 | "$(DEVELOPER_FRAMEWORKS_DIR)",
424 | );
425 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
426 | GCC_PREFIX_HEADER = "TransitionBug/TransitionBug-Prefix.pch";
427 | INFOPLIST_FILE = "TransitionBugTests/TransitionBugTests-Info.plist";
428 | PRODUCT_NAME = "$(TARGET_NAME)";
429 | TEST_HOST = "$(BUNDLE_LOADER)";
430 | WRAPPER_EXTENSION = xctest;
431 | };
432 | name = Release;
433 | };
434 | /* End XCBuildConfiguration section */
435 |
436 | /* Begin XCConfigurationList section */
437 | 6AE657B61995446C0044B325 /* Build configuration list for PBXProject "TransitionBug" */ = {
438 | isa = XCConfigurationList;
439 | buildConfigurations = (
440 | 6AE657E51995446D0044B325 /* Debug */,
441 | 6AE657E61995446D0044B325 /* Release */,
442 | );
443 | defaultConfigurationIsVisible = 0;
444 | defaultConfigurationName = Release;
445 | };
446 | 6AE657E71995446D0044B325 /* Build configuration list for PBXNativeTarget "TransitionBug" */ = {
447 | isa = XCConfigurationList;
448 | buildConfigurations = (
449 | 6AE657E81995446D0044B325 /* Debug */,
450 | 6AE657E91995446D0044B325 /* Release */,
451 | );
452 | defaultConfigurationIsVisible = 0;
453 | defaultConfigurationName = Release;
454 | };
455 | 6AE657EA1995446D0044B325 /* Build configuration list for PBXNativeTarget "TransitionBugTests" */ = {
456 | isa = XCConfigurationList;
457 | buildConfigurations = (
458 | 6AE657EB1995446D0044B325 /* Debug */,
459 | 6AE657EC1995446D0044B325 /* Release */,
460 | );
461 | defaultConfigurationIsVisible = 0;
462 | defaultConfigurationName = Release;
463 | };
464 | /* End XCConfigurationList section */
465 | };
466 | rootObject = 6AE657B31995446C0044B325 /* Project object */;
467 | }
468 |
--------------------------------------------------------------------------------