我注意到Xamarin有可能将Visual Studio连接到iOS构建主机。
这个构建主机是什么,有没有关于其架构的文档? Xamarin.iOS向此构建主机发送了什么代码?
[编辑]
作为个人项目,我希望在Windows中构建iOS构建主机。我知道这可以实现,而且我确信从技术上讲,我拥有重新创建一个所需的工具。我关心的是原始iOS构建主机的架构。我想知道Xamarin和iOS构建主机之间的通信是什么,以及构建流程是什么。这没有记录。
答案 0 :(得分:22)
here的一个很好的解释。
Xamarin.iOS针对特殊子集编译c#源代码 单声道框架。这种单声道框架的缩减版包括 其他库允许访问特定于iOS平台 特征。 Xamarin.iOS编译器smsc采用源代码和 将其编译成中间语言ECMA CIL(常见语言) 中间语言),但它不产生ECMA ABI 与普通的单声道编译器,gmcs或dmsc不同,兼容的二进制文件。 这意味着您要包含在您的任何第三方.Net库中 应用程序需要针对Xamarin.iOS子集重新编译 使用smsc的单声道框架。
一旦将Xamarin.iOS应用程序编译成CIL,它就需要 再次编译成可以在iOS上运行的本机机器代码 设备。这个过程是由SDK工具'mtouch'执行的 结果是可以部署到的应用程序包 iOS模拟器或实际的iOS设备,如iPhone或 ipad公司
由于Apple的限制,iOS内核不允许 程序在运行时生成代码。这种限制很严重 对在虚拟机内运行的软件系统的影响 使用即时编译。即时编译需要 中间代码,例如mono CIL,并在运行时编译它 进入机器代码。此机器代码与设备兼容 在执行时正在运行。
要解决此限制,mtouch工具会编译前面的CIL 时间单声道团队提前描述为AOT的过程 汇编
Xamarin docs的一些引用:
Xamarin iOS for Visual Studio实现了一项惊人的壮举:它让它 您在Windows计算机上创建,构建和调试iOS应用程序 使用Visual Studio IDE。然而,它不能单独做到这一点 - iOS 没有Apple的编译器就无法创建应用程序 没有Apple的证书和代码签名就无法部署 工具。这意味着您的Xamarin iOS for Visual Studio安装 需要连接到联网的Mac OS-X计算机才能执行 这些任务适合你。配置完成后,Xamarin的工具就可以了 过程尽可能无缝。
从Xamarin.iOS 4.0开始,有两个代码生成后端 到Xamarin.iOS。常规的Mono代码生成引擎和一个基于 在LLVM优化编译器上。每个引擎都有其优点和缺点。
通常,在开发过程中,您可能会使用 单声道代码生成引擎,因为它可以让你快速迭代。对于 发布版本和AppStore部署,您将要切换到 LLVM代码生成引擎。
<强>结论强>
因此,正如你所说,没有办法在Windows中制作iOS构建主机。
我猜Xamarin向构建主机发送.Net程序集文件(图片的橙色部分),使用Apple llvm编译成本机ARM代码,其他工具如xcode-build用于签名,链接和构建应用程序。