49952


環境：Mac/High Sierra 10.13.6/swift4.2/xcode 10.0

iosアプリを作成しているのですが、  
Timerを使用しているため、ホームボタン押下時の挙動と、  
アプリアイコンタップによる復帰時、ホームボタンダブルタップからの復帰の挙動がわかりません。  
<http://glassonion.hatenablog.com/entry/20120405/1333611664>  
上記サイトでUIApplicationDelegateとUIViewControllerの関係性はわかったのですが、これを見るとホームボタンタップ時にUIViewController側の処理がどのようにして一時停止しているのかがわかりませんでした。

開発しているアプリでLoggerの出力を見ていると、Timerで実行された関数は途中で処理を停止しているようでした。できればTimerで実行している関数は最後まで実行するようにして、次回の実行を停止という風にした方が、安全なのですが、そのような実装は可能でしょうか。


CC BY-SA 4.0
2018-11-04T08:41:08.873
49949
2018-11-04T11:13:19.320
25745
question
swift xcode swift4
iphoneホームボタン押下時のアプリの一時停止の仕様がわからない


こちらに、[SwiftとiOSで定期的なバックグラウンド処理の実行は不可能なので諦めるべき](https://www.k-karakuri.com/entry/2018/04/15/iOS%E3%82%A2%E3%83%97%E3%83%AA%E3%81%A7%E5%AE%9A%E6%9C%9F%E7%9A%84%E3%81%AA%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E5%87%A6%E7%90%86%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%81%AF)という記事がありました。

要約すると  
* UILocalNotificationを使う: バックグラウンドで継続して定期的な処理を走らせることは出来ない  
* GCDを使う: GCDを使ってもスレッドごと止められてしまう  
* Background Fetch: バックグラウンドでのダウンロードや音楽の再生には使えるが、それ以外ではOSが強制終了したり、審査に通らない

らしいです。

このため、Xcode上でProject→Target→Capabilities→BackgroundModesをONにしたときに表示される項目以外でのバックグラウンド実行は出来ないというのが一般的な回答になるかと思われます。


CC BY-SA 4.0
2018-11-04T11:13:19.320
49952
2018-11-04T11:13:19.320
14745
49949
answer