Скрипт для установки приложения в iOS Simulator

Я пытаюсь автоматизировать процесс создания приложения, запуска модульных тестов и, наконец, запуска тестов пользовательского интерфейса.

Я создаю приложение через командную строку (xcodebuild-sdk iphonesimulator6.0) в некотором каталоге.

Как установить это приложение на симулятор iOS через командную строку (в ~ / Библиотека / поддержка приложений / iPhone Simulator / / приложения)?

пробовал:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator -SimulateApplication MyApp.app/MyApp

но это открывает новое окно finder с именем " iOS Simulator не удалось найдите приложение для имитации".

2 ответов


я сделал сценарий оболочки, который устанавливает приложение в симулятор.

#!/bin/sh
# Pick a uuid for the app (or reuse existing one).
if ! [ -f installApp.uuid ]; then
    uuidgen > installApp.uuid
fi
UUID=$(cat installApp.uuid)
#create supporting folders
TOPDIR="$HOME/Library/Application Support/\
iPhone Simulator/6.0/Applications/$UUID/"
mkdir -p "$TOPDIR"
mkdir -p "$TOPDIR/Documents"
mkdir -p "$TOPDIR/Library"
mkdir -p "$TOPDIR/tmp"
mkdir -p "$TOPDIR/.app"

#copy all the app file to the simulators directory
cp -r * "$TOPDIR/.app"

как использовать этот скрипт для установки приложения:

  1. измените эту строку:

    TOPDIR="$HOME/Library/Application Support/iPhone Simulator/6.0/Applications/$UUID/"
    

    чтобы отразить версию iPhone Simulator, которую вы используете, т. е. 6.0/7.1.

  2. сохранить скрипт как installApp.sh в своем .

  3. откройте окно терминала и выполните команду installApp из проекта справочник.

    • если у меня project_name.app/ С проектом внутри. Введите терминал:

      CD path/to / имя_проекта.app/

    • затем ./installApp для установки приложения в симуляторе.

я получил идею от Джеффри Скофилд: запустите iOS Simulator из командной строки


на iOS8 и новый XCode Apple изменила несколько вещи и затрудняли установку приложений через командную строку. Еще можно сделать:

  1. сначала вам нужно найти каталог приложений (при условии, что вы установили приложения):find ~/Library/Developer/CoreSimulator/Devices -name '*.app'

  2. здесь будут перечислены все пути, в которых установлено пользовательское приложение. Е. Г.

/34792D41-55A9-40F5-AAC5-16F742F1F3E4/data/Containers/Bundle/Application/4BA2A285-6902-45A8-9445-FC3E46601F51/YourApp.app

  1. будет несколько родительских каталогов UUID со структурой выше. Каждый UUID соответствует симулятор для другого устройства. Откройте верхний каталог, и вы найдете . Этот файл будет содержать устройство, которое он имитирует:
<dict>
    ...
    <string>34792D41-55A9-40F5-AAC5-16F742F1F3E4</string>
    <string>com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus</string>
    ...
</dict>
  1. если вы хотите установить приложение для iPhone-6-Plus, это каталог, в котором вы это сделаете. Запустите скрипт выше, чтобы установить приложение. Изменить TOPDIR путь $HOME/Library/Developer/CoreSimulator/Devices/{UUID for device}/data/Containers/Bundle/Applications/$UUID/

начиная с Xcode 6, вы должны иметь возможность использовать simctl для этого.

1) получить список доступных устройств:

xcrun simctl list devices

1a) предполагая, что у вас есть jq установлен, вы можете использовать его, чтобы получить только те устройства, которые реально доступны:

xcrun simctl list devices -j \
| jq -rc '.[] | .[] | .[] | select( .availability | contains( "(available)" ) ) '

1b) или даже фильтровать дальше iPhone или iPad:

xcrun simctl list devices -j \
| jq -rc '.[] | .[] | .[] | select( .name | contains( "iPhone" ), contains( "iPad" ) ) | select( .availability | contains( "(available)" ) ) '

2) После того, как у вас есть UDID устройства, которое вы хотите установить на:

xcrun simctl install $DEVICE_UDID /path/to/your/app

2a) или, если вы хотите чтобы просто установить на загрузочное устройство:

xcrun simctl install booted /path/to/your/app

где это становится очень удобно, если вы хотите запустить одно и то же приложение на всех устройствах:

1) сброс / стирание всех симуляторов:

xcrun simctl erase all

2) Откройте один экземпляр симулятора для каждого теста:

open -n /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
(Ignore the 'Booted' error and switch hardware.)

3) получить UDIDs доступных устройств, которые мы хотим установить в:

DEVICES=$( xcrun simctl list devices -j | jq -rc '.[] | .[] | .[] | select( .name | contains( "iPhone" ), contains( "iPad" ) ) | select( .availability | contains( "(available)" ) ) | select( .state == "Booted" ) | .udid ' )

4) Установите приложение (которое должно быть построено для соответствующего симулятора SDK):

for device in DEVICES ; do xcrun simctl install $device /path/to/app ; done

5) для удобства запустите приложение на каждом устройстве:

for device in $DEVICES ; do xcrun simctl launch $device your.product.app.id ; done