【问题标题】:With Swift 5 and iOS 12.2+ should I change "Always Embed Swift Standard Libraries" to NO?对于 Swift 5 和 iOS 12.2+,我应该将“始终嵌入 Swift 标准库”更改为否?
【发布时间】:2021-11-18 17:33:43
【问题描述】:

对于我的所有目标,不知何故“始终嵌入 Swift 标准库”是肯定的。可能是由于从 Swift 1 到 5 的历史发展。 我现在使用的是 Xcode 10.2,升级了目标,我的“Swift 语言版本”全部为 5。

出于兴趣,我使用 Xcode 10.2 创建了一个空的新项目,并使用“始终嵌入 Swift 标准库”作为 Debug 和 Release 构建的 NO。

我有一种感觉,即使我保持原样,Apple 还是会剥离标准 Swift 库作为 iOS 12.2+ 精简的一部分?

那么自 swift 5 以来正确的默认设置是什么?将其保持为 YES 或更改为 NO 有什么好处?

[更新] 感谢 Cœur 的评论。看起来确实是 CocoaPods 版本之一做到了。 Project 设置为 NO,但所有使用 CocoadPods 的目标都是 YES。

【问题讨论】:

  • 虽然默认值为 NO,但请注意,如果您使用标准 CocoaPods 集成,某些版本(如 CocoaPods 1.6.1)可能会覆盖 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 默认值并将其设置为 YES。这是由github.com/CocoaPods/CocoaPods/pull/5732制作的
  • 感谢您提供此 YES 值的可能原因!我确实使用早期版本的 CocoaPods。

标签: ios swift xcode


【解决方案1】:

新项目的默认设置是 NO 并且(据我所知)一直都是。我从未将“始终嵌入”设置为“是”,而且我的项目一直运行良好。因此,除非有一些非常好的理由证明这是肯定的,否则它可能不应该是。

请注意,仅当您针对 12.2 SDK 构建并使用 12.2(或更高版本)的机器上时,才会删除这些库。这些库仍然需要在 12.1 或更早的机器上运行。

【讨论】:

  • 这个设置只有在你的应用是纯 Objective-C 并且使用一些 Swift 框架时才会有所不同:在这种情况下,你会希望它是 YES
  • 将此标记为答案。加上来自 Cœur 的评论,当需要“是”时,它可能 100% 被覆盖。
  • @Cœur 我不明白为什么想要使用某些 Swift 框架或库的纯 Objective-C 应用程序需要将其设置为 YES
  • @RaviRaj 因为在过去,由于缺乏 ABI 稳定性,一些 Swift 标准库没有在 iOS 中提供?因此,如果没有这些库,您的 Swift 依赖项将无法工作。不太确定最近的 iOS 版本。
【解决方案2】:

我来到这里是因为我已经将我的开发环境更新为:

XCode 10.2 iOS 12.2 WatchOS 5.1.3

我的应用程序甚至拒绝在手表上启动,向控制台发送一条消息,说找不到库图像。 (使用 Swift4 构建设置)

将“始终嵌入”设置为开启会使手表上的应用安装过程异常缓慢。

我更新了项目以使用 Swift5,现在应用程序至少重新启动了。

【讨论】:

    【解决方案3】:

    仅供参考

    如果您在目标框架上将 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 设置为 true,您可能会收到 ERROR ITMS-90206: Invalid Bundle.

    在我的例子中,我为 App / Unit Tests / UI Tests 的目标设置了 true。

    【讨论】:

      【解决方案4】:

      如果您设置ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESNO,您的应用可能会在使用iOS 12.1 及更低版本打开时崩溃。

      【讨论】:

      • 这似乎不是真的。我的所有目标现在都处于 NO 状态,并且我的所有应用程序都支持 iOS 9 到 14。现在基于 iOS 14.1 SDK 构建,没有任何与 NO 相关的问题。
      • 这可能是真的。如果我确定它,我会更新答案。谢谢
      • 我迟到了..但是试试这个..“otool -L or <.framework file>”。查看是否从 @rpath 引用了 swift 库,例如 developer.apple.com/library/archive/qa/qa1881/_index.html
      猜你喜欢
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 2011-02-27
      • 2015-11-07
      相关资源
      最近更新 更多