11

I am trying to automate the process of building an app, running unit tests, and finally running UI tests.

I am building the app via command line (xcodebuild -sdk iphonesimulator6.0) in some directory.

How do I install this app to the iOS simulator via command line (in ~/Library/Application Support/iPhone Simulator//Applications)?

I tried:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app/Contents/MacOS/iPhone\ Simulator -SimulateApplication MyApp.app/MyApp

but this opens a new finder window named "iOS Simulator could not find the application to simulate".

4

2 に答える 2

19

アプリをシミュレーターにインストールするシェルスクリプトを作成しました。

#!/bin/sh
# Pick a uuid for the app (or reuse existing one).
if ! [ -f installApp.uuid ]; then
    uuidgen > installApp.uuid
fi
UUID=$(cat installApp.uuid)
#create supporting folders
TOPDIR="$HOME/Library/Application Support/\
iPhone Simulator/6.0/Applications/$UUID/"
mkdir -p "$TOPDIR"
mkdir -p "$TOPDIR/Documents"
mkdir -p "$TOPDIR/Library"
mkdir -p "$TOPDIR/tmp"
mkdir -p "$TOPDIR/$1.app"

#copy all the app file to the simulators directory
cp -r * "$TOPDIR/$1.app"

このスクリプトを使用してアプリをインストールする方法:

  1. この行を変更します。

    TOPDIR="$HOME/Library/Application Support/iPhone Simulator/6.0/Applications/$UUID/"
    

    使用している iPhone シミュレーターのバージョンを反映するには、つまり6.0/ 7.1.

  2. スクリプトをフォルダーに保存installApp.shします。project_name.app/

  3. ターミナル ウィンドウを開き、installAppプロジェクト ディレクトリから実行します。

    • したがって、project_name.app/内部にプロジェクトがある場合。ターミナルに次のように入力します。

      CD パス/to/project_name.app/

    • 次に./installApp、アプリをシミュレーターにインストールします。

Jeffrey Scofield からアイデアを得ました:コマンド ラインから iOS シミュレーターを実行する


iOS8 と新しい XCode の場合、 Appleはいくつかの点を変更し、コマンド ライン経由でアプリをインストールすることを困難にしました。それはまだ可能です:

  1. まず、アプリ ディレクトリを見つける必要があります (アプリがインストールされていると仮定します)。find ~/Library/Developer/CoreSimulator/Devices -name '*.app'

  2. これにより、カスタム アプリがインストールされているすべてのパスが一覧表示されます。例えば

/34792D41-55A9-40F5-AAC5-16F742F1F3E4/data/Containers/Bundle/Application/4BA2A285-6902-45A8-9445-FC3E46601F51/YourApp.app

  1. 上記の構造を持つ複数の UUID 親ディレクトリが存在します。各 UUID は、異なるデバイスのシミュレーターに対応しています。最上位ディレクトリを開くと、device.plistファイルが見つかります。このファイルには、シミュレートしているデバイスが含まれます。
<dict>
    ...
    <string>34792D41-55A9-40F5-AAC5-16F742F1F3E4</string>
    <string>com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus</string>
    ...
</dict>
  1. iPhone-6-Plus 用のアプリをインストールする場合は、このディレクトリにインストールします。上記のシェル スクリプトを実行して、アプリをインストールします。TOPDIRへのパスを変更します$HOME/Library/Developer/CoreSimulator/Devices/{UUID for device}/data/Containers/Bundle/Applications/$UUID/
于 2012-10-19T20:55:43.313 に答える
13

simctlXcode 6 の時点で、これを達成するためにを使用できるはずです。

1) 利用可能なデバイスのリストを取得します。

xcrun simctl list devices

1a)jqインストール済みであれば、それを使用して、実際に使用可能なデバイスのみを取得できます。

xcrun simctl list devices -j \
| jq -rc '.[] | .[] | .[] | select( .availability | contains( "(available)" ) ) '

1b) iPhone または iPad でさらにフィルタリングすることもできます。

xcrun simctl list devices -j \
| jq -rc '.[] | .[] | .[] | select( .name | contains( "iPhone" ), contains( "iPad" ) ) | select( .availability | contains( "(available)" ) ) '

2) インストール先のデバイスの UDID を取得したら、次の手順を実行します。

xcrun simctl install $DEVICE_UDID /path/to/your/app

2a) または、起動したデバイスにインストールするだけの場合:

xcrun simctl install booted /path/to/your/app

これが本当に便利なのは、すべてのデバイスで同じアプリを実行したい場合です:

1) すべてのシミュレーターをリセット/消去します。

xcrun simctl erase all

2) テストごとに 1 つの Simulator インスタンスを開きます。

open -n /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
(Ignore the 'Booted' error and switch hardware.)

3) インストールする利用可能なデバイスの UDID を取得します。

DEVICES=$( xcrun simctl list devices -j | jq -rc '.[] | .[] | .[] | select( .name | contains( "iPhone" ), contains( "iPad" ) ) | select( .availability | contains( "(available)" ) ) | select( .state == "Booted" ) | .udid ' )

4) アプリをインストールします (適切なシミュレーター SDK 用にビルドする必要があります)。

for device in DEVICES ; do xcrun simctl install $device /path/to/app ; done

5) 便宜上、各デバイスでアプリを起動します。

for device in $DEVICES ; do xcrun simctl launch $device your.product.app.id ; done
于 2016-10-06T17:02:07.467 に答える