質問: 環境:Mac/High Sierra 10.13.6/swift4.2/xcode 10.0 iosアプリを作成しているのですが、 Timerを使用しているため、ホームボタン押下時の挙動と、 アプリアイコンタップによる復帰時、ホームボタンダブルタップからの復帰の挙動がわかりません。 上記サイトでUIApplicationDelegateとUIViewControllerの関係性はわかったのですが、これを見るとホームボタンタップ時にUIViewController側の処理がどのようにして一時停止しているのかがわかりませんでした。 開発しているアプリでLoggerの出力を見ていると、Timerで実行された関数は途中で処理を停止しているようでした。できればTimerで実行している関数は最後まで実行するようにして、次回の実行を停止という風にした方が、安全なのですが、そのような実装は可能でしょうか。
回答: こちらに、SwiftとiOSで定期的なバックグラウンド処理の実行は不可能なので諦めるべきという記事がありました。 要約すると * UILocalNotificationを使う: バックグラウンドで継続して定期的な処理を走らせることは出来ない * GCDを使う: GCDを使ってもスレッドごと止められてしまう * Background Fetch: バックグラウンドでのダウンロードや音楽の再生には使えるが、それ以外ではOSが強制終了したり、審査に通らない らしいです。 このため、Xcode上でProject→Target→Capabilities→BackgroundModesをONにしたときに表示される項目以外でのバックグラウンド実行は出来ないというのが一般的な回答になるかと思われます。