İ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 :-)