開発日記 - ecorismap/ecorismap GitHub Wiki

2024.9.13

  • 辞書入力とサーバーへのアップロードの実装が一通り済んだのでドッグフィーディングテスト
  • google翻訳がreactの挙動に影響を与えるので、無効にする
  • 地図のURLを変更してもキャッシュが残る不具合を修正。表示をカチカチ切り替えないと更新されない問題はそのうち対応したい。
  • mapMemoのライン消しゴムの不具合修正。turf7.0にself-intersectionのバグがあるため6.5にダウングレード

2024.9.4

ecorisListを統合

iOSの修正

Androidの修正

  • build.gradleのsdkバージョンが古いためエラーになるのでreact-native-japanese-text-analyzerのsdkバージョンを34にあげてパッチ作成

その他

2024.8.30

  • 地図グループを作成
  • kmlの出力を追加
    • 当初、geojsonからtokmlを利用して変換しようとしたが、色も反映させるために自分で書く

2024.8.25

URLTileがAndroidで遅い問題

  • 今までS3に置いてあったタイルを会社のサーバーに移動して問題が発生。
  • タイルがない場所をfetchすると404になるが、会社のサーバーだと、その処理が遅いのが原因。
  • S3だとファイルがなくても余計な処理が発生しないため遅くなかったと思われる。
  • 会社のサーバーでもiOSやWebだとデフォルトで上手く処理していて遅くはならない。
  • Androidでの問題に対処するため、最初にheader情報を取得して、ファイルがあるかどうかを先にチェックするように変更。
  • これで問題解消

2024.8.23

植生タイルがWebでぼやける問題

  • ズーム8ぐらいだとterrainを有効にした状態で植生タイルを重ねるとぼやける問題が発覚。
  • 原因は不明だが、terrainの切り替えボタンを設置することで対応。
  • react-map-glにはterrainControlがまだないのでHomeTerrainComponetを自作する。

2024.8.22

v0.4.1 リリース

  • 以下の致命的なバグがiOSにあったので、更新してリリース。Androidは0.4.0のまま。

copyAsyncがiOSでバグってる問題

  • https://github.com/expo/expo/issues/30108
  • この修正をして npx patch-package expo-module-core でパッチを作成して対応
  • expoを51.0.28にupdateすれば修正されそうだが、ほかの依存関係にも影響しそうなので、今はしない

利用規約の更新に対応

- 利用規約を更新した際に、Confirmがでるように修正。利用規約のバージョン番号をAppConstantsで管理する。

2024.8.20

v0.4.0 リリース

  • 通常版を更新

2024.8.19

ローカルファイルのPDFをfirebaseのStorageにアップロード

  • storage.rulesで管理者(オーナー)のみが削除できる権限を与えられない問題。
  • プロジェクトの参加者のみreadできる権限も設定できない。(暗号化のkeyがあるので一応制限があるとも言える)

2024.8.16

yarn build:webでmaplibreのsvgアイコンが表示されない問題

  • webpackされたsvgのファイル名が.abc123のように先頭に.がついて、隠しファイルのようになってブラウザで読み込みエラーになる。
  • @expo/webpack-configのsrc/webpack.config.jsの該当箇所が[name].[hash][ext]のようになってて[name]がない場合に.が先頭になってしまうのが問題。.を_に置き換えて問題解決。issueに上げるべきだがやってない

2024.8.6

ブラウザでpdfの読み込みをサポート

  • pdfjs-distでpdfを読み込んでpngに保存
  • pdfjs-distのbuild/pdf.worker.mjsを修正してgeo情報を取得できるようにする
  • gdal3.jsでEPSG:3857のgeoTiffにする
    • webpack.config.jsにwasmをstaticにコピーする設定を追加する
    • yarn build:webで/appにアップロードする場合は以下のようにパスを指定する。yarn webの場合は/staticにする
    • const Gdal = await initGdalJs({ path: '/app/static'});
    • 以下のようにuseWorker: falseにすると、yarn webでもyarn build:webでもコードを変更せずに動作する.ただし、gdal3.jsのコードにパッチを当てる必要がある
    • initGdalJs({ path: 'static', useWorker: false });
    • dist/package/gdal3.jsの相対パスを絶対パスに修正する部分を無効にする(||trueを加える)。難読化コードなのでsrc/index.jsのif (!isNode && output.substring(0, 4) !== 'http' && output[0] !== '/') output = /${output};の部分を参考にした。
  • geotiff.jsでpdfから変換したgeotiffを読み込む。

