読者です 読者をやめる 読者になる 読者になる

NSBlogger

意識高いブログ

iOSアプリの64bit対応でやったことまとめ

objectivec

2015年06月より64bit対応必須に

そういえば今月から64bit対応が必須になりました。アプリ申請時に64bit対応していないと自動的にはじかれます。64bit対応なんてすぐ終わるやーと思っていたんですが、なんだかんだ2週間くらいかかってしまいました…。やったことをまとめます。

64bit対応できているかどうかの確認方法

$xcrun lipo -info "バイナリのパス"

ipaを生成し、拡張子をzipに変更して解凍。
f:id:Kamekiti:20150622132627p:plain
「Show Package Contents」
解凍した中身のパッケージ内にバイナリがあります。
f:id:Kamekiti:20150622132700p:plain
これ。

公式のドキュメント

https://developer.apple.com/jp/documentation/CocoaTouch64BitGuide.pdf

ここに64bit移行ガイドがあります。この通りにやればOK。

64bit用ビルド設定

PROJECTの「Build Settings」から「Standard architectures」「Valid Architecture」にarm64を追加しました。
f:id:Kamekiti:20150622132533p:plain
あとはビルドしてうまくいけば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でかかれたアプリしか受け付けないとかなるのではないかとびくびくしてます。少なくとも新規アプリはそうなりそうな気が。