バックグランドで定期的に処理を行う。(例えば更新チェック等)
ただし、何分毎や何時何分にといった指定はできず実行間隔はOSによって決定される。アプリの起動頻度等によっても変動するらしい。
また、バックグランドではNSURLConnectionは動作しない。代わりにNSURLSessionを使用すること。
・プロジェクトの設定
プロジェクト選択→Capabilities→Background ModesをON→Background fetchにチェック
・コード(AppDelegate.m)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //background fetchが呼ばれる最短の間隔を設定 [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];//最短 //[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalNever];//呼ばれない return YES; } -(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { //処理 NSLog(@"receive fetch"); //処理後に必ず呼ぶ //UIBackgroundFetchResultNewData 更新成功 //UIBackgroundFetchResultNoData 更新なし //UIBackgroundFetchResultFailed エラー completionHandler(UIBackgroundFetchResultNewData); } |
・テスト
シミュレータで実行時はxcodeの
Debug→Simulate Background Fetch
で手動でBackground fetchを発生させることができる。