Xcode6: Simülatörün iki örneğini çalıştırın


122

İOS uygulamam için iki farklı hedefim var. Simülatörün iki farklı örneğinde iki uygulamayı aynı anda çalıştırmak mümkün müdür? Xcode'un hata ayıklayıcısından yararlanmamayı gerektiriyorsa sorun değil. Şimdiye kadar bulduğum tek çözüm iki XCode sürümü kurmaktı, ancak bu çok ağır / yer kaplayan bir çözüm.



3
Yinelenen bir soru, ancak @ i40west'in yanıtı aslında daha iyi.
vintagexav

Yanıtlar:


224

Komut satırından iOS simülatörünün iki örneğini çalıştırabilirsiniz. Xcode hata ayıklamasına eklenmeyecekler - aslında, yalnızca Xcode çalıştırmadan yaparsanız işe yarıyor gibi görünüyor.

İlk olarak, uygulamayı simülatöre yüklemek için simülatörde Xcode'dan çalıştırmanız gerekir. Nihayetinde kullanacağınız simülatörleri çalıştırdığınızdan emin olun

Şimdi bir Terminal penceresi açın ve bunu yapın.

cd /Applications/Xcode.app/Contents/Developer/Applications
open -n iOS\ Simulator.app
open -n iOS\ Simulator.app

Xcode 7 için güncelleme: Xcode 7 ile simülatörün uygulama adı değişti, bu yüzden onun yerine şu:

cd /Applications/Xcode.app/Contents/Developer/Applications
open -n Simulator.app
open -n Simulator.app

İkincisi başladığında bir hata uyarısı alırsınız. Sadece kapatın ve “Donanım” »“ Cihaz ”dan farklı bir cihaz seçin . Artık çalışan iki simülatörünüz var ve bunlara Xcode'dan zaten yüklediğiniz uygulamalar orada olacak.


7
Hey Teşekkürler, bu iyi bir fikir, ama ne yazık ki ikinci simülatör için "Aygıt şu anki durumda başlatılamıyor: Booted" yazıyor. İki simülatör görüyorum, ancak ikincisinin ekranı uyarı kapatıldıktan sonra bile siyah kalıyor.
vintagexav

6
Belki de bunun nedeni XCode'umun şu anda çalışıyor olmasıdır. Belki de cevabınıza bu talimatı eklemelisiniz :) Ayrıca bu sadece iki farklı simüle edilmiş donanım (örneğin: iPhone 5 ve iPhone 5s)
kullanıyorsanız işe yarar

13
Bu arada, iki farklı simüle edilmiş donanımla iki farklı simülatörü düzgün bir şekilde çalıştırmak ve "Cihaz mevcut durumda önyüklenemiyor: Booted" durumundan kaçınmak için, ilk simülatörün sürümünü başlattıktan sonra simülatör> donanım seçeneğine tıklayarak değiştirmelisiniz. Daha fazla bilgi: stackoverflow.com/questions/24023029/…
vintagexav

1
Teşekkürler! İCloud senkronizasyonunu test etmek için 2 simülatör (biri iPhone5, diğeri iPhone6 ​​çalıştıran) kullanıyorum. Simülatörün senkronizasyonunun titiz olduğunu unutmayın, bu nedenle pratik amaçlar için Debug-> Trigger iCloud Sync'i kullanarak iCloud senkronizasyonunu zorlamanız gerekir. Bu yüzden, uygulamamı ayrı simülatör pencerelerinde çalıştıran bu iki cihazla, cihaz1'de (iphone5) bir değişiklik yapıyorum, cihaz1 için senkronizasyona zorla, cihaz2'ye tıklama (iPhone6) ve senkronizasyona zorla. Ve viola, artık simülatörde iCloud senkronizasyonunu test edebilirsiniz. Simülatörün Konsolunu açmak, gerçekleştiğinde arka plan eşitleme etkinliğini görüntüleyebileceğiniz için yararlıdır.
ObjectiveTC

3
Cevabınızı bulduğuma sevindim, teşekkür ederim! Sadece görünüşe göre XCode'u aynı anda çalıştırabileceğinizi ve aşağıdaki uyarılarla birlikte belirtmek istedim: 1. ikinci simülatörün ilkinden farklı bir konfigürasyona sahip olması gerekir (açılır pencereden şikayet ettikten sonra, simülatörün cihaz versiyonunu değiştirmeniz gerekir. Donanım menüsünden). 2. XCode'dan ilk simülatörü durdurup yeniden başlattığınızda, ikincisi de durdurulacak ve yeniden başlatılacaktır (ve cihaz sürümünü tekrar değiştirmeniz gerekecektir)
Alex

