.gitignoreに追加したのに反映されないとき

.envや.env.devなどを作成し、間違えてそれらもpushしてしまったので.gitignoreに追加したが反映されず、なぜか再度pushされてしまっていた。

.gitignore

.env
.env.dev
.env.prod
.env.stg

原因は既にpushされてしまってたから。明示的に削除しないとダメっぽい。

git rm .env --cached

このコマンドをそれぞれの.env~にやることでpushされなくなる。

参考

(随時更新)ReactNativeでアプリ開発していく上でわからなかったandroidのシステムとかワードとか

RNでアプリを開発していくとネイティブ側をいじることもしばしばある。

そこでわからなかったandroid関連のものを自分用に簡潔にまとめとく。

gradle

ビルドを管理するためのシステム

依存関係とか管理してくれる

buildTypes

ビルドする際の設定やタイプを管理してくれる仕組み、設定

デバッグ用のビルド、リリース用のビルドなどを管理できる

DebugやReleseがある。(確か他にも追加可能)

flavor

アプリ内の差を簡単に作り管理するための仕組み、方法、設定

例えば開発用やステージング用、アプリ内の広告の有無などの設定の差を管理することができる

variant

flavorとbuildTypesを組み合わせて管理するための仕組み、ラベル化したもの

ReactNativeで環境ごとにデータを変更したりGoogleService-infoを切り替えたりできるようにする

ReactNativeでdev, stg, prod毎に環境変数valueやFirebaseを使用するために使うGoogleService-infoを簡単に切り替えられるようにしたかった。

今回は環境変数の管理はreact-native-configを使用する。

元々iOSのみのつもりだったためandroidは後付け

0

react-native-configのセットアップ

yarn add react-native-config
cd ios
pod install

1

TARGETSを右クリック

Dupulicate -> Dupulicate Onlyをクリック

~ copyという名前ができるのでそれを ~ -Devなどにする。

2

上にあるschemeの設定から Manage Schemes を選択

デフォルトのスキームを選択して、左下の設定アイコンをクリック

Dupulicateをクリック

名前を変えてclose

最終的にDev用、Stg用を作成

(画像ではついてないがSharedにチェック入れる)

もう一度確認してみると作成したSchemeが表示される。(copyのものはチェック外した)

3

schemeを選択して Edit scheme をクリック

選択したschemeに対応するTargetsを1つ選択(画面下の+, -で追加したり削除できる)

4

Edit schemeから左の Run を選択

Executableで 「プロジェクト名.app」を選択

(デバッグに関する設定なのでいらないかも)

追記: 必要。あと選択肢には全てのターゲットが出てきてどれか選ぶことができるが、それぞれの環境のもの(devならdev)選ばないとエラーになる。

古いXcodeが対応していない新しいバージョンのiOSに対してアプリをRunさせる方法 - Qiita

5

BuildのPre-actionsから New Run Sctipt Actionをクリック

シェルスクリプトの記述

cpコマンドで対応するenv.をenvにコピー

6

プロジェクト内にそれぞれの環境用のディレクトリを作成

その中にinfo.plistを入れていくが、それぞれに対応するtargetsにチェックマークをつける

7

Podfileを変える

before

after

8

環境変数用ファイルの作成

ここまででiOS

npx react-native run-ios --scheme InspectionEnv-Stg

だったりXcodeからスキーマ変更してビルドすると.env.devや.env.stgの内容がreact-native-configで使用でき、GoogleService-infoも対応したものが使用される。

info.plistを共通化する

今のままだとそれぞれのtarget用にinfo.plistが作成されて、info.plistに変更を加える場合は環境分行う必要がある。これはめんどくさいので、TARGETSから複製したものを選び、Build Settings -> Packaging -> info.plist File を適切なパスに変更する。

inspectionEnv/info.plist

このパスは適用したいファイルを開き、右側の Location から確認できる。デフォルトは Relative to Group だったのでこの相対パスを使用した。

firbaseのgoogleログインを使用している場合は info.plist の URL Types に複数のカスタムURLスキームを登録する必要があるので注意。

androidのセットアップ

// flavorによるenvの指定
project.ext.envConfigFiles = [
    Development: ".env.dev",
    Production: ".env.prod",
    Staging: ".env.stg"
]

// react-native-configをセットアップ
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" 

defaultConfig {
        applicationId "com.inspectionenv"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
        flavorDimensions "default" // ここ追加
    }

// flavorsの追加
productFlavors {
        Development {
            minSdkVersion rootProject.ext.minSdkVersion
            applicationId "com.inspectionenv.dev"
            targetSdkVersion rootProject.ext.targetSdkVersion
        }
        Staging {
            minSdkVersion rootProject.ext.minSdkVersion
            applicationId "com.inspectionEnv.stg"
            targetSdkVersion rootProject.ext.targetSdkVersion
        }
        Production {
            minSdkVersion rootProject.ext.minSdkVersion
            applicationId "com.inspectionEnv"
            targetSdkVersion rootProject.ext.targetSdkVersion
        }
    }

google-servicesの追加

これでandroid

npx react-native run-android --variant "productFlavour""BuildType"
(ex; DevelopmentDebug)

で起動するとその環境にあったenvとgoogle-servicesが適用される。

注意点はFirebaseのパッケージ名とproductFlavorsのappliactionIdを同じにしないとエラー出る。ここではDevelopmentが使用するFirebaseのandroidのパッケージ名がcom.inspectionenvとかになってるとうまく動かない。

参考にさせていただいた記事

Manage multiple firebase projects in React Native | by KPITENG | Medium

ReactNativeで環境ごとのビルド設定を整える(iOS編)

Manage Multiple Target Variant With React Native Apps

ReactNativeのAndroid側でFlavorで環境を切り分ける - Qiita

ReactNativeでFailed to apply plugin 'com.android.internal.application'. Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.

androidでビルド時に

Failed to apply plugin 'com.android.internal.application'. Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.

が出て、

この辺のもできない場合、

ここにあるように11をbrewでインストールして設定すると直る。