Xcode 的 SDKs/MacOSX.sdk 符号链接是文档化的功能吗

Posted

技术标签:

【中文标题】Xcode 的 SDKs/MacOSX.sdk 符号链接是文档化的功能吗【英文标题】:Is Xcode's SDKs/MacOSX.sdk Symlink a Documented Feature 【发布时间】:2020-12-21 17:21:17 【问题描述】:

在构建脚本中,我使用/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk 查找最新的 MacOSX SDK。 MacOSX.sdk 似乎包含最新版本的 MacOSX.sdk,而 MacOSX#.#.sdk 是 MacOSX.sdk 的符号链接(我知道它似乎倒退了)。

例如ls -al

Oct 21 10:43 MacOSX.sdk
Nov  9 14:57 MacOSX11.0.sdk -> MacOSX.sdk

我的问题是,此功能是否记录在任何地方?我想保证这将继续工作,并且我想知道该功能存在多长时间。

【问题讨论】:

它在 10.12 中可用,所以可能至少是事实上的(滚动到这个答案的底部)。 ***.com/a/56446570/3196753。一些间接证据表明它可能并不总是这样:apple.stackexchange.com/a/225579/147537 【参考方案1】:

Xcode 的 SDKs/MacOSX.sdk Symlink 是文档化功能吗

从技术上讲,它是一个 MacOSX<version>.sdk 符号链接,它指向简单的 MacOSX.sdk 的新(未记录)标准。

符号链接本身似乎是一个相对较新的、向后兼容旧约定的功能。这个约定似乎是事实上的,因此不是一个记录的特性。从历史上看——在某些情况下——符号链接甚至是bugged and left out by the installer。

@QuinceyMorris 来自 developer.apple.com 论坛summarizes this well:

“过去,Xcode 附带多个 SDK 版本,您可以使用您正在使用的 Xcode 版本附带的任何 SDK。目前,Xcode 仅附带最新的 SDK。

您不再需要多个 SDK 来针对不同版本的 macOS。相反,您可以在源代码中编写可用性测试,以根据运行应用的 macOS 版本选择不同的代码路径。”

例如:

解压Xcode 2.3的MacOSX10.3.9.pkg,里面没有MacOSX.sdk,而是MacOSX10.3.9.sdk。 解压Xcode 4.0.2的MacOSX10.6.sdk,里面没有MacOSX.sdk,而是MacOSX10.6.sdk

大多数构建系统将利用像 xcrun 这样的工具来定位它,例如:

xcrun --show-sdk-path

在较新的操作系统上通常会列出未版本化的路径,例如:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk

...或者如果安装了多个,您可以指定目标SDK:

xcrun --sdk macosx10.14 <command>

请注意,由于 XCode 安装目标可能不同(以及命名为 XCode Beta.app,因此强烈建议使用帮助工具来定位此目录。

但是,使用newer MACOSX_DEPLOYMENT_TARGET technique 似乎是新的“标准”,并且将完全避免版本化的 SDK 文件夹,假设它可以满足您的需求。

【讨论】:

以上是关于Xcode 的 SDKs/MacOSX.sdk 符号链接是文档化的功能吗的主要内容,如果未能解决你的问题,请参考以下文章

Blender .dae 移除 xcode 中的修饰符

错误:XCode 中 UIButton 的“[”标记 ....... 之前的预期说明符限定符列表

如何在 Xcode Interface Builder 中显示占位符背景?

Xcode 的 Interface Builder 中的外部对象占位符丢失

Xcode - 由于解决 info.plist 和权利中的变量/占位符的奇怪问题而无法验证存档

无法获取 extensionBundleID 的描述符