26

Xcode 9+

Xcode 9 artık birden fazla simülatörün başlatılmasını destekliyor. Bu WWDC 2017'de duyuruldu.

Simülatörü Xcode, Cmd + R'de değiştirin ve yeni bir simülatörün açıldığını göreceksiniz.

görüntü açıklamasını buraya girin


9

İ40west'in çözümünün simülatörü manuel olarak başlatmak için çalıştığı başarılı bir şekilde test edildi, ancak bu gün ve çağda, bir iOS simülatörünün komut satırından eşzamanlı testleri çalıştırırken farklı Xcode sürümleri VE farklı cihaz türleri gerektirmesi aptalca görünüyor (biraz farklı kullanım durumu, ancak en üstteki orijinal soruyla ilgili) ).

Komut satırı derlemeleri ve testleriyle en alakalı olan Apple makalesine bakın: https://developer.apple.com/library/ios/technotes/tn2339/_index.html

'Xcodebuild test' komutunu doğru '-destination' değeriyle çalıştırmadan önce 'iOS simulator.app'a doğru' iOS simulator.app 'aktarılırsa, birden fazla eşzamanlı test bizim için iyi sonuç verdi. simctl list 've farklı XCode sürüm ikililerini seçmek için DEVELOPER_DIR ortam değişkenini ayarlama (yani Xcode 6.1 ve 6.4'e temel yol)

Aynı fiziksel makine ve iPad veya iPhone gibi aynı iOS simülatör cihazında ve aynı Xcode sürümünde eşzamanlı birim testlerine ihtiyaç duyulmasının nedeni, öncelikle herhangi bir iOS projesinin CI'sını (sürekli entegrasyon) desteklemektir, böylece aynı yapı sistemi birden fazla derlemeyi çalıştırabilir. uygulamalar (şirketimizde 30 veya daha fazla uygulama var), özellik dallarında check-in sırasında bir seferde otomatik olarak taranır ve Bamboo temsilcisi tarafından, çalışan diğer Yapıların tamamlanmasını beklemeye gerek kalmadan oluşturulur - Bamboo bu tür otomatik oluşturmayı otomatik olarak destekler etkinleştirilirse özellik dalları keşfedildi.

Birden çok eşzamanlı test çalıştırırken ne olduğuna gelince, farklı Terminal.app pencerelerinde arka arkaya iki kez birden çok 'xcodebuild test' komutu çalıştırıyoruz, sonuç sadece bir simülatör penceresi görünüyor ve testler en basit testte başarısız oluyor.

Test lansmanımız için giriş kriterlerini, her sim ve test başlatma için farklı Xcode sürümlerini karmaşık hale getirdiğimizde, DEVELOPER_DIR'i man sayfalarına göre (xcodebuild testi) kullanırken, iki ayrı pencerede açılan farklı bir cihaz belirliyoruz, ancak sonuç şu ki ilk pencerede çalışan testler ikinci iOS simülatör penceresi tarafından kesintiye uğrar.

Kaputun altında, bunun amaçlandığından emin olmayan, ortak bir paylaşılan kaynak var gibi görünüyor ya da olumsuz etkiler olmadan eşzamanlı test çalıştırmalarının nasıl daha iyi uygulanacağı konusunda birkaç günden fazla ciddi düşünmeyi gerektiren yeni bir özellik var.

Deneyimlerimiz ve genel olarak diğerleri, çok sayıda küçük dosyaya sahip sanal makinelerde iOS derleme performansının fiziksel donanımdan daha yavaş olması nedeniyle, sanal makineleri sim kısıtlamalarını aşmak için kullanmak istemiyoruz. VM'ler, VMware yazılımı ile Apple donanımı ve / veya ürün yazılımı kombinasyonundaki G / Ç sorunları nedeniyle genellikle derlemeyi çok yavaşlatır. Neredeyse ghetto üzgünüm ama bizim için sanal makineler iyi performans göstermiyor - neredeyse getto sitesi, yapı çiftliğimiz için Mac Mini'lere ESXi 5.5'in nasıl kurulacağına dair talimatlar sağladı.

