Posted at

ipaファイルのProvisioningを差し替える

More than 5 years have passed since last update.


プロビジョニングを入れ替える

#!/bin/bash

#元のipaファイル
IPA_FILE=test.ipa

#出力するipaファイル
DEST_FILE=test_copy.ipa

#差し替えるProvisioning Profile
PROV_FILE=test.mobileprovision

#差し替えるEntitlements
ENTITLEMENTS=Entitlements.plist

#差し替える署名の証明書の名前
SIGN="iPhone Developer: DEVELOPER NAME (XXXXXXXXXX)"

mkdir -p tmp
cp ${IPA_FILE} tmp
cd tmp
unzip -q ${IPA_FILE}
APP_FILE=Payload/`ls Payload`

#署名を削除
rm -r ${APP_FILE}/_CodeSignature

#プロビジョニングファイルを新しいものに置き換え
cp ../${PROV_FILE} ${APP_FILE}/embedded.mobileprovision

#.appに署名し直す
codesign --force --sign "${SIGN}"\
--resource-rules ${APP_FILE}'/ResourceRules.plist' ${APP_FILE}

# #.appを署名し直す(entitlementsも書き換える)
# codesign --force --sign "${SIGN}"\
# --resource-rules ${APP_FILE}'/ResourceRules.plist'\
# --entitlements ../${ENTITLEMENTS} ${APP_FILE}

#署名が上手くいったか確認
codesign -d --entitlements - ${APP_FILE}

# #再パッケージ(使う時は、次のzip圧縮はいらない。失敗するかも・・・)
# /usr/bin/xcrun -sdk iphoneos PackageApplication\
# -v ${APP_FILE} -o ${DEST_FILE} --sign "${SIGN}" --embed ../${PROV_FILE}

#zip圧縮で新しいipaファイル作成
zip -qr ${DEST_FILE} Payload
cp -f ${DEST_FILE} ../
cd ../
rm -rf tmp



キーチェーンに登録された証明書の一覧を出力する

security find-identity -p codesigning -v



Entitlements.plistサンプル

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 

<!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>XXXXXXXXXX.*</string>
<key>keychain-access-groups</key>
<array>
<string>XXXXXXXXXX.*</string>
</array>
<key>get-task-allow</key>
<true/>
</dict>
</plist>


参考

iOSアプリの署名を付け替える - Qiita [キータ]

http://qiita.com/beakmark/items/33c0b73603e491f08a33

iOS アプリのprovisioning profile差し替え方法 | Septeni Engineers' Blog | セプテーニ エンジニアブログ

http://labs.septeni.co.jp/?p=815

doesNotRecognizeBlog, codesign(1) についてのメモ

http://mtakagi.tumblr.com/cli/codesign.1/