bitcodeとは?
Apple TVについて、非iOSエンジニアの同僚と話していた際にbitcodeについて聞かれたので、調べ直し。
bitcodeとは?
bitcodeとは、アプリの中間表現のことです。
これをiTunes Connectへアップロードするバイナリへ含めることで様々な恩恵に浴することができます。
中間表現とは?
Xcodeがアプリをコンパイルする際、2回の変換を経て機械語からなるアプリの形に変換されますが、1回目の変換を経た形のことを中間表現(IR)と呼びます。
具体的には、以下のようなフローで処理が行われます。
1. Clangがソースコードを中間表現に変換
2. LLVMが中間表現を機械語に変換
bitcodeのメリット
App ThinningのBitcode
の項に記載があるように、bitcodeを含めたバイナリをアップロードしておくと、コンパイラが新しくなった場合にもAppleが自動で最適化を行ってくれるため、ユーザーに常に最適化された環境を提供できるというメリットがあります。
bitcode対応するために必要なこと
アプリをbitcode対応するためには、アプリそのものだけでなくアプリで使用している全てのライブラリがbitcode対応している必要があります。
以前の記事でも取り上げましたが、メジャーなSDK・OSSは多くが対応済となっています。
Carthageの場合
Apple Developer ForumsでAppleの社員が言及していますが、
BitcodeはArchiveビルドでのみ生成されるらしく、Carthageを使う場合、Bitcode対応することができませんでした。
しかし、Carthage側、ライブラリ側の対応によりCarthageを使う場合でもBitcode対応できるケースが増えてきているようです。
こちらのブログがその点に詳しいです。
まとめ
bitcode対応はiOSでは必須ではありませんが、行っておくとAppleが自動で最適化を行ってくれるという恩恵に浴することができ、
tvOSへの移植するも容易になります。
発表からある程度時間がたち、ライブラリやSDKの対応状況も進んできた状況ですので、bitcode対応しても良いかもしれません。