Berhasil menguji bahwa solusi i40west berfungsi untuk meluncurkan simulator secara manual tetapi tampaknya konyol bahwa di zaman sekarang ini, simulator iOS memerlukan versi Xcode yang berbeda DAN jenis perangkat yang berbeda saat menjalankan tes bersamaan dari baris perintah (kasus penggunaan yang sedikit berbeda tetapi terkait dengan pertanyaan asli di atas ).
Lihat artikel Apple di sini yang paling relevan untuk pembuatan dan pengujian baris perintah:
https://developer.apple.com/library/ios/technotes/tn2339/_index.html
Beberapa pengujian bersamaan telah berfungsi dengan baik bagi kami jika meneruskan --args - yang benar ke 'iOS simulator.app' sebelum menjalankan perintah 'xcodebuild test' dengan peluncuran simulator pencocokan nilai '-destination' yang benar dengan nilai UUID dari output 'xcrun simctl list ', dan pengaturan variabel lingkungan DEVELOPER_DIR untuk memilih binari versi XCode yang berbeda (yaitu jalur dasar ke Xcode 6.1 dan 6.4)
Alasan memerlukan pengujian unit serentak pada mesin fisik yang sama dan perangkat simulator iOS yang sama seperti iPad atau iPhone dan versi Xcode yang sama terutama untuk mendukung CI (integrasi berkelanjutan) dari setiap proyek iOS di mana sistem build yang sama dapat menjalankan lebih dari 1 build dari beberapa aplikasi (perusahaan kami memiliki 30 aplikasi atau lebih) pada saat check-in di cabang fitur secara otomatis dipindai dan dibangun oleh agen Bamboo tanpa perlu menunggu Build lain yang sedang berjalan selesai - Bamboo mendukung jenis build otomatis ini secara otomatis- menemukan cabang fitur jika diaktifkan.
Adapun apa yang terjadi saat menjalankan beberapa pengujian bersamaan, kami menjalankan beberapa perintah 'xcodebuild test' dua kali berturut-turut di jendela Terminal.app yang berbeda, hasilnya hanya satu jendela simulator yang muncul dan pengujian gagal dalam pengujian yang paling sederhana.
Saat kami memperumit kriteria entri untuk peluncuran pengujian kami, versi Xcode yang berbeda untuk setiap sim dan peluncuran pengujian, saat menggunakan DEVELOPER_DIR sesuai halaman manual (pengujian xcodebuild) kami menentukan perangkat berbeda yang terbuka di dua jendela terpisah, tetapi hasilnya adalah itu semua pengujian yang berjalan di jendela pertama akan terganggu oleh jendela simulator iOS kedua.
Tampaknya ada sumber daya bersama yang umum di bawah terpal yang menghalangi, tidak yakin itu dimaksudkan atau hanya fitur baru yang membutuhkan lebih dari beberapa hari pemikiran serius tentang cara menerapkan pengujian bersamaan dengan lebih baik tanpa dampak buruk.
Kami tidak ingin menggunakan VM untuk mengatasi batasan sim karena pengalaman kami dan orang lain secara umum adalah bahwa kinerja build iOS pada VM dengan sejumlah besar file kecil lebih lambat daripada perangkat keras fisik. VM umumnya akan sangat memperlambat build karena masalah I / O dalam kombinasi perangkat lunak VMware dan perangkat keras dan / atau firmware Apple. Maaf, secara virtual ghetto tetapi bagi kami VM tidak berkinerja baik - situs virtual ghetto telah memberi kami petunjuk tentang cara memasang ESXi 5.5 di Mac Mini untuk build farm kami.
Kami telah mengalami masalah performa build dengan ESXi 5.5 di Mac Mini yang lebih lambat daripada bare metal bahkan dengan SSD dengan faktor 2 atau lebih (yaitu build baremetal 10 menit membutuhkan 20 menit pada VM). Lihat artikel persegi di bawah ini tentang alasannya.
https://corner.squareup.com/2015/07/ios-build-infrastructure.html
Pembatasan 1 perangkat sim pada satu waktu untuk pengujian unit xcodebuild sangat mengurangi produktivitas dan secara eksponensial menambah biaya yang signifikan untuk Apple dan ekosistem.
Biaya bagi Apple yang tidak mendukung konkurensi untuk membenarkan lebih banyak pembelian perangkat keras harus dipikirkan dengan hati-hati, menimbang risiko kehilangan kecepatan pengembang dibandingkan pesaing lain yang memiliki lebih sedikit batasan dalam hal sim dan EULA.
Keuntungan dari pengujian bersamaan dalam login pengguna yang sama (cara kerja kebanyakan sistem ci) adalah kualitas aplikasi app store bermerek Apple yang pada gilirannya menjadi bagian yang membuat orang membeli perangkat iOS di tempat pertama. Kualitas perangkat lunak yang buruk membuat seluruh merek sedikit lebih lamban dan dukungan konkurensi di simulator iOS tampaknya merupakan cara cerdas untuk mendukung ekosistem. Sedikit konsekuensi dari masalah yang dihadapi adalah peningkatan terbaru seperti server Xcode Apple untuk CI, fungsi pengujian UI otomatis Xcode di Xcode 7.
Mendorong pengeluaran tambahan yang tidak perlu untuk membuat orang membeli sejumlah besar perangkat keras, penyiapan, konfigurasi, belum lagi banyak orang yang diperlukan untuk mendukung semua mesin, jaringan dan titik daya, dll., Pada akhirnya akan berpotensi merugikan keuntungan Apple karena tidak semua orang seperti Apple dan mampu membeli rak MacPro atau Mac Mini hanya untuk mendukung pengujian bersamaan pada simulator. Inti dari simulator adalah untuk menghindari penggunaan perangkat keras dan juga mempercepat pengujian.
Ditambah batasan EULA pada VM membuat kasus untuk VM di Mac Pro cukup lemah. Jenis perangkat keras ini akan menarik jika beberapa sim dapat berjalan tetapi karena pengujian unit bersamaan tidak didukung (kecuali dalam dua kondisi di atas - versi XCode yang berbeda dan perangkat simulator yang berbeda) kami kemungkinan akan tetap menggunakan Mac Mini untuk membangun infrastruktur.
Batasan sim dan EULA dari Apple ini tidak hanya membuat pipeline build lebih lambat tetapi juga menambah kerumitan dan biaya yang tidak perlu. Ini mungkin tidak terlalu mengkhawatirkan untuk aplikasi kecil tetapi seiring bertambahnya ukuran dan kompleksitas aplikasi, pembuatannya dapat memakan waktu hingga satu jam (saya mendengar bahwa Facebook iOS build dapat memakan waktu selama itu). Tidak ada yang mau menunggu satu jam untuk mengetahui apakah sebuah bangunan lulus.
Kami mengetahui solusi peretasan seperti menjalankan VM ESXI di Mac Mini yang tidak bekerja dengan baik dengan kinerja yang bijaksana dengan OS X dan xcodebuild pada proyek besar dengan build yang membutuhkan waktu lebih dari 10 menit pada Mac Book Pro atau Mac Mini modern, atau akun login yang berbeda pada mesin bare metal lingkungan hanya untuk dapat menjalankan tes bersamaan pada versi Xcode yang sama dan perangkat simulator yang sama.
ESXi tidak didukung secara resmi meskipun berfungsi dengan baik. Salah satu alasan mengapa VMware mungkin tidak mendukung perangkat keras Mac Mini adalah kurangnya memori ECC, meskipun Mac Pro didukung karena memiliki memori ECC, kemungkinan memiliki masalah yang sama dengan Mac Mini dalam hal pembuatan iOS lebih lambat dibandingkan dengan bare metal. pengujian pada konfigurasi perangkat keras dan perangkat lunak yang sama (hanya perubahannya adalah VM versus logam biasa yang menjalankan OS X). MacPro belum diuji oleh kami saat ini. Dalam pengalaman kami, VMware Fusion juga cukup lambat dalam hal kinerja.
Yang lebih penting lagi, pengembang perlu menunggu lebih lama ketika masalah yang disebutkan di atas digabungkan kecuali kumpulan mesin cukup besar untuk mendukung pipeline perubahan (satu CI yang dibangun untuk setiap 2 pengembang, rasio mesin terhadap pengembang yang sangat tinggi). Mesin build CI harus dapat menjalankan Build yang lebih serentak dan lebih banyak pengujian serentak daripada 1.
Salah satu pengamatan lain tentang simulator iOS adalah bahwa mereka tampaknya sedang dalam proses dan sama sekali belum selesai bahkan setelah 7 versi utama. Subperintah 'xcrun simctl' memiliki opsi --set yang memungkinkan beberapa jenis fleksibilitas tetapi tidak yakin tentang kemungkinan nilai yang valid, dan sama dengan --noxpc. Tidak ada yang perlu menebak nilai yang sesuai dan selanjutnya, harus ada halaman manual yang mencakup opsi ini dan dan mungkin contoh. Apa kasus penggunaan untuk 2 opsi menarik ini?
Anda dapat berkata, tidak ada aplikasi yang harus dirancang untuk memiliki footprint yang besar yang memerlukan pengujian bersamaan untuk dijalankan, dan menggunakan arsitektur yang lebih baik berdasarkan XPC, karena aplikasi monolitik adalah masalahnya. Ini mungkin benar, ini bukan solusi pragmatis seperti yang kami harapkan, dan masalahnya tetap ada jika Anda memiliki 20+ aplikasi untuk membangun infrastruktur yang sama.
Membuat konfigurasi dan proses mesin se generik dan skalabel mungkin untuk throughput yang lebih tinggi akan membutuhkan beberapa pekerjaan pada simulator (app + core devs). Ini juga membutuhkan kolaborasi tingkat tinggi antara semua pengembang simulator Apple dan pemilik produk simulator perlu memesan backlog produk dengan benar agar masalah ini mendapat perhatian :-)