Xcode6: запустіть два екземпляри тренажера


122

У мене для додатка iOS дві різні цілі. Чи можливо одночасно запустити дві програми на двох різних екземплярах симулятора? Це нормально, якщо це вимагатиме не користі від налагоджувача Xcode. Поки що єдине знайдене нами рішення було встановити дві версії XCode, але це дуже важке / забирає багато місця рішення.



3
Це повторне запитання, але відповідь @ i40west насправді краща.
vintagexav

На насправді, відповідь тут ще краще stackoverflow.com/questions/896487 / ...
FlowUI. SimpleUITesting.com

Відповіді:


224

Ви можете запустити два екземпляри симулятора iOS з командного рядка. Вони не будуть прикріплені до налагодження Xcode - дійсно, це здається, що це спрацює лише в тому випадку, якщо ви це зробите без Xcode.

Спочатку вам потрібно запустити додаток у тренажері з Xcode, щоб встановити його в тренажері. Переконайтеся, що ви працюєте з тими ж тренажерами, які в кінцевому рахунку ви будете використовувати

Тепер відкрийте вікно терміналу і зробіть це.

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

Оновлення для Xcode 7: З Xcode 7 назва програми тренажера змінилася, тож це замість цього:

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

Коли другий запуститься, ви отримаєте попередження про помилку. Просто відхиліть його та виберіть інший пристрій із «Обладнання» »« Пристрій ». Тепер у вас працює два тренажери, і будь-які додатки, які ви вже встановили в них з Xcode, будуть там.


7
Здравствуйте, це гарна ідея, але на жаль, вона говорить "Неможливо завантажити пристрій у поточному стані: завантажений" для другого тренажера. Я бачу два тренажери, але екран другого залишається чорним навіть після зменшення оповіщення.
vintagexav

6
Можливо, це тому, що зараз працює мій XCode. Можливо, ви повинні додати цю відповідь до своєї відповіді :) Також вона працює лише в тому випадку, якщо ви користуєтесь двома різними модельованими апаратними засобами (наприклад, iPhone 5 та iPhone 5s)
vintagexav

13
До речі, щоб правильно запустити два різних тренажери з двома різними модельованими апаратними засобами та уникнути "Не вдається завантажити пристрій у поточному стані: Booted", ви повинні змінити версію першого тренажера після його запуску, натиснувши на тренажер> обладнання. Більш детальна інформація: stackoverflow.com/questions/24023029 / ...
vintagexav

1
Дякую! Для перевірки синхронізації iCloud я використовую 2 тренажери (один працює під управлінням iPhone5, інший iPhone6). Зауважимо, синхронізація симулятора є вигадливою, тому для практичних цілей потрібно змусити синхронізувати iCloud за допомогою Debug-> Trigger iCloud Sync. Отож, коли ці два пристрої запускають мою програму в їхніх окремих вікнах симулятора, я вношу зміни на device1 (iphone5), примушую синхронізувати пристрій1, клацнути на device2 (iPhone6) та примусово синхронізувати. І віола, тепер ви можете протестувати синхронізацію iCloud у тренажері. Відкриття консолі симулятора є корисним, оскільки ви можете переглядати активність синхронізації фону, коли це відбувається.
ObjectiveTC

3
Я радий, що знайшов вашу відповідь, дякую! Просто хотілося б зазначити, що, мабуть, у вас МОЖЕ одночасно працювати XCode із наступними застереженнями: 1. Другий симулятор повинен мати іншу конфігурацію, ніж перший (після того, як спливаюче скарга, вам потрібно змінити версію пристрою тренажера. з меню апаратних засобів). 2. кожного разу, коли ви зупините і перезапустите перший тренажер від XCode, другий також буде зупинений і перезапущений (і вам потрібно буде знову змінити його версію пристрою)
Alex

26

Xcode 9+

Тепер Xcode 9 підтримує запуск декількох тренажерів. Про це було оголошено у WWDC 2017.

Просто перейдіть і поміняйте тренажер у Xcode, Cmd + R, і ви побачите новий симулятор, що спливе.

введіть тут опис зображення


9

