Skip to content

新しくアプリを追加する時の手順

KoheiKanagu edited this page Jun 1, 2024 · 18 revisions

[WIP] 新しくアプリを追加する時の手順

Firebase Authentication

  • Identity Platform で新しくテナントを作ってプロバイダを設定する

https://console.cloud.google.com/customer-identity/tenants?project=kingu-garage-dev https://console.cloud.google.com/customer-identity/tenants?project=kingu-garage-prod

for Apple

  • Identifiers で App ID を登録する
    • App Attest
    • Push Notifications
    • Sign In with Apple
    • ぐらいが必須か
  • Identifiers で Services ID を登録する
    • dev
      • Domains and Subdomains は kingu-garage-dev.web.app,kingu-garage-dev.firebaseapp.com
      • Return URLs はhttps://kingu-garage-dev.firebaseapp.com/__/auth/handler
    • prod
      • Domains and Subdomains は kingu-garage-prod.web.app,kingu-garage-prod.firebaseapp.com
      • Return URLs はhttps://kingu-garage-prod.firebaseapp.com/__/auth/handler
  • Keys で Sign In with Apple を有効にした Key を作る

OAuth 2.0 クライアント ID

手動で作成する必要がある?

Firebase にアプリを追加

WIP

BUNDLE_ID=dev.kingu.example
PACKAGE_NAME=dev.kingu.example
NICKNAME=example

firebase --project prod apps:create ios --bundle-id $BUNDLE_ID $NICKNAME
firebase --project prod apps:create android --package-name $PACKAGE_NAME $NICKNAME

firebase --project dev apps:create ios --bundle-id "$BUNDLE_ID.dev" $NICKNAME
firebase --project dev apps:create android --package-name "$PACKAGE_NAME.dev" $NICKNAME

Firebase プロジェクトの URL

FIREBASE_PROJECT_DEV_URL="https://console.firebase.google.com/u/0/project/kingu-garage-dev/settings"
FIREBASE_PROJECT_PROD_URL="https://console.firebase.google.com/u/0/project/kingu-garage-prod/settings"

Firestore

  • Identity Platform で作ったテナント ID から末尾のランダムな文字列を除いたものをデータベース名として作成する
# テナントIDが foo-1234567890 の場合
DATABASE=foo

firebase --project prod firestore:databases:create $DATABASE \
    --location=asia-northeast1 \
    --delete-protection ENABLED

firebase --project dev firestore:databases:create $DATABASE \
    --location=asia-northeast1 \
    --delete-protection ENABLED

cp firebase/firestore/template.firestore.rules firebase/firestore/firestore.$DATABASE.rules
cp firebase/firestore/template.firestore.default.indexes.json firebase/firestore/firestore.$DATABASE.indexes.json

firestoreに追記する

Remote Config Template に conditions を追加

firebase --project dev apps:list
open firebase/remoteconfig/template.dev.json

firebase --project prod apps:list
open firebase/remoteconfig/template.prod.json
  • foldersに追加
  • jest.disabledWorkspaceFoldersに追加
  • conventionalCommits.scopesに追加

flutter create

NEW_PACKAGE=foo
flutter create --org dev.kingu --project-name $NEW_PACKAGE --platforms ios,android --template app packages/$NEW_PACKAGE

pubspec.yaml の修正

open packages/obento/pubspec.yaml
open packages/$NEW_PACKAGE/pubspec.yaml

sed -i '' -e '/# .*/d' packages/$NEW_PACKAGE/pubspec.yaml
sed -i '' -e '/description: /d' packages/$NEW_PACKAGE/pubspec.yaml
sed -i '' -e 's/version: 1.0.0+1/version: 0.0.0+1/g' packages/$NEW_PACKAGE/pubspec.yaml

[WIP] アイコン作成

https://icon.kitchen/

open packages/obento/README.md
open packages/$NEW_PACKAGE/README.md

melos bootstrap

[WIP] pod install

pod install --repo-update --project-directory=packages/$NEW_PACKAGE/ios

