Cordova: เริ่มอิมเมจโปรแกรมจำลอง iOS เฉพาะ


121

ฉันกำลังพัฒนาแอพมือถือข้ามแพลตฟอร์มโดยใช้ Cordova โดยเน้นที่ iOS เป็นหลักในขั้นตอนการพัฒนา

สำหรับขั้นตอนการพัฒนาของฉันมันจะเหมาะอย่างยิ่งหากฉันสามารถเริ่มแอพ Cordova ได้โดยตรงจากบรรทัดคำสั่งและโหลดลงในโปรแกรมจำลองที่ระบุ ฉันสามารถทำได้โดยเรียกใช้สิ่งต่อไปนี้จากไดเร็กทอรีรูทของโปรเจ็กต์:

$cordova run --debug --emulator iOS

วิธีนี้ใช้งานได้ดีและส่งผลให้โปรแกรมจำลอง iOS เรียกใช้แอปของฉันใน iPhone 4 Retina จำลองที่ใช้ iOS 7.0.3

นอกจากอุปกรณ์จำลองนี้แล้วฉันยังต้องการทดสอบ (เช่น) กับ iPad ฉันติดตั้งอิมเมจจำลองเหล่านี้แล้วและฉันสามารถเริ่มแอพด้วยตนเองใน Xcode นอกจากนี้คำสั่งlist-emulator-images(อยู่ในproject_dir/platforms/ios/cordova/lib) ยังให้ผลลัพธ์ต่อไปนี้:

"iPhone Retina (3.5-inch)"
"iPhone Retina (4-inch)"
"iPhone Retina (4-inch 64-bit)"
"iPhone"
"iPad"
"iPad Retina"

อย่างไรก็ตามสิ่งนี้คือ: ฉันไม่สามารถหาวิธีเริ่มโปรแกรมจำลองในสิ่งอื่นนอกเหนือจากค่าเริ่มต้น (ซึ่งดูเหมือนจะเป็นiPhone Retina (4-inch)ภาพจำลอง) ผลลัพธ์ที่เกี่ยวข้องของcordova helpให้ข้อมูลต่อไปนี้:

run [--debug|--release]
    [--device|--emulator|--target=FOO]
    [PLATFORM] ............................ deploys app on specified platform devices / emulators

ฉันได้ลองทำสิ่งต่อไปนี้:

cordova run --debug --emulator=iPad iOS

และรูปแบบต่างๆมากมาย แต่ไม่มีโชค ทุกครั้งที่เริ่มต้นในโปรแกรมจำลองเดียวกัน

เอกสารสำหรับเครื่องมือบรรทัดคำสั่งไม่ได้ให้ข้อมูลใด ๆ ในเรื่องนี้และการค้นหาโดย Google ที่ครอบคลุมก็ล้มเหลวเช่นกัน ฉันพลาดอะไรเล็กน้อยหรือเปล่า? หรือฉันพยายามทำอะไรแปลก ๆ ? ฉันหวังว่าใครบางคนที่นี่จะมีประสบการณ์เกี่ยวกับเรื่องนี้และสามารถให้คำตอบได้

ขอบคุณมากล่วงหน้า!

แก้ไข: ลืมพูดถึงอย่างชัดเจน; ฉันทำทั้งหมดนี้บน Mac ดังที่ได้กล่าวไว้ก่อนหน้านี้การเรียกใช้แอปในอีมูเลเตอร์ / เครื่องจำลองต่างๆใน Xcode ทำงานได้ดี

คำตอบ:


336

หากต้องการทราบว่ามีภาพจำลองใดบ้างที่คุณสามารถใช้เพื่อแสดงรายการได้

$ cordova emulate ios --list
Available iOS Virtual Devices:
    iPhone-4s, 9.3
    iPhone-5, 9.3
    iPhone-5s, 9.3
    iPhone-6, 9.3
    iPhone-6-Plus, 9.3
    iPhone-6s, 9.3
    iPhone-6s-Plus, 9.3
    iPad-2, 9.3
    iPad-Retina, 9.3
    iPad-Air, 9.3
    iPad-Air-2, 9.3
    iPad-Pro, 9.3

จากนั้นใช้หนึ่งในชื่อตัวจำลองในพารามิเตอร์ --target:

