先日、iOSのマイナーアップデートで、アプリが起動しなくなるという最悪の状況がありました。
クラッシュした場所は、iOS 7でDeprecatedとなった次の関数。
drawAtPoint:forWidth:withFont:minFontSize:actualFontSize:lineBreakMode:baselineAdjustment:
Availability
Available in iOS 2.0 and later.
Deprecated in iOS 7.0.
『Deprecatedは、そのバージョン以降サポートされない非推奨のAPI』という認識はあってるとは思うのだけど、クラッシュに繋がったのは今回が初めてです。
旧iOSバージョンをサポートしたアプリをビルドする際、
たとえば iOS 5〜 としてバイナリを作成する時、6や7でDeprecatedされている関数は、ビルド時の警告が出ないため、そのまま使ってしまう場合があります。
対象をiOS 7以降としてビルドすると、6や7でDeprecatedのAPIは警告されます。
今回の件で、非推奨となったAPIの上位互換はずっとあるわけではなく、いずれクラッシュする可能性を秘めているという認識に変わりました。
少し前、アプリがダウンロードしようとするiOSに対応していない場合、そのiOSで動作する旧バージョンのバイナリが落とせるようになりました。
version 2.0 iOS 7以降
version 1.0 iOS 6以降
iOS 7のiPhoneでダウンロードすると、version 2.0がインストールされる。
iOS 6のiPhoneでダウンロードすると、version 1.0がインストールされる。
今回のクラッシュはたまたまなのか、もしくは上記の件で上位下位互換をあまり考慮されなくなった可能性を考えると、今後のアプリの対応iOSは極力最新にしておくか、旧iOSも対象とする場合は、Deprecatedにバージョンによって処理を変えるようなラッパーを確実に用意しないといけない。
そもそもラッパーは確実に用意しないといけなかった。(ということか)
今回はそんなに数も出ていないアプリだったけれど、初の特急審査をお願いし、即日リリースしてもらえてどうにかなりました。
そもそも数の出てるアプリはそんなになかった。( )
今後の新作は、7以降が無難かな〜と思った事件でしたね。
落ちてしまったのはこのアプリでした。
iPhone用 次世代メッセージツール登場! LINEやTwitterにも 「メモエカ」
あと、Helveticaのイタリックフォント(HelveticaNeue-Italic)が何故か使えなくなった。