Flutterfire

tool/flutterfire_configure.dartpackagesに追記する

grind flutterfire-configure

ExportOptions.plist

NEW_PACKAGE=foo

mkdir -p packages/$NEW_PACKAGE/configs
cp packages/obento/configs/AdHocExportOptions.plist packages/$NEW_PACKAGE/configs/
cp packages/obento/configs/AppStoreExportOptions.plist packages/$NEW_PACKAGE/configs/

サポートする iOS バージョンを修正する

Deployment Target と Minimum Deployments を変更する

16.6

  • PROJECT → Runner → Info → Deployment Target
  • TARGETS → Runner → General → Minimum Deployment
open packages/$NEW_PACKAGE/ios/Runner.xcworkspace

platform と IPHONEOS_DEPLOYMENT_TARGET を追加する

# 最上部の platform
open packages/$NEW_PACKAGE/ios/Podfile

flutter_additional_ios_build_settings の下に追加する

target.build_configurations.each do |config|
  config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '16.6'
end

サポートする Android バージョンを修正する

https://apilevels.com/ でバージョンを確認する。

open packages/$NEW_PACKAGE/android/app/build.gradle

minSdkを修正する

ビルド番号を auto increment する

// TODO: 要確認 TARGETS → Runner → General → Identity → Build を削除する。

open packages/$NEW_PACKAGE/ios/Runner.xcworkspace

defaultConfig.versionCode を修正する。

versionCode = (System.currentTimeMillis() / 1000).toInteger()
open packages/$NEW_PACKAGE/android/app/build.gradle

iOS の Flavor 対応

xcconfig をコピーする

# 余分な変数の定義があれば消す
cp packages/obento/ios/Flutter/Debug-dev.xcconfig packages/$NEW_PACKAGE/ios/Flutter/Debug-dev.xcconfig
cp packages/obento/ios/Flutter/Debug-prod.xcconfig packages/$NEW_PACKAGE/ios/Flutter/Debug-prod.xcconfig
cp packages/obento/ios/Flutter/Release-dev.xcconfig packages/$NEW_PACKAGE/ios/Flutter/Release-dev.xcconfig
cp packages/obento/ios/Flutter/Release-prod.xcconfig packages/$NEW_PACKAGE/ios/Flutter/Release-prod.xcconfig
cp packages/obento/ios/Flutter/Profile-dev.xcconfig packages/$NEW_PACKAGE/ios/Flutter/Profile-dev.xcconfig
cp packages/obento/ios/Flutter/Profile-prod.xcconfig packages/$NEW_PACKAGE/ios/Flutter/Profile-prod.xcconfig

Xcode で xcconfig を Flutter ディレクトリの下に追加する

Xcode でデフォルトの xcconfig は削除する。

open packages/$NEW_PACKAGE/ios/Runner.xcworkspace
open packages/$NEW_PACKAGE/ios/Flutter

FIREBASE_ENCODED_APP_IDを置換する

エンコードした App ID を確認する

open $FIREBASE_PROJECT_DEV_URL/general
open $FIREBASE_PROJECT_PROD_URL/general
DEV_FIREBASE_ENCODED_APP_ID=FIXME
PROD_FIREBASE_ENCODED_APP_ID=FIXME

sed -i '' -e "s/FIREBASE_ENCODED_APP_ID = .*/FIREBASE_ENCODED_APP_ID = $DEV_FIREBASE_ENCODED_APP_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Debug-dev.xcconfig
sed -i '' -e "s/FIREBASE_ENCODED_APP_ID = .*/FIREBASE_ENCODED_APP_ID = $DEV_FIREBASE_ENCODED_APP_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Release-dev.xcconfig
sed -i '' -e "s/FIREBASE_ENCODED_APP_ID = .*/FIREBASE_ENCODED_APP_ID = $DEV_FIREBASE_ENCODED_APP_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Profile-dev.xcconfig

