是Xcode';s SDKs/MacOSX.sdk符号链接有文档记录的功能

是Xcode';s SDKs/MacOSX.sdk符号链接有文档记录的功能,xcode,macos,Xcode,Macos,在构建脚本中,我使用/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

在构建脚本中,我使用
/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
我的问题是,这个特性在任何地方都有文档记录吗?我想有一个保证,这将继续工作,我想知道有多远的功能存在

Xcode的
SDKs/MacOSX.sdk
Symlink是一个文档化的特性吗

从技术上讲,它是一个
MacOSX.sdk
symlink,指向新的(未记录的)标准,即简单的
MacOSX.sdk

符号链接本身似乎是一个相对较新的、与旧约定向后兼容的功能。本公约似乎只是事实上的,因此不是有文件记载的特征。从历史上看,在某些情况下,符号链接是偶数

@QuinceyMorris
来自developer.apple.com论坛:

“过去,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
在较新的OSs上,通常会列出未版本的路径,例如:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
。。。或者,如果安装了多个SDK,则可以指定目标SDK:

xcrun --sdk macosx10.14 <command>
xcrun--sdk macosx10.14
请注意,由于XCode安装目标可能会有所不同(以及命名为
XCode Beta.app
),因此强烈建议使用帮助工具查找此目录


但是,使用似乎是新的“标准”,并将完全避免使用版本化的SDK文件夹,前提是它可以满足您的需要。

它在10.12中提供,因此可能至少在事实上(滚动到此答案的底部)…一些间接证据表明,它可能并不总是这样: