Ad-hoc用に配布されたipaファイルを自分の開発者署名で再署名して、
Appiumで使用できるようにするためのメモ。
(AppiumはDevelopment
のプロビジョニング プロファイルでビルドされたアプリしか使用できないため)
用意するもの
ipaファイル
Ad-hoc用に配布された、署名を差し替える前のipaファイル
embedded.mobileprovision
- Development用の iOS Provisioning Profiles
- Apple Developer Member Center からダウンロードしてくる
entitlements.plist
方法1. テキストエディタで作成する(UTF-8エンコード)
<?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>PREFIX.ID</string>
<key>com.apple.developer.team-identifier</key>
<string>TEAM-IDENTIFIER</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>PREFIX.ID</string>
</array>
</dict>
</plist>
※下記の箇所は自分の環境にあわせて書き換えること
TEAM-IDENTIFIER
embedded.mobileprovision
をテキストエディタで開き、 com.apple.developer.team-identifier で検索
PREFIX.ID
Develper Member Center の Identifiers > App IDs. で Prefix と ID を調べる
方法2. 適当なipaファイルから抜き出す
- Xcodeで適当なプロジェクトを開く
- iOS実機端末に対して
Run
でデバックビルドを実行 - 下記ディレクトリにappファイルが作成されていることを確認
~/Library/Developer/Xcode/DerivedData/<ランダムな文字列>/Build/Products/Debug-iphoneos
- 下記コマンドを実行し、出力結果を
entitlements.plist
という名前で保存する(UTF-8エンコード)
cd ~/Library/Developer/Xcode/DerivedData/<ランダムな文字列>/Build/Products/Debug-iphoneos
codesign -d --entitlements - <アプリ名.app>
署名の差し替え手順
方法1. 手動で差し替える
1. ipaファイルをZIP解凍する
unzip -q <ipaファイルのパス>
2. embedded.mobileprovision を差し替える
上記で用意した embedded.mobileprovision
で、app内の同名のファイルを上書きする
cp embedded.mobileprovision Payload/MyApplication.app/embedded.mobileprovision
3. appファイルを署名し直す
PCにインストール済みの証明書を調べる
security find-identity -p codesigning -v
署名を実行
codesign --force --sign 'iOS Development: your name (XXXXXXXXXX)' --resource-rules 'MyApplication.app/ResourceRules.plist' --entitlements entitlements.plist 'MyApplication.app'
方法2. シェルスクリプトを使用する
必要なファイルをすべて同じフォルダに置いて、下記コマンドを実行
sh resign.sh MyApplication.ipa
- 署名差し替え前のipaファイル
- embedded.mobileprovision
- entitlements.plist
- resign.sh
#!/bin/bash
# ReSignするipaファイル
IPA_FILE=$1
# Provisioning Profile
PROV_FILE="embedded.mobileprovision"
# Entitlements
ENTITLEMENTS="entitlements.plist"
# iPhone Developer証明書
# 明示的に指定する場合
# SIGN="iPhone Developer: Your Name (1A2B3C4D5E)"
# 自動で取得する場合
SIGN=`security find-identity -p codesigning -v | grep "Developer"`
SIGN=`echo "${SIGN}" | awk 'match($0, /\".*\"/) {print substr($0, RSTART+1, RLENGTH-2)}'`
echo $SIGN
# ipaファイルをzip解凍
mkdir -p tmp
cp ${IPA_FILE} tmp
cd tmp
unzip -q ${IPA_FILE}
APP_FILE=Payload/`ls Payload`
# プロビジョニングファイルを新しいものに置き換え
cp ../${PROV_FILE} ${APP_FILE}/embedded.mobileprovision
# .appを署名し直す(entitlementsも書き換える)
codesign --force --sign "${SIGN}"\
--resource-rules ${APP_FILE}'/ResourceRules.plist'\
--entitlements ../${ENTITLEMENTS} ${APP_FILE}
# 署名が上手くいったか確認
codesign -d --entitlements - ${APP_FILE}
# zip圧縮で新しいipaファイル作成
DEST_FILE="${IPA_FILE%.*}_resign.ipa"
zip -qr ${DEST_FILE} Payload
cp -f ${DEST_FILE} ../
cd ../
rm -rf tmp
方法3. Re-signアプリを使用する
参考
http://dev.mlsdigital.net/posts/how-to-resign-an-ios-app-from-external-developers/
http://qiita.com/fujisan3/items/d037e3c40a0acc46f618
http://qiita.com/seyself/items/8f62677547ef597cee67