Ear*_*rlz 18 assembly xcode ios watchkit tvos
我已经尝试了decypher一段时间了,因为苹果宣布了bitcode,现在各种平台上的内联组装状态如何.
截至目前(Xcode 7.1.1),这是我观察到的:
然而,这些都是可疑的结论,因为我没有在每个市场上都有应用来验证这一点.
我看过一些来自开源库和应用程序的帖子,当包含内联汇编和 bitcode 时,iOS应用程序将被拒绝.我已经看到一些帖子,tvOS类似于watchOS,不会让你使用内联汇编(可能在最新的Xcode中修复?)
是否有一些来自Apple的实体参考或..任何地方我可以使用内联汇编的平台?
在任何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位可执行文件要简单得多.
| 归档时间: |
|
| 查看次数: |
617 次 |
| 最近记录: |