如何在将IPA部署到设备时传递参数?

5
为了自动化我的应用程序,我需要在将其部署到各种设备并运行自动化时向构建的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发送到IPA的参数。如果我在XCode上构建应用程序并发送参数(编辑方案->运行->在启动时传递的参数),则这些方法可以正常工作。

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


可能是一个已知问题:请参见https://github.com/phonegap/ios-deploy/issues/7 - 无论如何,可以问的人肯定是phonegap工作人员。 - matt
你能在编译时将这些东西打包进去,然后只是为测试生成不同的构建版本吗? - i_am_jorf
你尝试过仅仅读取main函数中的参数吗?NSProcessInfo应该包含相同的参数,但也许存在差异。 - Sulthan
@Sulthan 是的。我尝试过了,argv是空的。 - codeToDeath
@jeffamaphone 不需要。我需要它们只在运行时传递。 - codeToDeath
@matt 非常感谢。我会将此查询转发给PhoneGap开发人员。 - codeToDeath
1个回答

9

我也需要这个,现在我终于找到了解决方案,所以我会把它发布出来,让大家更容易找到。

首先,安装 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

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

idevicedebug run "com.bundle.bundleId" "argument=value" "argument2"

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

idevicedebug -u 22296019555853ad916655420ab7596f7a0111 run "com.bundle.bundleId" "argument=value" "argument2"

在你的项目中,你需要遍历所有参数。
for(NSString *arg in [[NSProcessInfo processInfo] arguments]){}

但是这仅适用于调试版本。如果安装了 ad-hoc 版本,则无法启动应用程序(表现得好像它是从 xcode 编译为 ad-hoc 版本)。如果安装了调试版本,则一切正常。


还有 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,如果测试的是 ad-hoc 版本,则我遇到了问题(应用程序无法启动.. 崩溃等),如果使用的是调试版本,则一切正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接