プロビジョニングを入れ替える
#!/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/