2024.7.28

github actionsの追加

  • test.ymlを作成してpush時にunit testをするように設定
  • githubのsettingsのbranchesでルールセットを追加して、unit testが成功しないとmergeしないようにする

2024.7.15

Expo51 & React Native 0.74にアップデート

  1. yarn add expo@^49.0.0
  2. npx expo install --fix
  3. npx expo-doctor@latest
  4. 以下に従い手動で修正 https://react-native-community.github.io/upgrade-helper/?from=0.72.4&to=0.74.3
  5. expo用の修正 https://docs.expo.dev/bare/installing-expo-modules/#manual-installation
  6. firebaseの設定やfileの読み込み設定を消さないように注意。

Androidのビルドで[undefined symbol: std::__ndk1::basic_string](ld.lld: error: undefined symbol expo-module-core)となる問題

  • Android Studioでndkを一旦アンインストールして、もう一回インストールする。また、不要なバージョンのndkは削除する。おそらく別のバージョンのndkでビルドかリンクしようとしていることが問題だったぽい

  • Tools -> SDK Manager -> Languages & Frameworks -> Android SDK -> SDK Tools

  • show packages detailにチェックを入れてNDKのインストールされているチェックを外してApply。もう一回いれてApply。

  • これでyarn androidで治るのを確認。

  • 以下の処理は不要だったかもしれないが、以下でキャッシュを削除すると改善することも

  • cd android

  • ./gradlew --stop

  • rm -rf .gradle

  • rm -rf~/.gradle/caches

  • ./gradlw clean

AndroidでForeground service permission requirementsのエラー

iOSのビルドでbuilding for iOS Simulator, but linking in object file ... for architecture arm64のエラー

iOSのビルドでPhaseScriptExecution [CP-User]\ [Hermes]\ Replace\ Hermes\ for\ the\ right\ configuration

  • nodeが見つからないのが原因。ios/.xcode.env.localをexport NODE_BINARY=$(which node)にする。もしかすると何かのタイミングで書き変わってエラーになるのかも。

Webのビルドでエラー

2024.6.2

データの変更ボタンを連打すると編集された状態になってしまう問題

Pickerの遅延処理の影響で値が変更されたようになってしまう?のかも。ModalPickerに変更して解決。選択画面もModalPickerの方が見やすいため

両は哺テストでわかったバグ

  • トラックログがバックグラウンドの復帰時に重くなる。向きの処理が原因?
  • useDataEditの初期化と、データの変更ボタンで「その他」が続く
  • PDF作成でポイントとラインの重なり順序とかラベル位置とか
  • iosのデバイスでmultipagePDFの読み込みが変

欲しい機能

  • 整理番号の自動入力?もしくは調査票と位置情報を紐づけるなにか(河川水辺システムのGISのような方式)
  • プロジェクトを開いているときに.ecorismapを読み込みたい(デバッグモード)
  • ドローツール。ライン保存。カット。
  • トラック単純化

テストすべきこと

  • データアップロード
  • グループ化

2024.5.8

猛禽の流れ

登場人物

  • 調査員A、調査員B、担当(調査員Cを兼ねる)、情報室
  1. 調査員 データ入力、アップロード
    • Aさん
    • Bさん
  2. 調査員 他人のデータダウンロード
  3. 調査員 調査終了後、データアップロード
  4. 担当 全員のデータダウンロード
  5. 速報作成
  6. 翌日調査
  7. 情報室 全てのデータダウンロード

バグ

  • Privateで作成したレイヤを一旦アップロード-->メンバーアップロード-->Commonに変更してデータ追加-->ダウンロードするとメンバーはOK、管理者はだめ。Privateと被っておかしくなる??

2024.5.7

リリース時に確認すること!

  • GPS、トラックログが起動するか
  • Webも問題ないか
  • iOS、Androidも問題ないか
  • Pro版でもビルドが通るか

2024.5.1

使い方動画のためのアプリを選定

  • 画面の録画は、Andorid付属のスクリーンレコーダーを使用
  • 編集は、Microsoft Clipchamp にする。シンプルな図形とテキストを追加できるため。フォントの選択肢が2種類なのが残念。
  • Cutecut は使い勝手が良いが危険性がともなうのでやめる。
  • Canva他色々試すが、無料の範囲ではシンプルな図形やテキストの追加ができないためだめ。

2024.4.24

androidでTrack logの起動で落ちる問題

