【第23回】アップルがiOS 8と64bit対応を義務化!アプリ開発者がやるべきこととは? | Podcast配信

23kai
【第23回】アップルがiOS 8と64bit対応を義務化!アプリ開発者がやるべきこととは? | Podcast配信

第23回では来年3月以降に義務づけられる64bit対応についてお話ししていきます。

アップルはiPhone 5s / A7プロセッサ / iOS 7 からモバイルでの64bit対応を進めてきました。
64bit環境のiOS機器でも32bitアプリは問題なく動くため、現在は32bitのみアプリもApp Storeに存在していますが、来年2月以降の新規アプリおよび更新では、iOS 8 対応とともに64bit対応も含むことが義務付けられます。対応に向けてアプリ開発者がとるべき対策などについてお伝えします。

64bit対応

<対応ハード>

  • iPhone 5S , iPhone6, iPhone6+, iPad Air2

<長所>

  • 対応によっては処理が早くなる。
  • 扱えるメモリの容量が 4GB を超える

<短所>

  • アプリの対応も必要。
  • iPhone5S以前の機種で動くの?

ここが最初謎だったのですが、Xcodeで64ビット対応アプリをアーカイブすると32ビット/64ビットそれぞれのバイナリがビルドされるようです(中間言語などではなく、ネイティブコンパイルされる)。
こうして複数のCPU用のバイナリを格納したものを、一般的には「ファットバイナリ」だとか「同梱バイナリ」だとか言うようです(公式ドキュメントでは「混成バイナリ」とありますが、直訳の予感)。

<64ビットへ対応するための手順>

  •  Xcode6が必要(開発の際にはiOS 8 SDKが含まれるXcode 6以降で開発を行なうことが必要。)
  • 移行ガイドはAppleがドキュメントを提供している。

->公式日本語ドキュメントに全部載っていますのでこれに目を通して頂ければ問題ないかと思います。
参考:Cocoa Touch 64ビット移行ガイド

まとめ

64ビット環境でも正常に動作するコードを記述するために必要な、主な事項を整理すると次のようになります。

  • 64ビットlong整数を32ビット整数に代入しない。
  • 64ビットポインタを32ビット整数に代入しない。
  • 算術演算の際に起こるポインタやlong整数の切り捨て(その他、整数型の違いによる算術演算上の問題)を避ける。
  • データ型のバイト長の違いによって起こる、揃え境界の問題を解消する。
  • 32ビットランタイム、64ビットランタイムで共通に用いる構造体は、メモリ上の配置が同じであるようにする。
  • アセンブリ言語で記述したコードは、64ビット版の新しい命令コードやランタイムに合わせて書き直す。
  • 可変引数の関数を固定引数の関数に(あるいはその逆に)キャストすることは避ける。

32ビットでは、int型もlong型も32ビット長なので、コードそのものは正しくなくても、int型の変数には正常に代入できます。一方、64ビットであれば、代入の結果、上位32ビットが失われてしまいます。戻り値をlong整数に代入するように変更すれば、どちらのランタイムでも正常に動作します。

紹介した移行の際に便利な日本語ドキュメントのリンク

Cocoa Touch 64ビット移行ガイド

アプリ開発講師の裏話
iTunesまたはPodcastで視聴する場合はこちら

  • このエントリーをはてなブックマークに追加

関連記事

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

お手軽連続再生

ページ上部へ戻る