Skip to content

Commit

Permalink
Merge pull request #258 from yumemi-inc/feature/GH-257
Browse files Browse the repository at this point in the history
[GH-257] Android Application ID と iOS Bundle ID を別々にリネームできるようにする
  • Loading branch information
K9i-0 committed Jun 17, 2024
2 parents 0a21420 + 0f63f12 commit 5e56257
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 44 deletions.
30 changes: 16 additions & 14 deletions .github/initialization/RENAME_APPLICATION_ID.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,32 @@
## 概要

`/tools/rename-application-id.sh`を実行して、FlutterプロジェクトのアプリケーションIDの名前を変更するプロセスを自動化してください
`/tools/rename-application-id.sh` を実行して、Flutter プロジェクトのアプリケーション ID の名前を変更してください

このスクリプトは以下のステップを実行します
このスクリプトは以下のステップを実行します:

1. `flavor`ディレクトリ内の構成JSONファイルのアプリケーションID定義を変更します
2. `app`モジュール内の`build.gradle`ファイルの`namespace`の定義を新しいアプリケーションIDで更新します
3. 更新されたパッケージ名で新しい`MainActivity.kt`ファイルを生成します
4. 古い`MainActivity.kt`ファイルを削除します
1. `flavor` ディレクトリ内の JSON ファイルのアプリケーション ID 定義を変更します
2. `app` モジュール内の `build.gradle` ファイルの `namespace` の定義を新しいアプリケーション ID で更新します
3. 古い `MainActivity.kt` ファイルを削除します
4. 更新されたパッケージ名で新しい `MainActivity.kt` ファイルを作成します

## 使用方法

このスクリプトを使用するには、以下の手順に従ってください
このスクリプトを使用するには、以下の手順に従ってください:

1. スクリプトの実行に必要な権限があることを確認してください。
2. スクリプトの実行時に、新しいアプリケーションIDを引数として指定する。

