6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ipaのバンドルIDとプロビジョニングプロファイル(署名)の書き換え方法

Posted at

まずはスクリプト

#!/bin/sh

set -x

input=$1
bundle_identifier=$2
provision=$3
codesign="$4"
entitlements=$5
output=`basename ${input%.*}`.ipa
workdir=${output%.*}.payload
rootdir=$(cd `dirname $0` && pwd -P)

rm -rf $workdir
mkdir $workdir

case "$input" in
*\.ipa)
    # ipaを解凍
    cp $input $workdir
    (cd $workdir && unzip -q $output)
    rm $workdir/$output
    ;;
*\.app)
    mkdir $workdir/Payload
    cp -r $input $workdir/Payload
    ;;
*)
    exit 1
    ;;
esac

app=`ls -d $workdir/Payload/*.app`

# 署名を削除
rm -r $app/_CodeSignature
# プロビジョニングプロファイルを上書き
cp $provision $app/embedded.mobileprovision
# プロビジョニングプロファイルに合わせたバンドルIDに変更
plutil -replace CFBundleIdentifier -string $bundle_identifier $app/Info.plist
# 再署名
codesign --force --sign "$codesign" --entitlements $entitlements --timestamp=none $app
# ipaにパッキング
(cd $workdir && zip -qr $output Payload)

entitlements とは

entitlementsファイルはアプリに対する機能の設定であり、下記のフォーマットをベースに Capabilities の設定が追記される。

<?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>$(TEAM_ID).$(BUNDLE_IDENTIFIER)</string>
    <key>com.apple.developer.team-identifier</key>
    <string>$(TEAM_ID)</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(TEAM_ID).$(BUNDLE_IDENTIFIER)</string>
    </array>
</dict>
</plist>

書き換えに利用したいプロビジョニングプロファイルとバンドルIDでプロジェクトを xcodebuild でビルドすると、最後のほうで下記のような出力を得られるので、この *.app.xcent を利用するのが楽。

/usr/bin/codesign --force --sign XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --entitlements /Users/takezoh/testapp/build/Unity-iPhone.build/Release-iphoneos/Unity-iPhone.build/shared.app.xcent --timestamp=none /Users/takezoh/testapp/build/Release-iphoneos/shared.app

いつ使うん?

iOSはプロビジョニングプロファイルにより、インストールできるデバイスに制限があるので、貰ったipaを検証するときや、再配布する際に使ってます。

6
5
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?