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 符号链接是文档化的功能吗的主要内容,如果未能解决你的问题,请参考以下文章
错误:XCode 中 UIButton 的“[”标记 ....... 之前的预期说明符限定符列表
如何在 Xcode Interface Builder 中显示占位符背景?
Xcode 的 Interface Builder 中的外部对象占位符丢失