【问题标题】:What Xamarin is actually doing when using an iOS build host?使用 iOS 构建主机时 Xamarin 实际在做什么?
【发布时间】:2014-04-11 23:53:41
【问题描述】:

我注意到 Xamarin 可以将 Visual Studio 连接到 iOS 构建主机。

这个构建主机是什么,有没有关于它的架构的文档? Xamarin.iOS 向此生成主机发送什么代码?

[编辑]

作为个人项目,我想在 Windows 中制作 iOS 构建主机。我知道这是可以实现的,而且我确信从技术上讲,我拥有重新创建一个所需的所有工具。我担心的是原始 iOS 构建主机的架构。我想知道 Xamarin 和 iOS 构建主机之间的通信是什么,以及构建流程是什么。这没有记录在案。

【问题讨论】:

  • Xamarin 文档已经提供了一个很好的示例,说明如何通过 Visual Studio 设置 iOS 构建主机:docs.xamarin.com/guides/ios/getting_started/…
  • 如果您阅读第一句话,我说的是我在 Windows 中拥有的一个 Objective-c 工具链。然后我问这个构建主机的架构是否存在一些文档。然后我问关于在 Windows 中创建一个构建主机。 :)
  • 拥有一个 Obj-C 编译器是没有用的 - 您需要的是一个可以为 iOS 架构编译的 C# 编译器,以及适用于 iOS 的支持 SDK,Apple 没有在 Windows 上提供这些 SDK。
  • 那么当 Xamarin.iOS 连接到 iOS 构建主机时,它是为 iOS 架构编译的 C# 编译器吗? Xamarin 通过网络向构建主机发送什么?
  • 这是一个非常笼统的评论。我的问题这么笼统吗?也许我应该问:“使用 iOS 构建主机时,Xamarin 做了什么?”

标签: ios build xamarin


【解决方案1】:

here 的精彩解释。

Xamarin.iOS 针对特定的子集编译 c# 源代码 单声道框架。这个精简版的单声道框架包括 允许访问特定于 iOS 平台的其他库 特征。 Xamarin.iOS 编译器 smsc 采用源代码和 将其编译成中间语言,ECMA CIL(通用 中间语言),但是它不会产生 ECMA ABI 与普通的单声道编译器、gmcs 或 dmsc 不同的兼容二进制文件。 这意味着您想要包含在您的任何第 3 方 .Net 库中 需要针对 Xamarin.iOS 子集重新编译应用程序 使用 smsc 的单声道框架。

一旦 Xamarin.iOS 应用程序被编译成 CIL,它需要 再次编译成可以在 iOS 上运行的本机机器代码 设备。此过程由 SDK 工具“mtouch”执行, 结果是可以部署到的应用程序包 iOS 模拟器或实际的 iOS 设备,例如 iPhone 或 iPad。

由于 Apple 的限制,iOS 内核将不允许 在运行时生成代码的程序。这个限制很严重 对在虚拟机内运行的软件系统的影响 使用即时编译。即时编译需要 中间代码,例如 mono CIL 并在运行时编译它 变成机器码。此机器代码与其设备兼容 在执行时正在运行。

要解决这个限制,mtouch 工具会提前编译 CIL 的时间。 Mono 团队提前将其描述为 AOT 的过程 编译。

来自 Xamarin 文档的一些引用:

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 优化编译器上。每个引擎都有其优点和缺点。

通常,在开发过程中,您可能会使用 Mono 代码生成引擎,因为它可以让您快速迭代。为了 发布构建和 AppStore 部署,您将需要切换到 LLVM 代码生成引擎。

结论

因此,正如您所说,没有办法在 Windows 中制作 iOS 构建主机。

我猜 Xamarin 将 .Net 程序集文件(图片的橙色部分)发送到构建主机,以使用 Apple llvm 和其他工具(如 xcode-build)编译成本机 ARM 代码,以签名、链接和构建您的应用程序.

【讨论】:

  • 非常感谢这个架构。这是一个很好的介绍。它仍然只回答了我的一半担忧,正如引述中所说:“你不能使用 Windows,因为你需要 Mac。”这不是解释,因为它不是技术性的。我已经有一个工具链和一切可以使用商业产品从 Windows 签署我的应用程序。所以我对这句话有点怀疑。
  • 它将这个流程描述为“无缝”,这就是问题所在。我想在 xamarin 和我的工具链之间构建这个“无缝”的桥梁。
  • OS applications cannot be created without Apple’s compiler, and they cannot be deployed without Apple’s certificates and code-signing tools. 实际上,你可以在没有 Apple compile 的情况下编译 IOS 应用程序,mono touch 仅对 ARMV6 支持此功能,所以我想很多强制执行以保持编译与即将推出的架构兼容。我不知道详细信息,但可能很多打包过程是由 xcode-build 完成的(登录、编译 xib 文件等)。所以理论上你可以在 Windows 上部署,如果你反向引擎 xcode-build 工具。
  • 如果它使用xcode编译器是否可以打开ARC?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
相关资源
最近更新 更多