sed -i '' -e "s/FIREBASE_ENCODED_APP_ID = .*/FIREBASE_ENCODED_APP_ID = $PROD_FIREBASE_ENCODED_APP_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Debug-prod.xcconfig
sed -i '' -e "s/FIREBASE_ENCODED_APP_ID = .*/FIREBASE_ENCODED_APP_ID = $PROD_FIREBASE_ENCODED_APP_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Release-prod.xcconfig
sed -i '' -e "s/FIREBASE_ENCODED_APP_ID = .*/FIREBASE_ENCODED_APP_ID = $PROD_FIREBASE_ENCODED_APP_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Profile-prod.xcconfig

GOOGLE_SERVICE_REVERSED_CLIENT_ID は plist から取得して置換する

DEV_REVERSED_CLIENT_ID=`plutil -convert json -o - packages/$NEW_PACKAGE/ios/dev/GoogleService-Info.plist | jq --raw-output .REVERSED_CLIENT_ID`
PROD_REVERSED_CLIENT_ID=`plutil -convert json -o - packages/$NEW_PACKAGE/ios/prod/GoogleService-Info.plist | jq --raw-output .REVERSED_CLIENT_ID`

sed -i '' -e "s/GOOGLE_SERVICE_REVERSED_CLIENT_ID = .*/GOOGLE_SERVICE_REVERSED_CLIENT_ID = $DEV_REVERSED_CLIENT_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Debug-dev.xcconfig
sed -i '' -e "s/GOOGLE_SERVICE_REVERSED_CLIENT_ID = .*/GOOGLE_SERVICE_REVERSED_CLIENT_ID = $DEV_REVERSED_CLIENT_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Release-dev.xcconfig
sed -i '' -e "s/GOOGLE_SERVICE_REVERSED_CLIENT_ID = .*/GOOGLE_SERVICE_REVERSED_CLIENT_ID = $DEV_REVERSED_CLIENT_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Profile-dev.xcconfig

sed -i '' -e "s/GOOGLE_SERVICE_REVERSED_CLIENT_ID = .*/GOOGLE_SERVICE_REVERSED_CLIENT_ID = $PROD_REVERSED_CLIENT_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Debug-prod.xcconfig
sed -i '' -e "s/GOOGLE_SERVICE_REVERSED_CLIENT_ID = .*/GOOGLE_SERVICE_REVERSED_CLIENT_ID = $PROD_REVERSED_CLIENT_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Release-prod.xcconfig
sed -i '' -e "s/GOOGLE_SERVICE_REVERSED_CLIENT_ID = .*/GOOGLE_SERVICE_REVERSED_CLIENT_ID = $PROD_REVERSED_CLIENT_ID/g" packages/$NEW_PACKAGE/ios/Flutter/Profile-prod.xcconfig

PROJECT → Runner の Configurations に 3 種類を追加する

Based on Configuration FileDebug-dev.xcconfig などを選択する。

  • Debug-dev
  • Release-dev
  • Profile-dev
open packages/$NEW_PACKAGE/ios/Runner.xcworkspace

既存の Scheme をコピーしてdevprodを作成する

open packages/$NEW_PACKAGE/ios/Runner.xcworkspace

buildConfigurationを置換する

sed -i '' -e "s/buildConfiguration = \"Debug\"/buildConfiguration = \"Debug-dev\"/g" packages/$NEW_PACKAGE/ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme
sed -i '' -e "s/buildConfiguration = \"Release\"/buildConfiguration = \"Release-dev\"/g" packages/$NEW_PACKAGE/ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme
sed -i '' -e "s/buildConfiguration = \"Profile\"/buildConfiguration = \"Profile-dev\"/g" packages/$NEW_PACKAGE/ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme

sed -i '' -e "s/buildConfiguration = \"Debug\"/buildConfiguration = \"Debug-prod\"/g" packages/$NEW_PACKAGE/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme
sed -i '' -e "s/buildConfiguration = \"Release\"/buildConfiguration = \"Release-prod\"/g" packages/$NEW_PACKAGE/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme
sed -i '' -e "s/buildConfiguration = \"Profile\"/buildConfiguration = \"Profile-prod\"/g" packages/$NEW_PACKAGE/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme

