yumemi-inc / flutter-mobile-project-template

MIT License
33 stars 6 forks source link

[Feature]: アプリ ID 設定についての Issue 自動生成とツール開発 #179

Closed blendthink closed 4 months ago

blendthink commented 5 months ago

これに関する既存の Issue はありますか?

動機

提案

Kotaro666-dev commented 5 months ago

調査メモ

現行のテンプレートプロジェクトでは、 apps/app/flavor ディレクトリ内で定義されたフレーバーごとの json ファイルで定義された以下の項目に応じて、ビルド時にアプリ ID を動的に割り当ててそう。

Android

apps/app/android/app/build.gradle

defaultConfig {
    applicationId "${dartDefines.appId}"
    applicationIdSuffix "${dartDefines.appIdSuffix}"
}

それ以外に、プロジェクト作成時に設定された以下の項目も変更する必要がある認識。

apps/app/android/app/build.gradle

android {
    namespace "jp.co.yumemi.flutter_app"
}

apps/app/android/app/src/main/kotlin/jp/co/yumemi/flutter_app/MainActivity.kt

package jp.co.yumemi.flutter_app

参考資料

iOS

フレーバーごとの json ファイルで定義された appId を参照しているところ

プロジェクト内で PRODUCT_BUNDLE_IDENTIFIER を参照している箇所

スクリーンショット 0006-04-18 10 16 56

apps/catalog 配下はゆめみ側の部分のため、現行の Bundle ID のままで問題ない認識。

Kotaro666-dev commented 5 months ago

パッケージ

rename

The Rename CLI Tool is a utility designed to modify your Flutter project's AppName and BundleId across various platforms.

https://pub.dev/packages/rename

package_rename

Package Rename handles changing 33 fields across 17 files on 6 platforms so you can focus on your awesome project.

https://pub.dev/packages/package_rename

Kotaro666-dev commented 5 months ago

iOS における App ID と Bundle ID の違い

Bundle ID

App ID

参考資料

Kotaro666-dev commented 5 months ago

対応する箇所

【iOS/Android 共通】フレーバーごとの json ファイルで定義された "appId" を置換する

{
    "flavor": "dev",
    "appName": "dev-Template",
    "appId": "jp.co.yumemi.template",
    "appIdSuffix": ".dev"
}

【Android】

app モジュールの build.gradle で定義された namespace

apps/app/android/app/build.gradle

android {
    namespace "jp.co.yumemi.flutter_app"
}

package 名とディレクトリ

apps/app/android/app/src/main/kotlin/jp/co/yumemi/flutter_app/MainActivity.kt

package jp.co.yumemi.flutter_app

参考資料:https://developer.android.com/build/configure-app-module#set_the_application_id

【iOS】

特別な対応は必要なし

Kotaro666-dev commented 5 months ago

@blendthink

質問

本チケットで対応するかどうかは置いて、以下の項目はアプリ ID に合わせて変更する必要はありますか?

apps/app/android/app/build.gradle の namespace

android {
    namespace "jp.co.yumemi.flutter_app"
}

パッケージ名

apps/app/android/app/src/main/kotlin/jp/co/yumemi/flutter_app/MainActivity.kt

package jp.co.yumemi.flutter_app

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity()

背景

現状の namespace は本テンプレートプロジェクト作成時に割り当てられた jp.co.yumemi.flutter_app が定義されています。

Android 開発公式ドキュメント「Configure the app module」によれば、以下のように記載されています。

It is recommended that you do the following when setting the application ID: Keep the application ID the same as the namespace. The distinction between the two properties can be a bit confusing, but if you keep them the same, you have nothing to worry about.

For a simpler workflow, keep your namespace the same as your application ID, as they are by default.

In most cases, you should keep the namespace and application ID the same, as they are by default. However, you may need to change the namespace at some point if you're reorganizing your code or to avoid namespace collisions.

blendthink commented 5 months ago

@Kotaro666-dev

本チケットで対応するかどうかは置いて、以下の項目はアプリ ID に合わせて変更する必要はありますか?

はい!変更する必要ありという認識でした 🙆‍♂️

Kotaro666-dev commented 5 months ago

@blendthink

自動でアプリ ID 設定できるようにツールを開発して tools 配下に置く

上記の対応ツール開発時に、設定されるアプリ ID に応じて namespace とパッケージ名も変更する対応も一緒に含めますね!

Kotaro666-dev commented 5 months ago

テンプレート機能を使い、新規リポジトリ作成時に自動で Issue を生成する

以下の actions に追加で、アプリ ID を設定するツールを実行する対応の issue を作成する

https://github.com/yumemi-inc/flutter-mobile-project-template/blob/main/.github/actions/create-issue-at-initialization/action.yaml

Kotaro666-dev commented 5 months ago

自動でアプリ ID 設定できるようにツールが対応する処理

  1. (何らかの形で)ユーザーが設定したいアプリ ID 文字列を受け取る
  2. apps/app/flavor/dev.json の "appId" 定義を新しいアプリ ID に置換する
  3. apps/app/flavor/prd.json の "appId" 定義を新しいアプリ ID に置換する
  4. apps/app/flavor/stg.json の "appId" 定義を新しいアプリ ID に置換する
  5. apps/app/android/app/build.gradle の namspace 定義を新しいアプリ ID に置換する
  6. アプリ ID に基づいて、apps/app/android/app/src/main/kotlin/ 配下にアプリ ID に基づいたディレクトリ構成で MainActivity.kt を作成する
  7. 以前の MainActivity.kt とディレクトリを削除する

補足メモ

参考資料