使用 mtouch 捆绑 Xamarin.iOS 应用
iPhone 应用程序以应用程序捆绑包的形式发货。 这些是扩展名为 .app
的目录,其中包含 iPhone 用于了解应用程序的代码、数据、配置文件和清单。
将 .NET 可执行文件转变为应用程序的过程主要由 mtouch
命令驱动,它是一种集成将应用程序转变为捆绑包所需的多个步骤的工具。 此工具用于在模拟器中启动应用程序并将软件部署到实际的 iPhone 或 iPod Touch设备。
详细说明
检查 mtouch(1) 手册页和 mtouch 工具的所有可能用法。
安装
在 Mac 上,mtouch
与 Xamarin.iOS 捆绑在一起。 可在以下目录中找到它:
/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/bin
若要使 mtouch
便于使用,请将它的父目录添加到系统的 PATH
环境变量。
例如,若要在 Bash 中执行此操作,可将以下行添加到 ~/.bash_profile 文件末尾:
export PATH=$PATH:/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/bin
警告
若要使用 mtouch
,请不要依赖于是否存在 /Developer/MonoTouch/usr/bin,一个指向 /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/bin 的符号链接。 该符号链接的存在只是为了与未在 /Library/Frameworks/... 中安装的旧 MonoTouch 版本保持兼容性,它可能会在未来版本中消失。
生成
mtouch
命令可以用三种不同的方式编译代码:
- 针对模拟器测试进行编译。
- 针对设备部署进行编译。
- 将可执行文件部署到设备。
针对模拟器进行构建
开始时,最常用的方案是在模拟器中试用应用程序,因此,请使用 mtouch -sim
将代码编译为模拟器程序包。 具体方式如下:
$ mtouch -sim Hello.app hello.exe
针对设备进行构建
若要针对设备构建软件,请使用 mtouch -dev
选项构建应用程序,此外,你需要提供用于对应用程序进行签名的证书的名称。 下面演示了如何针对设备构建应用程序:
$ mtouch -dev -c "iPhone Developer: Miguel de Icaza" foo.exe
在这种特定情况下,我们将使用“iPhone Developer: Miguel de Icaza”证书为应用程序签名。 此步骤非常重要,否则,物理设备将拒绝加载应用程序。
运行应用程序
在模拟器上启动
拥有应用程序捆绑包后,在模拟器上启动会非常简单:
$ mtouch --sdkroot /Applications/Xcode.app -launchsim Hello.app
如果未设置 --sdkroot
标志,它会默认为 xcode-select 路径,并导致以下警告:
例如:warning MT0061: No Xcode.app specified (using --sdkroot), using the system Xcode as reported by 'xcode-select --print-path': /Applications/Xcode.app/Contents/Developer
上面的命令行将生成如下输出:
Launching application
Application launched
PID: 98460
Press enter to terminate the application
强烈建议你同时保留标准输出和标准错误文件,以帮助进行调试。 Console.WriteLine
的输出会转到 stdout
,且 Console.Error.WriteLine
中的输出和任意其他运行时错误消息会转到 stderr
。
为此,可以使用 --stdout
和 --stderr
标志:
../../tools/mtouch/mtouch --launchsim=Hello.app --stdout=output --stderr=error
如果应用程序失败,你可以查看输出和错误来诊断问题。
部署到设备
若要部署设备,你需要如 Apple 的管理设备文档中所述预配设备。 一旦正确预配设备后,你可以使用 mtouch 命令将已编译的“.app”部署到设备中。 可使用此命令执行此操作:
$ mtouch —sdkroot /Applications/Xcode.app -installdev=MyApp.app
如果未设置 --sdkroot
标志,它会默认为 xcode-select 路径,并导致以下警告:
例如:warning MT0061: No Xcode.app specified (using --sdkroot), using the system Xcode as reported by 'xcode-select --print-path': /Applications/Xcode.app/Contents/Developer
通常由 Visual Studio for Mac 执行这些步骤。
参考
请参阅 mtouch(1) 手册页获取有关其他命令行选项的详细信息。