如何从 macOS 应用程序包中排除标准但未使用的 libswift*.dylib 并减少包大小

m41*_*exe 6 macos optimization xcode frameworks dylib

当我使用 Xcode 9 构建用 Swift 4 编写的简单菜单栏 cocoa 应用程序时,许多 libswift*.dylib 库被链接/下载/嵌入到 .app 包中,进入 Frameworks 文件夹,如下所示:

库斯威夫特

我只在我的项目中使用import Cocoaand import Foundation,以及一些 @objc 函数作为计时器函数的选择器。我真的不认为我非常简单的菜单栏应用程序需要一些 3D 渲染 Metal 库函数或任何 SwiftOnoneSupport,所以我希望将它们从 .app 包中删除。(相同的库也包含在帮助程序应用程序中,用于在登录时启动功能,这甚至使帮助程序应用程序超过 10 MB)

我本以为 Xcode 实际上会默认复制所需的内容。这里这里提出了一些类似的问题,但我认为这两个问题都没有令人满意的最新答案。

到目前为止我已经尝试过的

我设置ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESNOin Build Settings. 好像没有什么效果。

我设置LINK_WITH_STANDARD_LIBRARIESNOin Build Settings. 它毁了一切,无法构建它,即使我尝试在“链接框架和库”部分下自己添加一些框架(Cocoa、Foundation)。

l'L*_*L'l 3

简而言之,不可能排除 Swift 自动包含在应用程序中的标准库并期望它能够工作。目前,任何使用 Swift 创建的应用程序都捆绑了自己版本的 Swift 动态库。Swift 并不存在于操作系统上,而是存在于每个应用程序包中。这意味着任何使用 Swift 4.1 的应用程序都会捆绑在 Swift 4.1 动态库(包含 4.1 ABI)中,等等。

\n\n

Swift 项目路线图上的一件事是最终实现ABI 稳定性。如果 Swift 成为 ABI 稳定版,Swift 将在操作系统中运行,并且它\xe2\x80\x99s ABI 将与 Swift 的每个版本兼容。

\n