バックグラウンドでの動作
バックグラウンドに回したときの動作
ショートカットAppをバックグラウンドに回して約25秒が経過すると、ショートカットAppは強制終了してしまいます。
電話の着信で電話Appに切り替えたり、ホーム画面に戻ったりしても、ショートカットAppがバックグラウンドに回ってしまうため、同様に約25秒が経過すると強制終了してしまいます。
またスリープボタンを押してスリープにしたり、iOSの自動ロック機能が作動してスリープになってしまった場合は、即座に強制終了してしまいます。
これらはiOSの仕様なので、利用者側ではこれを回避することはできません。
バックグラウンド実行時間が短い理由
かつて、iOS7からiOS12までのバックグラウンドでの最大実行時間は最大 約3分でした。
しかしiOS 13以降では、約25秒に短縮されてしまいました。
その原因として考えられるのは、iOS13で導入されたApp Background Executionと、アプリ・アプリ内広告による位置情報などの窃取対策です。
App Background Executionは、デバイスが消費する電力を減らし、バッテリーの劣化を抑制したり、デバイスの駆動時間を長くすることを目的とした機能です。
そのためApp Background Executionに対応していなかったり、適用対象外のアプリでは、バックグラウンドでの動作時間が25秒程度に制限されます。
また位置情報の窃取対策については、アプリを使っていないときでもバックグラウンドでこっそり動作し続けて、現在地・移動経路などの位置情報を収集するアプリ・アプリ内広告が存在していました。
これについては、iOS 11で導入されたSafariのIntelligent Tracking Prevention (ITP)機能で対策を講じていたのですが、それだけでは不十分だったため、iOS 13以降では位置情報を取得する際に確認のダイアログ頻繁に出すことと、App Background Executionで制限をかけました。
iOS13では、IP電話をはじめとしたApp Background Execution未対応の常駐系アプリが大きな影響を受けました。
ショートカットAppでは、アクション「待機」・「戻るまで待機」の待機時間が最大 約25秒になるという被害を受けています。
余談になりますが、Background modesの対象であったり、beginBackgroundTaskWithExpirationHandler:メソッドを使うとバックグラウンド動作の時間をさらに延長できるのですが、ショートカットAppはこれに対応していません。
そのため、backgroundTimeRemainingの30秒から、アプリの終了処理(applicationDidEnterBackground:メソッド)に用意された5秒を差し引いた、25秒程度で強制終了されてしまうようです。
なおAppleはバックグラウンドでの最大実行時間は示しておらず、動作時間の保証もしていません。
またメモリーの残量・バッテリーの状況・設定などによっては、バックグラウンド実行時間が短くなることがあるとも説明しています。
Appleのプライバシー・個人情報対策
Appleは、WWDC 2016でプライバシー・個人情報などの情報セキュリティを強化する方針を示しており、iOS 10以降では様々な対策がとられています。
またApple A8プロセッサ以降では、CPUレベルでのデータ暗号化なども行われています。
〈参考〉
→プライバシー - Apple(日本)
→Appleプラットフォームのセキュリティ - Apple
→iOSのセキュリティ iOS 10 - Apple
→iOS 13で導入される5つのセキュリティ強化策まとめ - Engadget 日本版
ただセキュリティを強化しすぎると、利便性が低下するのも事実です。
実際にiOS 13では、バックグラウンドに回したらアプリがすぐに落ちてしまう(App Background Executionの制限時間に達したため)や、位置情報の取得を確認するダイアログが頻繁に出て操作が面倒くさい(位置情報のプライバシー保護対策が作動したため)という苦情が出ていました。
いい塩梅にセキュリティと利便性を両立させるのは、難しそうです。