こんにちは。iOSエンジニアのshobyです。
最近、頭痛の種だった、iOS9でアップデート後にアプリが起動できなくなる問題について、原因が判明し、解決方法がわかったため、お伝えします。
この問題はiOSのバグが原因です。 ユーザーへは、iOSの9.3.2へのアップデートを案内しましょう。
アプリ側の対策としては、使用するサードパーティ製Frameworkの数を減らすことで、問題発生の可能性を減らすことができます。
iOS9でアップデート後にアプリが起動できなくなる問題とは
iOS 9のユーザーがアップデートをきっかけとして、アプリを使用できなくなるという問題です。
以下の2パターンの現象が確認されています。
以下の図はフリルのiTunesConnect App Analyticsのクラッシュ数のグラフです。グラフ中の縦の線がアップデートのあったタイミングです。
アップデート直後のみクラッシュ数が増加しているのがわかると思います。
アップデート後のクラッシュに関しては、アプリの起動前に発生するため、Crashlyticsではクラッシュログが収集できませんでした。 そのため、起動できないというレビューや問い合わせが相次いでも、クラッシュの原因が突き止められないという状態になっていました。*3
また、この問題はフリルだけでなく、多くのアプリで発生していました。 私の調査では、古くからある規模の大きなアプリで発生しやすく、新しく規模の小さなアプリでは発生していないように見られました。*4
原因
これらの問題は、iOSのバグが原因でした。 iOS 9.3.2で修正されており、アップデートをすれば発生しなくなります。*5
アップデート後などのメモリ不足のタイミングで、多くのFrameworkを使用しているアプリでのみ発生するようです。 以下のリンクを参照ください。
Frameworkの数が問題に影響したため、SwiftとObjective-Cを併用しているアプリや、規模の大きなアプリで発生しやすく、比較的規模の小さいアプリでは発生しづらいという状況が生まれたようです。
解決方法
ユーザーへの案内
AppStoreの説明文やバージョン情報で、iOS 9.3.2へのアップデートを案内しましょう。*6
アプリが起動できなくなっているため、アプリ内からはお問い合わせに誘導することができません。
フリルでもバージョン情報の欄でiOS 9.3.2へのアップデートを案内しています。
また、メモリ不足が改善されると一時的に改善されることもあるため、急ぎのユーザーにはバックグラウンドで起動中のアプリを消した上で、iPhoneの再起動を案内すると良いと思います。
アプリの修正
iOS 9.3.2未満のユーザーに対しては、使用しているサードパーティFrameworkの数を減らせば、問題発生の可能性を減らすことができます。
フリルの場合、10個ほどのFrameworkを減らした結果、iTunesConnect App Analyticsのクラッシュ数を減らすことができました。 それに伴い「起動できない」といった内容のレビューも減りました。
ただし、完全に問題を解決することはできません。iOS 9.3.2へのアップデート案内を合わせて対策を進めると良いと思います。
まとめ
iOS 9でアップデート後にアプリが起動できなくなる問題は、iOSのバグが原因です。 アップデート後などのメモリ不足のタイミングで、多くのFrameworkを使用しているアプリのみで発生するようです。
対策としては、ユーザーへiOS 9.3.2へのアップデートを案内しましょう。 また、iOS 9.3.2未満のユーザーに対しては、使用するサードパーティFrameworkの数を減らすことで問題発生の可能性を減らすことができます。