我试图自动化构建应用程序,运行单元测试,最后运行UI测试的过程。
我通过建设一些目录命令行(xcodebuild联编-sdk iphonesimulator6.0)的应用程序。
如何安装这个程序,通过命令行的iOS模拟器(在〜/库/应用程序支持/ iPhone模拟器//应用程序)?
我试过了:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app/Contents/MacOS/iPhone\ Simulator -SimulateApplication MyApp.app/MyApp
但是这将打开一个名为“iPhone模拟器找不到模拟应用”新Finder窗口。
我做了一个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模拟器的版本,您使用的是IE 6.0
/ 7.1
。
将脚本保存为installApp.sh
在project_name.app/
文件夹中。
打开一个终端窗口,执行installApp
从项目目录。
- 所以,如果我有我的
project_name.app/
里面的项目。 键入终端: CD路径/到/ project_name.app /
- 然后
./installApp
安装应用到模拟器。
我从杰弗里·斯科菲尔德的理念是: 在命令行中运行的iOS模拟器
对于iOS8上和新的XCode苹果改变了一些东西,因此很难通过命令行安装应用程序。 它仍然是可能做到:
首先,你需要找到应用程序目录(假设你已经安装的应用程序): find ~/Library/Developer/CoreSimulator/Devices -name '*.app'
这将列出所有已安装的自定义应用程序的路径。 例如
/34792D41-55A9-40F5-AAC5-16F742F1F3E4/data/Containers/Bundle/Application/4BA2A285-6902-45A8-9445-FC3E46601F51/YourApp.app
- 将有与上述结构中的多个UUID的父目录。 每个UUID对应于一个不同的设备模拟器。 打开顶级目录,你会发现一个
device.plist
文件。 此文件将包含它模拟设备:
<dict> ... <string>34792D41-55A9-40F5-AAC5-16F742F1F3E4</string> <string>com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus</string> ... </dict>
- 如果你想安装的应用程序的iPhone-6-PLUS这是你会做它在目录中。运行上面的外壳脚本来安装应用程序。 更改
TOPDIR
路径$HOME/Library/Developer/CoreSimulator/Devices/{UUID for device}/data/Containers/Bundle/Applications/$UUID/
由于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)对于每个测试打开一个模拟器实例:
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