Успішно перевірено, що рішення i40west працює на ручному запуску симулятора, але здається нерозумним, що в цей день і вік для iOS-симулятора потрібні різні версії Xcode І різні типи пристроїв при запуску паралельних тестів з командного рядка (дещо інший випадок використання, але пов'язаний з оригінальним запитанням вгорі ).

Тут див. Статтю Apple, яка є найбільш актуальною для збірки та тестів командного рядка: https://developer.apple.com/library/ios/technotes/tn2339/_index.html

Кілька паралельних тестів спрацювало для нас, якщо передати правильні --args - на "iOS simulator.app", перш ніж запустити команду "xcodebuild test" з правильним запуском симулятора "-destination", що відповідає значенню UUID, з виведенням xcrun список simctl 'та встановлення змінної середовища DEVELOPER_DIR для вибору різних бінарних файлів версії XCode (тобто базовий шлях до Xcode 6.1 та 6.4)

Причина необхідності паралельних тестів на тій же фізичній машині та на тому ж пристрої тренажера iOS, як iPad чи iPhone, та ж версія Xcode - це насамперед для підтримки CI (безперервної інтеграції) будь-якого проекту iOS, за допомогою якого одна і та ж система збирання може запускати більше ніж 1 збірку декількох додатки (у нашої компанії є 30 додатків або більше) одночасно після реєстрації в галузях функцій автоматично скануються та створюються агентом Bamboo, не потрібно чекати завершення інших запущених збірок - Bamboo підтримує цей тип автоматичної побудови на автоматичному- виявлені гілки функцій, якщо вони включені.

Що стосується того, що відбувається під час виконання декількох одночасних тестів, ми виконуємо кілька команд 'xcodebuild test' двічі поспіль у різних вікнах Terminal.app, в результаті з’являється лише одне вікно тренажера, і тести провалюються у найпростішому тесті.

Коли ми ускладнюємо критерії вступу для нашого тестового запуску, різних версій Xcode для кожного sim та тестового запуску, при використанні DEVELOPER_DIR відповідно до сторінок man (тест xcodebuild) ми визначаємо інший пристрій, який відкриється у двох окремих вікнах, але результат полягає в тому, що будь-які запущені тести в першому вікні перериваються другим вікном симулятора iOS.

Здається, є загальний спільний ресурс під кришкою, який стає на шляху, не впевнений, що він призначений, або просто нова функція, яка вимагає більше декількох днів серйозної роздуми про те, як краще реалізувати паралельні тестові запуски без несприятливих наслідків.

Ми не хочемо використовувати VM для обходу сим-обмежень, оскільки наш досвід та інші в цілому полягають у тому, що iOS збирає продуктивність на VM з великою кількістю невеликих файлів повільніше, ніж на фізичному обладнанні. Зазвичай VM уповільнить нарощування на багато через проблеми вводу / виводу у поєднанні програмного забезпечення VMware та апаратного забезпечення Apple та / або мікропрограмного забезпечення. Вибачте практично гетто, але для нас VM працюють не дуже добре - сайт virtualghetto надав нам інструкції щодо встановлення ESXi 5.5 на Mac Mini для нашої ферми побудови.

У нас виникла проблема продуктивності збірки, коли ESXi 5.5 на Mac Mini повільніше, ніж голий метал, навіть із SSD в 2 рази або більше (тобто, 10-хвилинне баретальне збирання займає 20 на VM). Про причину див. Статтю в розділі "Квадрат".

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

Обмеження 1-сим-пристрою одночасно для тестів блоку xcodebuild сильно знижує продуктивність і експоненціально додає значних витрат Apple та екосистемі.

Витрати Apple, що не підтримують паралельність для виправдання більшої кількості придбання обладнання, повинні ретельно продумувати, зважуючи ризики втрати швидкості розробника в порівнянні з іншими конкурентами, які мають менші обмеження щодо sims та EULA.

Перевага паралельних тестів у тому ж вході користувачів (як працює більшість систем ci) полягає в тому, що якість додатків фірмового магазину Apple, що, в свою чергу, є частково тим, що змушує людей купувати пристрої iOS в першу чергу. Погана якість програмного забезпечення робить весь бренд трохи більш млявим, а підтримка одночасності в тренажерах iOS, безумовно, схоже на розумний спосіб підтримати екосистему. Трохи наслідком цієї проблеми є останні вдосконалення, такі як сервер Xcode Apple для CI, автоматизований інтерфейс Xcode тестує функціональність у Xcode 7.

Заохочення непотрібних накладних витрат, щоб змусити людей купувати масові кількості обладнання, налаштування, конфігурації, не кажучи вже про численних людей, необхідних для підтримки всіх машин, мереж та точок живлення тощо, потенційно зашкодить прибуткам Apple, зрештою, оскільки не всі схожі на Apple і можливість дозволити собі стелажі MacPro або Mac Mini просто для підтримки паралельних тестів на тренажерах. Вся суть імітатора полягає в тому, щоб не використовувати апаратне забезпечення, а також прискорити тести.

Крім того, обмеження EULA щодо віртуальних машин робить ситуацію з VM на Mac Pro досить слабкою. Цей апаратний тип був би привабливим, якщо можна було б запустити кілька сим-файлів, але оскільки паралельні тести модулів не підтримуються (за винятком двох вище умов - різної версії XCode та іншого пристрою тренажера), ми, швидше за все, будемо дотримуватися Mac Mini для побудови інфраструктури.

Ці обмеження SIM та EULA від Apple не тільки роблять конвеєр побудови повільніше, але й додають зайвих складностей та витрат. Можливо, це не так стосується невеликих додатків, але в міру того, як додатки зростають у розмірі та складності, збірка може зайняти більше години (я чув, що створення iOS у Facebook може зайняти так довго). Ніхто не хоче чекати годину, щоб знати, чи пройшла збірка.

Ми знаємо про такі рішення, як запуск ESXI VM на Mac Minis, які не дуже добре працюють з ОС X і xcodebuild для великих проектів із збірками, які займають більше 10 хвилин на сучасних Mac Book Pro або Mac Mini, або різних облікових записах для входу. на голій металевій машині в навколишнє середовище просто для того, щоб можна було виконувати паралельні тести на тій же версії Xcode і на тому ж пристрої симулятора.

ESXi офіційно не підтримується, хоча працює досить добре. Однією з причин того, що VMware може не підтримувати апаратне забезпечення Mac Mini, але це відсутність пам’яті ECC, хоча Mac Pro підтримується, оскільки він має пам’ять ECC, але, швидше за все, такі проблеми, як у Mac Mini в плані iOS, сповільнюється в порівнянні з голим металом тести на те саме апаратне та програмне забезпечення (лише зміна VM порівняно з голою металевою ОС X X). Наразі MacPro не перевірений нами. На наш досвід, VMware Fusion є досить повільним і в плані продуктивності.

Що ще важливіше, розробникам потрібно буде чекати довше, коли вищезгадані проблеми будуть складені разом, якщо тільки пул машин не є достатньо великим, щоб підтримувати перелік змін (одна збірка CI на кожні 2 диски, дуже високе відношення машин до розробника). Машини побудови CI повинні мати можливість виконувати більше одночасних збірок і більше паралельних тестів, ніж 1.

Одне з інших спостережень щодо симуляторів iOS - це те, що вони здаються незавершеною роботою та повністю незавершеною навіть після 7 основних версій. Підкоманда 'xcrun simctl' має опцію --set, яка може дозволити певну гнучкість, але не впевнена, яке можливе значення є дійсним, і те саме - --noxpc. Ніхто не повинен здогадуватися про відповідні значення, і, крім того, повинна бути довідна сторінка, яка охоплює цей параметр і, можливо, приклад. Які кілька випадків використання для цих 2 цікавих варіантів?

Ви можете сказати, що жоден додаток не повинен бути розроблений таким чином, щоб він мав великий слід, який вимагає запуску паралельного тесту та використання кращої архітектури на базі XPC, оскільки проблемою є монолітні програми. Це може бути правильним, воно не є настільки прагматичним рішенням, як ми могли би сподіватися, і проблема залишається, якщо у вас є 20+ додатків для створення однієї інфраструктури.

Щоб зробити конфігурацію машини та процеси максимально загальними та масштабованими для більшої пропускної здатності, знадобиться певна робота над тренажером (додаток + основні розробники). Це також вимагає високого рівня співпраці між усіма розробниками симуляторів Apple та власниками продуктів симулятора, щоб правильно замовити відставання продукту для цього питання, щоб отримати будь-яку увагу :-)



