どうも、iron千葉です。
ぐぐっても、あまり記事なかったので残しておきます。
環境
- Xcode6.1.1
- swift
やりたいこ
iosアプリケーションで、バックグラウンドで処理をしたい。swiftで。
UIApplicationDelegateを利用して、バックグランドで非定期的に処理を実行する。
バックグラウンドの有効化
コード
Appdelegate.swiftに処理を追加します。
Appdelegate.swift
…略
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
UIApplication.sharedApplication().setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
return true
}
…略
アプリ起動時に実行される didFinishLaunchingWithOptions の中に、バックグランドで実行されるインターバルを指定する。これを指定しないと、バックグラウンド実行は有効にならない。
そして、 performFetchWithCompletionHandler にバックグラウンドで実際に実行させる処理の内容を書く。
例として、printlnで現在時間をコンソールに出力する処理を書いてます。
Appdelegate.swift
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
let now = NSDate()
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
let string = formatter.stringFromDate(now)
println(string)
completionHandler(UIBackgroundFetchResult.NewData)
}
また、処理が完了したらcompletionHandlerにて、処理の終了ステータスを返す必要があります。
- フェッチ処理にてデータが取得できた場合:UIBackgroundFetchResult.NewData
- フェッチ処理にて更新データがなかった場合:UIBackgroundFetchResult.NoData
- フェッチ処理が失敗した場合:UIBackgroundFetchResult.Faild
テスト
シュミレータを起動して、動作テストをします。
メニューのDebug > Simulate Background Fetch
日付と時間が出力されます。
まとめ
と、簡単ですが以上です。
実機で試してないですが、動くはずです。