React Native更改默认iOS模拟器设备

296

当我运行这个命令时:

react-native run-ios

我的应用默认在iPhone6模拟器上运行:

Found Xcode project RN.xcodeproj
Launching iPhone 6 (9.2)...

如何使应用程序默认在不同的模拟器设备(例如iPhone5s)中运行?


Xcode --> 产品 --> 目标? - zipzit
2
我不知道如何设置默认设备,但是在运行 react-native run-ios 后,您可以在 模拟器 > 硬件 > 设备 > iOS x.x > iPhone 5 中更改设备。这将一直有效,直到您退出模拟器。 - sealskej
20个回答

758

使用--simulator标志来指定模拟器。

iOS 14.0及以上版本可用的设备如下:

npx react-native run-ios --simulator="iPhone 8"
npx react-native run-ios --simulator="iPhone 8 Plus"
npx react-native run-ios --simulator="iPhone 11"
npx react-native run-ios --simulator="iPhone 11 Pro"
npx react-native run-ios --simulator="iPhone 11 Pro Max"
npx react-native run-ios --simulator="iPhone SE (2nd generation)"
npx react-native run-ios --simulator="iPhone 12 mini"
npx react-native run-ios --simulator="iPhone 12"
npx react-native run-ios --simulator="iPhone 12 Pro"
npx react-native run-ios --simulator="iPhone 12 Pro Max"
npx react-native run-ios --simulator="iPhone 13 Pro"
npx react-native run-ios --simulator="iPhone 13 Pro Max"
npx react-native run-ios --simulator="iPhone 13 mini"
npx react-native run-ios --simulator="iPhone 13"
npx react-native run-ios --simulator="iPod touch (7th generation)"
npx react-native run-ios --simulator="iPad Pro (9.7-inch)"
npx react-native run-ios --simulator="iPad (9th generation)"
npx react-native run-ios --simulator="iPad Air (4th generation)"
npx react-native run-ios --simulator="iPad Pro (11-inch) (3rd generation)"
npx react-native run-ios --simulator="iPad Pro (12.9-inch) (5th generation)"
npx react-native run-ios --simulator="iPad mini (6th generation)"

列出所有可用的 iOS 设备:
xcrun simctl list devices

目前还没有设置默认值的方法。

React Native文档:在模拟器上运行


4
如果您想要的话,可以运行react-native run-ios --simulator="iPad Air" - Burak Tokak
30
要查看所有可用设备,可以使用 xcrun simctl list devices 命令,更多信息请查看 此处 - robd
2
如果你有多个模拟器的名称相同,例如 iPhone 6s for ios 11,iPhone 6s for ios 12 等,则可以从 Xcode -> Window -> Devices and Simulators 设置特定的模拟器名称。 - Chirag Purohit
为什么有多个“iPad Pro”? - kojow7
11
如果您需要特定的操作系统版本,请在括号中添加:react-native run-ios --simulator="iPhone 11 Pro Max (13.4)" - stephen_liu
显示剩余3条评论

67

您也可以通过向 package.json 文件的 scripts 元素添加一个条目来使用 npm 实现此操作。例如:

"launch-ios": "react-native run-ios --simulator \"iPad Air 2\""

使用方法如下:npm run launch-ios


3
在我看来,这是最好的答案,因为它允许你在代码/版本控制中存储配置。这意味着您不需要记住命令行语法。 - Nick
3
我同意这个答案。你也可以使用单引号来实现:"launch-ios": "react-native run-ios --simulator 'iPad Air 2'" - lfkwtz
只是根据@ifkwtz提到的建议,对“=”和单引号进行了一点改进,我在我的脚本中使用的方式如下: "ios:tpmx": "npx react-native run-ios --simulator='iPhone 12 Pro Max'" - Wasit Shafi
我也认为这应该被标记为答案,因为它在某种程度上解决了脚本条目中的“默认”设备问题。 - BlueIcedPen

40

有多种方法可以实现这一点:

  1. 使用--simulator标志
  2. 使用--udid标志

首先需要列出所有可用设备。要列出所有设备,请运行

xcrun simctl list devices

这将输出以下结果:

iOS 13.0及以上版本可用的设备如下:

