Undefined symbol: (extension in UIKit):__C.UIAction.init(title: Swift.String, image: __C.UIImage?, ~ 的なエラーが出た

ReactNativeのリリースビルドでタイトルのようなエラーが出て対処したのでメモ。デバッグビルドでは出なかった。

これはどうやらReactNative0.63.3で発生しているエラーっぽくて、自分もモロ0.63.3を使っていた。

使用しているわけではないが、このgithubに書かれている対処法を参考にした。

PROJECT -> Build settings -> Library Search Pathsの

"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"

の中のswift-5.0を swift-5.3 に変更する。

ただ、たぶんRNのバージョンあげればこれしなくても解決すると思う。

バージョンアップは大事。

module map file '/Build/Products/Release-iphoneos/RNImageColors/RNImageColors.modulemap' not found 的なエラーが出た

ReactNativeのリリースビルド時にタイトルのようなエラーが出た。デバッグの時は出てない。

解決にはこのissueを参考にした。

# エラーが出た時のPodfile
platform :ios, '10.0'
...
# 修正後のPodfile
platform :ios, '9.0'
...

変更後 pod install

これで通ったが、

f:id:ri99:20211128164042p:plain

この画像の通り、自分のDeployment Targetは10なので platform :ios, '10.0' で動かないとおかしい、、

なのでもう一度キャッシュを削除して pod install してビルドしたら通った。

最初エラーが出た時もキャッシュは削除したからキャッシュが問題だったわけではなさそう。

ちょっと前にflipperを有効にするために少しPodfileやら設定をいじったりしたのでそこに原因があるかもしれない。要調査。

ReactNativeでFlipperを使おうとしたら 'event2/event-config.h' file not foundが出た

今までPodfileでflipperを無効にしていたのだが、使ってみたかったので有効にしたら'event2/event-config.h' file not foundというエラーが出たので対処法をメモ。

ReactNativeのバージョンは(古めだけど)0.63。

# エラーが出た時のPodfileのflipperの部分
use_flipper!()

このissueでは「Flipper-Follyのバージョンがアップデートされたから修正してね」とあるのでそれが理由なのかもしれない。

use_flipper!({ 'Flipper-Folly' => '2.3.0' })

use_flipper!({ 'Flipper' => '0.95.1', 'Flipper-Folly' => '2.6.7', 'Flipper-RSocket' => '1.4.3' })
にする案もあるが、ここで書かれているように

use_flipper!({ 'Flipper' => '0.122.0' })

に変えて、pod install --repo-update をしたら解決した。

react-native-webviewでGoogleMapを表示する

ReactNativeでwebのGoogleMapを使う必要があったのでそのメモ。

セットアップ

yarn add react-native-webview
cd ios
pod install
// android/gradle.propertiesに以下2行追加
android.useAndroidX=true
android.enableJetifier=true

使用

<WebView
    source={{
      html: `<iframe src="<url>" width="100%" height="100%"></iframe>`,
     }}
/>

iframeを使う必要があったので

source={{uri: ""}}

ではなく、htmlを返すようにする。

.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を組み合わせて管理するための仕組み、ラベル化したもの