ビルドしたiOSアプリやAndroidアプリの設定を少しだけ変えたいことは結構あったりします。
そこで再ビルドせずに設定をかえる方法をまとめてみました。
iOSアプリの場合
事前準備
以下のものを用意する。
- 対象となるipaファイル
- 仮にtarget.ipaとする。
- BundleIdentifierをかえる場合は、変更後のProvisioningProfile
- 仮にtarget.mobileprovisionとする。
手順
1) ipaファイルを展開する
unzip target.ipa
展開するとPayloadディレクトリができ、ディレクトリ内にappファイルが出来ている。
2) appファイルを開く
- 「パッケージの内容を表示」を選択。
- 変更したい設定を変える。
- info.plist内の値を変更することが一般的かと思う。
3) entitlements.plistを用意する
codesign -d --entitlements - target.app
上記のコマンドをたたくと以下の様な値が表示されるので、必要な箇所のみ変更する。
<?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>[アプリのappId]</string>
<key>com.apple.developer.team-identifier</key>
<string>[あなたのTeamID]</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>[アプリのappId]</string>
</array>
</dict>
</plist>
[]で囲まれた箇所を変更する必要があれば変える。
※BundleIdentifierを変更する場合は、[アプリのappId]を変更する必要がある。
[追加事項] BundleIdentifierを変更する場合
BundleIdentifierを変更する場合は、以下もおこなう。
1) _Codesignatureディレクトリを削除する。
rm -r Payload/target.app/_Codesignature
2) appファイル内にあるInfo.plistからBundle identifierを更新する。
appファイルを 「パッケージの内容を表示」から中身を見て、Info.plistを書きかえる。
3) Provisioning Profileを新しいBundleIdentifierに合致するものに更新する。
cp target.mobileprovision sample.app/embedded.mobileprovision
4) 再署名
codesign -f -s "証明書の名前" --entitlements entitlements.plist $(PWD)/sample.app
証明書の名前は、キーチェーンアクセスから確認することが出来る(例:iPhone Developer: 名前(XXXXXX))。
5) appファイルからipaファイルを生成
xcrun -sdk iphoneos PackageApplication target.app -o $(PWD)/new.ipa
Androidアプリの場合
事前準備
- apktool
- apktoolのダウンロードや詳細は別サイトを参照のこと。
- 対象となるapkファイル
- 仮にtarget.apkとする。
手順
1) デコード
apktool d target.apk
デコードが終わると、targetディレクトリが出来ています。
[補足]
デコードがうまくいかない場合は、framework.apkが古い場合がある。
その時は、Android端末を接続し以下のコマンドをおこない再度デコードをする。
adb pull /system/framework/framework-res.apk
apktool if framework-res.apk
2) ファイルの変更
変更したい箇所を変更する。
packagenameを変えたい場合は、「AndroidManifest.xml」から値を変更する。
3) ビルド
apktool b target
何も指定しないとtargetディレクトリのdistディレクトリにapkファイルが生成される。
4) 再署名
apkファイルが出来たら以下のコマンドで再署名をおこなう。
jarsigner -sigalg MD5withRSA -digestalg SHA1 -verbose -signedjar <署名後のapk名> -keystore <キーストアファイルへのパス> <署名前のapk名> <キーストアのエイリアス>