== Devices ==
-- iOS 13.6 --
    iPhone 8 (5C7EF61D-6080-4065-9C6C-B213634408F2) (Shutdown) 
    iPhone 8 Plus (5A694E28-EF4D-4CDD-85DD-640764CAA25B) (Shutdown) 
    iPhone 11 (D6820D3A-875F-4CE0-B907-DAA060F60440) (Shutdown) 
    iPhone 11 Pro (B452E7A1-F21C-430E-98F0-B02F0C1065E1) (Shutdown) 
    iPhone 11 Pro Max (94973B5E-D986-44B1-8A80-116D1C54665B) (Shutdown) 
    iPhone SE (2nd generation) (90953319-BF9A-4C6E-8AB1-594394AD26CE) (Booted) 
    iPad Pro (9.7-inch) (9247BC07-00DB-4673-A353-46184F0B244E) (Shutdown) 
    iPad (7th generation) (3D5B855D-9093-453B-81EB-B45B7DBF0ADF) (Shutdown) 
    iPad Pro (11-inch) (2nd generation) (B3AA4C36-BFB9-4ED8-BF5A-E37CA38394F8) (Shutdown) 
    iPad Pro (12.9-inch) (4th generation) (DBC7B524-9C75-4C61-A568-B94DA0A9BCC4) (Shutdown) 
    iPad Air (3rd generation) (03E3FE18-AB46-481E-80A0-D37383ADCC2C) (Shutdown) 
-- tvOS 13.4 --
    Apple TV (41579EEC-0E68-4D36-9F98-5822CD1A4104) (Shutdown) 
    Apple TV 4K (B168EF40-F2A4-4A91-B4B0-1F541201479B) (Shutdown) 
    Apple TV 4K (at 1080p) (D55F9086-A56E-4893-ACAD-579FB63C561E) (Shutdown) 
-- watchOS 6.2 --
    Apple Watch Series 4 - 40mm (D4BA8A57-F9C1-4F55-B3E0-6042BA7C4ED4) (Shutdown) 
    Apple Watch Series 4 - 44mm (65D5593D-29B9-42CD-9417-FFDBAE9AED87) (Shutdown) 
    Apple Watch Series 5 - 40mm (1B73F8CC-9ECB-4018-A212-EED508A68AE3) (Shutdown) 
    Apple Watch Series 5 - 44mm (5922489B-5CF9-42CD-ACB0-B11FAF88562F) (Shutdown) 

然后从输出中,您可以选择名称或uuid,然后按照您的意愿进行操作。

  1. 要使用--simulator运行,请运行:
