iOS beta4 クラッシュの修正#
はじめに#
iOS Beta4 にアップグレードした後、ユーザーから私たちのアプリを使用するとクラッシュするとのフィードバックがありました。ログインや詳細の表示など、すべての場面でクラッシュが発生します。Bugly のデータを確認したところ、クラッシュ率が 0.02% 上昇し、指定されたクラッシュ基準を超えています。これはベータ版システムのアップグレードによるものですが、具体的な原因を特定し、できるだけ早く対応する必要があります。そこで、私が見つけた API の問題について説明し、参考にしていただきたいと思います。
問題の特定#
クラッシュが必ず発生するため、特定するのは簡単です。iOS14 beta4 がインストールされた iPhone を 1 台用意し、手順を再現して具体的なクラッシュ箇所を確認します。
私たちのアプリはSexyJsonというライブラリを使用しており、その中の SexyJsonProtocol クラスの 67 行目にある sexyToValue () メソッドで AnyRandomAccessCollection を使用しています。以前のシステムバージョンでは、この部分が空でない値を返していたため、問題はありませんでしたが、このバージョンではこのプロパティが空になり、新しいシステムでクラッシュが発生しました。
以下の画像の場所:
修正#
強制アンラップによる問題なので、修正方法は単純です。この部分の強制アンラップを if let の形式に変更し、修正後に実行すると、クラッシュが実際に解消されます。ただし、検証中に、このメソッドを使用してオブジェクトをパラメータの辞書に変換しているため、クラッシュは解消されましたが、通常存在するはずの値も存在しません。つまり、このメソッドを使用して辞書に変換するすべてのリクエストが失敗しました。心配しなくても大丈夫です。この部分でエラーが直接スローされるため、修正しただけでリリースするつもりはありません。サーバーサイドはエラー率が急上昇することに気づくでしょう。この部分の実装を注意深く分析すると、実際には Mirror を使用してクラスのすべてのプロパティを取得して辞書を生成していることがわかります。ステップバイステップでデバッグすると、Mirror クラスは正常に動作しており、mirror.children も影響を受けませんが、AnyRandomAccessCollection (mirror.children) は空を返します。つまり、AnyRandomAccessCollection () メソッドは iOS14 beta4 では正常に動作しなくなったということです。そのため、再度修正します。
以下の画像の場所:
最初の修正:
2 回目の修正:
最後に#
したがって、私たちのプロジェクトで iOS14 beta4 でのクラッシュは SexyJson ライブラリの強制アンラップによるものですが、真の原因は iOS14 beta4 で AnyRandomAccessCollection () メソッドが正常に動作しなくなったことです。