Xcode 6 - เรียกใช้โปรแกรมจำลองจากบรรทัดคำสั่ง


103

ฉันต้องการเปิดโปรแกรมจำลอง 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> คือรหัส App Bundle ของคุณ
Hugo

ไม่ใช่ที่ฉันเห็นนอกเหนือจากปัญหาที่ทราบแล้วดังที่กล่าวไว้การรันxcrun simctlจะแสดงรายการคำสั่ง ในความคิดของฉันพวกเขาค่อนข้างอธิบายตัวเอง
daniellmb

1
ฉันไม่สามารถทำให้มันใช้งานได้โดยใช้xcrun simctl boot <device id>แทนxcrun instruments -w...
CambridgeMike

อย่างไรก็ตามฉันได้รับ: simctl [23846: 459252] *** การยุติแอปเนื่องจากข้อยกเว้น "NSInvalidArgumentException ที่ไม่ถูกตรวจพบ" เหตุผล: "*** - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: พยายามแทรกวัตถุศูนย์จากวัตถุ [0] ในการบูตการติดตั้ง simctl
Pooja Shah

2
คุณควรจะระบุอุปกรณ์จริง UDID หรือชื่อมากกว่าbootedเป็น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 (ระบุรหัส) ฉันได้รับเครื่องจำลอง iPad Air
Michael Teper

อืมเราคิดว่ามันไม่น่าเชื่อถือใน 3 เครื่องที่แตกต่างกัน ข้อมูลอื่นใดที่ฉันสามารถจัดหาได้เพื่อช่วยในการแก้ปัญหา
Michael Teper

ฉันรู้แล้วว่าเกิดอะไรขึ้น เราติดตั้ง Xcode 6.2 beta แล้ว แต่ไม่ได้ทำให้เป็น Xcode เริ่มต้น ดังนั้น/usr/bin/xcrun simctl listแสดงรายการเครื่องจำลองที่มีให้สำหรับ Xcode ปกติ อย่างไรก็ตามopen -a "iOS Simulator"เปิดตัวโปรแกรมจำลองเบต้า 6.2 ซึ่งคาดว่าจะได้รหัสอุปกรณ์จากโปรแกรมจำลองเบต้า ฉันจะระบุได้อย่างไรว่าฉันเปิดตัวจำลองใด (ปกติเทียบกับเบต้า)
Michael Teper

1
เปิด /path/to/Xcode.app/Contents/Developer/Applications/iOS \ Simulator.app
Jeremy Huddleston Sequoia

2
@chrisco ไม่มีเอกสารประกอบ. คุณสามารถตรวจสอบค่าเริ่มต้นผ่านdefaults read com.apple.iphonesimulatorและสามารถแทนที่ค่าใดก็ได้ในบรรทัดคำสั่ง Simulator.app ใช้เฉพาะ UDID เพื่อระบุอุปกรณ์โดยไม่ซ้ำกัน คุณไม่สามารถใช้ชื่อ
Jeremy Huddleston Sequoia

17

สำหรับ xcode 7:

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

รับ udid เครื่องจำลองของคุณจาก xcrun simctl list


13

ในการเรียกใช้โปรแกรมจำลองด้วยอุปกรณ์เฉพาะที่บูต I´m โดยใช้คำสั่งย่อย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

อัพเดท 23/05/2018

ด้วย 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 bootxcrun instruments -wจะง่ายกว่า instrumentsต้องใช้ชื่อเต็มของอุปกรณ์


8

คุณสามารถระบุฮาร์ดแวร์และเวอร์ชัน iOS ด้วยแฟล็ก -w รูปแบบคือ

instruments -w "simulator-version"

เช่น:

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

คุณจะได้รับชุดค่าผสม hardvare-iOS ที่มีให้โดยใช้instruments -w help คำสั่ง


2
ใช้instruments -s devicesเพื่อรับรายการอุปกรณ์ อย่างไรก็ตามเมื่อคุณมีชื่ออุปกรณ์แล้วการโทรเพียงอย่างเดียวinstruments -w <device>อาจทำให้เกิดข้อผิดพลาดเนื่องจากเครื่องมือพยายามเขียนร่องรอยไปยังรูทของไดรฟ์ของคุณ คุณอาจต้องการระบุเส้นทางสำหรับการติดตามที่จะเขียนถึงได้สำเร็จ
Michael Teper

หากต้องการอธิบายรายละเอียดเกี่ยวกับความคิดเห็นของ @ 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 ตอนนี้เคล็ดลับต่อไปคือการบอกให้ Simulator เปิดแอปที่ติดตั้งไว้ ฉันยังไม่อยู่ หวังว่านี่จะช่วยได้ ขอบคุณ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 (รวมถึงโหนด humungous) สำหรับสิ่งนี้และมีข้อ จำกัด อย่างน่าเศร้าเมื่อเทียบกับบรรทัดคำสั่งดั้งเดิม 'scrub simctl'
Motti Shneor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.