2

プロジェクトで行っている機能テストを自動化しようとしています。このために、Jenkins を使用し、post-receive git フックを使用してテスト タスクを実行します。ジョブは適切に呼び出されますが、テストを実行する前に、アプリの初回起動をテストするためにシミュレーターを消去する必要があります。私は次のことを行います:

#!/bin/bash --login

# simulator we want
sim="iPhone 6"

# close the iOS simulator if open
echo "Trying to close iOS Simulator"
osascript -e 'tell app "iOS Simulator" to quit'

# find all booted devices
booted=( $(xcrun simctl list | sed -n 's/.*(\(.*\)) (Booted)/\1/p') )
if [ ${#booted[@]} != 0 ]; then
    echo 'Found the following booted devices:'
    for device in ${booted[@]}
    do
        echo $device
    done
else
    echo 'There are no booted devices, skipping'
fi

# shutdown all of them to be able to erase them
for device in ${booted[@]}
do
    echo "Trying to shutdown $device"
    xcrun simctl shutdown $device
    echo "Done"
done

# sanity check, all devices should be shutdown
booted=( $(xcrun simctl list | sed -n 's/.*(\(.*\)) (Booted)/\1/p') )
if [ ${#booted[@]} != 0 ]; then
    echo 'Even though we shut down all the devices, some devices are still booted:'
    for device in ${booted[@]}
    do
        echo $device
    done
    exit 1
fi  

# erase the device so we can test index page and tutorial
allDevices=( $(xcrun simctl list | sed -En 's/.* \((.*)\) \((Shutdown)\)/\1/p') )
for device in ${allDevices[@]}
do
    echo "Erasing device $device"
    xcrun simctl erase $device
    echo
done

# sanity check, all devices should be shutdown
booted=( $(xcrun simctl list | sed -n 's/.*(\(.*\)) (Booted)/\1/p') )
if [ ${#booted[@]} != 0 ]; then
    echo 'Even though we shut down all the devices, some devices are still booted:'
    for device in ${booted[@]}
    do
        echo $device
    done
    exit 1
fi

echo device list:
echo $(xcrun simctl list)

dev=( $(xcrun simctl list | sed -En 's/'"$sim"' \((.*)\) \((Shutdown)\)/\1/p') )
echo Booting the device $dev
xcrun simctl boot $dev

# clean is not good enough, need to remove DerivedData contents manually
rm -rf ~/Library/Developer/Xcode/DerivedData

/usr/local/bin/xctool -workspace MyApp.xcworkspace -scheme MyApp_QA2 clean

xcodebuild -workspace MyApp.xcworkspace -scheme MyApp_QA2 -destination 'platform=iOS Simulator,name=iPhone 6,OS=8.1' test | xcpretty -c -r html

これを実行すると、次のようになります。

起動したデバイスを起動できません

これらの行は、起動を担当します。

dev=( $(xcrun simctl list | sed -En 's/'"$sim"' \((.*)\) \((Shutdown)\)/\1/p') )
echo Booting the device $dev
xcrun simctl boot $dev

そのため、コメントしますが、ビルドは次のように失敗します。

2015-03-10 09:56:13.036 xcodebuild[84840:4008451] [MT] iPhoneSimulator: 「com.apple.instruments.deviceservice.lockdown」に接続できません (エラー ドメイン = com.apple.CoreSimulator.SimError コード = 146 "現在の状態で検索できません: シャットダウン" UserInfo=0x7fbcb2f00af0 {NSLocalizedDescription=現在の状態で検索できません: シャットダウン})

Xcode と simctl は、どちらが正しい sim の起動に責任を持つべきかについて合意できないように見えます。何か案は?

4

2 に答える 2