TARGETS → Runner → Build Settings の PRODUCT_BUNDLE_IDENTIFIER の末尾に *-dev なら .devをつけるように修正する

open packages/$NEW_PACKAGE/ios/Runner.xcworkspace

Podfile に追記する

open packages/$NEW_PACKAGE/ios/Podfile

以下に置換する。

project 'Runner', {
  'Debug-dev' => :debug,
  'Debug-prod' => :debug,
  'Profile-dev' => :release,
  'Profile-prod' => :release,
  'Release-dev' => :release,
  'Release-prod' => :release,
}

Assetsからデフォルトのアイコンを削除する

open packages/$NEW_PACKAGE/ios/Runner.xcworkspace

iOSiOS App Icon を追加して AppIconAppIconDev を作成

1024x1024 のアイコンを追加する。

TARGETS → Runner → Build Phases → ASSETCATALOG_COMPILER_APPICON_NAME を修正する

AppIcon または AppIconDev に変更する。

Info.plistCFBundleDisplayNameCFBundleName を英語の名称に修正する

open packages/$NEW_PACKAGE/ios/Runner/Info.plist

File → New → File から String Catalog を作成する

名称は InfoPlist で、Runner ディレクトリの下に作成する。

ビルドして InfoPlist を更新して名称を修正する

CFBundleDisplayNameCFBundleName に日本語の名称に修正する。

open packages/$NEW_PACKAGE/ios/Runner/InfoPlist.xcstrings

Info.plist に  ITSAppUsesNonExemptEncryption を追加

echo "ITSAppUsesNonExemptEncryption" | pbcopy
open packages/$NEW_PACKAGE/ios/Runner/Info.plist

Android の Flavor 対応

keystore.jks を作成する

KEYSTORE_OUT_DIR=packages/$NEW_PACKAGE/android/app
KEYSTORE_PASS_DEBUG=$(openssl rand -base64 32 | tr -d /=+ | cut -c -32)
KEYSTORE_PASS_UPLOAD=$(openssl rand -base64 32 | tr -d /=+ | cut -c -32)

keytool -genkey -v -keystore $KEYSTORE_OUT_DIR/debug-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias debug -keypass $KEYSTORE_PASS_DEBUG -storepass $KEYSTORE_PASS_DEBUG
keytool -genkey -v -keystore $KEYSTORE_OUT_DIR/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload -keypass $KEYSTORE_PASS_UPLOAD -storepass $KEYSTORE_PASS_UPLOAD

署名の情報を外部ファイルから読み込む

android の最上部に以下を追記する。

    if (file("signing-configs-debug.gradle").exists()) {
        apply from: "signing-configs-debug.gradle", to: android
    }

    if (file("signing-configs-release.gradle").exists()) {
        apply from: "signing-configs-release.gradle", to: android
    }

signing-configs-debug.gradlesigning-configs-release.gradle を作成する

echo "signingConfigs {
    debug {
        storeFile file(\"debug-keystore.jks\")
        storePassword \"${KEYSTORE_PASS_DEBUG}\"
        keyAlias \"debug\"
        keyPassword \"${KEYSTORE_PASS_DEBUG}\"
    }
}" > packages/$NEW_PACKAGE/android/app/signing-configs-debug22.gradle

echo "signingConfigs {
    release {
        storeFile file(\"upload-keystore.jks\")
        storePassword \"${KEYSTORE_PASS_UPLOAD}\"
        keyAlias \"upload\"
        keyPassword \"${KEYSTORE_PASS_UPLOAD}\"
    }
}" > packages/$NEW_PACKAGE/android/app/signing-configs-release.gradle

jkssigning-configs をバックアップする

open packages/$NEW_PACKAGE/android/app/

Firebase に SHA を登録する

SHA を確認する。

keytool -list -v -alias debug -storepass $KEYSTORE_PASS_DEBUG --keystore $KEYSTORE_OUT_DIR/debug-keystore.jks

