「ここのUIちょっと変えたやつ、実機で見れない?」と言われてから最速で実機確認できるようにする方法

前提

  • iOSの話をします。きっとAndroidも似たような感じで出来ます。
  • 説明に使っているプロジェクトはこちら。

実現出来るようになること

このUIを
f:id:kyubuns:20200418134950p:plain

こんな感じに編集したら
f:id:kyubuns:20200418135010p:plain

すぐに手元のiPhoneで新しいUIを確認できる!!
f:id:kyubuns:20200418135024j:plain

考えてみる

ボタンの位置をちょっと変更しただけなのに、ビルドを10分待たないと確認できない・・・っていうのは時間の無駄です。
UnityのiOSビルドは頑張ってもそこそこの時間がかかるので、
ビルドしないでUIだけ差し替える方法を考えてみます。

案1 : UIをAssetBundleにしてWebで配信する

まあみんなやってるだろうなってやつです。
リリースバージョンでもAssetBundleはWebで配信する予定なら開発中もこれやってるところが多いと思います。

案2 : ipaの中身を無理矢理いじってAssetBundleを置き換える

今回ご紹介したいのはこちら。
AssetBundleをWebで配信する予定は無いし、わざわざ入れるのもなーって方向け。
ビルド済みのipaのStreamingAssets内に入っているAssetBundleを差し替え、再び署名すれば最速で配信出来る!という荒業です。

unzip original.ipa
cp Assets/StreamingAssets/AssetBundles/* Payload/*.app/Data/Raw/AssetBundles/
codesign -d --entitlements :- Payload/*.app > entitlements.plist
codesign --force --sign 'iPhone Distribution: **********' --entitlements entitlements.plist --timestamp=none Payload/*.app
zip -r new.zip Payload
mv new.zip new.ipa

普通にビルドすると10分かかるプロジェクトでも、この方法ならたった5秒で新しいipaが出来上がります。 ぜひご活用ください。