cordova emulate ios --target="iPhone-4s, 9.3"
cordova emulate ios --target="iPad-Air-2, 9.3"
cordova emulate ios --target="iPhone-6s, 9.3"
cordova emulate ios --target="iPhone-6-Plus, 9.3"

สำคัญออกจากโปรแกรมจำลองก่อนที่จะเปิดตัวจำลองเป้าหมายอื่น (บนแถบเมนูเลือกSimulator->Quit)

คำนึงว่าคุณอาจต้องออกจากโปรแกรมจำลอง iOS ผ่านเมนูเพื่อเปลี่ยนจาก iPhone 3.5 เป็น 4 นิ้ว

รายการแบบไดนามิกมีอยู่ใน platforms/ios/cordova/lib/list-emulator-images


3
ขอบคุณสิ่งนี้ช่วยได้ แหล่งที่มาของคุณคืออะไร? แค่สงสัยว่าฉันคิดสิ่งนี้ออกมาได้อย่างไร ... คำตอบสำหรับคำถามนี้ยังช่วยได้มาก: stackoverflow.com/questions/13877840/… เห็นได้ชัดว่า 'Cordova emulate' เป็นเครื่องห่อหุ้ม ios-sim ซึ่งคุณสามารถพูดคุยได้ โดยตรง นี่คือสิ่งที่ฉันทำดังนั้นฉันจึงสามารถสร้างและเปิดใช้รหัสของฉันได้โดยตรงจาก IDE ที่ฉันเลือก
EggMeister

