react-native-google-signin で 'You must specify |clientID| in |GIDConfiguration|' エラーが出た

@react-native-google-signin/google-signinGoogleログイン機能を作ろうと思ったら、以下のようなエラーが出た

 'You must specify |clientID| in |GIDConfiguration|'

ログインするには、webClientIdを指定する必要がある。それは適切に行っていた。

GoogleSignin.configure({
  webClientId: 'id',
});

GoogleService-infoの中身を確認すると、別のGoogleログインを実装しているアプリのものと比べて、CLIENT_ID が欠けていた。

この場合、configureメソッドに iosClientId を明示的に指定してあげる。

GoogleSignin.configure({
  webClientId: 'id',
  iosClientId: 'ios id'
});

iosClientIdは指定しなければGoogleService-infoから自動で読み込まれるが、GoogleService-infoファイル作成のタイミングで欠けていることもあるっぽい。 この場合、上記で示したように明示的に登録するか、新しく GoogleService-info を作成すればいい。

React Nativeアプリの初期化の後に、Androidのnamespaceを変えたときの注意

React Nativeで foo というアプリをセットアップすると、namespace、applicationIdは次のようになっている。

namespace "com.foo"
...
applicationId "com.foo"

これを com.company.foo に変える。そして、javaファイルで定義されているpackage名の部分も全て変える。

これでビルドすると以下のエラーが出る。

* What went wrong:
Execution failed for task ':app:compileDevelopmentDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

mainディレクトリ下が java/com/foo/Main*.java となっていると思うが、これを java/com/company/foo/Main*.java にする必要がある。

Android Studioから変えたらこの辺の調整も自動でしてくれたはず。。

Googleログインで発生した [Error: DEVELOPER_ERROR] を解決する

React NativeのAndroid開発で、Googleログインを実装していたが、以下のようなエラーが出た。

[Error: DEVELOPER_ERROR]

FirebaseのAndroidアプリに SHA 証明書フィンガープリント が設定されていないのが原因っぽいので登録する。以下のコマンドでキーストアファイルの中身を見る。

 keytool -list -v -keystore ./android/app/debug.keystore -alias androiddebugkey -storepass android -keypass android

./android/app/debug.keystore の部分は ~/android/debug.keystore の可能性もあるので、パスを注意する。

この中のSHA1をSHA 証明書フィンガープリントに登録する。

これで開発環境のログインは成功する。

ただ、Google Play Consoleからデプロイした本番環境の製品だと上記の手順(キーストアファイルは本番のもの)で試しても失敗する。

Google Play Consoleからリリースする際、App Signingという再署名されるプロセスがあり、ビルドした時署名と、リリースされる時の署名は異なる。

なので、Play Consoleから該当のアプリページへ行き、左タブの [設定] -> [アプリの署名] からSHA1を見つけて、それを登録する。

Dockerで Cannot find module '../build/Release/sharp-linux-x64.node' が出たので解決した

Docker環境(Cloud Run)でsharpをインストールしているnodeサーバーを立てようとしたら

Cannot find module '../build/Release/sharp-linux-x64.node'

というエラーが出た。 sharpはインストール環境とランタイム環境を同じにしなくてはいけない特殊性があるのだが、その辺でエラー出してた。

自分はLinuxで動かしたかったので

yarn add --arch=x64 --platform=linux sharp

npm rebuild --arch=x64 --platform=linux sharp 

// sharp-linux-x64.node が存在するかどうか確認
ls node_modules/sharp/build/Release 

このコマンドをうち、再度デプロイしたら動いた。

React NativeアプリをXcodeでビルドしたら Command PhaseScriptExecution failed with a nonzero exit code というエラーが出たので解決した

React Nativeで作成しているiOSアプリをXcodeでビルドしたら

Node found at: /usr/local/bin/node
dyld[39998]: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.71.dylib
  Referenced from: <D092FE6D-5639-3BBF-A0A6-1CE0F725CADB> /usr/local/Cellar/node/18.10.0/bin/node

...

Command PhaseScriptExecution failed with a nonzero exit code

というエラーが出てビルド通らなかった。

libicui18n.71.dylibがロードされていないとあるが、これは icu4c という brew でインストールしているパッケージが関係しているので確認してみる。

brew info icu4c 

するとこのようになっていた。

==> icu4c: stable 72.1 (bottled) [keg-only]

エラーメッセージでは71が必要とされているけど、72がインストールされているので71をインストールしてみる。

// 該当ディレクトリに移動
 cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core/Formula

// 該当バージョンまで戻したいのでコミットログ確認
git log --follow icu4c.rb


// 該当のコミットにチェクアウト
git checkout e3317b86c11c644e88c762e03eb7b310c3337587

// チェックアウトしたバージョンのものをインストール
brew reinstall ./icu4c.rb

// 確認
brew info icu4c
brew list icu4c --versions

// ブランチ戻す
git checkout master

これで再度ビルドが通るようになった。原因はbrew upgradeなどでバージョンが上がってしまっていたことが考えられるっぽい

App StoreのアプリページのURLを知りたい

App Storeへリリースする前にURLを知りたかった。

https://apps.apple.com/app/id<Apple ID>

これで該当のページに飛ぶURLになる。

Apple IDはApp Store Connectの一般のApp情報からいつでも見ることができる。