react-native-maps 1.13.2のdevelopのreleaseでDexingNoClasspathTransformのエラー

  • 原因不明だがreact nativeとかexpoのバージョンに合わせた方が良さそう。一旦、1.7.1に戻す。

ld: framework 'gdal' not found の問題

  • iosでビルドするときに上記エラーがでるようになった。ビルドのログをみるとgdalがx86_64用にビルドされてないwarningがでていた。実際、x86_64用にはビルドしていない。
  • 対応は、xcodeを開いてproject->build settings->architectures->architecturesのdebugをarm64に変更する。
  • ↑をすると他に影響がでて、ダメだったので、gdalのビルドにx86_64を加えるように修正

2024.4.19

  • firebase functionsのnodeを20にあげる。間違って.envが新しいアカウントの方になっていてプロジェクトが読み込めなくて焦る。
  • react-native-maps 1.13.2にあげる。更新方法は、過去のログ参照

2024.4.8

react-native-image-editorのWeb版対応

  • ver3.1.1だとweb版でエラーになるため4.2にアップデート。patchは3.1.1で変更したファイルをそのまま上書きして更新。4.2の変更を無視しているので、追従するのであればoffsetがマイナスでもクリップできるように修正した箇所のみ変更すべき。

react-native-image-editor

2024.3.5

iOSでPDFの画像が壊れる問題

  • 地理院のレベル15以外のタイルをiOSでgdalwarpをしてPDFで書き出すと画像が壊れる問題があった。PNGがColor Tableになっているのが原因で、それにiOSのPdfiumがうまく対応できていないのが問題ぽい。
  • ImageManipuratorをかますことで解決。(おそらくCOLOR TableのPNGをRGBAのPNGに変換してくれている)

2024.2.29

  • Pro版でreact-native-gdalwarpを統合してビルドする際に"Multiple commands produce"のエラーがでる。原因は、Firebaseを使用するためにPodfileで設定している use_frameworks! :linkage => :static 
  • gdalwarpで使用しているgdalとかのFrameworksでアーキテクチャとかライブラリ間でヘッダーが重複していて、それがエラーを出している。staticの設定がなければ、うまいこと処理していてエラーにならなかった。
  • Firebaseを使いつつ、上記エラーを回避するためecorismapのPodfileでstatic_frameworkに'react-native-gdalwarp'を追加する。
   $static_framework += [
      'react-native-gdalwarp',
      'react-native-maps',
      'react-native-google-maps',
      'Google-Maps-iOS-Utils',
      'GoogleMaps',
      'RNPermissions',
      'Permission-LocationWhenInUse',
      'Permission-Notifications',
      'react-native-paste-input',
      'vision-camera-code-scanner',
      'VisionCamera'
    ]

2024.2.27

  • 変換中のLoading処理
  • PDFの範囲を設定してジャンプできるように
  • 複数ページのPDFを読み込めるように
    • ジオ情報付きの複数ページの単一ファイルPDFはQGISでは現状書き出せない。地図帳から単一ファイルにしないで書き出して、それをjustPDFで結合すればOK
  • geoPDFの書き出し。

2024.2.20

  • react-native-mapsのiOSでtileSizeを反映できないようになってたので修正
  • iOSではtileSizeを小さくすると、ひとつ上のズームからタイルを取得する仕様のため、overZoomやdrawFromHighResolutionでは、画像のサイズを取得して作成している。
  • Androidでは、Tile()でtileSizeに画像を調整しているので、画像からではなく、tileSizeを元に画像を作成している。
  • doubleTileSizeは、Androidでは1つ上のズームレベルを使って画像サイズを2倍にして、iOSはtileSizeを半分にすることで同様の効果になる。

2024.2.15

iOSでのpdfの投影変換

  • 解像度をあげるためにGDAL_PDF_DPIを300を設定する。GDALAllRegisterを呼ぶ前に、CPLSetConfigOptionかsetenvで設定する。
  • 出力ドライバがPNGだと、GDALCreateCopy後のadfGeoTransformの解像度が正しくない。(2倍になってて、おそらくDPIの設定が反映されない?PNGライブラリを外部のものを使えば改善する?Mac用にコンパイルしたものは問題なしなので、iOS用のビルドの問題かも?)
  • 出力ドライバをJPEGにするば、解像度の問題は解決。変換時に4バンドのJPEGはCMYKを使用されるwarnigがでて、色味が若干変わるのが気になる。写真であれば問題なし?
  • 複数ページのPDF、読み込み範囲を設定して範囲にジャンプできる機能があると良いかも。

