한 번에 띄운 6개의 Simulator
https://lh3.googleusercontent.com/pAQSC19Y0iasz3Bqx3ESN9JwtW6mGKVUklr1TGox_omclZdpnuEIgSe8cMv3stN2DP6s5bcE_K8884loB7iW24qFaUKU132EjTCfnndGYbluEacdd2KtFR54GEB4bDpQjbplC3YL
print
디버깅 로그를 확인할 수 없고, 메인으로 쉘에 등록한 시뮬레이터 1개만 디버깅 로그를 확인할 수 있다.Products → Scheme → Edit Scheme를 누른다.
좌측 탭에서 Build → Pre-action을 누른다.
좌측 하단에 +
버튼을 누르고 New Run Script Action을 누른다.
아래 그림과 같이 사용할 Build 종류를 선택하고, 아래 주어진 스크립트 코드를 추가한다.
custom_sim=`xcrun simctl list | grep '<SIMULATOR_NAME>' | awk -F'[()]' '{print $2}'`
if [ -z "${custom_sim}" ]; then
xcrun simctl create Custom\\ Simulators com.apple.CoreSimulator.SimDeviceType.iPhone-X `xcrun simctl list runtimes | grep iOS | tail -1 | sed -e 's/^.*) - //p' | sort -u`
fi
grep '<SIMULATOR_NAME>'
부분에서 <SIMULATOR_NAME>이 멀티 시뮬레이터에 사용될 이름이다.
위의 스크립트에서는 iPhoneX를 기본 simulator로 등록했기 때문에 기본으로 등록한 iPhoneX에서만 debuging message가 표시됩니다.(print 메시지)
터미널에 instruments -s devices
를 입력하면 다음과 같은 포맷으로 simulator목록이 출력된다.
Phone Model(iOS version) [IDENTIFIER] (Simulator)
SimulatorsList.txt
에 입력해주면 된다.SIMULATOR_LAUNCH_SHELL.sh
파일로 만들어서 Build Phases에서 Run Script에 등록해야한다.
<YOUR_PROJECT_NAME>
: 프로젝트 이름<YOUR_APP_NAME>
: 앱 이름<YOUR_PROJECT_BUNDLE>
: bundle 이름xcrun simctl shutdown all
path=$(find ~/Library/Developer/Xcode/DerivedData/<YOUR_PROJECT_NAME>-*/Build/Products/Debug-iphonesimulator -name "<YOUR_APP_NAME>.app" | head -n 1)
echo "${path}"
filename=SimulatorsList.txt
grep -v '^#' $filename | while read -r line
do
xcrun simctl boot "$line" # Boot the simulator with identifier hold by $line var
xcrun simctl install "$line" "$path" # Install the .app file located at location hold by $path var at booted simulator with identifier hold by $line var
xcrun simctl launch "$line" <YOUR_PROJECT_BUNDLE> # Launch .app using its bundle at simulator with identifier hold by $line var
done
Build Phases에 등록하는 과정
Project → 현재 프로젝트 TARGETS → BuildPhases → +
버튼
New Run Script Phase
script 코드 입력 → grep '<SIMULATOR_NAME>'
에서 위에서 설정한 시뮬레이터 이름과 통일 → <SIMULATOR_LAUNCH_SHELL.sh>
에서 위에서 설정한 simulator 실행 쉘 이름 등록.
custom_sim=`xcrun simctl list | grep '<SIMULATOR_NAME>' | awk -F'[()]' '{print $2}'`
if [ ! -z "${custom_sim}" ] && [ "${TARGET_DEVICE_IDENTIFIER}" = "${custom_sim}" ]; then
/bin/sh <SIMULATOR_LAUNCH_SHELL.sh>
fi