Mac Mini'de ESXi 5.5'in SSD ile bile 2 veya daha fazla katsayı ile çıplak metalden daha yavaş olmasıyla ilgili derleme performansı sorunu yaşadık (yani, VM'de 10 dakikalık bir baremetal derleme 20 sürer). Nedeniyle ilgili aşağıdaki karesel makaleye bakın.

https://corner.squareup.com/2015/07/ios-build-infrastructure.html

Xcodebuild birim testleri için bir seferde 1 sim cihazının kısıtlanması, üretkenliği ciddi şekilde azaltır ve Apple ve ekosisteme katlanarak önemli maliyetler ekler.

Daha fazla donanım satın almayı haklı çıkarmak için eşzamanlılığı desteklememenin Apple'a maliyeti dikkatlice düşünülmeli ve geliştirici hızını kaybetme riskleri, sims ve EULA açısından daha az kısıtlamaya sahip olan diğer rakiplere karşı tartılmalıdır.

Aynı kullanıcı oturum açmasında eşzamanlı testlerin avantajı (çoğu ci sisteminin nasıl çalıştığı), Apple markalı uygulama mağazası uygulamalarının kalitesidir ve bu da kısmen insanların iOS cihazlarını satın almasını sağlar. Kötü yazılım kalitesi, tüm markayı biraz daha sağlam hale getiriyor ve iOS simülatörlerinde eşzamanlılık desteği kesinlikle ekosistemi desteklemenin akıllıca bir yolu gibi görünüyor. Elimizdeki sorunun doğal bir sonucu, Apple'ın CI için Xcode sunucusu, Xcode'un Xcode 7'deki otomatik UI testi işlevselliği gibi son gelişmelerdir.

İnsanların büyük miktarlarda donanım, kurulum, konfigürasyon satın almalarını sağlamak için gereksiz genel giderleri teşvik etmek, tüm makineleri, ağları ve güç noktalarını vb. Desteklemek için gereken sayısız insandan bahsetmemek, sonunda Apple'ın kârına zarar verecektir, çünkü herkes Apple gibi değildir ve sadece simülatörler üzerinde eşzamanlı testleri desteklemek için raflar MacPro veya Mac Mini satın alabilir. Bir simülatörün tüm amacı, donanımı kullanmaktan kaçınmak ve aynı zamanda testleri hızlandırmaktır.

Ayrıca, VM'lerdeki EULA sınırlamaları, Mac Pro'daki VM'ler için durumu oldukça zayıf hale getirir. Bu donanım türü, birden fazla simülasyon çalıştırılabilseydi çekici olurdu, ancak eşzamanlı birim testleri desteklenmediğinden (yukarıdaki iki koşul dışında - farklı XCode sürümü ve farklı simülatör cihazı), altyapı oluşturmak için büyük olasılıkla Mac Mini'lere bağlı kalacağız.

Apple'ın bu simülasyon ve EULA sınırlamaları yalnızca derleme hattını yavaşlatmakla kalmaz, aynı zamanda gereksiz karmaşıklık ve maliyet ekler. Küçük uygulamalar için bu kadar ilgili olmayabilir, ancak uygulamaların boyutu ve karmaşıklığı arttıkça, derleme bir saat kadar sürebilir (Facebook iOS kurulumlarının bu kadar uzun sürebileceğini duydum). Bir yapının geçip geçmediğini bilmek için kimse bir saat beklemek istemez.

Modern bir Mac Book Pro veya Mac Mini'de 10 dakikadan fazla süren derlemelere sahip büyük projelerde OS X ve xcodebuild ile iyi performans göstermeyen Mac Mini'de ESXI VM'leri çalıştırma veya farklı oturum açma hesapları gibi hack çözümlerini biliyoruz. Sadece aynı Xcode sürümü ve aynı simülatör cihazında eşzamanlı testler yapabilmek için çıplak metal makinede ortama.

Oldukça iyi çalışmasına rağmen ESXi resmi olarak desteklenmiyor. VMware'in henüz Mac Mini donanımını desteklememesinin nedenlerinden biri ECC bellek eksikliğidir, ancak Mac Pro, ECC belleğe sahip olduğu için desteklense de, iOS yapıları açısından Mac Mini'nin çıplak metalle karşılaştırıldığında yavaşlamasıyla aynı sorunları yaşıyor olabilir. aynı donanım ve yazılım yapılandırması üzerinde testler (yalnızca değişiklik VM ile OS X çalıştıran çıplak metaldir). MacPro şu anda tarafımızdan test edilmemiştir. Deneyimlerimize göre, VMware Fusion, performans açısından da oldukça yavaştır.

Daha da önemlisi, geliştiricilerin yukarıda belirtilen sorunlar bir araya getirildiğinde daha uzun süre beklemesi gerekecek, makine havuzu değişiklik alt çizgisini destekleyecek kadar büyük değilse (her 2 geliştirici için bir CI oluşturma, makinelerin geliştiriciye oranı çok yüksek). CI derleme makineleri, 1'den daha fazla eşzamanlı Derleme ve daha fazla eşzamanlı test çalıştırabilmelidir.

İOS simülatörleri ile ilgili diğer gözlemlerden biri de, 7 ana sürümden sonra bile devam eden ve tamamen bitmemiş bir çalışma gibi görünmeleridir. 'Xcrun simctl' alt komutunun bir tür esnekliğe izin veren ancak olası değerin geçerli olduğundan emin olmayan ve --noxpc ile aynı olan bir --set seçeneği vardır. Hiç kimsenin uygun değerleri tahmin etmesi gerekmemeli ve ayrıca bu seçeneği ve belki de örneği kapsayan bir kılavuz sayfası olmalıdır. Bu 2 ilginç seçenek için bazı kullanım durumları nelerdir?

Sorun monolitik uygulamalar olduğundan, hiçbir uygulamanın eşzamanlı testin çalışmasını ve XPC'ye dayalı daha iyi mimariden yararlanmasını garanti eden büyük bir ayak izine sahip olacak şekilde tasarlanmaması gerektiğini söyleyebilirsiniz. Bu çok doğru olabilir, umduğumuz kadar pragmatik bir çözüm değildir ve aynı altyapı üzerine inşa edilecek 20'den fazla uygulamanız varsa sorun devam eder.

Daha yüksek verim için bir makine yapılandırması ve süreçlerini olabildiğince genel ve ölçeklenebilir hale getirmek, simülatörde biraz çalışmayı (uygulama + çekirdek geliştiriciler) gerektirecektir. Ayrıca, tüm Apple simülatör geliştiricileri arasında yüksek düzeyde bir işbirliği gerektirir ve simülatör ürün sahiplerinin herhangi bir dikkat çekmesi için bu sorun için ürün biriktirme listesini doğru şekilde sipariş etmesi gerekir :-)



