存储此次编译的符号表(debug symbols
),用来符号化解析崩溃堆栈。
- Products
存储此次编译生成的的 App 包(.app
)。
要注意的是这个包虽然包括了 App 运行需要的可执行文件以及其它资源,但是和最终用户下载的版本会有所不同。后续的 export
操作会对其进行进一步处理。
- SCMBlueprint
如果 Xcode 打开了版本管理(Preferences -> Source Control -> Enable Source Control
),SCMBlueprint
文件夹会存储此次编译的版本控制信息,包括使用的 git 版本、仓库、分支等。
如果未来想要回溯此次编译的源码版本,可以从这个 SCMBlueprint
中找到必要的信息。
- SwiftSupport
如果在 Target 的Build Settings
中打开了ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
,此次编译使用的 Swift 版本对应的标准库文件(.dylib
)会被放到这个文件夹中。
发布 App 时,这些标准库也会被复制到 ipa bundle 中。
不过现在 Swift 的 ABI 已经稳定了,Xcode 10.2 及以后的版本打出来的包,在 iOS 12.2 及以后的系统的 app bundle 中不用再自带链接库了,节省了一定的体积。
了解 ipa 文件
.ipa(iOS App Store Package
) 文件是最终被安装到 iPhone 上的应用格式,包含了运行 App 所必需的的签名、二进制包、资源等内容。
在 Organizer 中无论用什么方式 export
应用的安装包,最终生成的都是一个 .ipa
文件。
.ipa
本身是压缩包文件,如果要查看 ipa 中的内容,可以右键查看包内容,观察解压以后的包,主要包含以下内容:
App 的签名信息会被放到 _CodeSignature
文件夹中。
- info.plist
存储 App 主要信息的 plist 文件也会被一并打包到 ipa 中。 - entitlements
entitlement 直译成中文是“权益”、“权限”的意思。
当你在 Capabilities
中开启一些特定的权限时,Xcode 会自动给你生成一个.entitlements
文件,在这个文件中通过 xml 的格式将这些授权记录下来。
App 瘦身
要对 App 安装包体积进行压缩,首先要知道安装包占用的多少空间,这些空间由哪些部分组成,然后再进行针对性的优化。
查看最终用户安装包大小
实际上在 Xcode 本地 archive
出来的 app 包或者 export
出来的 ipa 包和最终用户下载的版本会有所不同(通常体积会大很多)。因为苹果可能会对 App 进行重新编译(如果上传了 BitCode
)&#