React Native 真機調試

來源:互聯網
上載者:User

標籤:

iOS 真機調試方法一:(從裝置訪問程式開發伺服器)

首先,你的膝上型電腦和你的手機必須處於相同的 wifi 網路中。

開啟 iOS 項目的 AppDelegate.m 檔案

更改 jsCodeLocation 中的 localhost 改成你電腦的區域網路IP地址

在 Xcode 中,選擇你的手機作為目標裝置,Run 即可

可以通過晃動裝置來開啟開發菜單(重載、調試等)

方法二:(使用離線包)

你也可以將應用程式本身的所有 JavaScript 代碼打包。這樣你可以在程式開發伺服器沒有運行時測試它,並把應用程式提交到到 AppStore。

  1. 開啟 iOS / AppDelegate.m

  2. 遵循“選項 2”的說明:

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

    • 在你應用程式的根目錄的終端運行給定 curl 命令 ($ curl ‘http://localhost:8081/Game2048.bundle?platform=ios‘ -o main.jsbundle )//此時應該先在本地啟動服務

    • //打包項目的根目錄下的 js 檔案到 main.jsbundle (可以直接使用上述 curl 方法打包 javascript 即可)  $ react-native bundle [--minify]

Packager 支援幾個選項:

  • dev(預設的 true)——設定了 __DEV__ 變數的值。當是 true 時,它會開啟一堆有用的警告。對於產品,它建議使用 dev = false

  • minify(預設的 false)——只要不通過 UglifyJS 傳輸 JS 代碼。

故障排除

如果 curl 命令失敗,確保 packager 在運行。也嘗試在它的結尾添加 ——ipv4 標誌。

如果你剛剛開始了你的項目,main.jsbundle 可能不會被包含到 Xcode 項目中。要想添加它,按右鍵你的項目目錄,然後單擊“添加檔案……”——選擇產生的 main.jsbundle 檔案。

Android 真機調試

在 Android 裝置上開啟 USB debugging 並串連上電腦啟動調試。

在真機上啟動並執行方法與在模擬器上運行一致,都是通過 react-native run-android 來安裝並且運行你的 React Native 應用。

如果不是 Android 5.0+ (API 21) ,那麼就沒辦法通過 adb reverse 進行調試,需要通過 WiFi 來串連上你的開發人員伺服器

讓調試用電腦和你的手機必須處於相同的 WiFi 網路中下

開啟震動菜單 (搖動裝置)

前往 Dev Settings

選擇 Debug server host for device

輸入調試用電腦的區域網路IP

點擊 Reload JS


Xcode7上運行報錯解決方案
在 Xcode7 指定真機運行,結果報出如下錯誤:(Undefined symbols for architecture arm64:   "_RCTSetLogFunction)

Undefined symbols for architecture arm64:   "_RCTSetLogFunction", referenced from:       -[PropertyFinderTests testRendersWelcomeScreen] in PropertyFinderTests.o ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

在 Build Setting -> Linking ->  Dead Code Stripping 中設定為 No 就可以了。

真機調試報錯2:
Invariant Violation: Application Game2048 has not been registered.

有人說是連接埠原因:

  • Kill already running program.

  • Or Change the port by going into : ../lala/node_modules/react-native/packager/packager.js then find your port number, example 8081, and replace with the port number that is not in use.

  •  var options = parseCommandLine([{          command: ‘port‘,          default: 8082,        },

有人說是 appName 註冊原因:

AppRegistry.registerComponent(‘AwesomeProject‘, () => YourMainComponent);
var {  AppRegistry} = React;

也有人說是樣式原因:

//將 position: ‘absolute‘ 修改成  position: ‘absolute‘ 

StyleSheet.create({  cover: {    display: ‘absolute‘  }});

以上都沒有解決我的原因:

最終仔細排查後發現還是自己 javascript 打包的時候出錯。清除 main.bunndle 中的內容,將 javascript 重新打包了一下,Run -> 成功。(黃天不負有心人,終於成功了,淚奔啊!)

至此 IOS 兩種方法真機調試、運行已完成。前者一般用於開發測試階段,後者用於打包項目,發布 AppStore。


ps (參考):

http://wiki.jikexueyuan.com/project/react-native/running-device.html

http://facebook.github.io/react-native/docs/running-on-device-ios.html#content

https://github.com/facebook/react-native/issues/500#issuecomment-111575780

http://stackoverflow.com/questions/29287987/invariant-violation-application-awesomeproject-has-not-been-registered-when-b



React Native 真機調試

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.