登録する。

APP_SHA1_DEBUG="FIXME"
APP_SHA256_DEBUG="FIXME"

APP_ID_DEV=$(jq -r '.flutter.platforms.android.buildConfigurations."src/dev".appId' packages/$NEW_PACKAGE/firebase.json)

firebase --project dev apps:android:sha:create $APP_ID_DEV $APP_SHA1_DEBUG
firebase --project dev apps:android:sha:create $APP_ID_DEV $APP_SHA256_DEBUG

buildTypes を修正

    buildTypes {
        debug {
            signingConfig = signingConfigs.debug
        }
        release {
            signingConfig = signingConfigs.release
        }
    }

productFlavors を追加する

open packages/$NEW_PACKAGE/android/app/build.gradle

android の中に以下を追記追記する。

    flavorDimensions "default"
    productFlavors {
        dev {
            dimension "default"
            applicationIdSuffix ".dev"
        }
        prod {
            dimension "default"
        }
    }

言語毎の strings.xml を追加する

mkdir -p packages/$NEW_PACKAGE/android/app/src/main/res/values
mkdir -p packages/$NEW_PACKAGE/android/app/src/main/res/values-en
mkdir -p packages/$NEW_PACKAGE/android/app/src/main/res/values-ja

APP_NAME_STRINGS_XML='''<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">FIXME</string>
</resources>'''

echo "$APP_NAME_STRINGS_XML" > packages/$NEW_PACKAGE/android/app/src/main/res/values/strings.xml
echo "$APP_NAME_STRINGS_XML" > packages/$NEW_PACKAGE/android/app/src/main/res/values-en/strings.xml
echo "$APP_NAME_STRINGS_XML" > packages/$NEW_PACKAGE/android/app/src/main/res/values-ja/strings.xml

app_name を変更する

open packages/$NEW_PACKAGE/android/app/src/main/res/values/strings.xml
open packages/$NEW_PACKAGE/android/app/src/main/res/values-en/strings.xml
open packages/$NEW_PACKAGE/android/app/src/main/res/values-ja/strings.xml

android:label を strings から取得するように修正する

android:label="@string/app_name" に修正する。

open packages/$NEW_PACKAGE/android/app/src/main/AndroidManifest.xml

元のアイコンである mipmap を削除する

rm -r packages/$NEW_PACKAGE/android/app/src/main/res/mipmap-*

Flavor 毎に res 以下にコピーする

mkdir -p packages/$NEW_PACKAGE/android/app/src/dev/res
open packages/$NEW_PACKAGE/android/app/src/dev/res

mkdir -p packages/$NEW_PACKAGE/android/app/src/prod/res
open packages/$NEW_PACKAGE/android/app/src/prod/res

iOS の AdMob 対応

https://apps.admob.com/v2/home でアプリを追加してアプリ ID を確認する

Info.plist から 以下をコピーする

NSUserTrackingUsageDescriptionも必要だが、リリースするまで AdMob と連携できない。 先んじて追加していると Apple のレビューでリジェクトされるのでこの時点では追加してはならない。

  • GADApplicationIdentifier
  • SKAdNetworkItems
open packages/obento/ios/Runner/Info.plist
open packages/$NEW_PACKAGE/ios/Runner/Info.plist

Android の AdMob 対応

https://apps.admob.com/v2/home でアプリを追加してアプリ ID を確認する。

open packages/$NEW_PACKAGE/android/app/src/main/AndroidManifest.xml

applicationタグの中に以下を追記して android:value を修正する

<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="FIXME"/>

build.gradleplay-services-ads を追加す

open packages/$NEW_PACKAGE/android/app/build.gradle

https://mvnrepository.com/artifact/com.google.android.gms/play-services-ads で最新のバージョンを確認する。

dependencies {
    implementation 'com.google.android.gms:play-services-ads:23.0.0'
}

ATT 対応

プライバシーとメッセージ からアプリを追加

open https://apps.admob.com/v2/home

Flutter 関連のテンプレファイルをコピーする

