LoginSignup
33

More than 5 years have passed since last update.

[Appium] Ad-hoc用のipaファイルを開発者用の署名に差し替えてAppiumで使用できるようにする

Last updated at Posted at 2015-01-29

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エンコード)

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>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
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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33