5

Farklı donanım profilleri için birden çok simülatör örneği çalıştırabilir ve bunlarda hata ayıklayabilirsiniz. Öncelikle, uygulamanızı simülatör örneklerine yüklemek için her donanım türü (iPhone 6, iPad vb.) İçin XCode'dan çalıştırmanız gerekir. Ardından, yukarıda açıklandığı gibi simülatör örneklerini ve uygulamanızı çalıştırın. Hata ayıklamak için "XCode-> Debug-> Attach to Process" menüsünden çalışan işlemlere hata ayıklayıcı ekleyebilirsiniz. Bir örnek için bu blog girişine bakabilirsiniz: http://oguzdemir.dualware.com/?p=43


5

burada .sh biçiminde küçük bir komut dosyası kullanarak bilgisayarınızdaki simülatörlerin UDID'sini listeleyip çalıştırabilirsiniz. Aşağıdaki kodu ".sh" uzantılı bir dosyaya kopyalayın ve terminalde çalıştırın.

Nasıl:

Adım 1. 1. seçenekle cihazları listeleyin ve istenen UDID'yi kopyalayın

Adım 2. 2. seçeneği çalıştırın ve UDID'yi yapıştırın ve ardından enter tuşuna basın

Dikkatli olun: simülatörlerinizi içeren yolun tamam olduğunu doğrulayın (yolunuzla değiştirmiyorsanız)

#!/bin/sh
PS3='Type the number of your choice (1, 2 or 3) and press Enter: '
options=("List Devices" "Run Simulator" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "List Devices")
            xcrun simctl list devices
            echo "\033[1m\n\nCopy the UDID in parentheses of the device which you want run and launch option 2 (Run Simulator)\033[0m"
            ;;
        "Run Simulator")
            read -p 'Type device UDID which you want launch: ' currentDeviceUDID
            open -n /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/ --args -CurrentDeviceUDID $currentDeviceUDID
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done

Teşekkür ederim,


0

Bu 2020, xCode 11.4: Dosya -> Cihaz Aç -> iOs 13.4 -> ve ilk çalışmayan iPhone sürümünü seçin ve ikinci öykünücüyü çalıştıracaksınız.

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.