cp packages/core/analysis_options.yaml packages/$NEW_PACKAGE/
(cd packages/$NEW_PACKAGE && ln -s ../core/build.yaml .)

cp packages/obento/lib/main.dart packages/$NEW_PACKAGE/lib/
cp packages/obento/lib/main_dev.dart packages/$NEW_PACKAGE/lib/
cp packages/obento/lib/main_prod.dart packages/$NEW_PACKAGE/lib/
cp packages/obento/lib/my_app.dart packages/$NEW_PACKAGE/lib/
cp packages/obento/lib/my_go_router.dart packages/$NEW_PACKAGE/lib/

mkdir -p packages/$NEW_PACKAGE/lib/features/onboarding/application
cp packages/obento/lib/features/onboarding/application/onboarding_route.dart packages/$NEW_PACKAGE/lib/features/onboarding/application/

mkdir -p packages/$NEW_PACKAGE/lib/features/onboarding/presentation
cp packages/obento/lib/features/onboarding/presentation/onboarding_page.dart packages/$NEW_PACKAGE/lib/features/onboarding/presentation/

mkdir -p packages/$NEW_PACKAGE/lib/features/home/application
cp packages/obento/lib/features/home/application/home_route.dart packages/$NEW_PACKAGE/lib/features/home/application/

mkdir -p packages/$NEW_PACKAGE/lib/features/home/presentation
touch packages/$NEW_PACKAGE/lib/features/home/presentation/home_page.dart

mkdir -p packages/$NEW_PACKAGE/lib/i18n
echo "{}" > packages/$NEW_PACKAGE/lib/i18n/strings_ja.i18n.json
echo "{}" > packages/$NEW_PACKAGE/lib/i18n/strings_en.i18n.json

flutter_native_splash

(cd packages/$NEW_PACKAGE && dart run flutter_native_splash:create)

.vscode/launch をコピーする

mkdir -p packages/$NEW_PACKAGE/.vscode
cp packages/onebto/.vscode/launch.json packages/$NEW_PACKAGE/.vscode/

ビルドしてエラーがないか確認

melos run build_runner:build --no-select && \
melos run build:ipa:dev && \
melos run build:apk:dev

App Store にアップロードしてみる

新規 iOS アプリを作成する

open https://appstoreconnect.apple.com/apps

Firebase に App Store ID を追加する

open $FIREBASE_PROJECT_DEV_URL/general/ios:$BUNDLE_ID
open $FIREBASE_PROJECT_PROD_URL/general/ios:$BUNDLE_ID

App Store Connect にアップロード

melos run build:ipa:prod:upload

Google Play にアップロードしてみる

新規 Android アプリを作成する

open https://play.google.com/console/u/0/developers/create-new-app

アプリの完全性 を設定する

  • Google Cloud プロジェクトのリンク

Google Play にアップロード

初回は対応する Package が無く失敗するので クローズドテスト を作成して手動でアップロードすること。

melos run build:appbundle:prod:upload
open packages/$NEW_PACKAGE/build/app/outputs/bundle/prodRelease

Google が生成したアプリ署名鍵を Firebase に登録する

設定 → アプリの署名から SHA を確認する。

APP_SHA1_UPLOAD="FIXME"
APP_SHA256_UPLOAD="FIXME"

APP_ID_PROD=$(jq -r '.flutter.platforms.android.buildConfigurations."src/prod".appId' packages/$NEW_PACKAGE/firebase.json)

firebase --project prod apps:android:sha:create $APP_ID_PROD $APP_SHA1_UPLOAD
firebase --project prod apps:android:sha:create $APP_ID_PROD $APP_SHA256_UPLOAD

fastlane でアップロードするメタデータをコピーする

cp -rf packages/obento/.fastlane packages/$NEW_PACKAGE/

