iOSのipa(app)のProfileを異なるTeamのものに置き換えて実機で動かす
iosProfileを置き換えて有効期限やDevice IDを更新する。
iOSアプリのProvisioning profile - sambaiz-net
codesignでの試み
.ipa
をunzipすると .app
が出てくる。
$ unzip my-test-app.ipa
$ tree Payload/
Payload/
└── my-test-app.app
├── Base.lproj
│ └── LaunchScreen.storyboardc
│ ├── 01J-lp-oVM-view-Ze5-6b-2t3.nib
│ ├── Info.plist
│ └── UIViewController-01J-lp-oVM.nib
├── Info.plist
├── PkgInfo
├── _CodeSignature
│ └── CodeResources
├── embedded.mobileprovision
└── my-test-app
codesign
で entitlements を確認する。
$ codesign -d --entitlements :- my-test-app.app > entitlements.plist
$ cat entitlements.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>****.net.sambaiz.test-app</string>
<key>com.apple.developer.team-identifier</key>
<string>****</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>****.net.sambaiz.test-app</string>
</array>
</dict>
</plist>
--force
で上書き署名する。entitlementsなしで署名すると
The application could not be verified
になった。
$ codesign --force \
--sign "Apple Development: *****@***** (******)" \
--entitlements entitlements.plist \
my-test-app.app
これでデプロイしたところ A valid provisioning profile for this executable was not found
のエラーが出た。
単にcodesignするだけでは embedded.mobileprovision
は元のままだ。
また、Teamが異なればApp IDのPrefixも異なるので entitlements.plist
や Info.plist
を編集する必要があったりとなかなかやることが多い。
fastlaneのsighでのresign
調べてみるとfastlaneのsigh
でresignするとApp IDの変更や embedded.mobileprovision
の置き換えなどもやってくれるらしい。
fastlaneのインストール。
$ brew install fastlane
$ fastlane -v
fastlane 2.143.0
$ export FASTLANE_USER=****@****
# store password in the macOS Keychain
$ fastlane fastlane-credentials add -u ${FASTLANE_USER}
resignする。Profileはマニュアルで作ってダウンロードするか、
~/Library/MobileDevice/Provisioning Profiles
を探して使う。
$ fastlane sigh resign my-test-app.ipa --signing_identity "Apple Development: ****" -p "****.mobileprovision"
これをios-deployでデプロイしたところ無事成功した。便利。
試しにデプロイするDeviceを外したProfileでresignしてみると
The executable was signed with invalid entitlements
でインストールできなくなったので新しいProfileが効いてそうだ。
$ unzip my-test-app.ipa
$ ios-deploy --debug --bundle Payload/my-test-app.app