ฉันเพิ่งรันคำสั่งนี้และสามารถยืนยันได้ว่าอีมูเลเตอร์ 4.7 และ 5.5 นิ้วไม่อยู่ในรายการแม้ว่าจะติดตั้ง Xcode 6 แล้วก็ตาม :-(
Ben Clayton

สวัสดีฉันลองใช้คำสั่งนี้ "./platforms/ios/cordova/lib/list-emulator-images" แต่ฉันไม่เห็นตัวเลือกทั้งหมดไม่มี iPhone 6, ไม่มี iPhone 6-Plus, ไม่มี iPad-Air ว่าจะเป็นอย่างไร ปัญหา? ขอบคุณ
user2120121

10
ผมไม่ทราบจริงๆว่าทำไม แต่สำหรับฉัน Cordova CLI จะโยนเมื่อระบุเป้าหมายด้วยคำพูดฉันเท่านั้นที่จะได้รับมันในการทำงานโดยการทำงานเช่นนี้"Error: Cannot read property 'name' of undefined" cordova run ios --target=iPhone-6หวังว่านี่จะช่วยคนอื่นได้บ้าง!
Gifford N.

1
ฉันมีผลลัพธ์ที่เป็นปัญหาเช่นเดียวกับ Gifford N ฉันใช้ Cordova 7.0.0
Terry Wilkinson

18

ตามที่พูดcsantanaprคุณสามารถใช้:

cordova emulate ios --target="iPhone-4s"

แต่ในกรณีนี้คอร์โดวา (หรือ PhoneGap หรืออื่น ๆ ) โครงการจะเปิดตัวในจำลอง iPhone 4s กับ iOS เวอร์ชัน 7.0.3

หากคุณต้องการเปิดตัวโปรเจ็กต์บนโปรแกรมจำลองเดียวกัน แต่ใช้กับ iOS เวอร์ชันอื่น (7.1 หรือ 8.0 หากมีเวอร์ชันอยู่ในระบบของคุณ)

จาก corse คุณสามารถพูดว่าcobberboy :

เริ่มโปรแกรมจำลองเฉพาะและเลือกเวอร์ชัน iOS ของคุณโดยใช้ ios-sim โดยตรง

แต่คุณสามารถปรับปรุง--targetตัวเลือกของrunคำสั่งCordova

ในตอนแรกคุณต้องตรวจสอบให้แน่ใจว่า iOS เวอร์ชันใดที่มีอยู่ในระบบของคุณ

สำหรับมันใช้คำตอบของcobberboy :

$ ios-sim showdevicetypes

จากนั้นคุณต้องเปิดไฟล์your_project_dir/platforms/ios/cordova/lib/run.jsและค้นหาบรรทัดของโค้ดด้านล่าง:

// validate target device for ios-sim
// Valid values for "--target" (case sensitive):
var validTargets = ['iPhone-4s', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
    'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];

สำหรับการใช้งานiPhone-4s, 7.1(หรืออื่น ๆ ) validTargetsได้โดยง่ายเพิ่มไปยังอาร์เรย์

var validTargets = ['iPhone-4s', 'iPhone-4s, 7.1', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
    'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];

และใน

cordova emulate ios --target="iPhone-4s, 7.1"

ของคุณ--target="iPhone-4s, 7.1"จะถูกต้อง

และหน้าที่deployToSimของrun.js:

function deployToSim(appPath, target) {
// Select target device for emulator. Default is 'iPhone-6'
if (!target) {
    target = 'iPhone-6';
    console.log('No target specified for emulator. Deploying to ' + target + ' simulator');
}
var logPath = path.join(cordovaPath, 'console.log');
var simArgs = ['launch', appPath,
    '--devicetypeid', 'com.apple.CoreSimulator.SimDeviceType.' + target,
    // We need to redirect simulator output here to use cordova/log command
    // TODO: Is there any other way to get emulator's output to use in log command?
    '--stderr', logPath, '--stdout', logPath,
    '--exit'];
return spawn('ios-sim', simArgs);
}

แปลงiPhone-4s, 7.1เป็นอาร์กิวเมนต์ที่ถูกต้องcom.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1สำหรับios-sim.


สิ่งนี้ทำงานได้อย่างสมบูรณ์และอนุญาตให้ฉันใช้ionic run ios --target='iPhone-6, 9.0'เมื่อใช้ Ionic Framework
jorisw

หาดี👍. ผมก็ออกความเห็นบล็อกที่ตรวจสอบและฉันก็สามารถที่จะระบุแพลตฟอร์มเต็มรูปแบบเช่น:validTargets "--target="iPhone-6, 8.4""จะดีจริงๆถ้า Cordova ios-simมอบหมายตรวจสอบเป้าหมาย
Kyle Fox

สิ่งนี้ไม่ได้ผลสำหรับฉัน ฉันพิมพ์ขยะใน run.js และถูกละเว้น npm แคชสิ่งนี้หรืออะไร? ฉันจะรีเฟรชแคชของ npm ได้อย่างไร
Randgalt

คุณยังสามารถเรียกใช้ "ios อัปเดตแพลตฟอร์มไอออนิก" และคุณจะสามารถเรียกใช้โปรแกรมจำลองที่ติดตั้งล่าสุดได้
Benjamin Piette

10

TL; DR

คุณสามารถเริ่มโปรแกรมจำลองเฉพาะและเลือกเวอร์ชัน iOS ของคุณได้โดยตรงโดยใช้ ios-sim

export appname="./platforms/ios/build/emulator/Hello World.app"
ios-sim launch "$appname" --devicetypeid "com.apple.CoreSimulator.SimDeviceType.iPad-2, 8.0" --stderr ./platforms/ios/cordova/console.log --stdout ./platforms/ios/cordova/console.log

รายละเอียด

เมื่อฉันวิ่งสิ่งนี้:

cordova emulate ios --target="iPad"

และดูกระบวนการที่กำลังทำงานอยู่ฉันเห็นสิ่งนี้ (ในบรรทัดเดียว):

ios-sim launch ./platforms/ios/build/emulator/HelloWorld.app 
        --stderr ./platforms/ios/cordova/console.log 
        --stdout ./platforms/ios/cordova/console.log 
        --family ipad 
        --exit

การตรวจสอบเพิ่มเติมเกี่ยวกับios-simดูเหมือนว่าจะมีตัวเลือกที่เฉพาะเจาะจงมากขึ้นโดยเฉพาะ:

--devicetypeid <device type>    The id of the device type that should be simulated (Xcode6+). Use 'showdevicetypes' to list devices.
  e.g "com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone6, 8.0"

ดังนั้นฉันจึงทำตามที่แนะนำและรัน ios-sim ด้วยอาร์กิวเมนต์ "showdevicetypes" และได้รับสิ่งนี้:

$ ios-sim showdevicetypes
com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-2, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-Air, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-5, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-6, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-2, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-Air, 8.0
com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone, 8.0
com.apple.CoreSimulator.SimDeviceType.Resizable-iPad, 8.0

วิธีนี้ทำงานอย่างไรในการเปลี่ยนโปรแกรมจำลองเริ่มต้น คุณกำลังข้ามบิต Cordova ที่นี่และเพิ่งเปิดตัวโดยตรงใช่ไหม?
mix3d


4

ณ Xcode 8.3.2 ...

กระทู้เก่าฉันรู้ แต่ดูเหมือนว่าคำตอบอาจเปลี่ยนไปเล็กน้อย คำแนะนำจากโพสต์ก่อนหน้านี้ในเธรดนี้ช่วยได้ แต่การอ่านเอกสารที่รวมอยู่ในโค้ดก็เช่นกัน<cordova-project>/platforms/ios/cordova/lib/run.js

ดำเนินการ./platforms/ios/cordova/lib/list-emulator-imagesเพื่อแสดงรายการภาพจำลองที่มีอยู่ อย่าใส่หมายเลขเวอร์ชันไว้ที่ส่วนท้ายเมื่อทำการเรียก Cordova เพื่อเรียกใช้ในโปรแกรมจำลองที่ต้องการ

cordova run ios --emulator --target="iPad-Air"

ดูเพิ่มเติม


ขอบคุณพระเจ้าสำหรับความคิดเห็นของคุณ! ไม่ทำงานหลังจากการอัปเดตล่าสุดและไม่พบข้อมูลใด ๆ เพิ่งได้รับข้อความแสดงข้อผิดพลาด: "ข้อผิดพลาด: ไม่สามารถอ่านคุณสมบัติ 'ชื่อ' ของไม่ได้กำหนด" ซึ่งได้รับการแก้ไขหลังจากไม่รวมเวอร์ชัน ios
Marco Rinck

@MarcoRinck ตรวจสอบความคิดเห็นในคำตอบมีการแก้ไขอย่างรวดเร็วโดยพิมพ์:cordova run ios --target=iPhone-6
Kira Hao

3

ฉันไม่สามารถแสดงความคิดเห็นเกี่ยวกับคำตอบข้างต้นได้เนื่องจากชื่อเสียงที่ไม่ดีของฉัน แต่รายการเป้าหมายมีให้จาก:

start-emulator 

ภายใต้

your platform/ios/cordova/lib/

ต้องบอกว่าฉันไม่สามารถทำให้โปรแกรมจำลองเรติน่าของ ipad ทำงานได้ ...


3

ผลลัพธ์ที่เร็วที่สุดของรายการอุปกรณ์: $ instruments -s devices

เพียงใช้ชื่ออุปกรณ์ที่ไม่มีเวอร์ชัน


0

เรียกใช้โปรแกรมจำลอง iOS ด้วยการร้องขอเว็บตามแอปพลิเคชัน build สำหรับ Cordova ที่สร้างขึ้นแล้ว ดำเนินการตามคำขอนี้จากเบราว์เซอร์เปิดโปรแกรมจำลองบน Mac ที่มีเวอร์ชัน iPhone 8Plus: http: // hostname: 3000 / cordova / build / [xxxx-buildnumber] / emulate? target = iPhone-8-Plus


0

เครื่องจำลอง iPhone และ iPad ที่แตกต่างกัน

  1. Cordova รัน ios - รายการ

  2. Cordova เลียนแบบ iOS - เป้าหมาย "iPhone-7"


0

คำตอบของ @ Birja ใช้งานได้ในขณะนี้ แต่คำสั่ง run ที่เขาใช้ในที่สุดก็ยังผิดดังนั้นคำตอบที่ถูกต้อง:

เพื่อแสดงรายการอุปกรณ์ทั้งหมดที่มีอยู่ในโปรแกรมจำลอง cordova run ios --list

จะได้ผลลัพธ์ดังนี้:

Available ios devices:
Available ios virtual devices:
Apple-TV-1080p, tvOS 12.2
Apple-Watch-Series-2-38mm, watchOS 5.2
iPhone-5s, 12.2
iPhone-6, 12.2
iPad-Air-2, 12.2
iPad--5th-generation-, 12.2
iPad-Pro--9-7-inch-, 12.2
iPad-Pro, 12.2
iPad-Pro--12-9-inch---2nd-generation-, 12.2
iPad-Pro--10-5-inch-, 12.2
iPad--6th-generation-, 12.2
iPad-Pro--11-inch-, 12.2
iPad-Pro--12-9-inch---3rd-generation-, 12.2

cordova run ios --target "iPad-Pro, 12.2"ใช้เป้าหมายใด ๆ จากด้านบน เพื่อเรียกใช้ในโปรแกรมจำลอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.