如何通过命令行直接在iOS设备上运行React Native应用程序?

191

是否可以像在模拟器上使用react-native run ios --simulator "iPhone 5s"一样,直接从命令行运行React Native应用程序在iOS设备上运行?

13个回答

374

以下方法对我起作用了(在React Native 0.380.40版本上测试通过):

npm install -g ios-deploy
# Run on a connected device, e.g. Max’s iPhone:
npx react-native run-ios --device "Max’s iPhone"
如果你尝试运行run-ios,你会发现脚本在构建后到达安装步骤时建议执行npm install -g ios-deploy
编辑: 虽然React Native提供的各种命令文档略显简陋,但是值得去访问react-native/local-cli。在这里,你可以看到所有可用的命令以及它们运行的代码-因此,你可以找出未记录命令的可用开关。

2
如果你看到类似于“ios deploy does not support the following options: id”的内容,可能像我一样,你的iPhone正在运行iOS测试版,你需要使用Xcode测试版。尝试使用sudo xcode-select -s /Applications/Xcode-beta.app(假设你已经安装了正确的Xcode测试版应用程序)。 - paulvs
77
对我而言,只需要运行 react-native run-ios --device 命令即可,上述命令无效。 - narek
18
如果在运行npm install -g ios-deploy之后出现错误,请尝试运行sudo npm install -g ios-deploy --unsafe-perm=true --allow-root - Eric Wiener
6
请注意,您可以在 iOS 设备上使用设备的 UDID(如果设备名称包含非英文字符,则使用 --device 选项可能会出现错误)以发布配置运行移动应用程序:react-native run-ios --udid XXXX --configuration Release - Gürol Canbek
9
在设备上看到 ** INSTALLATION SUCCEEDED ** 但是没有任何反应......设备已经正确连接并被 Xcode 所识别。尝试了主要答案和评论中提到的 react-native run-ios --device,结果都相同。 - Blue Bot
显示剩余9条评论

84

首先在您的计算机上全局安装所需的库:

npm install -g ios-deploy

在您的iPhone上前往设置,找到设备名称。

然后在下面提供该名称,例如:

react-native run-ios --device "______\'s iPhone"
有时候这会失败并输出像这样的消息:
Found Xcode project ________.xcodeproj
Could not find device with the name: "_______'s iPhone".
Choose one of the following:
______’s iPhone Udid: _________

那个udid的使用方式如下:

react-native run-ios --udid 0412e2c230a14e23451699

您可以选择使用以下选项:

react-native run-ios --udid 0412e2c230a14e23451699 -- configuration Release

你怎样获取设备 ID? - santialur
3
ios-deploy -c # 当您的设备已连接时 - jasonleonhard
1
对我来说,sudo npm install -g ios-deploy --unsafe-perm=true 运行良好。 - Jay Mayu
输入设备连接到USB -> Xcode -> 窗口 -> 设备和模拟器 -> 标识符,这是UUID(UDID)。 - Giang
@jasonleonhard ios-deploy -c 是如何工作的?它不是一个命令行工具吗?是不是应该使用 yarn/npm ios-deploy -c 或者其他什么命令?因为这个好像也不起作用。 - Sam
-c 列出已连接设备的 ID 和名称。 - jasonleonhard

76

请在项目根目录下运行此命令。

1>. iPhone设备列表用于查找连接的真实设备和仿真器。类似于Android的adb devices命令。

xcrun xctrace list devices

或者

xcrun instruments -s devices

2>. 使用此命令选择您想要在其上运行应用程序的设备

使用设备名称

react-native run-ios --device "Kool's iPhone"

使用UDID

react-native run-ios --udid 0412e2c2******51699

等待并观察在特定设备上运行您的应用程序 - K00L ;)


2
使用UDID方法时,我收到了错误信息:“错误:deviceudid选项是互斥的”。 - aksyuma
3
请在Xcode 13及以上版本中使用xctrace list devices代替xcrun instruments -s devices - Nirnay Kulshreshtha
1
实际上,现在应该是 xcrun xctrace list devices - Jay Koutavas

14

实际上,对于第一个构建,请使用Xcode进行操作,然后按照以下方式进行操作:

  1. brew install ios-deploy
  2. npx react-native run-ios --device

第二个命令将在第一个连接的设备上运行应用程序。


@famfamfam,第二个命令将启动Metro Bundler并为您提供终端,您可以在那里查看日志。 - AmerllicA

10

只是想在Kamil的回答中补充一些内容

按照步骤操作后,我仍然遇到了错误:

错误:找不到名称为“....'s Xr”的设备

从设备名称中删除特殊字符(转到设置 -> 通用 -> 关于本机 -> 名称

例如:'

它奏效了!

希望这对那些遇到类似问题的人有所帮助。

测试环境 - react-native-cli: 2.0.1 | react-native: 0.59.8 | VSCode 1.32 | Xcode 10.2.1 | iOS 12.3


2
我遇到了类似的问题,因为撇号实际上是一个 Unicode 右单引号。从设备列表中复制粘贴设备名称后,问题得以解决。 - Toma
1
我曾经遇到过同样的问题,我的 iPhone 名称中有空格和括号。谢谢 :) - Philip Frerk

9

如果你在使用npm install -g ios-deploy时出现ios-deploy@x.x.x preinstall: ./src/scripts/check_reqs.js && xcodebuild ...的错误,请试一下以下方法,这对我有效:

  1. sudo npm uninstall -g ios-deploy
  2. brew install ios-deploy

7

我用以下方法解决了问题:

react-native run-ios --device="My’s iPhone"

请注意,您的 iPhone 名称中的撇号可能不同。我的使用的是这个’


2
我曾经遇到过相同的问题。在设置->通用->关于本机->名称中更改设备名称后,运行命令npx run-ios,然后选择物理设备即可解决问题。我使用的名称只包含字母,没有空格和特殊符号。

2

为了自动化处理任何物理设备,您可以尝试使用以下方法:

npx react-native run-ios --device=$(xcrun instruments -s devices | grep -v '(Simulator)' | tail -1 | sed 's/ (.*//')

注意:此处使用的是xcrun中未被列为模拟器的最后一个设备。设备名称从xcrun instruments字符串中解析,提取第一个 ( 之前出现的所有字符。
如果您只插入了一个苹果设备且其名称不包含 (,则此方法可行。
否则,您可能只需要运行以下命令:
xcrun instruments -s devices

选择您的设备(版本号即为您应该使用的设备名称)。

然后运行:

npx react-native run-ios --device='yourDeviceName'

现在是 npx react-native run-ios --device=$( xcrun xctrace list devices | grep -v '(Simulator)' | tail -1 | sed 's/ (.*//' ) - Oyeme

1
设备在Xcode 13中被识别,但运行命令时无法在设备列表中找到。升级到Xcode 13.4.1后,设备出现在设备列表中。接着按照之前的帖子所述安装ios-deploy包,并获取设备ID。最后使用以下命令启动应用程序:react-native run-ios --udid "你的设备ID"。请注意保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接