Xcode6: Jalankan dua contoh simulator

122

Saya memiliki dua target berbeda untuk aplikasi iOS saya. Apakah mungkin untuk menjalankan dua aplikasi secara bersamaan pada dua contoh simulator yang berbeda? Tidak apa-apa jika tidak perlu memanfaatkan debugger Xcode. Sejauh ini satu-satunya solusi yang saya temukan adalah menginstal dua versi Xcode, tetapi itu adalah solusi yang sangat berat / memakan tempat.

vintagexav
sumber
3
Ini pertanyaan duplikat, tapi jawaban dari @ i40west sebenarnya lebih baik.
vintagexav
Sebenarnya, jawabannya di sini bahkan lebih baik stackoverflow.com/questions/896487/…
FlowUI. SimpleUITesting.com

Jawaban:

224

Anda dapat menjalankan dua contoh simulator iOS dari baris perintah. Mereka tidak akan dilampirkan ke debugging Xcode — memang, tampaknya hanya berfungsi jika Anda melakukannya tanpa Xcode berjalan sama sekali.

Pertama, Anda perlu menjalankan aplikasi di simulator dari Xcode, untuk menginstalnya di simulator. Pastikan Anda menjalankan simulator yang sama dengan yang pada akhirnya akan Anda gunakan

Sekarang buka jendela Terminal, dan lakukan ini.

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

Pembaruan untuk Xcode 7: Dengan Xcode 7, nama aplikasi simulator telah berubah, jadi ini sebagai gantinya:

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

Saat yang kedua diluncurkan, Anda akan mendapatkan peringatan kesalahan. Tutup saja dan pilih perangkat lain dari "Hardware" »" Device ". Sekarang Anda memiliki dua simulator yang berjalan, dan aplikasi apa pun yang sudah Anda instal di dalamnya dari Xcode akan ada di sana.

i40west
sumber
7
Hei Terima kasih, itu ide yang bagus, tapi untungnya dikatakan "Tidak dapat mem-boot perangkat dalam keadaan saat ini: Boot" untuk simulator kedua. Saya melihat dua simulator tetapi layar yang kedua tetap hitam bahkan setelah peringatannya redup.
vintagexav
6
Mungkin itu karena Xcode saya sedang berjalan. Mungkin Anda harus menambahkan instruksi itu ke jawaban Anda :) Juga berfungsi hanya jika menggunakan dua perangkat keras simulasi yang berbeda (misalnya: iPhone 5 dan iPhone 5s)
vintagexav
13
Ngomong-ngomong, untuk menjalankan dua simulator berbeda dengan benar dengan dua perangkat simulasi berbeda dan menghindari "Tidak dapat mem-boot perangkat dalam keadaan saat ini: Boot", Anda harus mengubah versi simulator pertama setelah memulainya dengan mengklik simulator> perangkat keras. Info lebih lanjut: stackoverflow.com/questions/24023029/…
vintagexav
1
Terima kasih! Saya menggunakan 2 simulator (satu menjalankan iPhone5, yang lain iPhone6) untuk menguji sinkronisasi iCloud. Yang perlu diperhatikan, sinkronisasi Simulator rumit, jadi untuk tujuan praktis Anda harus memaksa sinkronisasi iCloud menggunakan Debug-> Trigger iCloud Sync. Jadi dengan kedua perangkat ini menjalankan aplikasi saya di jendela simulator terpisah, saya membuat perubahan pada device1 (iphone5), memaksa sinkronisasi untuk device1, klik ke device2 (iPhone6) dan memaksa sinkronisasi. Dan biola, Anda sekarang dapat menguji sinkronisasi iCloud di simulator. Membuka Konsol simulator sangat membantu, karena Anda dapat melihat aktivitas sinkronisasi latar belakang saat itu terjadi.
ObjectiveTC
3
Saya senang saya menemukan jawaban Anda, terima kasih! Hanya ingin menyebutkan bahwa ternyata Anda DAPAT menjalankan Xcode pada saat yang sama, dengan peringatan berikut: 1. simulator kedua harus memiliki konfigurasi yang berbeda dari yang pertama (setelah muncul keluhan, Anda perlu mengubah versi perangkat simulator dari menu Hardware). 2. setiap kali Anda menghentikan dan memulai ulang simulator pertama dari XCode, yang kedua juga akan dihentikan dan dimulai ulang (dan Anda harus mengubah versi perangkatnya lagi)
Alex
26

Xcode 9+

Xcode 9 sekarang mendukung peluncuran beberapa simulator. Ini diumumkan di WWDC 2017.

Pergi saja dan ubah simulator di Xcode, Cmd + R dan Anda akan melihat simulator baru bermunculan.

masukkan deskripsi gambar di sini

Guy Daher
sumber
9

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

Patrick D
sumber
5

Anda dapat menjalankan beberapa contoh simulator untuk profil perangkat keras yang berbeda dan men-debugnya. Pertama, Anda perlu menjalankan aplikasi dari XCode untuk setiap jenis perangkat keras (iPhone 6, iPad, dll.) Untuk menginstalnya ke dalam instance simulator. Kemudian jalankan instance simulator dan aplikasi Anda seperti yang dijelaskan di atas. Untuk men-debugnya, Anda dapat melampirkan debugger ke proses yang sedang berjalan dari menu "XCode-> Debug-> Lampirkan ke Proses". Anda dapat memeriksa entri blog ini untuk contoh: http://oguzdemir.dualware.com/?p=43

Oguz Demir
sumber
5

di sini sedikit script dalam .sh untuk mendaftar UDID simulator di komputer Anda dan menjalankannya. Salin kode di bawah ini dalam file dengan ekstensi ".sh" dan jalankan di terminal.

Cara:

Langkah 1. Buat daftar perangkat dengan opsi 1 dan salin UDID yang diinginkan

Langkah 2. Jalankan opsi 2 dan paste UDID lalu tekan tombol enter

Hati-hati: pastikan jalur yang berisi simulator Anda baik-baik saja (jika tidak diganti dengan jalur Anda)

#!/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

Terima kasih,

O. Boujaouane
sumber
0

Ini adalah tahun 2020, xCode 11.4: File -> Open Device -> iOs 13.4 -> dan pilih versi iPhone yang tidak berjalan pertama dan Anda akan menjalankan emulator kedua.

vvolkov.dll
sumber