Xcode 6 - Khởi chạy trình mô phỏng từ dòng lệnh


102

Tôi muốn khởi chạy trình mô phỏng iPhone từ dòng lệnh.

cho đến bây giờ tôi đã sử dụng lệnh dưới đây

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

-SimulateDevice được sử dụng để khởi chạy một loại thiết bị cụ thể

Bây giờ với Xcode 6, đường dẫn và ứng dụng đã được thay đổi thành

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

nhưng đáng buồn là tùy chọn -SimulateDevice hiện không hoạt động. Tôi có thể khởi chạy trình mô phỏng, nhưng không có tùy chọn để chỉ định cái nào sẽ khởi chạy

Có ai tìm thấy bất kỳ lựa chọn thay thế nào cho việc này với Xcode 6 không?

Câu trả lời:


210

Đã tìm ra cách để đạt được những gì tôi muốn.

Apple đã giới thiệu một công cụ thú vị với Xcode 6!

simctl

simclt cho phép bạn điều khiển trình mô phỏng đang chạy.

chạy xcrun simctlđể lấy danh sách các lệnh con có sẵn. Rất nhiều tùy chọn mới để chơi với.

Bây giờ để làm những gì tôi muốn, đây là lệnh khởi chạy trình mô phỏng:

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

-w là cung cấp một loại thiết bị và lấy danh sách các thiết bị có sẵn.

Chỉ cần thực hiện điều này:

xcrun instruments -s

Sau khi khởi chạy trình mô phỏng, bạn có thể điều khiển nó bằng cách sử dụng simctl

Để cài đặt ứng dụng của bạn:

xcrun simctl install booted <app path>

Để khởi chạy ứng dụng:

xcrun simctl launch booted <app identifier>

Hi vọng điêu nay co ich.


8
<số nhận dạng ứng dụng> là id gói ứng dụng của bạn
Hugo

Không phải tôi đã thấy, ngoài một số vấn đề đã biết , như đã đề cập khi chạy xcrun simctlsẽ liệt kê các lệnh. Theo ý kiến ​​của tôi, chúng khá tự giải thích.
daniellmb

1
Tôi đã không thể có được nó để làm việc sử dụng xcrun simctl boot <device id>thay vìxcrun instruments -w...
CambridgeMike

bằng cách nào đó tôi tiếp tục nhận được: simctl [23846: 459252] *** Đang chấm dứt ứng dụng do ngoại lệ chưa được thông báo 'NSInvalidArgumentException', lý do: '*** - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: cố gắng chèn đối tượng nil từ các đối tượng [0] trên simctl cài đặt được khởi động
Pooja Shah

2
Bạn nên chỉ định UDID hoặc tên thiết bị thực tế hơn bootedbootedchỉ tùy ý chọn một trong các thiết bị khởi động trên trình mô phỏng.
defos1

63

Với Xcode 6, nếu bạn muốn iOS Simulator.app khởi động một thiết bị cụ thể khi nó khởi chạy, bạn có thể chạy điều này từ dòng lệnh:

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

nơi bạn có thể tìm ra UDID của thiết bị bạn muốn khởi động từ đó:

xcrun simctl list

Với Xcode 7, ứng dụng đã được đổi tên thành Simulator.app, vì vậy bạn nên cập nhật ở trên cho phù hợp để:

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


Trong bản beta 6.2, lệnh đó không còn hoạt động nữa. Ví dụ: thay vì khởi chạy trình mô phỏng iPhone 5s (được cung cấp ID của nó), tôi nhận được trình mô phỏng iPad Air.
Michael Teper

Rất tiếc, chúng tôi có thể tin cậy rằng nó không hoạt động trên 3 máy khác nhau. Bất kỳ thông tin nào khác mà tôi có thể cung cấp để giúp khắc phục sự cố?
Michael Teper

Tôi đã tìm ra những gì đang xảy ra. Chúng tôi đã cài đặt Xcode 6.2 beta, nhưng không đặt nó làm Xcode mặc định. Vì vậy, hãy /usr/bin/xcrun simctl listliệt kê các trình mô phỏng có sẵn cho Xcode thông thường. Tuy nhiên, open -a "iOS Simulator"khởi chạy trình mô phỏng beta 6.2, dự kiến ​​ID thiết bị từ trình mô phỏng beta. Làm cách nào để chỉ định trình mô phỏng tôi khởi chạy (thông thường so với beta)?
Michael Teper

1
mở /path/to/Xcode.app/Contents/Developer/Application/iOS \ Simulator.app
Jeremy Huddleston Sequoia

2
@chrisco Không có tài liệu nào. Bạn có thể kiểm tra các mặc định thông qua defaults read com.apple.iphonesimulatorvà có thể ghi đè bất kỳ cài đặt nào trên dòng lệnh. Simulator.app chỉ sử dụng UDID để nhận dạng duy nhất các thiết bị. Bạn không thể sử dụng tên.
Jeremy Huddleston Sequoia

