Cordova: memulai gambar emulator iOS tertentu

120

Saya sedang mengembangkan aplikasi seluler lintas platform menggunakan Cordova, dengan fokus utama pada iOS dalam tahap pengembangan.

Untuk proses pengembangan saya, akan ideal jika saya dapat memulai aplikasi Cordova saya langsung dari baris perintah dan memuatnya ke emulator yang ditentukan. Saya dapat melakukan ini dengan menjalankan yang berikut dari direktori root proyek:

$cordova run --debug --emulator iOS

Ini berfungsi dengan baik, dan menghasilkan simulator iOS yang menjalankan aplikasi saya di iPhone 4 Retina simulasi dengan iOS 7.0.3

Selain perangkat simulasi ini, saya juga ingin menguji (misalnya) iPad. Saya telah menginstal gambar emulasi ini, dan saya dapat memulai aplikasi saya di dalamnya secara manual di Xcode. Juga, perintah list-emulator-images(terletak di project_dir/platforms/ios/cordova/lib) memberikan keluaran berikut:

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

Namun, masalahnya adalah: Saya tidak bisa menemukan cara untuk memulai emulator selain dari default (yang tampaknya adalah iPhone Retina (4-inch)gambar emulasi). Keluaran yang relevan dari cordova helpmemberikan informasi berikut:

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

Saya sudah mencoba hal-hal seperti berikut ini:

cordova run --debug --emulator=iPad iOS

Dan banyak variasinya, tapi tidak berhasil. Setiap kali dimulai di emulator yang sama.

Dokumentasi untuk alat baris perintah tidak menawarkan informasi apa pun dalam hal ini, dan pencarian Google yang ekstensif juga gagal menemukan apa pun. Apakah saya melewatkan sesuatu yang sepele? Atau saya mencoba melakukan sesuatu yang aneh? Saya sangat berharap seseorang di sini memiliki pengalaman dengan ini, dan dapat memberikan jawaban.

Terima kasih banyak sebelumnya!

edit: lupa menyebutkan secara eksplisit; Saya melakukan semua ini di Mac. Seperti yang disebutkan sebelumnya, menjalankan aplikasi di emulator / simulator yang berbeda di Xcode berfungsi dengan baik.

EggMeister
sumber

Jawaban:

335

Untuk mengetahui gambar simulator apa yang tersedia, Anda dapat menggunakan untuk mendaftarnya

$ 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

Kemudian gunakan salah satu nama simulator di parameter --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"

Penting Keluar dari simulator sebelum meluncurkan simulator target yang berbeda (Pada bilah Menu pilih Simulator->Quit)

Perhatikan bahwa Anda mungkin perlu keluar dari simulator iOS melalui menu untuk beralih dari iPhone 3,5 menjadi 4 inci.

daftar dinamis tersedia di platforms/ios/cordova/lib/list-emulator-images

csantanapr.dll
sumber
3
Terima kasih, ini membantu. Apa sumber Anda untuk ini? Hanya bertanya-tanya bagaimana saya bisa menemukan ini sendiri ... Jawaban atas pertanyaan ini juga banyak membantu: stackoverflow.com/questions/13877840/… Rupanya 'cordova emulate' adalah pembungkus voor ios-sim, yang juga dapat Anda bicarakan untuk secara langsung. Inilah yang akhirnya saya lakukan, jadi saya dapat membuat & meluncurkan kode saya langsung dari IDE pilihan saya.
EggMeister
Saya baru saja menjalankan perintah ini dan dapat mengonfirmasi bahwa emulator 4,7 dan 5,5 inci tidak terdaftar, bahkan dengan Xcode 6 terpasang :-(
Ben Clayton
Hai, saya mencoba perintah ini "./platforms/ios/cordova/lib/list-emulator-images" tetapi saya tidak melihat semua opsi ,, TIDAK ADA iPhone 6, TIDAK ADA iPhone 6-Plus, TIDAK ADA iPad-Air. masalah? Terima kasih
user2120121
10
Saya tidak benar-benar tahu mengapa tetapi bagi saya Cordova CLI akan melempar "Error: Cannot read property 'name' of undefined"ketika menentukan target dengan tanda kutip, saya hanya bisa membuatnya bekerja dengan menjalankannya seperti ini cordova run ios --target=iPhone-6. Semoga ini bisa menyelamatkan orang lain dari masalah!
Gifford N.
1
Saya mengalami hasil bermasalah yang sama dengan Gifford N. Saya menggunakan cordova 7.0.0
Terry Wilkinson
18

Seperti csantanapr Anda dapat menggunakan:

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

Namun, dalam hal ini proyek cordova (atau PhoneGap atau lainnya) akan diluncurkan pada simulator iPhone 4s dengan iOS versi 7.0.3 .

Jika Anda ingin meluncurkan proyek pada simulator yang sama, tetapi dengan versi lain iOS (7.1 atau 8.0, jika ada versi di sistem Anda)?

Tentu saja, Anda bisa melakukan seperti mengatakan cobberboy :

mulai emulator tertentu dan pilih versi ios Anda dengan langsung menggunakan ios-sim.

Tetapi Anda dapat meningkatkan --targetopsi runperintah cordova .

Pertama-tama, Anda harus memastikan versi iOS target yang tersedia di sistem Anda.

Untuk itu gunakan jawaban cobberboy :

$ ios-sim showdevicetypes

Maka Anda perlu membuka file your_project_dir/platforms/ios/cordova/lib/run.jsdan menemukan baris kode seperti di bawah ini:

// 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'];

Untuk digunakan iPhone-4s, 7.1(atau lainnya), tambahkan saja ke array 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'];

Dan masuk

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

Anda --target="iPhone-4s, 7.1"akan valid.

Dan fungsi deployToSimdari 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);
}

