Cordova: belirli iOS emülatör görüntüsünü başlatın


121

Cordova'yı kullanarak, geliştirme aşamasında ağırlıklı olarak iOS'a odaklanan bir çapraz platform mobil uygulama geliştiriyorum.

Geliştirme sürecim için, Cordova uygulamamı doğrudan komut satırından başlatıp belirli bir öykünücüye yüklemesini sağlayabilirsem ideal olur. Bunu proje kök dizininden aşağıdakileri çalıştırarak yapabilirim:

$cordova run --debug --emulator iOS

Bu iyi çalışıyor ve uygulamamı iOS 7.0.3 ile simüle edilmiş bir iPhone 4 Retina'da çalıştıran bir iOS simülatörü ile sonuçlanıyor.

Bu simüle edilmiş cihazın yanı sıra, (örneğin) bir iPad üzerinde de test etmek istiyorum. Bu öykünme görüntülerini yükledim ve uygulamamı Xcode'da manuel olarak başlatabilirim. Ayrıca, komut list-emulator-images(içinde bulunur project_dir/platforms/ios/cordova/lib) aşağıdaki çıktıyı verir:

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

Ancak, mesele şu: Öykünücüyü varsayılandan başka bir şeyde nasıl başlatacağımı çözemiyorum ( iPhone Retina (4-inch)öykünme görüntüsü gibi görünüyor). İlgili çıktı cordova helpaşağıdaki bilgileri verir:

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

Aşağıdaki gibi şeyler denedim:

cordova run --debug --emulator=iPad iOS

Ve bunun birçok çeşidi var ama şans yok. Her seferinde aynı emülatörde başlar.

Komut satırı aracının belgeleri bu konuda herhangi bir bilgi sunmuyor ve kapsamlı bir Google araması da hiçbir şey ortaya çıkarmadı. Önemsiz bir şeyi mi kaçırıyorum? Yoksa tuhaf bir şey mi yapmaya çalışıyorum? Umarım buradaki birinin bu konuda deneyimi vardır ve bazı cevaplar verebilir.

Şimdiden çok teşekkürler!

edit: açıkça belirtmeyi unutmuş; Bütün bunları bir Mac'te yapıyorum. Daha önce de belirtildiği gibi, uygulamayı Xcode'da farklı emülatörlerde / simülatörlerde çalıştırmak iyi çalışıyor.

Yanıtlar:


336

Kullanılabilir simülatör resimlerinin neler olduğunu öğrenmek için bunları listelemek için kullanabilirsiniz

$ 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

Ardından --target parametresindeki simülatör adlarından birini kullanın:

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"

Önemli Farklı bir hedef simülatörü başlatmadan önce simülatörden çıkın (Menü çubuğunda seçin Simulator->Quit)

3,5 ila 4 inç iPhone arasında geçiş yapmak için iOS simülatöründen menü aracılığıyla çıkmanız gerekebileceğini unutmayın.

dinamik liste mevcuttur platforms/ios/cordova/lib/list-emulator-images


3
Teşekkürler, bu yardımcı oldu. Bunun için kaynağınız neydi? Bunu kendim nasıl çözebileceğimi merak ediyorum ... Bu sorunun cevabı da çok yardımcı oldu: stackoverflow.com/questions/13877840/… Görünüşe göre 'cordova taklit etme' bir sarmalayıcı voor ios-sim, siz de konuşabilirsiniz doğrudan. Sonunda yaptığım şey bu, böylece kodumu doğrudan tercih ettiğim IDE'den oluşturabilir ve başlatabilirim.
EggMeister

Bu komutu yeni çalıştırdım ve 4,7 ve 5,5 inç emülatörlerin, Xcode 6 kurulu olsa bile listelenmediğini onaylayabilirim :-(
Ben Clayton

Merhaba, bu komutu denedim "./platforms/ios/cordova/lib/list-emulator-images" ancak tüm seçenekleri görmedim, YOK iPhone 6, YOK iPhone 6-Plus, YOK iPad-Air ne olurdu sorun? Teşekkürler
user2120121

10
Nedenini gerçekten bilmiyorum ama benim için Cordova CLI "Error: Cannot read property 'name' of undefined"hedefi alıntılarla belirtirken atardı , ancak böyle çalıştırarak çalıştırabilirdim cordova run ios --target=iPhone-6. Umarım bu bir başkasını biraz sıkıntıdan kurtarır!
Gifford N.

1
Gifford N ile aynı sorunlu sonucu alıyorum. Cordova 7.0.0 kullanıyorum
Terry Wilkinson

18

Söz hakkından olarak csantanapr kullanabilirsiniz:

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

ancak bu durumda cordova (veya PhoneGap veya başka bir) projesi iOS 7.0.3 sürümüne sahip iPhone 4s simülatöründe başlatılacaktır .

Projeyi aynı simülatörde, ancak diğer iOS sürümüyle (sisteminizde sürümleri varsa 7.1 veya 8.0) başlatmak istiyorsanız?

Cesetten, Cobberboy şöyle diyebilirsin :

belirli bir öykünücüyü başlatın ve doğrudan ios-sim kullanarak ios sürümünüzü seçin.

Ancak --targetcordova runkomutunun seçeneğini geliştirebilirsiniz .

Öncelikle, sisteminizde hangi hedef iOS sürümünün bulunduğundan emin olmalısınız.

Bunun için Cobberboy'un cevabını kullanın :

$ ios-sim showdevicetypes

Ardından dosyayı açmanız your_project_dir/platforms/ios/cordova/lib/run.jsve aşağıdaki gibi kod satırlarını bulmanız gerekir :

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

Kullanım için iPhone-4s, 7.1(veya başka bir şey) basitçe diziye ekleyin 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'];

Ve

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

senin --target="iPhone-4s, 7.1"geçerli olacaktır.

Ve fonksiyon deployToSimarasında 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);
}

