Как асинхронно загружать симуляторы iOS и ждать события завершения загрузки с помощью скрипта Bash - PullRequest
0 голосов
/ 20 декабря 2018

В моем скрипте я хочу, чтобы эти симуляторы iOS загружались асинхронно с основным потоком

boot B13D4F22-AA4E-4890-8C2B-3C5B7B6E3678 &
boot 5E2588E9-38B5-48AF-99C5-DEE8A1E6FDA0 &
boot 2C28BD02-18BE-4FC5-94DE-075880E70E60 &
boot 723705CD-B038-44E0-B42E-F1D29A28E85E &

, а затем я хочу блокировать, пока опрос для загрузки события на каждой сим не вернет истину или тайм-аутв зависимости от того, что произойдет раньше.

isSimBooted B13D4F22-AA4E-4890-8C2B-3C5B7B6E3678
isSimBooted 5E2588E9-38B5-48AF-99C5-DEE8A1E6FDA0
isSimBooted 2C28BD02-18BE-4FC5-94DE-075880E70E60
isSimBooted 723705CD-B038-44E0-B42E-F1D29A28E85E

Вот весь скрипт:

#!/usr/bin/env bash

function isSimBooted()
{
    # Poll an iOS simulator for boot status in a time out loop.
    # https://stackoverflow.com/questions/37033405/
    # how-can-i-tell-when-the-ios-simulator-has-booted-to-its-home-screen

    UUID=${1}

    echo "isSimBooted"
    RESULT=$(xcrun simctl spawn ${UUID} launchctl print system | grep com.apple.springboard.services)
    echo "RESULT = "${RESULT}
    counter=$((0))
    while [ "$RESULT" = "" ]; do
        sleep 2
        ((counter++))
        RESULT=$(simctl spawn ${UUID} launchctl print system | grep com.apple.springboard.services)
        echo "waiting on boot event for device ${UUID}, RESULT = "${RESULT}
        if [ $counter -gt 90 ]; then
            echo "device ${UUID} took too long to boot"
            exit 1
        fi
    done
    echo "device ${UUID} booted successfully"
}

function boot()
{
  UUID=${1}
  xcrun simctl boot ${UUID}; open -a Simulator
}

echo "booting"

boot B13D4F22-AA4E-4890-8C2B-3C5B7B6E3678 &
boot 5E2588E9-38B5-48AF-99C5-DEE8A1E6FDA0 &
boot 2C28BD02-18BE-4FC5-94DE-075880E70E60 &
boot 723705CD-B038-44E0-B42E-F1D29A28E85E &

echo "waiting"

isSimBooted B13D4F22-AA4E-4890-8C2B-3C5B7B6E3678
isSimBooted 5E2588E9-38B5-48AF-99C5-DEE8A1E6FDA0
isSimBooted 2C28BD02-18BE-4FC5-94DE-075880E70E60
isSimBooted 723705CD-B038-44E0-B42E-F1D29A28E85E

Проблема в том, что RESULT всегда пустая строка, так что скрипт попадает вцикл опроса загрузки до истечения времени ожидания, даже если симы явно загружены

while [ "$RESULT" = "" ]; do
    sleep 2
    ((counter++))
    RESULT=$(simctl spawn ${UUID} launchctl print system | grep com.apple.springboard.services)
    echo "waiting on boot event for device ${UUID}, RESULT = "${RESULT}
    if [ $counter -gt 90 ]; then
        echo "device ${UUID} took too long to boot"
        exit 1
    fi
done

И затем, если я снова запускаю скрипт , пока загружаются симы , RESULT не пуст исодержит строку com.apple.springboard.services, которая указывает, что симы загружены.

Так что я действительно не уверен, почему. Если я запускаю скрипт до загрузки симов, RESULT - пустая строка, и если я запускаюскрипт после загрузки симов RESULT не пустой.

Ресурсы

Как узнать, что сим загрузился

1 Ответ

0 голосов
/ 24 февраля 2019

Похоже, у тебя это было в основном.В вашем скрипте произошла ошибка внутри цикла while.Вы написали:

RESULT=$(simctl spawn ${UUID} launchctl print system | grep com.apple.springboard.services)

Но вы должны были поставить xcrun перед simctl, как вы делали ранее в сценарии.

RESULT=$(xcrun simctl spawn ${UUID} launchctl print system | grep com.apple.springboard.services)

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

Я рекомендую запустить ваш сценарий в командной строке терминала для устранения неполадок.

...