iOSアプリの64bit対応でやったことまとめ
2015年06月より64bit対応必須に
そういえば今月から64bit対応が必須になりました。アプリ申請時に64bit対応していないと自動的にはじかれます。64bit対応なんてすぐ終わるやーと思っていたんですが、なんだかんだ2週間くらいかかってしまいました…。やったことをまとめます。
64bit対応できているかどうかの確認方法
$xcrun lipo -info "バイナリのパス"
ipaを生成し、拡張子をzipに変更して解凍。
「Show Package Contents」
解凍した中身のパッケージ内にバイナリがあります。
これ。
公式のドキュメント
https://developer.apple.com/jp/documentation/CocoaTouch64BitGuide.pdf
ここに64bit移行ガイドがあります。この通りにやればOK。
64bit用ビルド設定
PROJECTの「Build Settings」から「Standard architectures」「Valid Architecture」にarm64を追加しました。
あとはビルドしてうまくいけばOK。
CGFloatでデザインが崩れた
CGFloatの返り値の型が32bitと64bitで異なります。
これが影響して、デザインがぐちゃぐちゃになったり、エラー処理がうまくいかないことがありました。
tableView:heightForRowAtIndexPath:のreturnに「float」の値を使っていたことが原因でデザインが崩れました。tableViewの高さが軒並み0になってましたね。
stackoverflow.com
ちゃんとCGFloatで定義するように修正。
NSIntegerに注意
同様にNSIntegerの返り値の型が32bitと64bitで異なるので注意が必要です。
NSNotFoundでエラー処理をしている場合は要チェック。なぜなら、NSNotFoundの値はNSIntegerMaxなので32bitと64bitで異なるからです。
ちゃんと型を合わせるように修正しました。
quesera2.hatenablog.jp
静的ライブラリの置き換え
一番面倒だったのは古くから使っていた静的ライブラリの置き換えです。32bitでしかビルドされていないライブラリを全部修正する必要がありました。ビルドし直すことができれば楽だったのですが、すでにもっと良いライブラリがたくさんでてたので一から置き換えました。保守されていないライブラリは使わないほうがよいですね…。
おわりに
そのうちSwiftでかかれたアプリしか受け付けないとかなるのではないかとびくびくしてます。少なくとも新規アプリはそうなりそうな気が。