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

Xcode 如何排除标准但未使用的libswift*.dylib';从macOS应用程序捆绑包中删除并减少捆绑包大小,xcode,macos,optimization,frameworks,dylib,Xcode,Macos,Optimization,Frameworks,Dylib,当我使用Xcode 9构建用Swift 4编写的简单menubar cocoa应用程序时,许多libswift*.dylib库被链接/下载/嵌入到.app bundle中的Frameworks文件夹中,如下所示: 在我的项目中,我只使用了importcocoa和importfoundation,还有一些@objc函数作为计时器函数的选择器。我真的不认为我的非常简单的菜单栏应用程序需要一些3D渲染金属库函数或任何SwiftOnoneSupport,因此我希望将它们从.app捆绑包中删除。(同样的

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

在我的项目中,我只使用了
importcocoa
importfoundation
,还有一些@objc函数作为计时器函数的选择器。我真的不认为我的非常简单的菜单栏应用程序需要一些3D渲染金属库函数或任何SwiftOnoneSupport,因此我希望将它们从.app捆绑包中删除。(同样的库也包含在helper应用程序中,以便在登录时启动,这使得helper应用程序的容量超过10 MB)

我原以为Xcode只会复制默认情况下需要的东西。有人问了一些类似的问题,但我不认为这两个问题都有令人满意的最新答案

到目前为止我所尝试的

我在
构建设置
中将
始终嵌入\u SWIFT\u标准\u库
设置为
。这似乎没有任何效果


我在
构建设置
中将
与标准库的链接设置为
。它毁掉了一切,无法构建它,尽管我试图在“链接框架和库”部分下自己添加一些框架(Cocoa,Foundation)。

简单地说,不可能排除Swift在应用程序中自动包含的标准库,并期望它能正常工作。目前,任何使用Swift创建的应用程序都会捆绑自己的Swift动态库版本。Swift并不存在于操作系统上,而是存在于每个应用程序包中。这意味着,任何使用Swift 4.1的应用程序(例如)都将捆绑在Swift 4.1动态库(包含4.1 ABI)中,以此类推


Swift项目路线图上的一件事是最终实现。如果Swift变得ABI稳定,Swift将在操作系统中生存,并且其ABI将与Swift的每个版本兼容

请注意,
libswifftmetal
只是Swift对操作系统附带的底层框架的覆盖,因此应该是相当轻量级的。对我来说,构建一个示例Cocoa应用程序时,嵌入式框架达到11.1MB,其中9.7MB是libSwiftCore+libSwiftFoundation。所以,除非再加上几个MBs是个问题,否则我不会担心。虽然一旦Swift在Swift 5中达到ABI稳定性,情况会好得多,因为那时stdlib可以作为操作系统的一部分发布。(虽然为什么在不使用底层框架的情况下会包含像
libswifftmetal
这样的覆盖层,我不确定)感谢您的澄清和infos@Hamish,我可能就这样吧