```bash
bash rename-application-id.sh "com.example.rename"
2. スクリプトの実行時に、新しいアプリケーションIDを引数として指定してください。
- 第 1 引数: Android のアプリケーションID
- 第 2 引数: iOS の Bundle ID

```sh
cd tools
chmod +x rename-application-id.sh # 必要に応じて設定してください。
./rename-application-id.sh "com.example.android.rename" "com.example.ios.rename"
```

`com.example.rename`を希望する新しいアプリケーションIDに置き換える
これにより Android の Application ID が `com.example.android.rename` へ、iOS の Bundle ID が `com.example.ios.rename` へ変更されます

## 参考

- [Configure the app module](https://developer.android.com/build/configure-app-module)
- [CFBundleIdentifier](https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleidentifier)

*ChatGPT 3.5の支援により作成。*
2 changes: 1 addition & 1 deletion apps/app/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ android {
}

defaultConfig {
applicationId = "${dartDefines.appId}"
applicationId = "${dartDefines.appIdAndroid}"
if (dartDefines.appIdSuffix != null) {
applicationIdSuffix = "${dartDefines.appIdSuffix}"
}
Expand Down
3 changes: 2 additions & 1 deletion apps/app/flavor/dev.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"flavor": "dev",
"appName": "dev-Template",
"appId": "jp.co.yumemi.template",
"appIdAndroid": "jp.co.yumemi.template",
"appIdIos": "jp.co.yumemi.template",
"appIdSuffix": ".dev"
}
3 changes: 2 additions & 1 deletion apps/app/flavor/prd.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"flavor": "prd",
"appName": "Template",
"appId": "jp.co.yumemi.template",
"appIdAndroid": "jp.co.yumemi.template",
"appIdIos": "jp.co.yumemi.template",
"appIdSuffix": ""
}
3 changes: 2 additions & 1 deletion apps/app/flavor/stg.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"flavor": "stg",
"appName": "stg-Template",
"appId": "jp.co.yumemi.template",
"appIdAndroid": "jp.co.yumemi.template",
"appIdIos": "jp.co.yumemi.template",
"appIdSuffix": ".stg"
}
12 changes: 6 additions & 6 deletions apps/app/ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = "$(appId)$(appIdSuffix)";
PRODUCT_BUNDLE_IDENTIFIER = "$(appIdIos)$(appIdSuffix)";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
Expand All @@ -491,7 +491,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "$(appId)$(appIdSuffix).RunnerTests";
PRODUCT_BUNDLE_IDENTIFIER = "$(appIdIos)$(appIdSuffix).RunnerTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
Expand All @@ -509,7 +509,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "$(appId)$(appIdSuffix).RunnerTests";
PRODUCT_BUNDLE_IDENTIFIER = "$(appIdIos)$(appIdSuffix).RunnerTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
Expand All @@ -525,7 +525,7 @@
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "$(appId)$(appIdSuffix).RunnerTests";
PRODUCT_BUNDLE_IDENTIFIER = "$(appIdIos)$(appIdSuffix).RunnerTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
Expand Down Expand Up @@ -652,7 +652,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = "$(appId)$(appIdSuffix)";
PRODUCT_BUNDLE_IDENTIFIER = "$(appIdIos)$(appIdSuffix)";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
Expand All @@ -674,7 +674,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = "$(appId)$(appIdSuffix)";
PRODUCT_BUNDLE_IDENTIFIER = "$(appIdIos)$(appIdSuffix)";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
Expand Down
42 changes: 22 additions & 20 deletions tools/rename-application-id.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,18 @@ set -e
PROJECT_ROOT=$(git rev-parse --show-toplevel)

# [Step0] Check if application ID is provided
if [ -z "$1" ]; then
echo "Please provide application ID to first argument."
echo "Usage: bash $PROJECT_ROOT/tools/rename-application-id.sh "com.example.rename""
if [ "$#" -ne 2 ]; then
echo "Please provide Android application ID to first argument and iOS bundle ID to second argument."
echo "Usage: $PROJECT_ROOT/tools/rename-application-id.sh "com.example.android.rename" "com.example.ios.rename""
exit 1
fi

echo "Starting application ID renaming process..."

readonly NEW_APPLICATION_ID=$1
readonly OLD_APPLICATION_ID="jp.co.yumemi.template"
readonly NEW_ANDROID_APPLICATION_ID=$1
readonly NEW_IOS_APPLICATION_ID=$2
readonly OLD_ANDROID_APPLICATION_ID="jp.co.yumemi.template"
readonly OLD_IOS_APPLICATION_ID="jp.co.yumemi.template"
readonly OLD_NAMESPACE="jp.co.yumemi.flutter_app"
readonly OLD_PACKAGE_NAME="jp.co.yumemi.flutter_app"

Expand All @@ -36,39 +38,39 @@ for file in "$FLAVOR_DIRECTORY_PATH"/*.json; do

# [Options] -i extension:
# Edit files in-place, saving backups with the specified extension. If a zero-length extension is given, no backup will be saved.
sed -i '' "s/\"appId\": \"$OLD_APPLICATION_ID\"/\"appId\": \"$NEW_APPLICATION_ID\"/" "$file"
sed -i '' "s/\"appIdAndroid\": \"$OLD_ANDROID_APPLICATION_ID\"/\"appIdAndroid\": \"$NEW_ANDROID_APPLICATION_ID\"/" "$file"
sed -i '' "s/\"appIdIos\": \"$OLD_IOS_APPLICATION_ID\"/\"appIdIos\": \"$NEW_IOS_APPLICATION_ID\"/" "$file"
done

# [Step2] Replace the namespace definition in build.gradle in the app module with the new application ID.
echo "[Step2] Replacing the namespace definition in build.gradle in app module with new application ID..."

readonly APP_BUILD_GRADLE_PATH="$PROJECT_ROOT/apps/app/android/app/build.gradle"

sed -i '' "s/namespace \"$OLD_NAMESPACE\"/namespace \"$NEW_APPLICATION_ID\"/" "$APP_BUILD_GRADLE_PATH"
sed -i '' "s/namespace \"$OLD_NAMESPACE\"/namespace \"$NEW_ANDROID_APPLICATION_ID\"/" "$APP_BUILD_GRADLE_PATH"

# [Step3] Create new MainActivity.kt
# [Step3] Delete old MainActivity.kt
echo "[Step3] Deleting old MainActivity.kt..."
# Backup old MainActivity.kt content and replace the application ID in the content.
readonly MAIN_ACTIVITY_START_PATH="$PROJECT_ROOT/apps/app/android/app/src/main/kotlin"

readonly OLD_MAIN_ACTIVITY_PATH="$MAIN_ACTIVITY_START_PATH/$(echo $OLD_PACKAGE_NAME | tr '.' '/')"
readonly OLD_MAIN_ACTIVITY_CONTENT=$(cat "$OLD_MAIN_ACTIVITY_PATH"/MainActivity.kt)

readonly NEW_MAIN_ACTIVITY_PATH="$MAIN_ACTIVITY_START_PATH/$(echo "$NEW_APPLICATION_ID" | tr '.' '/')"
readonly NEW_MAIN_ACTIVITY_CONTENT=$(printf "%s" "$OLD_MAIN_ACTIVITY_CONTENT" | sed -e "s/package $OLD_NAMESPACE/package $NEW_APPLICATION_ID/")

echo "[Step3] Creating new MainActivity.kt..."

# [Options] -p: Create intermediate directories as required.
mkdir -p "$NEW_MAIN_ACTIVITY_PATH"
echo "$NEW_MAIN_ACTIVITY_CONTENT" > "$NEW_MAIN_ACTIVITY_PATH/MainActivity.kt"

# [Step4] Delete old MainActivity.kt
echo "[Step4] Deleting old MainActivity.kt..."

readonly NEW_MAIN_ACTIVITY_PATH="$MAIN_ACTIVITY_START_PATH/$(echo "$NEW_ANDROID_APPLICATION_ID" | tr '.' '/')"
readonly NEW_MAIN_ACTIVITY_CONTENT=$(printf "%s" "$OLD_MAIN_ACTIVITY_CONTENT" | sed -e "s/package $OLD_NAMESPACE/package $NEW_ANDROID_APPLICATION_ID/")
# [Options]
# -f list: The list specifies fields, separated in the input by the field delimiter character
# -d delim: Use delim as the field delimiter character instead of the tab character.
readonly FIRST_DIRECTORY_PATH=$(echo "$OLD_PACKAGE_NAME" | cut -f 1 -d ".")

rm -r "${MAIN_ACTIVITY_START_PATH:?}/$FIRST_DIRECTORY_PATH"

# [Step4] Create new MainActivity.kt
echo "[Step4] Creating new MainActivity.kt..."

# [Options] -p: Create intermediate directories as required.
mkdir -p "$NEW_MAIN_ACTIVITY_PATH"
echo "$NEW_MAIN_ACTIVITY_CONTENT" > "$NEW_MAIN_ACTIVITY_PATH/MainActivity.kt"

echo "Application ID renaming process completed."

0 comments on commit 5e56257

Please sign in to comment.