首页 > 解决方案 > 请解释 Always Embed Swift 标准库的目的

问题描述

我以为我明白Always Embed Swift Standard Libraries在做什么,但现在我很困惑。

我向 App Store 推送了一个MacOS应用程序的更新,一位用户说它在macOS High Sierra. 经过非常快速的调查,似乎缺少 swift 库,并且我的一个框架是用 swift 编写的(主应用程序是ObjC)。我切换Always Embed Swift Standard LibrariesYES,重新上传了一个新版本,世界上的一切都很棒。

我现在已经上传了一个全新的iOS应用程序TestflightiOS 9.3+并记住了这个问题,所以我想测试一下。该Always Embed Swift Standard Libraries设置NO必须是Xcode默认设置。我通过设备下载了该应用程序TestFlightiOS 9.3.2希望它在启动时崩溃,但不,该应用程序运行良好。

应用程序如何macOS在落后 1 个主要版本上运行时崩溃,macOSiOS应用程序可以在落后 4 个主要版本上完美运行iOS

我完全误解了这个设置的作用吗?

我们应该什么时候使用Always Embed Swift Standard Libraries

----- 编辑我刚刚检查了.app内容,它似乎确实有 swift 库,这可以解释为什么 t 没有崩溃iOS 9.3.2。所以还有一个问题。Always Embed Swift Standard Libraries当设置为时,为什么 swift 库会在那里NO

标签: iosswiftmacos

解决方案


我不得不多次阅读文档,以了解发生了什么:

始终嵌入 Swift 标准库 (ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES)

始终将 Swift 标准库嵌入到目标的产品中,即使目标不包含任何 Swift 代码。

这表示

  • 如果您将ALWAYS... 设置为YES,则库肯定会被嵌入。
  • 如果您将其设置为NO,它们将不会总是被嵌入 - 它们可能会或可能不会被嵌入,这取决于构建系统能够决定它是否需要它们(取决于目标版本左右)。

这是一个常见的误解: always的反面不是 never,它只是不是 aways(例如有时左右)。


推荐阅读