2024.2.12

pdfiumのビルド

gdalのビルド

ecorismapで利用

  • ecorismap内で npx create-react-native-library@latest react-native-gdalwarp --reactNativeVersion 0.72.4 --local
  • ios内にFrameworksを作成して、gdal.xcframeworks,proj,sqlite3をコピー
  • ios内にshareをコピー
  • react-native-gdalwarp.podspecに s.vendored_frameworks = "ios/Frameworks/gdal.xcframework", "ios/Frameworks/proj.xcframework", "ios/Frameworks/sqlite3.xcframework", "ios/Frameworks/pdfium.xcframework" s.resources = "ios/share/**/*" を追加して ios/pod install
  • firebaseと共存させるには、追加で2024.2.29の設定も必要

2024.2.7

  • gdalを組み込むとサイズが大きすぎる?ogrとから使用しないドライバは削除する?
  • iOSは未実行。これから

2024.2.6

PDFiumをGDAL&Android用にビルド

  • wsl2で実行。Android用のビルドはlinuxでしかサポートしてない。
  • git clone https://github.com/rouault/pdfium_build_gdal_3_8.git
  • build_linux.shを変更
    • INSTALL_DIR=/tmp/install に変更
    • echo "target_os = [ 'android' ]" >> .gclient を挿入
  • args_release_linux.gnを修正
    • target_os = "android" に変更
    • target_cpu = "arm64" に変更
    • use_system_libjepg,png,lcms2,openjpeg2をすべてfalseに変更
  • ./build_linux.sh を実行  

GDALをPDFiumドライバ有効にしてAndroid用にビルド

  • git clone https://github.com/OSGeo/gdal.git
  • .github/workflows/android_cmake/start.sh を変更
    • apt-get installはコメントアウト。sudoで手動でインストールしておく。 swig, ant, openjdk-17-jdkを追加でインストール
    • export WORK_DIR = $PWD/workを追加
    • cmakeを3.28.3に変更。古いままだとjniでエラーになる
    • android-ndk-r26bに変更
    • proj ビルド後のcdを ../../../ に変更
    • cmakeの設定に以下を追加

-DBUILD_JAVA_BINDINGS=ON
-DGDAL_JAVA_INSTALL_DIR=/tmp/install/java
-DGDAL_JAVA_JNI_INSTALL_DIR=/tmp/install/lib/jni
-DBUILD_APPS=OFF
-DBUILD_PYTHON_BINDINGS=OFF
-DBUILD_TESTING=OFF -DGDAL_USE_PDFIUM=ON

  • gdal/frmts/pdf/CMakeLists.txtの70-84行を削除
  • mkdir work
  • ./.github/workflows/android_cmake/start.sh で実行
  • /tmp/install以下のファイルを使用する。

React Nativeでgdalを利用

  • react-native-pdf-to-imageをgdal対応に改造-->その後、modules/react-native-gdalwarpに変更
  • node_modules/react-native-pdf-to-image/android にlibsを作成
  • libs直下にgdal-3.9.0.jarを入れる
  • libs直下にarm64-v8aフォルダを作成
  • arm64-v8aに作成したlibgdalalljni.so,libgdal.so,libproj.so,libsqlite3.so,libpdfium.aを入れる
  • build.gradleを修正
    • 追加 sourceSets {main {jniLibs.srcDir 'libs'}}
    • dependenciesに追加 implementation fileTree(dir: 'libs/', include: ['.aar', '.jar'], exclude: [])
  • android/src/main にassetsフォルダを追加
  • shareのgdaとprojフォルダをassetsにコピー
  • PdfToImageModule.javaのコードの中でassetsの中身をコピーするコードを追加

AssetManager assetManager = reactContext.getAssets(); String[] files = assetManager.list("proj"); File projDir = new File(reactContext.getFilesDir(), "proj"); if (!projDir.exists()) { projDir.mkdirs(); } for (String filename : files) { Log.d(TAG, "PdfToImageModule: copy_proj_files: filename: " + filename); InputStream is = assetManager.open("proj/" + filename); OutputStream os = new FileOutputStream(new File(projDir, filename)); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } is.close(); os.close(); } gdal.SetConfigOption("PROJ_LIB", projDir.getAbsolutePath()); Log.d( TAG, "PdfToImageModule: copy_proj_files: PROJ_LIB: " + projDir.getAbsolutePath() );

