【问题标题】:How does Marmalade SDK cross compiler work?Marmalade SDK 交叉编译器如何工作?
【发布时间】:2012-09-10 19:36:51
【问题描述】:

Marmalade SDK 是一个交叉编译器、跨平台框架,允许人们从 Windows 开发 Iphone 应用程序。 Marmalade 有一个交叉编译器,它能够直接从本地 Windows 计算机生成有效的签名 IPA,而无需 Mac 或远程构建服务。我知道一些能够交叉编译应用程序的“开放工具链”,但这些工具链与 Iphone 许可不兼容。有人知道 Marmalade 的交叉编译器是如何工作的吗? marmalade 是如何开发出兼容 Iphone SDK 许可的交叉编译器的?他们使用什么编译器进行交叉编译?他们是否使用了开源编译器并对其进行了定制?它们如何与兼容 Iphone 许可的“便携式操作系统包装器”相关联?

【问题讨论】:

  • 工作是什么意思?你到底想知道什么?
  • 它还使用了跨工具链——我怀疑他们对 Xcode 的代码签名过程进行了设计,并使用它来生成 IPA,前提是开发人员具有有效的签名身份。

标签: iphone marmalade


【解决方案1】:

Marmalade 就像一个虚拟操作系统。

它生成针对 Marmalade ARM 或 x86 的代码 因此,在 Windows 上创建的代码以 Marmalade 为目标,对 iOS 一无所知。

Marmalade 代码不能直接调用操作系统。它只能调用 EDK 扩展。

EDK 扩展为 Marmalade 和一组平台的实现提供接口:iOS、Android、Windows 等

Marmalade 每个平台都有装载机。 Loader 加载与 iOS、Android、Bada 等 ARM 平台相同的 Marmalade 代码

iOS loader 是 Marmalade 团队在 iOS 上的闭源编译对象。

适用于 iOS 和 iOS Loader 的 EDK 扩展在 Mac 上的 XCode 中编译。

【讨论】:

  • 您确定自定义应用程序代码是在核心应用程序之外加载的,而不是直接与其链接的吗?你怎么知道的?
  • 顺便说一句,用 Marmalade 制作的 Windows 应用程序具有 EXE 加载器和 .s86 文件中的代码,该文件由加载器作为 DLL(动态链接库)加载。如何静态或动态链接到代码没有太大区别。
  • Apple 不允许加载第三方动态链接库。因此,Marmalade 部署工具中的所有内容都为 iOS 静态链接。
  • Max 可以和你多聊聊吗?您的回答提供了相当深刻的见解。您基本上是在说:1)IOS代码在xcode中作为主库编译。 2) 有一个 gcc 的 cygwin 端口,用于根据基础编译和链接自定义代码。
  • 1. iOS 代码编译为 EDK 扩展和加载器。装载机是果酱的一部分。您无法创建自己的加载程序。但是您可以创建自己的 EDK 扩展。有 EDK 扩展来访问 In-Apps、Camera 等。 2. 有 GCC。我不确定是 cygwin 或 mingw 还是针对 Marmalade 环境的自己的端口。额外:Marmalade 拥有大多数带有存根函数的 iOS 框架。例如%Marmalade_ROOT%\6.0.6\s3e\deploy\plugins\iphone\sys_libs\System\Library\Frameworks\GLKit.framework\GLKit 这不是来自 Apple 的真实代码,而是在 Windows 上链接应用程序所需的代码
【解决方案2】:

我所知道的是 Marmalade 使用 GCC compiler 将代码编译为 ipa。在部署构建时,Marmalade 使用您的Marmalade certificates 文件夹中的certificateskeysDrMop 解释了使用来自 Marmalade 的密钥和来自 Apple 的 provisioning portal 的 Provision 配置文件生成证书。

Deploy tool 中,所有的 bin 文件、编译的扩展、证书和配置文件都被合并并归档到 ipa 文件中。我认为 Marmalade 尚未公开 ipa 创建技术。

【讨论】:

  • 您没有解决最重要的“链接问题”。
  • 关于“链接”你到底想知道什么?
【解决方案3】:

我对 Marmelade 并不特别熟悉,但在生成 iOS 代码方面并没有太多专有技术。 LLVM/Clang 和 GCC 都是开源编译器环境,因此任何人都可以在几乎任何平台上用 Objective C 编译 ARM 代码。然而,SDK 必须存在才能包含头文件和链接它们的框架。

最后的代码签名过程只是简单的代码签名。因此,只要您准备好 Apple ID 和代码签名密钥,就可以了。

所有这一切的复杂性与您在平台 X 上运行交叉编译器为平台 Y 编译代码一样。复杂性可能是找出应用程序包周围文件的细节,例如权利。 plist,代码签名的确切格式等。最后的 IPA 文件是一个目录的 ZIP 文件,其中包含代码、资源、签名和一些其他信息,例如主 Info.plist。所以从技术上讲,这可以在任何平台下完成。如果它实用或易于维护,那就完全是另一回事了。

当然,其他选项可以是简单地使用虚拟机,然后使用您自己的字节码在此 VM 中运行。如果我没记错的话,开发者许可协议可能会排除这一点,但如果该条款在法律上可执行,那就是另一回事了。我知道一些违反该规则的示例,例如 C64 或 Atari 游戏模拟器(毕竟它们正在模拟这些机器的原始 CPU,因此是虚拟机的完美示例)。

我的建议是,如果您进行任何认真的 IOS 开发,请在 Mac 上进行。其他任何事情都意味着如果遇到麻烦,您将得不到任何支持,并且很难找到正确的答案。因此,您最终会浪费更多的时间来购买 Mac(同时也可以是您的 windows 和 linux 机器)。

【讨论】:

  • PS 谈到链接,您的交叉编译器工具当然需要能够创建 Mach-O 二进制文件,而不是 Linux 下通常的 ELF 二进制文件。让 GCC 产生 Mach-O 是一个相当困难的事情。 LLVM/Clang 是那里更好的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 2022-11-29
  • 2019-05-04
相关资源
最近更新 更多