IPA文件结构 – SupportSwift和符号

解压“.ipa”文件时,输出为:包含应用程序的Payload目录。 但是,有时输出是: PayloadSwiftSupportSymbols目录。

  • 生成SwiftSupportSymbols目录的条件是什么?

另外,我注意到SwiftSupport包含.dylib文件,我假设它们已经存在于应用程序中(右键单击 – >显示包内容 – >框架),所以:

  • 应用程序即使不存在也应该正常工作,生成它们的目的是什么?

我找不到任何有用的参考来描述我在找什么。

和Archiver玩后,我find了所有问题的答案。

生成SwiftSupport和Symbols目录的条件是什么?

SwiftSupport文件夹由目标的Build Settings中的ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES选项pipe理

Symbols目录由导出对话框上的checkboxpipe理: 在这里输入图像说明

由于Xcode 7还支持exportOptionsPlist和命令行构build的符号导出选项, 在这里有更多的细节

第二部分更有意思:

应用程序即使不存在也应该正常工作,生成它们的目的是什么?

回答这个问题,我发现在…苹果的文档:

总是将Swift标准库embedded到目标产品中,即使目标不包含任何Swift代码。 例如,如果目标是embedded其他包含Swift的产品,或者如果它是不包含Swift但是正在testing产品的testing目标,则应该启用它。 此设置仅适用于包装产品,不适用于独立的二进制产品。

所以应用程序的.ipa可以包含这个文件夹,甚至不需要直接使用swift

正如s4444的回答给你一些解释给你的答案。 我观察到几点。

Symbols :你需要这个文件夹来象征你的崩溃日志。

SwiftSupport :虽然在Payload和框架中有两个dylib的副本。 但是,当你上传到iTunesConnect,那么你下载的应用程序的大小小于你的ipa文件的大小。 iTunesConnectpipe理您的重复项目(dylib)。

欲了解更多信息,你可以检查这个答案