LoginSignup
27
27

More than 5 years have passed since last update.

再ビルドせずに設定を変える方法(iOS/Android)

Last updated at Posted at 2015-11-08

ビルドした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

上記のコマンドをたたくと以下の様な値が表示されるので、必要な箇所のみ変更する。

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>[アプリの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名> <キーストアのエイリアス>
27
27
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
27
27