参考

2024.2.1

react-native-image-editorの修正

  • Android、iOSともにcrop範囲が負だとエラーになるので修正してパッチを作成。

GeoPDFの読み込み検討2

  • webメルカトルのPDFを、四隅の座標を与えれば、タイルに読み込める実装はできた。
  • GeoPDFから座標を読み込む、投影変換は挫折。
  1. pdf-parse
  2. geoTiff.js
  3. loam,gdal.js
  4. gdal3.js
  • fsとかpathとかnode前提のコードがだめ。
  • wasmは、hermesでだめ。対処中?
  • gdalをiosやandroidでbuildする方法は、公式にあるっぽいけど、react native化するには先が長すぎる。

2024.1.30

MapMemoで矢印、スタンプ

  • 矢印はラインで実装。戻るでは、矢印だけ消える。
  • スタンプは1点だけのラインの場合にMarkerのSVGで実装。
  • 猛禽での利用にどうすべきか?
  1. MapMemoの現場での共有
  2. MapMemoの社内での共有
  3. PDFの書き出し
  4. スタンプをポイントにするか?ライン1点のままか。
  5. ラインのノードをMarkerにしてスタンプ表示するか?

2024.1.29

GeoPDF読み込み検討

  • react-native-pdf-to-imageでpdfを画像に変換は可
  • 実用には投影変換が必須だが、react nativeで使えるgdalは現時点ではないので諦める。
  • geoTIFF.jsは投影変換はできないがgeotiff-geokeys-to-proj4を組み合わせればできそう。でも処理が重そうなので実用的でないかも。
  • 紙用のレイアウトを整えたPDFを読み込めれば、ラベルズレる問題は解消するか。
  • ローカルのPMTilesが読み込めると良い??

2024.1.28

GPS精度&バッテリー消費

2024.1.23

