ios - 请解释 Always Embed Swift 标准库的目的
问题描述
我以为我明白Always Embed Swift Standard Libraries
在做什么,但现在我很困惑。
我向 App Store 推送了一个MacOS
应用程序的更新,一位用户说它在macOS High Sierra
. 经过非常快速的调查,似乎缺少 swift 库,并且我的一个框架是用 swift 编写的(主应用程序是ObjC
)。我切换Always Embed Swift Standard Libraries
到YES
,重新上传了一个新版本,世界上的一切都很棒。
我现在已经上传了一个全新的iOS
应用程序Testflight
,iOS 9.3+
并记住了这个问题,所以我想测试一下。该Always Embed Swift Standard Libraries
设置NO
必须是Xcode
默认设置。我通过设备下载了该应用程序TestFlight
,iOS 9.3.2
希望它在启动时崩溃,但不,该应用程序运行良好。
应用程序如何macOS
在落后 1 个主要版本上运行时崩溃,macOS
但iOS
应用程序可以在落后 4 个主要版本上完美运行iOS
?
我完全误解了这个设置的作用吗?
我们应该什么时候使用Always Embed Swift Standard Libraries
?
----- 编辑我刚刚检查了.app
内容,它似乎确实有 swift 库,这可以解释为什么 t 没有崩溃iOS 9.3.2
。所以还有一个问题。Always Embed Swift Standard Libraries
当设置为时,为什么 swift 库会在那里NO
?
解决方案
我不得不多次阅读文档,以了解发生了什么:
始终嵌入 Swift 标准库 (ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES)
始终将 Swift 标准库嵌入到目标的产品中,即使目标不包含任何 Swift 代码。
这表示
- 如果您将
ALWAYS
... 设置为YES
,则库肯定会被嵌入。 - 如果您将其设置为
NO
,它们将不会总是被嵌入 - 它们可能会或可能不会被嵌入,这取决于构建系统能够决定它是否需要它们(取决于目标版本左右)。
这是一个常见的误解: always的反面不是 never,它只是不是 aways(例如有时左右)。
推荐阅读
- meteor - Template won't be rendered in Meteor FlowRouter
- javascript - Highcharts:如何在 angularjs 控制器中设置 yAxis 最大值
- angular - API http调用在Angular 5中返回401 Unauthorized with httpClient
- powershell - 自动化变量值上的 GetType() 方法调用导致 Runbook 失败并挂起
- unreal-engine4 - 虚幻引擎 4 -- 停止“边界框中的随机点”以在 X、Y、Z 方向上返回负值
- angular - 对象输入的 PrimeNG 数据表自定义过滤器
- xpath - 如何从使用 xpath 找到的标签中找到原始 html
- spring-boot - 自定义存储库
- c# - 如何指定子元素在全局名称空间中?
- r - 在 for 循环中跳过迭代