標籤:
iOS 真機調試方法一:(從裝置訪問程式開發伺服器)
首先,你的膝上型電腦和你的手機必須處於相同的 wifi 網路中。
開啟 iOS 項目的 AppDelegate.m 檔案
更改 jsCodeLocation 中的 localhost 改成你電腦的區域網路IP地址
在 Xcode 中,選擇你的手機作為目標裝置,Run 即可
可以通過晃動裝置來開啟開發菜單(重載、調試等)
方法二:(使用離線包)
你也可以將應用程式本身的所有 JavaScript 代碼打包。這樣你可以在程式開發伺服器沒有運行時測試它,並把應用程式提交到到 AppStore。
開啟 iOS / AppDelegate.m
遵循“選項 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 支援幾個選項:
故障排除
如果 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 真機調試