XCode7のアプリをiOS7シミュレータで実行(デバッグ不可)

XCode7からiOS7シミュレータが無くなってしまったので、XCode7でビルドしたアプリをXCode6のiOS7シミュレータで実行してみました。動かすだけで、デバッグはできないです。

参考:
[Xcode 7 付属のシミュレータに iOS 7.1 シミュレータを登録する]
(http://qiita.com/msa_uccky/items/f6ed080e5d723d4c0793)
[How can I run the iOS 7.1 Simulator in Xcode 7.0 beta 2?](http://stackoverflow.com/questions/31056634/how-can-i-run-the-ios-7-1-simulator-in-xcode-7-0-beta-2)

##XCode7ビルドのアプリをiOS7シミュレータにインストールする手順(手動)

①XCode7でビルド

②ビルド先出力先からファイルを探す
~/Library/Developer/Xcode/DerivedData/

```:path例
~/Library/Developer/Xcode/DerivedData/sampleApp-aoojucyaxnqzykfazgwztxxebsfq/Build/Products/Debug-iphonesimulator/sampleApp.app
```

もしくはデバッグ中にアプリを検索

```:ターミナルコマンド
ps aux | grep 'CoreSimulator/Devices' | grep '.app'
```

```:実行結果
apo        1823   0.0  0.9  2748692  37004   ??  SXs  12:48PM   0:00.30 ~/Library/Developer/CoreSimulator/Devices/BFEDD1F1-E633-4094-ADD0-181C5071366A/data/Containers/Bundle/Application/6CB2178C-CB30-40EE-A853-EEBE4E5FC3CF/sampleApp.app/sampleApp
```

③XCode6シミュレータ起動
open -a "iOS Simulator"

④メニューのデバイス選択(Hardware→Device)からiOS7シミュレータを選択
32/64bit機種同士なら、機種は違っても問題無い。

⑤XCode6シミュレータのデバイスidを調べる
`xcrun /Applications/Xcode6.app/Contents/Developer/usr/bin/simctl list`
※/Applications/Xcode6.appは適宜変更

```:bootedが起動中デバイス
-- iOS 7.1 --
    iPhone 4s (68EE77B6-CAE3-4E22-9AEC-E1B4989FC67C) (Shutdown)
    iPhone 5 (E1401CC0-EADC-470C-9DCF-EF8047021170) (Shutdown)
    iPhone 5s (4A99BE13-D8BA-4F2C-8A56-B5B6D95A54FB) (Booted)
```

⑥XCode6シミュレータにインストール

```インストールコマンド
xcrun /Applications/Xcode6.app/Contents/Developer/usr/bin/simctl install "4A99BE13-D8BA-4F2C-8A56-B5B6D95A54FB" "~/Library/Developer/Xcode/DerivedData/sampleApp-aoojucyaxnqzykfazgwztxxebsfq/Build/Products/Debug-iphonesimulator/sampleApp.app"
```

⑦シミュレータにアプリがインストールされてるので実行

##シェルスクリプト

手順が面倒なのでシェルスクリプトを書いてみました。

```bat:XCode6Run.sh
#!/bin/bash

# アプリ名とXCodeのPath。適宜変更してください
XCodeAppName='sampleApp'
XCode7Path='/Applications/Xcode.app'
XCode6Path='/Applications/Xcode6.app'

#毎回アプリ名を入れる場合はコメントを外す
#echo "アプリ名を入力してください"
#read XCodeAppName

# XCode7シミュレータ起動中デバイスID取得
XCode7BootDeviceid=$(xcrun $XCode7Path"/Contents/Developer/usr/bin/simctl" list | grep -E 'Booted\)$' | awk -F'(' '{print $2}' | awk -F')' '{print $1}')
XCode7BootDeviceid=$(echo $XCode7BootDeviceid | awk -F' ' '{print $1}')
echo "XCode7 Deviceid:"$XCode7BootDeviceid

# XCode7アプリPath取得
XCode7appFilename=$(ps aux | grep 'CoreSimulator/Devices' | grep '.app' | grep $XCode7BootDeviceid | grep $XCodeAppName | awk -F'/Users' '{print "/Users" $2}' | awk -F'.app/' '{print $1 ".app"}')
echo "AppPath:"$XCode7appFilename

# XCode6シミュレータ起動
open -a "iOS Simulator"
echo "XCode6シミュレータのデバイスを変更して、完了したらエンターキーを押して下さい"
read

# deviceIdを指定してシミュレータ起動も可能
#open -a "iOS Simulator" --args -CurrentDeviceUDID 4A99BE13-D8BA-4F2C-8A56-B5B6D95A54FB

# XCode6シミュレータ起動中デバイスID取得
for i in `seq 5`
do
  XCode6BootDeviceid=$(xcrun $XCode6Path"/Contents/Developer/usr/bin/simctl" list | grep -E 'Booted\)$' | awk -F'(' '{print $2}' | awk -F')' '{print $1}')
  if [ -n "$XCode6BootDeviceid" ]; then break; fi
  sleep 1s
done
echo "XCode6 Deviceid:"$XCode6BootDeviceid

# XCode6シミュレータにインストール
xcrun $XCode6Path"/Contents/Developer/usr/bin/simctl" install $XCode6BootDeviceid $XCode7appFilename
```

①テキストエディタで上記スクリプトを作成して適当な場所に保存
4～6行目のアプリ名とXCodeのPathを適宜変更してください。

②実行権限を変更
`chmod u+x XCode6Run.sh`

③ターミナルで実行(ファイルを保存した階層で)

`./XCode6Run.sh`