簡體   English   中英

React 本機應用程序卡在設備的啟動屏幕上,但可在模擬器中運行

[英]React native app stuck on splash screen on device but works in simulator

我的 React Native 應用程序在 XCode 模擬器中運行沒有問題,但是當我在物理設備上運行時,我的 iPhone 出現了問題。 應用程序啟動並卡在 React Native 閃屏上,10-15 秒后應用程序崩潰/關閉。 這是什么原因造成的,我該如何預防?

看來我已經找到了問題所在。 根據https://facebook.github.io/react-native/docs/running-on-device ,當您在您的設備上構建和運行應用程序時,您的應用程序將從您計算機上的打包程序加載 js 文件,因此您可以實時重新加載您的應用程序。 這意味着您的設備必須連接到您的計算機或必須與您的計算機處於同一 wifi 網絡中。 如果您的設備無法訪問打包程序,它將卡在啟動屏幕上並退出。

要在您的設備上可靠地運行,請編輯構建架構和構建發布版本。

對我來說,當我構建時,它在模擬器中運行良好,但是在實際設備中,只有閃屏出現,沒有別的。

這是因為我的構建配置是調試模式,這是我猜的默認模式,我不得不將發布/構建配置從調試更改為發布,並且一切都按預期工作。

如果有幫助,請點贊 :)

在此處輸入圖片說明

應該完全有可能在設備上調試運行應用程序,而無需附加打包程序! 您必須使用react-native bundle創建一個離線 bundle,並將其添加到您的 Xcode 項目中。 然后,當打包程序不可用時,您的應用程序應該回退到該捆綁包。

這曾經在部署到設備 FB 文檔中,不知道為什么它不再存在。

示例調用(我們的index.ios.js被 TypeScript 放在./dist ):

react-native bundle --dev true --assets-dest ./ios --entry-file ./dist/index.ios.js --platform ios --bundle-output ios/main.jsbundle

此外,顯然有必要告訴您的應用程序直接從包中運行,而不是嘗試訪問開發服務器,這似乎會導致超時(我們遇到了與 OP 相同的問題)。

注釋掉這一行:

jsCodeLocation = // whatever

並添加這一行:

jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

我嘗試斷開我的 iPhone 與互聯網的連接,問題在以后的發布中消失了。

所以有些東西試圖做網絡事情並導致延遲。 這是一個快速修復,但在我們找到具體的罪魁禍首之前會這樣做。

我遇到了同樣的問題。
我所做的是在 Xcode 中轉到Products -> Scheme -> Edit Scheme -> 選擇 Run 選項卡 -> 將構建配置更改為 Release(默認為調試模式)並在設備中運行應用程序。

它要快得多,並且像本機應用程序一樣運行它。

您可能需要對應用程序進行簽名。

在項目導航器下,單擊您的應用程序。 然后從項目和目標列表中選擇您的目標。 在“常規”選項卡中,找到“簽名”部分。 您需要在此處指定一個團隊。

有關更多信息,請參閱此鏈接: https : //developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/LaunchingYourApponDevices/LaunchingYourApponDevices.html#//apple_ref/doc/uid/TP40012582-CH27-SW4

我在 react-native-splash-screen 遇到了這個問題。 刪除后就可以使用了

由於以下可能性,可能會出現此問題:

  1. 您的運行模式設置為release而不是debug ,因此始終期望加載main.jsbundle ,而不是從調試服務器運行。 通過Product->Schema-> Edit Schema->Run-> Build Configuration: Debug更改它

在 Xcode 日志中檢查任何消息,如NSURLConnection finished with error - code -1004NSURLConnection finished with error - code -1022 轉到 Project->Target->Build Phases-> + -> New Run Script Phase

  1. (-1004) 您已經從草圖配置了您的 XCode 項目,但忘記在構建階段輸入 react-native xcode 腳本:

對於以下版本的 React Native 50: export NODE_BINARY=node ../node_modules/react-native/packager/react-native-xcode.sh

對於更高版本的 React Native 50: export NODE_BINARY=node ../node_modules/react-native/scripts/react-native-xcode.sh

  1. (-1022) 您的應用 ATS 問題,檢查 Info.plist,您可以使用以下代碼關閉 ATS: <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

對我來說,我在我的項目中使用了 firebase 框架。 我忘了將GoogleService-Info.plist文件添加到我的 xcode 項目中。 添加后問題就消失了。

剛剛經歷了這個,經過一個小時的調試后意識到我最近啟用了我的系統防火牆並將其設置為“阻止所有傳入連接”。

奇怪的是,android 在物理設備上運行良好,但是物理設備上的 iOS 無法連接到 RN 服務器。 放寬了防火牆規則,現在 iOS 可以連接到 RN 服務器。

是的,我的手機上禁用了 WiFi。 啟用 WiFi 並恢復業務

在我的 iOS 設備上發生在我身上。 我連接的是 4G,而不是 WiFi。 我連接到 WiFi,它立即開始工作。

我在TestFlight上上傳發布時遇到了同樣的問題,所以我所做的是

react-native link react-native-splash-screen

因為我的啟動畫面插件是如何取消鏈接的。 這對我有用。

最好檢查所有撥出電話。 例如,如果您確實調用 http 請求來獲取用戶或在從存儲中獲取用戶期間,則可能會發生這種情況。

如果此調用返回錯誤,您將卡在啟動畫面中。

此外,假設您有使用這些調用的導航,情況會更糟。

以上所有解決方案都不適用於我。

我的情況真的很奇怪。 我公司的路由器同時發送2.4G和5.0G wifi。 在真機調試時,只能連接2.4G wifi。

在我的情況下,應用程序堆棧在兩個(調試和發布)構建方案的初始屏幕上。

問題在於推送通知和 Firebase 的功能。 加這個就行了。 你怎么能做到這一點

也許它會幫助你:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM