如何从 macOS 应用程序包中排除标准但未使用的 libswift*.dylib 并减小包大小
How to exclude standard but unused libswift*.dylib's from macOS app bundle and reduce bundle size
当我用 Swift 4 和 Xcode 9 构建我的简单菜单栏 cocoa 应用程序时,很多 libswift*.dylib 库都 linked/downloaded/embedded 到 .app捆绑到 Frameworks 文件夹中,如下所示:
我只在我的项目中使用 import Cocoa
和 import Foundation
,并且一些 @objc 函数用作计时器函数的选择器。我真的不认为我非常简单的菜单栏应用程序需要一些 3D 渲染金属库函数或任何 SwiftOnoneSupport,所以我希望它们 从 .app 包中删除 . (相同的库也包含在帮助应用程序中以在登录时启动功能,这使得帮助应用程序甚至超过 10 MB)
我原以为 Xcode 实际上会复制默认情况下需要的任何内容。有人问了一些类似的问题 here and here,但我认为这两个问题都没有令人满意的最新答案。
到目前为止我尝试了什么
我在Build Settings
中将ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
设置为NO
。好像没什么效果。
我在Build Settings
中将LINK_WITH_STANDARD_LIBRARIES
设置为NO
。它破坏了一切并且无法构建它,即使我尝试在链接框架和库部分下自己添加一些框架(Cocoa,基础)。
简而言之,无法排除 Swift 自动包含在应用中的标准库并期望它能够正常工作。目前,使用 Swift 创建的任何应用程序都捆绑了自己版本的 Swift 动态库。 Swift 不存在于 OS 上,而是存在于每个应用程序包中。这意味着任何使用 Swift 4.1 的应用程序都捆绑在 Swift 4.1 动态库(包含 4.1 ABI)中,等等。
Swift 项目路线图上的其中一件事是最终 ABI Stability。如果 Swift 成为 ABI 稳定版,Swift 将存在于 OS 中,并且它的 ABI 将与 Swift 的每个版本兼容。
当我用 Swift 4 和 Xcode 9 构建我的简单菜单栏 cocoa 应用程序时,很多 libswift*.dylib 库都 linked/downloaded/embedded 到 .app捆绑到 Frameworks 文件夹中,如下所示:
我只在我的项目中使用 import Cocoa
和 import Foundation
,并且一些 @objc 函数用作计时器函数的选择器。我真的不认为我非常简单的菜单栏应用程序需要一些 3D 渲染金属库函数或任何 SwiftOnoneSupport,所以我希望它们 从 .app 包中删除 . (相同的库也包含在帮助应用程序中以在登录时启动功能,这使得帮助应用程序甚至超过 10 MB)
我原以为 Xcode 实际上会复制默认情况下需要的任何内容。有人问了一些类似的问题 here and here,但我认为这两个问题都没有令人满意的最新答案。
到目前为止我尝试了什么
我在Build Settings
中将ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
设置为NO
。好像没什么效果。
我在Build Settings
中将LINK_WITH_STANDARD_LIBRARIES
设置为NO
。它破坏了一切并且无法构建它,即使我尝试在链接框架和库部分下自己添加一些框架(Cocoa,基础)。
简而言之,无法排除 Swift 自动包含在应用中的标准库并期望它能够正常工作。目前,使用 Swift 创建的任何应用程序都捆绑了自己版本的 Swift 动态库。 Swift 不存在于 OS 上,而是存在于每个应用程序包中。这意味着任何使用 Swift 4.1 的应用程序都捆绑在 Swift 4.1 动态库(包含 4.1 ABI)中,等等。
Swift 项目路线图上的其中一件事是最终 ABI Stability。如果 Swift 成为 ABI 稳定版,Swift 将存在于 OS 中,并且它的 ABI 将与 Swift 的每个版本兼容。