はじめに

Xcode7から、iOSのbitcode対応がデフォルトでONになっています。
「bitcode対応がされていると何が嬉しいんだっけ?」「というかbitcodeって何よ?」というところが
私の中で非常に曖昧だったので、調べてみました。



bitcodeとは

bitcode(LLVM bitcode)はSwiftの中間コードで、
Javaでいう中間コード(.classファイル)にあたります。

XcodeではClangとLLVMという2つのコンパイラが使用されており、
Clangでは字句解析、LLVMでは環境に合わせた機械語生成が行われます。
最終的にはLLVMで生成された機械語でアプリが動作します。

bitcode対応前後の違い

Xcode7より以前は、Xcode上で機械語生成までが行われていました。

bitcode対応後は中間コードの状態(bitcodeの状態)でApp Store Connectにアプリをアップロードすることになり、
Apple側で機械語への変換を行います。
こうすることで、開発者は将来的にアプリを入れ替えることなしに、
Appleが最適化したアプリをユーザに配布することができます。

bitcode対応のメリット

現状明確にどういった場面でメリットがあるのかは明確ではありませんが、
コンパイラのアップデート等が行われても問題なく動作する保証がされるということだと思います。
特に事情がなければ、対応しておくのが良いでしょう。



bitcode対応の注意点

利用しているライブラリを含めてすべてがbitcode対応している必要がある、という点です。
ソース内に組み込んでいるものも、CocoapodsやCarthageといったライブラリ管理ツールを利用しているものも、
すべてがその対象になります。
ライブラリのバージョンを上げないと非対応である可能性もあるので、
「ライブラリはbitocode対応されているか?」「bitcode対応されているバージョンまで上げることが可能か?」を
確認した上で対応するかどうか選択したほうが良さそうです。

とはいえ、デフォルトはONなので、今後非対応のアプリやライブラリは淘汰されていってしまうかもしれません…。

終わりに

わからないなりにちょっとした記事にしてみました。
メリットについてはわかるようなわからないようなという形になってしまいましたが、
Apple側が都合の良いようにしてくれるのであれば対応しない選択肢はないのかなと思いました。
Appleはアップデートが多いので今後また方針等変わっていく可能性があるでしょうが、
引き続き追っていければと思います。

スポンサーリンク