【问题标题】:Xcode 6 - Launch simulator from command lineXcode 6 - 从命令行启动模拟器
【发布时间】:2014-11-19 19:32:53
【问题描述】:

我想从命令行启动 iPhone 模拟器。

直到现在我一直在使用下面的命令

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator -SimulateDevice

-SimulateDevice 用于启动特定的设备类型

现在使用 Xcode 6,路径和应用程序已更改为

/Applications/Xcode.app/Contents/Developer/Applications/iOS Simulator.app/Contents/MacOS/iOS Simulator

但遗憾的是 -SimulateDevice 选项现在不起作用。我可以启动模拟器,但没有指定启动哪个模拟器的选项

有人用 Xcode 6 找到了替代方案吗?

【问题讨论】:

    标签: ios xcode ios-simulator xcode6


    【解决方案1】:

    找到了实现我想要的方法。

    Apple 在 Xcode 6 中引入了一个有趣的工具!

    simctl

    simclt 允许您控制正在运行的模拟器。

    运行xcrun simctl 以获取可用子命令的列表。有很多新的选择。

    现在做我想做的,这里是启动模拟器的命令:

    xcrun instruments -w "iPhone 5 (8.0 Simulator)"

    -w 是提供设备类型并获取可用设备列表。

    执行这个:

    xcrun instruments -s

    启动模拟器后,您可以使用simctl控制它

    要安装您的应用:

    xcrun simctl install booted <app path>

    启动应用程序:

    xcrun simctl launch booted <app identifier>

    希望这会有所帮助。

    【讨论】:

    • 是你的 app bundle id
    • 不是我看到的,除了一些known issues,正如提到的运行xcrun simctl 将列出命令。在我看来,它们是不言自明的。
    • 我无法使用 xcrun simctl boot <device id> 而不是 xcrun instruments -w... 让它工作
    • 不知何故我不断得到:simctl [23846:459252] ***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'*** - [__NSPlaceholderDictionary initWithObjects:forKeys:count:] : 尝试在 simctl install booted 上插入来自 objects[0] 的 nil 对象
    • 您应该指定实际的设备 UDID 或名称,而不是 booted,因为 booted 只会在模拟器上任意选择一个启动的设备。
    【解决方案2】:

    使用 Xcode 6,如果您希望 iOS Simulator.app 在启动时启动特定设备,您可以从命令行运行:

    open -a "iOS Simulator" --args -CurrentDeviceUDID <DEVICE UDID>

    您可以在哪里找出要从其启动的设备的 UDID:

    xcrun simctl list

    在 Xcode 7 中,应用程序被重命名为 Simulator.app,因此您应该将上述内容相应地更新为:

    open -a Simulator --args -CurrentDeviceUDID <DEVICE UDID>

    【讨论】:

    • 在 6.2 测试版中,该命令不再有效。例如,我没有启动 iPhone 5s 模拟器(给定它的 ID),而是得到了 iPad Air 模拟器。
    • 嗯,我们让它不能在 3 台不同的机器上可靠地工作。我可以提供任何其他信息来帮助解决问题吗?
    • 我已经弄清楚发生了什么。我们安装了 Xcode 6.2 beta,但没有将其设为默认 Xcode。所以,/usr/bin/xcrun simctl list 列出了常规 Xcode 可用的模拟器。但是,open -a "iOS Simulator" 会启动 6.2 beta 模拟器,它需要来自 beta 模拟器的设备 ID。如何指定我启动的模拟器(普​​通版与测试版)?
    • 打开 /path/to/Xcode.app/Contents/Developer/Applications/iOS\ Simulator.app
    • @chrisco 没有文档。您可以通过defaults read com.apple.iphonesimulator 检查默认值,并且可以覆盖命令行上的任何默认值。 Simulator.app 仅使用 UDID 来唯一标识设备。您不能使用该名称。
    【解决方案3】:

    对于 xcode 7:

    open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app --args -CurrentDeviceUDID <DeviceUDID>

    xcrun simctl list获取您的模拟器 udid

    【讨论】:

      【解决方案4】:

      要启动一个特定设备启动的模拟器,我使用 list devices 子命令来获取所有可用设备的列表

      $ xcrun simctl list devices
      == Devices ==
      -- iOS 11.2 --
      iPhone 5s (E3B6EA43-C805-49C2-9502-A44A465D8DF2) (Shutdown)
      iPhone 6 (801E9E11-CA86-473A-9879-4B0742B827FB) (Shutdown)
      iPhone 6 Plus (24013349-1A6F-489C-9A68-ABB00EBB4BBF) (Shutdown)
      iPhone 6s (1A594D75-146C-4BEA-A250-1FADE7886114) (Shutdown)
      iPhone 6s Plus (C2730FA0-11CB-49C9-A087-CB3C1BF1CC3D) (Shutdown)
      iPhone 7 (F58B3749-3276-49E5-81C8-EBA1AEA7B242) (Shutdown)
      iPhone 7 Plus (98167D8C-8F27-404C-AB02-588D9AAFD071) (Shutdown)
      iPhone 8 (96322368-F763-4E0A-8576-ADE9F678211F) (Shutdown)
      iPhone 8 Plus (E916D1EE-B67B-4C01-B3F5-C5C80CC4CDF8) (Shutdown)
      iPhone SE (ABEFEDDF-7A7C-4B94-9E91-E065170FA47F) (Shutdown)
      iPhone X (84DAB7AB-3CA2-4F5B-8C4E-A5B54CA15C31) (Shutdown)
      iPad Air (DCD8CF4B-2C9F-4BA1-952A-ACB9CAD0A84D) (Shutdown)
      iPad Air 2 (A47C9A05-233F-450F-9A39-318258E9ADEA) (Shutdown)
      iPad (5th generation) (819C058E-64AC-4E73-8F41-2C0F919F8B56) (Booted)
      

      此命令将输出可用设备列表及其 UDID 和状态

      然后我启动模拟器应用程序,使用 -CurrentDeviceUDID 选项指定设备

      /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator -CurrentDeviceUDID <DEVICE-UDID>
      

      注意:将 替换为列表中的有效 UDID。

      例如,如果我们想用 Ipad 启动模拟器(% generation booted):

      /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator -CurrentDeviceUDID 84DAB7AB-3CA2-4F5B-8C4E-A5B54CA15C31
      

      2018 年 5 月 23 日更新

      Xcode 9.3 CurrentDevice UDID 选项对我不起作用,作为一种解决方法,我必须使用 simctl 在模拟器中启动设备,然后再打开它。

      xcrun simctl boot 2BF01FC0-7E29-4AF1-ADD1-886DF129A9A9
      open -a Simulator 
      

      您可以使用 simctl 创建、擦除、删除、启动、关闭和升级模拟器。

      $ xcrun simctl create
      Usage: simctl create <name> <device type id> <runtime id>
      
      $ xcrun simctl delete
      Usage: simctl delete <device> [... <device n>] | unavailable
      

      获取有效设备类型运行时

      的列表
      xcrun simctl list devicetypes
      
      xcrun simctl list runtimes
      

      【讨论】:

        【解决方案5】:

        启动模拟器:

        xcrun simctl boot "iPhone X"
        

        它将以无头模式启动。 使模拟器可见:

        open -a Simulator
        

        xcrun simctl bootxcrun instruments -w 简单。 instruments 需要完整的设备名称。

        【讨论】:

          【解决方案6】:

          您可以使用 -w 标志指定硬件和 iOS 版本。格式为

          instruments -w "simulator-version"
          

          例如:

          instruments -w "iPhone Retina (3.5-inch) - Simulator - iOS 7.1".

          您将使用instruments -w help 命令获得可用的硬件-iOS 组合。

          【讨论】:

          • 使用instruments -s devices 获取设备列表。但是,一旦您有了设备名称,只需调用instruments -w &lt;device&gt; 可能会产生错误,因为仪器会尝试将跟踪写入驱动器的根目录。您可能希望为将成功写入的跟踪指定路径。
          • 要详细说明@MichaelTeper 的评论,请使用-D 指定.trace 文档的输出目录。
          【解决方案7】:

          在 Xcode 9.4.1 中验证

          采用非常好的格式的设备列表: ~/Library/Developer/CoreSimulator/Devices/device_set.plist

          Root
              DefaultDevices
                  com.apple.CoreSimulator.SimRuntime.iOS-8-4
                       com.apple.CoreSimulator.SimDeviceType.iPad-Retina : AB335FAF-E3E3-4AE9-A0AF-D1C6AEB5FBD4
          

          然后您想运行(打开)您的模拟器应用程序并确保启动该应用程序的新实例。

          应用程序在这里: /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

          你使用的格式是这样的:

          open -n -a &lt;SimulatorPath&gt; --args -CurrentDeviceUDID &lt;SimDeviceTypeUDID&gt;

          所以,如果我想启动上面的模拟器,我会这样做。

          open -n -a /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app --args -CurrentDeviceUDID AB335FAF-E3E3-4AE9-A0AF-D1C6AEB5FBD4

          该死的!我刚刚对其进行了测试,它可以在 Mac OS 10.11.6 上运行。现在下一个技巧是告诉模拟器打开我们安装的应用程序。我还没到。希望这可以帮助。感谢https://stackoverflow.com/users/726106/jeremy-huddleston-sequoia的详细解释。

          【讨论】:

          • 没有“应用程序的新实例”之类的东西。在 Macintosh 上,每个登录用户只有一个应用程序实例。这个作为单个进程托管的单实例应用程序本身可以托管许多“文档”(在本例中为模拟器)。
          【解决方案8】:

          运行此命令。该应用程序将重新启动,然后进行更改。无需再次重建。

          ios-sim "launch" "/Library/WebServer/Documents/testapp/build/iphone/build/Debug-iphonesimulator/test.app" "--devicetypeid" "iPad-2" "--exit";
          

          对于 devicetypeid 列表:

          ios-sim showdevicetypes
          

          【讨论】:

          • iOS-sim(包括庞大的节点)必须为此安装,与本机命令行“scrub simctl”相比,它是可悲的限制。
          【解决方案9】:

          任何有此问题的人,此命令将从命令提示符打开 ios 模拟器

          open -a simulator
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-25
            • 1970-01-01
            • 1970-01-01
            • 2017-09-23
            • 2011-06-25
            • 1970-01-01
            • 2014-11-30
            • 2012-01-10
            相关资源
            最近更新 更多