17

Đối với xcode 7:

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

Nhận udid trình mô phỏng của bạn từ xcrun simctl list


12

Để khởi động trình mô phỏng với một thiết bị cụ thể đã khởi động, tôi đang sử dụng lệnh con danh sách thiết bị để lấy danh sách tất cả các thiết bị khả dụng

$ 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)

lệnh này sẽ xuất ra danh sách các thiết bị có sẵn với UDID và trạng thái của nó

Sau đó, tôi khởi chạy ứng dụng trình mô phỏng chỉ định một thiết bị có tùy chọn -CurrentDeviceUDID

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

LƯU Ý: thay thế bằng một UDID hợp lệ từ danh sách.

Ví dụ: nếu chúng ta muốn khởi chạy trình mô phỏng bằng Ipad (khởi động% thế hệ):

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

CẬP NHẬT 23/05/2018

Với Xcode 9.3 CurrentDevice tùy chọn UDID không hoạt động đối với tôi, như một giải pháp thay thế, tôi phải sử dụng simctl để khởi động thiết bị trong trình mô phỏng trước khi mở nó.

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

Bạn có thể tạo, xóa, xóa, khởi động, tắt và nâng cấp trình mô phỏng bằng simctl.

$ xcrun simctl create
Usage: simctl create <name> <device type id> <runtime id>

$ xcrun simctl delete
Usage: simctl delete <device> [... <device n>] | unavailable

Để nhận danh sách các loại thiết bị hợp lệ và thời gian chạy

xcrun simctl list devicetypes

xcrun simctl list runtimes

10

Để khởi động trình mô phỏng:

xcrun simctl boot "iPhone X"

Nó sẽ khởi động ở chế độ không đầu. Để hiển thị trình mô phỏng:

open -a Simulator

xcrun simctl bootlà đơn giản hơn xcrun instruments -w. instrumentsyêu cầu tên thiết bị đầy đủ.


8

Bạn có thể chỉ định phần cứng và phiên bản iOS với cờ -w. Định dạng là

instruments -w "simulator-version"

Ví dụ:

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

Bạn sẽ nhận được các kết hợp hardvare-iOS có sẵn bằng cách sử dụng instruments -w help lệnh.


2
Sử dụng instruments -s devicesđể lấy danh sách các thiết bị. Tuy nhiên, khi bạn đã có tên thiết bị, chỉ cần gọi điện instruments -w <device>sẽ có thể xảy ra lỗi do các công cụ cố gắng ghi dấu vết vào gốc ổ đĩa của bạn. Bạn có thể muốn chỉ định một đường dẫn cho dấu vết mà nó sẽ ghi thành công.
Michael Teper

Để giải thích thêm về nhận xét của @ MichaelTeper, hãy sử dụng -Dđể chỉ định thư mục đầu ra cho các tài liệu .trace.
devos1

3

Đã xác minh trong Xcode 9.4.1

Danh sách thiết bị ở dạng ĐỊNH DẠNG THỰC SỰ ĐẸP: ~/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

Sau đó, bạn muốn chạy (mở) ứng dụng Trình mô phỏng của mình và đảm bảo rằng phiên bản mới của ứng dụng được khởi chạy.

Ứng dụng ở đây: /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

Và định dạng bạn sẽ sử dụng như sau:

open -n -a <SimulatorPath> --args -CurrentDeviceUDID <SimDeviceTypeUDID>

Vì vậy, nếu tôi muốn khởi chạy Trình mô phỏng ở trên, tôi sẽ làm điều này.

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

Chết tiệt nóng! Tôi vừa thử nghiệm nó và nó hoạt động trên Mac OS 10.11.6. Bây giờ, mẹo tiếp theo là yêu cầu Trình mô phỏng mở ứng dụng đã cài đặt của chúng tôi. Tôi chưa có. Hi vọng điêu nay co ich. Cảm ơn https://stackoverflow.com/users/726106/jeremy-huddleston-sequoia vì lời giải thích chi tiết của anh ấy.


Không có cái gọi là "phiên bản mới của ứng dụng". Trên Macintosh, một ứng dụng chỉ có một phiên bản, cho mỗi người dùng đã đăng nhập. Ứng dụng đơn lẻ này, được lưu trữ dưới dạng một quy trình duy nhất - tự nó có thể lưu trữ nhiều "tài liệu" (trong trường hợp này là trình mô phỏng).
Motti Shneor 14/02/19

1

Chạy lệnh này. Ứng dụng sẽ được khởi động lại sau đó là các thay đổi. Không cần phải xây dựng lại nó một lần nữa.

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

Đối với danh sách loại thiết bị:

ios-sim showdevicetypes

iOS-sim (bao gồm cả nút humungous) phải được cài đặt cho điều này và đáng buồn là nó bị hạn chế, so với dòng lệnh gốc 'scrub simctl'.
Motti Shneor 17/02/19
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.