iOS4.0以降のライフサイクル/info.plistに「UIApplicationExitsOnSuspend」Keyを追加し、Backgroundを防ぐ
iOS4.0になってから、ホームボタンを押してもアプリは終了されず、バックグラウンドにアプリが移行し、ホームボタンを2回押すと、バックグラウンドから、終了させたアプリを再起動させることができるようになっています。
しかし、、、
バックグラウンド状態にさせたくないアプリを作りたい!
という方もいるはず!(ぼくもそうでした(笑))
なので、cocos2dで新規プロジェクトを作成し、バックグラウンド状態にならないアプリにする方法をご紹介します。
cocos2dでバックグラウンド状態にならないアプリの作成法
cocos2dで新規プロジェクトを作成すると、AppDelegate.mは、
- (void) applicationDidFinishLaunching:(UIApplication*)application { } - (void)applicationWillResignActive:(UIApplication *)application { [[CCDirector sharedDirector] pause]; } - (void)applicationDidBecomeActive:(UIApplication *)application { [[CCDirector sharedDirector] resume]; } - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { [[CCDirector sharedDirector] purgeCachedData]; } -(void) applicationDidEnterBackground:(UIApplication*)application { [[CCDirector sharedDirector] stopAnimation]; } -(void) applicationWillEnterForeground:(UIApplication*)application { [[CCDirector sharedDirector] startAnimation]; } - (void)applicationWillTerminate:(UIApplication *)application { CCDirector *director = [CCDirector sharedDirector]; [[director openGLView] removeFromSuperview]; [viewController release]; [window release]; [director end]; } - (void)applicationSignificantTimeChange:(UIApplication *)application { [[CCDirector sharedDirector] setNextDeltaTimeZero:YES]; } - (void)dealloc { [[CCDirector sharedDirector] release]; [window release]; [super dealloc]; }
となっています。
バックグラウンド関係だと、
//アプリがアクティブでなくなるときに呼ばれる - (void)applicationWillResignActive:(UIApplication *)application { [[CCDirector sharedDirector] pause]; } //アプリがバックグラウンドに入るときに呼ばれる -(void) applicationDidEnterBackground:(UIApplication*)application { [[CCDirector sharedDirector] stopAnimation]; } //アプリがバックグラウンドからフォアグラウンドに移行するときに呼ばれる -(void) applicationWillEnterForeground:(UIApplication*)application { [[CCDirector sharedDirector] startAnimation]; } //アプリがアクティブになるときに呼ばれる - (void)applicationDidBecomeActive:(UIApplication *)application { [[CCDirector sharedDirector] resume]; }
あたりが関係してきます。
バックグラウンドに移行するときの流れ
1,ホームボタンが押される
2,[[CCDirector sharedDirector] stopAnimation];が呼ばれ、アニメーションが一旦ストップする
3,applicationWillResignActive メソッドが呼ばれ、CCDirectoreがpauseされる。
4,バックグラウンドから起動
5,applicationDidBecomeActive メソッドが呼ばれ、CCDirectoreがresumeされる。
iOS4以降のアプリのライフサイクル
- (void) applicationDidFinishLaunching:(UIApplication*)application
→アプリケーションが起動した時に呼ばれる。
-(void) applicationDidEnterBackground:(UIApplication*)application
→バックグランドになると呼び出される。
-(void) applicationWillEnterForeground:(UIApplication*)application
→バックグランドから復帰する前に呼ばれる。
- (void)applicationWillTerminate:(UIApplication *)application
→アプリケーションが終了する時に呼ばれる。
解決法
解決方法は非常に簡単で、
1,info.plistに、「UIApplicationExitsOnSuspend」を追加する
2,「UIApplicationExitsOnSuspend」で右クリックし、「Value type」 → 「Boolean」を選択肢チェックを入れる(YES)にする。
たったそれだけ。