iOS15でexpoアプリが「アップデートの必要があります」と出て起動しない場合の対応
expoで作成したInHouse(Enterprise)アプリで、iOS15にアップデート後に「デベロッパーによるアップデートが必要です」と出て起動しない現象が出ています。(21/9/22)
※あまり大騒ぎになっていないので、InHouseのみかと思います。
expo build:ios
でビルドしなおしても、SDK42にアップデートしても同様のエラーとなります。
解決方法
ビルドサーバーが対応するまでは、ローカル環境(XCode 14.5 or 15)でビルドします。
必要な物
- turtle-cli
- fastlane
- XCode
手順
$ npm install -g turtle-cli
$ brew install fastlane
下記のようなMakefileを作りました
make_ipa:
@echo "Building IPA"
EXPO_IOS_DIST_P12_PASSWORD='hogehoge' \
turtle build:ios \
-u <expo user> -p <expo pass> \
--team-id <teamid> \
--dist-p12-path <.p12 path> \
--provisioning-profile-path <.mobileprovision path> \
--public-url https://exp.host/<hostpath> \
-o build/my-sample.ipa
エラーなど
-
EXPO_IOS_DIST_P12_PASSWORD
を指定しなかったりパスワードを間違えるとエラーになります。エラーを見ても間違いがわかりにくいので注意。 - Provisioningなどはexpoにアップロードしてあるものをダウンロードすると間違いないです
- public-urlはexpoのアプリパスでメタデータを引いてくるため必須です。
参考
- eas.jsonを追加する方法では効果ありませんでした(有償プラン必須?)
- ビルドサーバーはXCode13が正式リリースになれば対応するとの事。
背景
どうやらEnterpriseアプリケーションのコード署名方法に何らかの変更があったようです。
下記に、AppStore, Testflightの場合は配布時に置き換えるので影響しないが、直接配布するadhocは影響しmacOS10.14(Mojave)以降では新しいフォーマットで署名されますとあります。
Look in the output for a string like CodeDirectory v=20500. For any value of v less than 20400, you’ll need to re-sign your app.
コードサインの確認
$ unzip old.ipa
$ codesign -dv Payload/ExpoKitApp.app
Executable=...
Identifier=...
Format=app bundle with Mach-O thin (arm64)
CodeDirectory v=20400 size=303198 flags=0x0(none) hashes=9466+5 location=embedded
確認するとたしかにCodeDirectory v=20400
で、更新の必要があるようです。
むにゃむにゃ
いつもexpoのビルドを便利に使っていたのですが、CLIからも意外に簡単にビルドする事ができました。待ち時間も無いので一度設定しておくと良いかと思います。どうして署名が古いのかは謎です。
Author And Source
この問題について(iOS15でexpoアプリが「アップデートの必要があります」と出て起動しない場合の対応), 我々は、より多くの情報をここで見つけました https://qiita.com/bellx2/items/63eb85fed9e6044c7ec6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .