脚本来安装应用程序在iPhone模拟器(Script to install app in iOS S

2019-08-01 15:57发布

我试图自动化构建应用程序,运行单元测试,最后运行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窗口。

Answer 1:

我做了一个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"

如何使用这个脚本来安装应用程序:

  1. 改变这一行:

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

    反映iPhone模拟器的版本,您使用的是IE 6.0 / 7.1

  2. 将脚本保存为installApp.shproject_name.app/文件夹中。

  3. 打开一个终端窗口,执行installApp从项目目录。

    • 所以,如果我有我的project_name.app/里面的项目。 键入终端:

      CD路径/到/ project_name.app /

    • 然后./installApp安装应用到模拟器。

我从杰弗里·斯科菲尔德的理念是: 在命令行中运行的iOS模拟器


对于iOS8上和新的XCode苹果改变了一些东西,因此很难通过命令行安装应用程序。 它仍然是可能做到:

  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/


Answer 2:

由于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


文章来源: Script to install app in iOS Simulator