find packages/$NEW_PACKAGE/.fastlane -type f -name 'name.txt' -exec sh -c 'echo "TODO" > {}' \;
find packages/$NEW_PACKAGE/.fastlane -type f -name 'subtitle.txt' -exec sh -c 'echo "TODO" > {}' \;
find packages/$NEW_PACKAGE/.fastlane -type f -name 'description.txt' -exec sh -c 'echo "TODO" > {}' \;
find packages/$NEW_PACKAGE/.fastlane -type f -name 'promotional_text.txt' -exec sh -c 'echo "TODO" > {}' \;

カテゴリを設定する

open https://docs.fastlane.tools/actions/deliver/#reference
open packages/$NEW_PACKAGE/.fastlane/primary_category.txt
open packages/$NEW_PACKAGE/.fastlane/secondary_category.txt

App Store Connect にアプリのプライバシーをアップロードする

grind upload-app-privacy-details --package=$NEW_PACKAGE --noAds

Google Play Console でアプリのセットアップを完了する

(要確認) クローズドテストが存在していれば失敗しない? アプリ名や説明は fastlane でアップロードするが、初回は手動で設定する必要があるので適当に設定する。

open https://play.google.com/console

データセーフティの csv をアップロードする

open packages/$NEW_PACKAGE/.fastlane/metadata/android

Firebase プロジェクト 統合を設定する

Slack、BigQuery、AdMob、Google Play

open $FIREBASE_PROJECT_DEV_URL/integrations
open $FIREBASE_PROJECT_PROD_URL/integrations

App Check を有効にする

open $FIREBASE_PROJECT_DEV_URL
open $FIREBASE_PROJECT_PROD_URL

signingConfig を GitHub Actions から参照できるようにする

SIGNING_CONFIGS_BASE64=$(base64 -i packages/$NEW_PACKAGE/android/app/signing-configs-release.gradle)
UPLOAD_KEYSTORE_BASE64=$(base64 -i packages/$NEW_PACKAGE/android/app/upload-keystore.jks)

echo "SIGNING_CONFIGS_${NEW_PACKAGE}_BASE64=$SIGNING_CONFIGS_BASE64" >> .env
echo "UPLOAD_KEYSTORE_${NEW_PACKAGE}_BASE64=$UPLOAD_KEYSTORE_BASE64" >> .env

gh secret set --env-file .env

rm .env

Android Signing に追加する

open .github/workflows/build.yaml

dart_test.yaml

cp packages/obento/test/dart_test.yaml packages/$NEW_PACKAGE/

サンプルの golden test を追加する

追加しておかないと CI が失敗する。

echo "import 'package:core/gen/strings.g.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

import '../../core/test/core.dart';

void main() {
  goldenTestCombo(
    testName: 'example',
    widget: Container(),
    supportedLocales: AppLocaleUtils.supportedLocales,
    cupertinoThemeData: const CupertinoThemeData(),
    materialThemeData: ThemeData(),
    providerOverrides: [],
    skip: true,
  );
}" > packages/$NEW_PACKAGE/test/example_golden_test.dart

画面の回転を固定する

activity タグに追記

android:screenOrientation="portrait"
open packages/$NEW_PACKAGE/android/app/src/main/AndroidManifest.xml

UISupportedInterfaceOrientations を修正する。

iPad をサポートしない場合は UISupportedInterfaceOrientations~ipad は不要なので削除する。

open packages/$NEW_PACKAGE/ios/Runner/Info.plist

OGP と feature graphic を生成する Golden Test をコピーする

cp -r packages/obento/obento/test/feature_graphic packages/$NEW_PACKAGE/obento/test/feature_graphic

Golden Test を実行して画像を生成する

melos run flutter:golden:update

Feature Graphic はストアにアップロードする

open packages/$NEW_PACKAGE/test/feature_graphic

リンクの追加

cwebp -q 80 packages/$NEW_PACKAGE/test/feature_graphic/ogp.png -o "firebase/public/assets/$NEW_PACKAGE-ogp.webp"
cp packages/$NEW_PACKAGE/assets/images/app_icon.webp firebase/public/$NEW_PACKAGE-app_icon.webp

それぞれの index.html を作成する

code firebase/public/index.html
Clone this wiki locally