我正在新的 macOS 12 Monterey beta 上运行使用 C++ 构建的应用程序。该应用程序是使用相当旧的 macOS SDK 10.9 构建的。
问题:
有一个获取平台版本的代码,我System/Library/CoreServices/SystemVersion.plist
使用 Core-Foundation API 解析文件的内容。应用程序没有将 macOS 版本返回为 12.0,而是将其读取为 10.16。代码没有缺陷,因为相同的代码已用于识别许多旧 macOS 版本。
可能的原因: macOS 11.0 bigSur 版本期间发生了一些变化,其中有另一个文件名 SystemVersionCompat.plist 与 SystemVersion.plist 位于同一位置。我的应用程序正在阅读前者而不是后来的 plist,并且由于使用了较旧的 SDK,因此在一些网络搜索中了解了它。
内容 System/Library/CoreServices/SystemVersion.plist
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>ProductBuildVersion</key>
<string>21A5304g</string>
<key>ProductCopyright</key>
<string>1983-2021 Apple Inc.</string>
<key>ProductName</key>
<string>macOS</string>
<key>ProductUserVisibleVersion</key>
<string>12.0</string>
<key>ProductVersion</key>
<string>12.0</string>
<key>iOSSupportVersion</key>
<string>15.0</string>
</dict>
</plist>
内容 System/Library/CoreServices/SystemVersionCompat.plist
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>ProductBuildVersion</key>
<string>21A5304g</string>
<key>ProductCopyright</key>
<string>1983-2021 Apple Inc.</string>
<key>ProductName</key>
<string>Mac OS X</string>
<key>ProductUserVisibleVersion</key>
<string>10.16</string>
<key>ProductVersion</key>
<string>10.16</string>
<key>iOSSupportVersion</key>
<string>15.0</string>
</dict>
</plist>
有没有其他方便的方法可以在不更新 SDK 的情况下获取平台版本?