dönüştürmek iPhone-4s, 7.1geçerli argüman için com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1için ios-sim.


Bu mükemmel çalışıyor ve ionic run ios --target='iPhone-6, 9.0'Ionic Framework kullanırken kullanmama izin verdi .
jorisw

İyi bul 👍. Sadece geçerli kılınarak o bloğun yorumladı validTargetsve ben tam platformu ex belirtmek başardı: "--target="iPhone-6, 8.4"". Cordova, hedef doğrulamasını devrederse çok güzel olurdu ios-sim.
Kyle Fox

Bu benim için çalışmıyor. Run.js'de çöp yazdım ve yok sayıldı. Npm bunu veya başka bir şeyi önbelleğe alıyor mu? Npm'nin önbelleğini nasıl yenileyebilirim?
Randgalt

Ayrıca "iyonik platform güncelleme ios" u çalıştırabilir ve son yüklenen emülatörleri çalıştırabilirsiniz
Benjamin Piette

10

TL; DR

Doğrudan ios-sim kullanarak belirli bir emülatörü başlatabilir ve ios sürümünüzü seçebilirsiniz.

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

ayrıntılar

Bunu çalıştırdığımda:

cordova emulate ios --target="iPad"

ve çalışan süreçlere baktım, şunu gördüm (tek bir satırda):

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'i daha ayrıntılı olarak incelersek , bazı daha spesifik seçenekler var gibi görünüyor, özellikle:

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

Ben de önerdiği gibi yaptım ve ios-sim'i "showdevicetypes" argümanıyla çalıştırdım ve şunu anladım:

$ 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

Varsayılan simülatörü değiştirmek için bu nasıl çalışır? Burada cordova bitini atlıyorsunuz ve doğrudan fırlatıyorsunuz, değil mi?
mix3d


4

Xcode 8.3.2'den itibaren ...

Eski konu, biliyorum, ama öyle görünüyor ki, yanıt biraz değişti. Bu konudaki önceki gönderilerden ipuçları yardımcı oldu, ancak kodda yer alan belgeleri okumak da yardımcı oldu,<cordova-project>/platforms/ios/cordova/lib/run.js

./platforms/ios/cordova/lib/list-emulator-imagesKullanılabilir emülatör görüntülerini listelemek için yürütün . İstenen öykünücüde çalıştırmak için cordova çağrısı yaparken sürüm numarasını sonuna eklemeyin.

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

Daha fazla gör


yorumunuz için tanrıya şükür! En son güncellemeden sonra çalışmadı ve herhangi bir bilgi bulamadı. Az önce şu hata mesajını aldım: "Hata: Tanımlanmamış olanın 'adı' özelliği okunamıyor", ios sürümü dahil DEĞİLDEN sonra düzeltildi.
Marco Rinck

@MarcoRinck yanıttaki yorumu kontrol edin, yazarak hızlı bir düzeltme var:cordova run ios --target=iPhone-6
Kira Hao

3

İtibarım düşük olduğu için yukarıdaki cevap hakkında yorum yapamam, ancak hedeflerin listesine şuradan ulaşılabilir:

start-emulator 

altında

your platform/ios/cordova/lib/

Bunu söyledikten sonra, ipad retina öykünücüsünü çalıştıramıyorum ...


3

cihaz listesinin en hızlı çıktısı: $ instruments -s devices

Cihaz adını sürüm olmadan kullanın.



0

Farklı iphone ve ipad simülatörü

  1. cordova run ios - liste

  2. cordova ios öykünmesi - "iPhone-7" yi hedefle


0

@ Birja'nın cevabı şu anda çalışıyor ancak sonunda kullandığı çalıştırma komutu hala yanlış, bu yüzden burada doğru cevap:

Simülatörde bulunan tüm cihazları listelemek için cordova run ios --list

Bunun gibi bir sonuç olacaktır:

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"Yukarıdakilerden herhangi bir hedefi kullanın. Simülatörde çalıştırmak için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.