konversikan iPhone-4s, 7.1ke argumen yang valid com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1untuk ios-sim.

Ruslan Soldatenko
sumber
Ini berfungsi dengan sempurna dan memungkinkan saya untuk menggunakannya ionic run ios --target='iPhone-6, 9.0'saat menggunakan Ionic Framework.
jorisw
Temuan bagus 👍. Saya hanya mengomentari blok yang memvalidasi validTargetsdan saya dapat menentukan platform lengkap, mis "--target="iPhone-6, 8.4"". : . Akan sangat menyenangkan jika Cordova mendelegasikan validasi target ke ios-sim.
Kyle Fox
Ini tidak berhasil untuk saya. Saya mengetik sampah di run.js dan itu diabaikan. Apakah npm menyimpan ini atau sesuatu? Bagaimana cara menyegarkan cache npm?
Randgalt
Anda juga dapat menjalankan "ionic platform update ios" dan Anda akan dapat menjalankan emulator yang baru diinstal
Benjamin Piette
10

TL; DR

Anda dapat memulai emulator tertentu dan memilih versi ios Anda dengan langsung menggunakan 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

Detail

Ketika saya menjalankan ini:

cordova emulate ios --target="iPad"

dan melihat proses yang sedang berjalan, saya melihat ini (dalam satu baris):

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

Menyelidiki lebih jauh ke ios-sim , sepertinya ada beberapa opsi yang lebih spesifik, terutama:

--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"

Jadi saya melakukan seperti yang disarankan dan menjalankan ios-sim dengan argumen "showdevicetypes" dan mendapatkan ini:

$ 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
cobberboy
sumber
Bagaimana cara kerjanya untuk mengubah simulator default? Anda melewati bit cordova di sini dan hanya meluncurkan secara langsung, bukan?
mix3d
7

Jangan sertakan nomor versi

cordova run ios --target="iPhone-6s"
Ariel Ibarra
sumber
4

Pada Xcode 8.3.2 ...

Utas lama, saya tahu, tetapi tampaknya, mungkin, jawabannya telah sedikit berubah. Petunjuk dari posting sebelumnya di utas ini membantu, tetapi begitu pula membaca dokumentasi yang disertakan dalam kode,<cordova-project>/platforms/ios/cordova/lib/run.js

Jalankan ./platforms/ios/cordova/lib/list-emulator-imagesuntuk membuat daftar gambar emulator yang tersedia. Jangan menyertakan nomor versi di bagian akhir saat membuat panggilan cordova untuk dijalankan di emulator yang diinginkan.

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

Lihat lebih banyak

David Vezzani
sumber
terima kasih Tuhan atas komentar Anda! Itu tidak berfungsi setelah pembaruan terbaru dan tidak dapat menemukan info apa pun. Baru saja mendapat pesan kesalahan: "Kesalahan: Tidak dapat membaca properti 'nama' tidak ditentukan" yang diperbaiki setelah TIDAK termasuk versi ios.
Marco Rinck
@MarcoRinck periksa komentar di jawaban, ada perbaikan cepat dengan mengetik:cordova run ios --target=iPhone-6
Kira Hao
3

Saya tidak dapat mengomentari jawaban di atas karena reputasi saya yang rendah, tetapi daftar target tersedia dari:

start-emulator 

dibawah

your platform/ios/cordova/lib/

Karena itu, saya tidak dapat membuat emulator retina ipad berfungsi ...

Sergio
sumber
3

keluaran tercepat dari daftar perangkat: $ instruments -s devices

Cukup gunakan nama perangkat tanpa versinya.

Tino Rüb
sumber
0

Simulator iphone dan ipad yang berbeda

  1. cordova menjalankan ios --list

  2. cordova meniru ios --target "iPhone-7"

BIRJA KUMAR
sumber
0

@Birja jawaban sedang berfungsi sekarang tetapi perintah jalankan yang dia gunakan akhirnya masih salah jadi di sini jawaban yang benar:

Untuk mendaftar semua perangkat yang tersedia di simulator cordova run ios --list

Ini akan menghasilkan sesuatu seperti ini:

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"Gunakan target apapun dari atas. Untuk dijalankan di simulator.

Mamba hitam
sumber