В моем скрипте я хочу, чтобы эти симуляторы 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
не пустой.
Ресурсы
Как узнать, что сим загрузился