在设备上部署 IPA 时如何将参数传递给它?

cod*_*ath 2 xcode ios ipa ios-ui-automation

为了自动化我的应用程序,我需要将一些参数传递给构建的 IPA,因为我将它部署在各种设备上并运行我的自动化。从各种线程我想我可以使用“ios-deploy”(https://github.com/phonegap/ios-deploy),一个从fruitstrap项目分叉出来的项目,通过我的命令行成功部署一个IPA到设备终端。尽管 ios-deploy 文档表明它可以选择在使用-a或启动应用程序时提供传递给应用程序的参数--args,但它对我来说并不完全有效。相反,我不确定如何在应用程序中读取这些参数。我曾尝试从[[NSProcessInfo processInfo] arguments]NSUserDefaults 方法(http://perspx.com/archives/parsing-command-line-arguments-nsuserdefaults) 并且也没有阅读我通过ios-deploy -a. 如果我在 XCode 上构建应用程序并发送参数(编辑方案->运行->参数->启动时传递的参数),这些方法工作正常。

使用过 ios-deploy 的人可以提供一个如何使用该-a选项的示例吗?或者有没有其他方法可以在 CLI 上向设备启动 IPA(在传递参数后)。

Gun*_*nds 6

我也需要这个,所以,因为我终于找到了解决方案,所以我会发布它,以便每个人都更容易找到。

首先,安装http://macappstore.org/ideviceinstaller/

If link is broken - in Terminal:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null
brew install ideviceinstaller
Run Code Online (Sandbox Code Playgroud)

然后你可以运行一个已经安装的应用程序:

idevicedebug run "com.bundle.bundleId" "argument=value" "argument2"
Run Code Online (Sandbox Code Playgroud)

如果您连接了多个设备,请为目标设备提供设备 UDID:

idevicedebug -u 22296019555853ad916655420ab7596f7a0111 run "com.bundle.bundleId" "argument=value" "argument2"
Run Code Online (Sandbox Code Playgroud)

在您的项目中,您将检查所有参数

for(NSString *arg in [[NSProcessInfo processInfo] arguments]){}
Run Code Online (Sandbox Code Playgroud)

但这适用于调试版本。如果安装了临时版本 - 无法真正启动应用程序(就像它已经从 xcode 编译为临时版本一样)。如果安装了调试版本 - 那么一切正常。


然后是ios-deploy。

https://github.com/phonegap/ios-deploy

事实证明 - 他们不打算使用它来启动应用程序。每次都需要“安装”。( https://github.com/phonegap/ios-deploy/issues/236 )

ios-deploy --bundle "/Users/user_name/Desktop/Payload/Device.app" --debug "parameter1,parameter2,parameter_key3=parameter_value3"

(参数在一个字符串“all_parameters”中提供......如何将它们分开 - 由您决定。)

当您遇到参数字符串时,您会想到一种巧妙的方法来处理它(如果有多个参数,则将其分开,等等。)

但是 - 在 ios-deploy 情况下,如果测试了临时版本,如果使用调试版本,我会遇到问题(应用程序无法启动..崩溃等) - 一切都很好。