此文檔記錄了開發中遇到的問題與解決方案。
- 如果遇到
react-native-vector-icons/xxxx
圖標錯誤顯示(正方形框裡面是 X)需要參考文檔
https://github.com/oblador/react-native-vector-icons#android
進行修復。 - 如果在使用 Flipper 後,再次運行項目而不運行 Flipper,Metro 命令行提示無連接設備。則需要重啟模擬器,並在另一個 RN 項目 run 一次(正常來講另外的項目會成功運行),再回本項目不使用 Flipper 地 run。
- 如果在安裝 npm 包或刪除本地文件時出現卡頓或提示正在使用中
需要在任務管理器停止所有
Java SE xxxx
字樣的進程,即可恢復 npm 的運作。
2022.06.26 更新: 因為某些包的 npm 和 yarn 兼容性問題,安裝依賴的指令有所改變:
-
如果你是新 clone 請使用
npm i --legacy-peer-deps
安裝依賴。 -
如果你是已有倉庫,建議把
node_modules
刪除後再使用npm i --legacy-peer-deps
安裝依賴。 -
此指令適用於大多數 npm 報 ERROR 的情況。
-
如需 update 包,可以使用
npm info 包名
先查看需要版本,再在 package.json 裡修改版本號,npm i --legacy-peer-deps
。2022.06.28 更新: 加入 linear-gradient,在 android 配置了若干項,如 IOS 編譯出錯則應該前往 github 頁查看文檔再進行安裝。
-
可能的隱患:更改了此文件
android\app\src\main\java\com\umall\MainApplication.java
路徑上存在現版本的項目名umall
,如果項目更名後發現報錯,需來這裡修改代碼。
2024.09.30 更新:tada::tada::
更新[email protected]
後,對重新開始開發的流程產生了重大變化:
- ViewPropTypes 的棄用,參考教程進行補丁修復:https://stackoverflow.com/questions/72755476/invariant-violation-viewproptypes-has-been-removed-from-react-native-migrate-t ,使用
yarn postinstall
安裝先前的補丁,如再更新 RN 版本,需再修改node_modules
中 react-native 的 index.js 代碼,再打上補丁。 - 部分第三方包使用了過時的
jcenter()
,主要是 Android 端問題,需使用mavenCentral()
代替,也是需要修改node_modules
中對應的包的代碼。
2024.10.03 更新 RN 版本更新 0.71.19 後,使用 yarn3 作為新的 package 管理器,遵循說明 set version:https://yarnpkg.com/getting-started/install
- Android 檔案權限報錯-
Error: spawn ./gradlew EACCES
cd android
chmod +x ./gradlew
xattr -l ./gradlew
-
iOS 实机调试报错-
Signing for XXX requires a development team. Select a development team in the Signing and Cap Editor
请尝试在 Xcode 中双击 Pods,然后在 Targets 中选择 React-Core-AccessibilityResources,找到 Singing 中的 Development Team 进行选择。仅在 UMAllWhite 中选择 Development Team 无效
-
iOS 实机调试报错-
module map file not found
请在 Xcode 选择项目时选择 UMAllWhite.xcworkspace 打开,不要选择 UMAllWhite.xcodeproj
-
iOS 運行文件報錯-
error React Native CLI uses autolinking for native dependencies
npx react-native unlink react-native-vector-icons
本条已经尝试修复,需要后续测试
- Pod 找不到目標工程-
Could not automatically select an Xcode project
在
ios/Podfile
中加入以下路徑以解決報錯
target 'ProjectName' do
project './ProjectName.xcodeproj'
...
end
- Build 時遇到
yoga.cpp
編譯問題:
The following build commands failed:
CompileC ......
Yoga.cpp normal arm64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'Yoga' from project 'Pods')
(1 failure)
使用 Xcode Build,雙擊該錯誤提示定位到錯誤發生位置,點按Fix
快速修復錯誤。即可正常編譯。
-
Build 時遇到
hash
編譯問題: 與上一點修復方式相同。 -
再莫名遇到
CompileC
錯誤: 刪除./package-lock.json
,刪除./ios
下的Pods
和build
文件夾。 刪除~/Library/Developer/Xcode/DerivedData/
目錄下的所有文件。 回到./
使用npm i --legacy-peer-deps
重新安裝依賴包。 到./ios
使用pod install --repo-update;
安裝 Pod 相關包,該步驟可能會使電腦重裝 iOS 模擬器。 使用 Xcode 嘗試 Build,Fixyoga.cpp
和hash
問題後,應該可以正常 Build。 -
Build、Archive 等步驟出現問題。提示
Multiple commands produce
。
在 Xcode 中 點選目錄中的Pods
,選擇Signing & Capabilities
選擇正確的Team
。
在TARGETS
中使用底部的篩選輸入框,輸入Core
定位重複的文件,右鍵Delete
React-Core.common-Access
。
然後重新 Run 和 Build 試試。
pod install
時遇到hermes-engine
報錯:
Fetching podspec for `hermes-engine` from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`
[!] Failed to load 'hermes-engine' podspec:
[!] Invalid `hermes-engine.podspec` file: undefined method `exists?' for class File.
# from /pathToProject/UM-All-Frontend/node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec:46
# -------------------------------------------
# source[:http] = "file://#{destination_path}"
> elsif File.exists?(hermestag_file) && isInCI
# Pod::UI.puts '[Hermes] Detected that you are on a React Native release branch, building Hermes from source but fetched from tag...'.yellow if Object.const_defined?("Pod::UI")
找到 /node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec
,修改File.exists?(hermestag_file)
為File.exist?(hermestag_file)
。