5

Ви можете запустити кілька екземплярів симулятора для різних профілів обладнання та налагодити їх. По-перше, потрібно запустити додаток з XCode для кожного типу обладнання (iPhone 6, iPad тощо), щоб встановити його в екземпляри симулятора. Потім запустіть екземпляри симулятора та додаток, як це пояснено вище. Щоб налагодити його, ви можете приєднати налагоджувач до запущених процесів у меню "XCode-> Debug-> Attach to Process". Ви можете перевірити цей запис у блозі на прикладі: http://oguzdemir.dualware.com/?p=43


5

тут невеликий скрипт в .sh, щоб перелічити UDID симуляторів на вашому комп’ютері та запустити його. Скопіюйте код нижче у файл із розширенням ".sh" та запустіть його у терміналі.

Як:

Крок 1. Перерахуйте пристрої з опцією 1 та скопіюйте потрібний UDID

Крок 2. Запустіть варіант 2 та вставте UDID, потім натисніть клавішу Enter

Будьте уважні: переконайтеся, що шлях, який містить ваші тренажери, у порядку (якщо він не замінений на ваш шлях)

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

Дякую,


0

Це 2020, xCode 11.4: Файл -> Відкрити пристрій -> iOs 13.4 -> та оберіть версію iPhone, яка не працювала першою, і ви отримаєте другий емулятор.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.