我正在尝试自动化构建应用程序,运行单元测试以及最终运行UI测试的过程。
我正在某些目录中通过命令行(xcodebuild -sdk iphonesimulator6.0)构建应用程序。
如何通过命令行(在〜/ Library / Application Support / iPhone模拟器//应用程序中)将此应用程序安装到iOS模拟器?
我试过了:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app/Contents/MacOS/iPhone\ Simulator -SimulateApplication MyApp.app/MyApp
但这会打开一个名为“iOS模拟器无法找到要模拟的应用程序”的新查找器窗口。
答案 0 :(得分:19)
我制作了一个shell脚本,将应用程序安装到模拟器上。
#!/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"
如何使用此脚本安装应用程序:
更改此行:
TOPDIR="$HOME/Library/Application Support/iPhone Simulator/6.0/Applications/$UUID/"
反映您正在使用的iPhone模拟器版本,即6.0
/ 7.1
。
将脚本installApp.sh
保存在project_name.app/
文件夹中。
打开终端窗口并从项目目录运行installApp
。
project_name.app/
里面有一个项目。输入终端:
cd path / to / project_name.app /
./installApp
将应用安装到模拟器。
我从杰弗里·斯科菲尔德那里得到了这个想法:Run iOS Simulator from the Command Line
对于 iOS8和新的XCode ,Apple更改了一些内容,并且难以通过命令行安装应用程序。仍然可以这样做:
首先,您需要找到应用目录(假设您已安装应用):find ~/Library/Developer/CoreSimulator/Devices -name '*.app'
这将列出安装了自定义应用的所有路径。例如。
/34792D41-55A9-40F5-AAC5-16F742F1F3E4/data/Containers/Bundle/Application/4BA2A285-6902-45A8-9445-FC3E46601F51/YourApp.app
device.plist
文件。该文件将包含它正在模拟的设备:<dict> ... <string>34792D41-55A9-40F5-AAC5-16F742F1F3E4</string> <string>com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus</string> ... </dict>
TOPDIR
路径更改为$HOME/Library/Developer/CoreSimulator/Devices/{UUID for device}/data/Containers/Bundle/Applications/$UUID/
答案 1 :(得分:7)
从Xcode 6开始,您应该可以使用simctl
来完成此任务。
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)为每个测试打开一个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