npx react-native run-ios --simulator="iPhone SE"
  • 要使用--udid标志运行,请执行以下操作:
  • npx react-native run-ios --udid 90953319-BF9A-4C6E-8AB1-594394AD26CE
    

    我希望这个答案对你有所帮助。


    1
    这是最好的答案,也是最直接的一个......谢谢。 - Ebrahim Sayed
    1
    我成功地从 Xcode 在我的设备上运行了应用程序,但当我运行 npx react-native run-ios 时,它总是在模拟器上运行。npx react-native run-ios --udid [设备 ID] 对我很有帮助。谢谢!+1 - Ovidiu Cristescu

    28
    你可以在你的~/.bash_profile文件中创建一个别名:

    alias rn-ios="react-native run-ios --simulator \"iPhone 5s (10.0)\""

    然后使用创建的别名运行react-native:

    $ rn-ios


    28

    如果你想更改项目的设置,可以前往以下文件:

    {project}/node_modules/react-native/local-cli/runIOS/runIOS.js

    在这个文件中,module.exports下有一些选项可供配置:

    options: [{ command: '--simulator [string]', description: '明确指定要使用的模拟器', default: 'iPhone 7', }

    对于我来说,这个设置在第231行,只需将其设置为已安装的有效模拟器并运行react-native run-ios,它就会默认运行到该模拟器上。


    6
    这个确实有效,尽管文件被隐藏在{project}/node_modules/react-native/local-cli/runIOS/中。 - Matej Ukmar
    非常好的解决方案。谢谢! - Ahmet Ardal
    我实际上在node modules文件夹下没有那个模块。 - Abdul Sadik Yalcin
    1
    是的,将"runArguments": [ "--simulator", "iPhone 5s" ]添加到我的启动配置中完美地解决了问题。 - Can Poyrazoğlu

    24

    1)将模拟器更名,如果模拟器名称相同但iOS版本不同。

    Xcode -> Window -> Devices and Simulators -> Simulators.
    

    图片描述

    2) 打开你的 React Native 项目文件夹

    3) 编辑 package.json

    "scripts": {
        "start": "node node_modules/react-native/local-cli/cli.js start",
        "test": "jest",
        "flow": "node_modules/.bin/flow",
        "start-iphone6": "react-native run-ios --simulator \"iPhone 6 11.3\""
    }
    

    4)npm run start-iphone6


    8

    更新:

    npx react-native run-ios --simulator="iPhone 14"
    npx react-native run-ios --simulator="iPhone 13"
    

    使用此命令获取设备列表。
    xcrun simctl list devices
    

    控制台

    == Devices ==
    -- iOS 13.5 --
        iPhone 6s (9981E5A5-48A8-4B48-B203-1C6E73243E83) (Shutdown) 
        iPhone 8 (FC540A6C-F374-4113-9E71-1291790C8C4C) (Shutting Down) 
        iPhone 8 Plus (CAC37462-D873-4EBB-9D71-7C6D0C915C12) (Shutdown) 
        iPhone 11 (347EFE28-9B41-4C1A-A4C3-D99B49300D8B) (Shutting Down) 
        iPhone 11 Pro (5AE964DC-201C-48C9-BFB5-4506E3A0018F) (Shutdown) 
        iPhone 11 Pro Max (48EE985A-39A6-426C-88A4-AA1E4AFA0133) (Shutdown) 
        iPhone SE (2nd generation) (48B78183-AFD7-4832-A80E-AF70844222BA) (Shutdown) 
        iPad Pro (9.7-inch) (2DEF27C4-6A18-4477-AC7F-FB31CCCB3960) (Shutdown) 
        iPad (7th generation) (36A4AF6B-1232-4BCB-B74F-226E025225E4) (Shutdown) 
        iPad Pro (11-inch) (2nd generation) (79391BD7-0E55-44C8-B1F9-AF92A1D57274) (Shutdown) 
        iPad Pro (12.9-inch) (4th generation) (ED90A31F-6B20-4A6B-9EE9-CF22C01E8793) (Shutdown) 
        iPad Air (3rd generation) (41AD1CF7-CB0D-4F18-AB1E-6F8B6261AD33) (Shutdown) 
    -- tvOS 13.4 --
        Apple TV 4K (51925935-97F4-4242-902F-041F34A66B82) (Shutdown) 
    -- watchOS 6.2 --
        Apple Watch Series 5 - 40mm (7C50F2E9-A52B-4E0D-8B81-A811FE995502) (Shutdown) 
        Apple Watch Series 5 - 44mm (F7D8C256-DC9F-4FDC-8E65-63275C222B87) (Shutdown) 
    

    在这里选择没有ID的模拟器字符串是一个例子。

    iPad Pro(12.9英寸)(第四代)

    最终命令

    iPhone

    • iPhone 6s

    react-native run-ios --simulator="iPhone 6s"
    

    • iPhone 8

    react-native run-ios --simulator="iPhone 8"
    

    • iPhone 8 Plus

    react-native run-ios --simulator="iPhone 8 Plus"
    

    • iPhone 11

    react-native run-ios --simulator="iPhone 11"
    

    • iPhone 11 Pro

    react-native run-ios --simulator="iPhone 11 Pro"
    

    • iPhone 11 Pro Max

    react-native run-ios --simulator="iPhone 11 Pro Max"
    

    • iPhone SE(第2代)

    react-native run-ios --simulator="iPhone SE (2nd generation)"
    

    iPad

    • iPad Pro (9.7英寸)

    react-native run-ios --simulator="iPad Pro (9.7-inch)"
    

    • iPad(第七代)

    react-native run-ios --simulator="iPad (7th generation)"
    

    • iPad Pro(第二代,11英寸)

    react-native run-ios --simulator="iPad Pro (11-inch) (2nd generation)"
    

    • iPad Pro(第四代,12.9英寸)

    react-native run-ios --simulator="iPad Pro (12.9-inch) (4th generation)"
    

    • iPad Air(第三代)

    react-native run-ios --simulator="iPad Air (3rd generation)"
    

    6

    正如Ian L所回答的那样,我也使用NPM来管理我的脚本。

    Example:

    {
      "scripts": {
        "ios": "react-native run-ios --simulator=\"iPad Air 2\"",
        "devices": "xcrun simctl list devices"
      }
    }

    这样,我可以快速获取我需要的内容:

    1. 列出所有设备:npm run devices
    2. 运行默认模拟器:npm run ios

    5
    这里有一个更改iOS模拟器路径的新方法,您只需要更改

    即可。
    default: 'iPhone 6' or something else 
    

    路径:
    <project_root>/node_modules/@react-native-community/cli/build/commands/runIOS/runIOS.js
    

    1
    在我的情况下,文件位于此处:node_modules/@react-native-community/cli-platform-ios/build/commands/runIOS/index.js - Jedsada Saengow

    5

    你可以使用

    npx react-native run-ios --simulator="iPhone 14"
    

    或者前往Xcode并添加一个名为“iPhone 6 (9.2)”的新模拟器(如果你不想每次都添加--simulator="iPhone 14")。


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