Xcode 6-명령 줄에서 시뮬레이터 시작


102

명령 줄에서 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에서 이에 대한 대안을 찾았습니까?

답변:


210

내가 원하는 것을 달성 할 방법을 찾았습니다.

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>

도움이 되었기를 바랍니다.


8
<app identifier>는 앱 번들 ID입니다.
Hugo

언급 한대로 일부 알려진 문제를 제외하고 내가 본 것은 아니지만 실행 xcrun simctl하면 명령이 나열됩니다. 제 생각에는 꽤 자명합니다.
daniellmb

1
xcrun simctl boot <device id>대신 사용하여 작동시킬 수 없었습니다xcrun instruments -w...
CambridgeMike

어떻게 든 계속 받고 있어요 : simctl [23846 : 459252] *** 잡히지 않은 예외 'NSInvalidArgumentException'으로 인해 앱 종료, 이유 : '***-[__ NSPlaceholderDictionary initWithObjects : forKeys : count :] : 개체에서 nil 개체 삽입 시도 [0] simctl 설치 부팅 됨
Pooja Shah

2
당신은 실제 장치 UDID를 지정하거나 이름보다는한다 booted으로 booted단지 임의로 시뮬레이터에 부팅 장치 중 하나를 선택합니다.
devios1

63

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 시뮬레이터를 얻습니다.
Michael Teper 2015 년

흠, 우리는 3 개의 다른 컴퓨터에서 안정적으로 작동하지 않습니다. 문제 해결을 위해 제공 할 수있는 다른 정보가 있습니까?
Michael Teper 2015 년

나는 무슨 일이 일어나고 있는지 알아 냈습니다. Xcode 6.2 베타를 설치했지만 기본 Xcode로 설정하지는 않았습니다. 따라서 /usr/bin/xcrun simctl list일반 Xcode에서 사용할 수있는 시뮬레이터를 나열합니다. 그러나 open -a "iOS Simulator"베타 시뮬레이터에서 장치 ID를 예상하는 6.2 베타 시뮬레이터를 시작합니다. 실행하는 시뮬레이터 (일반 vs. 베타)를 어떻게 지정할 수 있습니까?
Michael Teper 2015 년

1
열린 /path/to/Xcode.app/Contents/Developer/Applications/iOS \ Simulator.app
제레미 허들 스턴 세쿼이아

2
@chrisco 문서가 없습니다. 을 통해 기본값을 확인할 수 있으며 defaults read com.apple.iphonesimulator명령 줄 의 기본값을 재정의 할 수 있습니다. Simulator.app은 장치를 고유하게 식별하기 위해 UDID 만 사용합니다. 이름을 사용할 수 없습니다.
제레미 허들 스턴 세쿼이아

17

xcode 7의 경우 :

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

시뮬레이터 udid를 xcrun simctl list


12

부팅 된 특정 장치로 시뮬레이터를 시작하려면 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로 시뮬레이터를 시작하려는 경우 (% 세대 부팅 됨) :

/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

10

시뮬레이터를 부팅하려면 :

xcrun simctl boot "iPhone X"

헤드리스 모드로 부팅됩니다. 시뮬레이터를 표시하려면 :

open -a Simulator

xcrun simctl boot보다 간단합니다 xcrun instruments -w. instruments전체 장치 이름이 필요합니다.


8

-w 플래그를 사용하여 하드웨어 및 iOS 버전을 지정할 수 있습니다. 형식은

instruments -w "simulator-version"

예 :

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

instruments -w help 명령 을 사용하여 사용 가능한 hardvare-iOS 조합을 얻을 수 있습니다 .


2
instruments -s devices장치 목록을 가져 오는 데 사용 합니다. 그러나 장치 이름이 instruments -w <device>있으면 계측기가 드라이브의 루트에 트레이스를 쓰려고 할 때 단순히 호출 하면 오류가 발생할 수 있습니다. 성공적으로 기록 할 추적 경로를 지정할 수 있습니다.
Michael Teper 2015 년

@MichaelTeper의 주석에 대해 자세히 설명하려면 -D.trace 문서에 대한 출력 디렉토리를 지정하는 데 사용하십시오.
devios1

3

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

그런 다음 Simulator 앱을 실행 (열기)하고 앱의 새 인스턴스가 시작되었는지 확인합니다.

앱은 다음과 같습니다. /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

그리고 사용할 형식은 다음과 같습니다.

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

따라서 위의 시뮬레이터를 실행하려면 이렇게합니다.

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에서 응용 프로그램에는 로그인 한 사용자 당 하나의 인스턴스 만 있습니다. 단일 프로세스로 호스팅되는이 단일 인스턴스 앱은 자체적으로 많은 "문서"(이 경우-시뮬레이터)를 호스팅 할 수 있습니다.
Motti Shneor

1

이 명령을 실행하십시오. 앱이 다시 시작되고 변경됩니다. 다시 재 구축 할 필요가 없습니다.

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'에 비해 슬프게도 제한적입니다.
Motti Shneor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.