是否有任何迹象表明哪些Apple平台允许内联汇编?

Ear*_*rlz 18 assembly xcode ios watchkit tvos

我已经尝试了decypher一段时间了,因为苹果宣布了bitcode,现在各种平台上的内联组装状态如何.

截至目前(Xcode 7.1.1),这是我观察到的:

  • OSX - 允许(我希望永远)
  • iOS - 允许,即使使用bitcode(内联汇编放入bitcode)也可能确认
  • watchOS - 不允许(不会编译,导致内联汇编被禁用错误)
  • tvOS - 允许

然而,这些都是可疑的结论,因为我没有在每个市场上都有应用来验证这一点.

我看过一些来自开源库和应用程序的帖子,当包含内联汇编 bitcode 时,iOS应用程序将被拒绝.我已经看到一些帖子,tvOS类似于watchOS,不会让你使用内联汇编(可能在最新的Xcode中修复?)

是否有一些来自Apple的实体参考或..任何地方我可以使用内联汇编的平台?

Air*_*Ltd 8

在任何ARM平台(iOS,watchOS,tvOS)上,如果您提供混合bitcode/asm存档,它只能(见下面的详细信息)编译为与嵌入式asm相同的体系结构.这意味着您也可以提交针对该体系结构的完整二进制应用程序 - 提交bitcode绝对没有优势(因此Apple没有理由允许它).

根据Apple docs,watchOS和tvOS需要bitcode - 因此禁用内联汇编.

注意:对于iOS应用程序,bitcode是默认设置,但是可选.对于watchOS和tvOS应用程序,需要bitcode.如果您提供bitcode,应用程序包中的所有应用程序和框架(项目中的所有目标)都需要包含bitcode.使用iTunes Connect分发应用程序后,可以下载构建的dSYMs文件,如"设备"窗口中的"查看和导入崩溃"中所述.

在X86上,包含bitcode和X86 ASM混合的存档可以编译为64位应用程序.这并不明显,这是一个明智的事情,因为大概是手工制作的汇编程序是性能关键部分 - 但它可以工作.

ARM上也是如此.X86案例有效,因为X86指令集是X86_64的纯子集,这意味着任何X86汇编器都是有效的X86_64汇编器.在ARM上,64位处理器需要以32位状态运行才能执行32位代码.根据ARM文档,您不能在同一应用程序中混合使用32位和64位程序集(请参阅更改执行状态)

...实际上,这意味着您不能拥有混合的32位和64位应用程序,因为它们之间没有直接的调用方式.

这意味着如果你提供bitcode加内联asm的混合物,以ARM架构ARCH为目标,实际上AppStore唯一可以做的事情(至少目前)是编译你的bitcode for ARCH,这给你(比方说)一个完全32位应用程序在64位处理器上运行.重点是什么?首先上传一个没有bitcode的普通32位可执行文件要简单得多.