データPDF

  • データPDFのテーブルのヘッダーをページごとに出力するために使用するが、iOSではバグ?のためページごとにヘッダーが出力されない。
  • ベクトルタイルはPDF出力に対応していない。
  • 2024.1.18

    PDFの出力

    • Expo Printを使用して実装
    • ウェブメルカトルのためスケールは目安。スケールは、図面中心の緯度に応じてCosθで長さを調整。
    • QGISでは、調整なしでY軸方向でスケールを決定しているため、freehandRasterGeoReferencerで合わせる際はスケールの値は、pdfに記載されているものとは異なる。(プログラム中のscaleForWebMercatorが正解)解像度は150を指定。
    • QGISで直接読み込めるようにVRTも出力。gdal_translateでgcpを指定してvrtを作成しても良い。
    • composition.xmlでGeoPDFも作成できるが、現時点ではvrtを利用のためコメントアウト

    gdal_createoutput.pdf-co COMPOSITION_FILE=input.xml

    https://gdal.org/drivers/raster/pdf.html http://www.rtwilson.com/downloads/StaticToInteractivePDFs_RWilson_FOSS4G21.pdf

    2023.11.29

    • iPadでポイントを入力する調査に対応するため、pickerを変更、横向きのレイアウト変更、ApplePencilに最適化、などを行う。
    • datejsでenのロケールだとLフォーマットを解釈できずにnullになるバグがあったので修正。

    2023.11.21

    pencilで速く書くとマップが少し動く問題

    • MapViewのscrollEnabledをtrue-->falseは正常だが、false-->trueは反映されないバグ? panResponderの中での変更だからかもしれない。現状どうしようもないので放置。

    ドローツールの挙動がおかしくなる問題を修正

    • bottomSheetで導入したgesture-handlerのバグが原因。gesture-handlerをバージョンアップしたら解決

    2023.11.17

    iOSでPMTilesを読み込むとメモリーリークで落ちる問題を修正

    • self.tileSizeをCGSizeMakeで参照しているのが原因。値に変更して解決。なぜかは不明。
    • UIGraphicsBeginImageContextWithOptions(CGSizeMake(256, 256), NO, 1);の0-->1に変更。0だとRetinaディスプレイに合わせてスケーリングされてしまってサイズが大きくなる原因となっていた。
    • ベクタータイルもtileSizeを256にした。メモリを抑え、フォントサイズを大きくするため。ラインは荒くなったので、512に戻した方が良いかも

    mapMemoのハネの問題

    • 描画中はlineCapを設定で解決
    • 保存したlineは、始点や終点のハネの削除を試みたが、いまいちなので結局何もしない。
    • Map SDK for google のlineCapは未対応。

    2023.11.2

    iPad Air の実機で落ちる問題

    以下の方法でメモリの状況を確かめると、ベクトルタイルのレンダリングでメモリリークが起きている可能性がある。Simulatorだと大丈夫に見える。未解決 https://qiita.com/mashunzhe/items/8073d32d7aee28578cab

    2023.10.26

    不要な再レンダリングのためデータ選択や画面変更の処理が重い問題を修正

    • useSelectorでshallowEqualを指定することでobjectが変更になったときだけ更新するように修正
    • point,line,polygonのデータをfilterする処理は、reselectでmemo化したものをuseSelectに渡すように修正
    • point,line,polygonの描画で、selectedRecordが更新されたときに、関係ないタイプなのに再レンダリングされないようにReact.memoにカスタムの比較関数を追加

    2023.10.25

    • android版でstyleを保存するときにディレクトリがないためエラーになるバグ修正
    • MapMemoでラインに不要なレンダルングが発生していたのを修正
    • MapMemoで連続して書くと保存処理で中断してしまうので、timerを追加して一定時間書かなければ保存するように修正
    • DataEditでdispatchでSettingsを更新すると地物の再描画が走り、重くなる問題あり。WIP

    2023.10.16

    • 0.3.3をリリース
    • ベクトルタイル、MapMemo、ボトムシート、最新のReact Nativeに対応
    • 次期リリースの構想。GeoPDFの読み込み対応など

    2023.10.14

    • アプリをkillした際のTrackingの挙動を修正。AndroidはForground ServiceとしてkillしてもTrackingを取得可能。iOSはBackground Serviceを有効にすることで可能のはずだが、現時点ではStopしてしまう。バグ?が治るまでそのまま放置。

    2023.10.12

    • MapMemoが重くなるのでタイル化したgeojsonを保存して、表示領域のタイルだけを読み込むように実装テストをした。インポート、エクスポート、全削除、表示表示の切り替えが未実装。動作は悪くはないが必要か不明。Web版ではFileSystemの関係で使用できない。
    • 現在のMapMemoが重かったのは、書いている時にLineの再レンダリングが走っていたため。React.memoで囲って不要なonPressを削除することで修正。
    • MapMemoのタイル化のようにLineも表示範囲を限定することで軽くなるか試したが、そんなに変わらないので、すでに内部で処理されている可能性がある。
    • ひとまず再レンダリングの修正で軽くなったので、MapMemoをタイルに移行するかは様子見

    2023.10.5

    使用しているライセンス情報を集計

    npx npm-license-crawler --dependencies --production --onlyDirectDependencies --omitVersion --json ./src/licenses.json

    2023.9.29

    error: Unexpected duplicate tasks: WriteAuxiliaryFile ...

    ios/ecorismap.xcodeproj/project.pbxproj のbuildphasesの[EXPO]が二重になっていたのが原因。git mergeでコンフリクトした際に間違えたのかもしれない。

    2023.9.28

    FlatListがreact native 0.72でデータが表示されない問題

    データが0かチェックすることで解決
    https://github.com/facebook/react-native/issues/39421

    BottomSheetの高さの問題

    BottomSheetの高さをSnapPointと同じにしないと、内部のコンテンツのflexが効かないので以下の方法を適用
    https://github.com/gorhom/react-native-bottom-sheet/issues/1411#issuecomment-1645491578

    BottomSheet内でScrollViewとFlatListがスクロールできない問題

    react-native-gesture-handlerからインポートすることで解決
    https://gorhom.github.io/react-native-bottom-sheet/troubleshooting/

    2023.9.22

    react-native-webでエラー

    [email protected]. だとfirebase関連でyarn webでエラーになるので、0.18.に戻す。まだissueはあがってない。

    expoとreact nativeのアップグレード

    以下を参照 https://blog.expo.dev/expo-sdk-49-c6d398cdf740

    1. yarn add expo@^49.0.0
    2. npx expo install --fix
    3. npx expo-doctor@latest
    4. 以下に従い手動で修正 https://react-native-community.github.io/upgrade-helper/?from=0.71.8&to=0.72.4
    5. expo用の修正 https://docs.expo.dev/bare/installing-expo-modules/#manual-installation
    6. firebaseの設定やfileの読み込み設定を消さないように注意。

    react-native-mapsのバージョンアップ

    1. バージョンアップしてこれまでのパッチがerrorになる場合は以下の手順
    2. yarn add [email protected] でpatchが適用されない状態でインストール
    3. インストールされたreact-native-mapsをコピーして別のところに退避(ecorismapの中にいれてはいけない。node_moduleが混乱するため)
    4. git apply --reject --ignore-whitespace patches/react-native-maps+1.3.1.patch とかで以前のpatchをあてる
    5. find ./ -name "*.rej" でエラーになったファイルを確認して手動で修正。
      • 自分が変更した部分がない場合は、退避したファイルをコピーすると楽。
      • MapTileProvider.javaは丸々入れ替えるので、patchesにあるものをコピーする。

    2023.9.11

    Windowsでtippecanoe

    1. 基本これに従う。https://gist.github.com/ryanbaumann/e5c7d76f6eeb8598e66c5785b677726e
    2. sudo apt-get install -y g++-5 はエラーになるので無視
    3. export CXX=g++ に変更
    4. あと同じ

    変換方法

    tippecanoe -o kitakami.pmtiles -L kuiL:キロ杭Line.geojson -L kuiP:キロ杭Point.geojson -pf -pk -r1 -d1 -Z 0 -z 20 --force
    tippecanoe -o kitakami_h30.pmtiles -L kitakami_h30:植生図.geojson -pf -pk -Z 5 -z 20 --force

    2023.9.1

    pmtilesのファイルにアクセス制限を付ける

    1. AWS S3にアップする
    2. ファイルを選択してアクション--> 署名付きURLで共有する
    3. バケットのアクセス許可 --> Cross-Origin Resource Sharing (CORS)を編集
    [
        {
            "AllowedHeaders": [
                "Authorization"
            ],
            "AllowedMethods": [
                "GET",
                "HEAD"
            ],
            "AllowedOrigins": [
                "*"
            ],
            "ExposeHeaders": [
                "Access-Control-Allow-Origin"
            ]
        }
    ]
    

    2023.8.30

    Protobufを導入する(iOS)

    1. brew install protobuf
    2. ここからvector_tile.protoを取ってくる。https://github.com/mapbox/vector-tile-spec/tree/master/2.1
    3. protoc --objc_out=. vector_tile.proto
    4. 作成されたVectorTile.pbobjc.mとVectorTile.pbobjc.hをnode_modules/react-native-maps/ios/AirGoogleMapsの中に入れる
    5. node_modules/react-native-maps/react-native-google-maps.podspecに以下を追加(ポイント!)
      s.dependency 'Protobuf'
      s.subspec 'NonARCFiles' do |ss|
        ss.source_files = "ios/AirGoogleMaps/VectorTile.pbobjc.m"
        ss.compiler_flags = '-fno-objc-arc'
      end
    
    1. Pod install
    2. yarn ios

    Protobufを導入する(Android)

    その1

    1. protoc --java_out=./ vector_tile.proto
    2. 作成されたvector_tileフォルダをnode_modules/react-native-maps/android/src/...(略)に入れる
    3. react-native-mapsのbuild.gradleにimplementation 'com.google.protobuf:protobuf-java:3.24.0'を追加

    その2

    その1だとfirebase関連のProtobufと衝突してduplicateエラーとなるためバージョンを合わせる。

    1. ここから3.21.11用のprotocを取得 https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.21.11/
    2. vector_tile.protoの先頭にsyntax = "proto2";を追加
    3. protoc --java_out=lite:./ vector_tile.proto
    4. 作成されたvector_tileフォルダをnode_modules/react-native-maps/android/src/...(略)に入れる
    5. react-native-mapsのbuild.gradleにimplementation 'com.google.protobuf:protobuf-javalite:3.21.11'を追加

    2023.7.28

    Android13でカメラが起動しない問題

    expo-image-pickerのバグのようなので、こちらのパッチをあてて修正

    https://github.com/expo/expo/issues/22122

    expo-media-libraryも同様なバグなので、こちらのパッチをあてて修正

    https://github.com/expo/expo/issues/20496

    expo48?49?では修正済みのようなので、expoをアップグレードした際にはパッチは不要のはず。

    2023.7.17

    重なったポイントを選択すると点滅する問題(iOS)

    iOSのみ重なったポイントを選択すると黄色と赤で点滅する問題があった。選択したポイントのzIndexを最上位に指定することで治った。

    FlatListでitemが10個だけしか表示されない問題

    FlatListでタイミングによってitemがinitialNumToRenderのデフォルト値である10個だけしか表示されない問題があった。disableVirtualization={true}を指定することで解決したが、このオプションは推奨されないていない。react navigationの表示タイミングの問題を疑ってuseFocusEffectなどを設定してみたが解決せず。VirtualizedListの_updateCellsToRenderでのdisableVirtualization={false}の場合の分岐で問題があるようだがそれ以上は原因を突き止められず。react native 0.72でVirtualizedListのコードが大きく変更になっているようなので、それで解決しているかもしれない。

    https://github.com/facebook/react-native/blob/v0.70.12/Libraries/Lists/VirtualizedList.js#L1759

    2023.7.7

    Lineがあると背景地図が更新されない問題(iOS)

    iOSのみLineがあると背景地図を切り替えても表示が更新されない問題があった。LineのコンポーネントをPolygonと同じようにしたら治った。PolylineをViewで囲っていたのが原因だった可能性がある。もしくは、コンポーネントに抽出したのが良かったのかもしれない。

    2023.6.8

    Pickerで複数レンダリングされる問題(iOS)

    iOSのみ大量のデータがある場合のテーブル表示のパフォーマンスに問題があった。原因はiOSのみPickerでonValueChangeが複数回呼び出されるバグ?があったため。値が変更しなければ呼び出さない処理を追加することで対処。以下を参考にした。
    https://github.com/lawnstarter/react-native-picker-select/issues/112

    2023.5.31

    大きいデータでredux-persistで使っているAsyncStorageがリセットされる問題(解決)

    AsyncStorageのpersist:rootのキーに保存されるサイズがトータルで2MBを超えると問題が発生するので、以下のスレッド中にあるonCreateに容量変更を設定する方法で解決

    https://github.com/rt2zz/redux-persist/issues/284

    さらにデフォルトで総容量の制限が6MBなので、それを以下を参考に100MBに変更
    https://react-native-async-storage.github.io/async-storage/docs/limits

    ただし、18MBぐらいを超えると重くて動かないので、起動時に総容量をチェックして15MBを超えたらAlertを出すようにする。

    2023.5.2

    大容量のトラックログを保存中に気がつくとアプリのデータがリセットされている問題

    おそらくAsyncStorageの制限の問題(android)
    https://react-native-async-storage.github.io/async-storage/docs/limits
    https://github.com/react-native-async-storage/async-storage/
    これのissues/847の設定をしてみた。next storageを有効にすると解決する?
    トラックログの保存処理で2MBを超えたら保存しないように変更してみる。

    2023.3.20

    markerの更新で重くなる問題

    MarkerのtracksViewChangesをtrueにしておくと表示の切り替えやrecordの更新で重くなる問題がある。 
    tracksViewChangesを常時falseにすると選択時に色が更新されないので、選択されたものだけtrueに変更して、それ以外をfalseにするように変更。 
    これで一応、重くなる問題が解決。色やラベルの変更も問題ないように見えるが、もしかすると不具合があるかもしれないので要注意。

    yarn add --release variantでエラーとなる

    duplicateのエラーメッセージがでる。エラーメッセージを読んで重複のファイルを正しく削除することで解決。
    原因は、android studioでビルドできないエラーの解決のために以下のnpx react-native bundleのコマンドを実行したためと思われる。

    2023.3.3

    firebase Performanceの追加

    マニュアル通りだが、ダッシュボードに反映できないトラブル。
    firebaseのプラグインの指定の仕方が違ってた?ので修正。
    もしくはtmizu23のアプリが登録されていたので削除。
    上記のどちらかの対応で治った。

    https://firebase.google.com/docs/android/setup?hl=ja
    https://firebase.google.com/docs/perf-mon/get-started-android?authuser=0&hl=ja

    android studioでビルドできない

    Unable to load script. Make sure you're either running a Metro server (run 'react-native start') or that your bundle 'index.android.bundle' is packaged correctly for release.
    というエラーがでる。素のプロジェクトでも同様なのでexpoのバグと思われる。  
    以下を実行で解決  
    npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

    Excessive number of pending callbacksのエラー

    以下を参考にreact-nativeのパッチを作成。修正されたら削除する。
    https://github.com/facebook/react-native/issues/27483  

    TextInputの入力途中で保存したときのバグ

    useKeybordを導入して、keybordを表示中は保存できないようにして対応
    https://github.com/react-native-community/hooks

⚠️ **GitHub.com Fallback** ⚠️