c# - mtouch --argument 命令行选项有什么作用?

标签 c# .net ios xamarin.ios command-line-arguments

简短版:

我注意到最近更新的 mtouch(我目前是 5.2.5)有一些新的命令行选项 - 特别是 --launchdev,这让我很高兴我非常喜欢,还有 --argument,我不知道如何使用它。 --argument 有什么作用?我可以在启动时使用它向应用程序传递数据吗?如果是这样,这些数据去了,我如何获得它?


对我在做什么的更详细的解释:

我有一个用于我们的 MonoTouch 库的自动化测试环境。为了让它真正自动化,我需要能够 1) 在设备上自动启动它,以及 2) 为它提供首先启动它的构建服务器的 IP 地址,以便它知道要向谁启动完成后与他交谈。

目前,我发现将数据分流到 iOS 应用程序的唯一方法是通过自定义 URL 方案。巧合的是,这也是我必须在设备上自动启动应用程序的唯一方式,而不是简单地安装它。因此,我的构建脚本将构建测试应用程序,安装它,使用测试应用程序所需的数据调用自定义 URL 方案编写 Xcode 项目脚本,并背诵适当的 AppleScript 咒语以在设备上启动 Xcode 项目。 Xcode 项目将启动,并立即使用我的测试应用程序的自定义 URL 方案和所需数据调用 openUrl(...),触发测试应用程序的启动,该应用程序将运行其测试,报告结果并关闭。

如果通过 --launchdev--argument 的某种组合,我会非常高兴,我可以消除上面的大部分疯狂 - 特别是AppleScript,非常脆弱且不可靠。

到目前为止,我还没有想出如何在代码中使用--argument 的值。 launchOptions 字典在有或没有它的情况下都是 null,传递给 Main 的 args 消失在 UIApplicationMain 的内部并且永远听不到再次,据我所知——这无关紧要,因为它们总是空的。那么,我可以使用--argument来传递数据吗?如果是这样,我如何在应用程序中检索数据?

最佳答案

这有点复杂而且没有正确记录,但这里是:

--argument=ARG 将在启动时(在设备上或模拟器中)将 ARG 作为命令行选项传递给应用程序。 MonoTouch 为应用程序创建 native main 方法,这是处理 ARG 的方法。该原生 main 方法会将任何参数传递给托管 Main 方法,如下所示:-app-arg:MANAGED_ARG

将它们放在一起,例如将 -ip=3.14.15.9 传递给您在设备上的应用程序,您将像这样执行 mtouch:

mtouch --argument=-app-arg:-ip=3.14.15.9 --launchdev com.yourcompany.yourapp 

请注意,原生 main 方法对格式有点挑剔,它是一个破折号(-app-arg,而不是 --app-arg),和一个MANAGED_ARG 之前的冒号(不是 =)。

关于c# - mtouch --argument 命令行选项有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9523505/

相关文章:

c# - 在非异步方法中调用异步方法

c# - Size 属性的大小无效,为 0

c# - 如何使用 SimpleInjector 将条件装饰器应用于命令处理程序?

iOS/XCode 自动布局问题。更简单的方法?

ios - 为什么我的 If-Else block 没有按应有的方式工作?

javascript - 将字符串从 .NET 传递到 JavaScript 变量

c# - 使用 LinQ 合并 2 个不同类型的列表

c# - 为什么这个 Unity XML 配置没有解析类型?

c# - 通用方法和转换 : how to define that Type 1 is convertible to Type 2

ios - 从 ios 流式传输实时视频