使用 C++17 构建 ios 应用程序?

Using C++17 to build ios apps?

最新的 XCode clang 支持 c++17,但我不确定旧的 iOS 设备(例如 iPhone5、iPhone6)是否会支持有 libc++ 库来支持它。有没有办法确定我是否可以使用 C++17 构建支持所有支持的 iOS 版本的 ios 应用程序?

参考: iPhone5,仍然支持 iOS12 https://support.apple.com/guide/iphone/supported-models-iphe3fa5df43/12.0/ios/12.0

在某种程度上,答案是肯定的。如果您 back-deploying 使用较旧的操作系统,那么您将可以使用 C++17 中的一些东西,而其他一些东西您将无法使用。只需尝试使用它,如果它在您的部署目标上不可用,您将收到编译器错误。这需要告诉编译器您的部署目标,这通常使用 -mios-version-min=<version>(或其他平台类似)完成。

具体来说,系统库 (libc++.dylib) 中实现的功能 X 将不受支持 libc++.dylib 的第一个版本之前的操作系统支持对于 X。任何不需要任何类型的库支持的东西,即所有在 headers 中实现的东西都可以工作。

我们在 libc++ headers 中维护可用性标记,以便在您使用会破坏部署目标的内容时进行标记。这是通过在依赖于共享库中某些内容的声明上使用 __attribute__((availability(ios,strict,introduced=<VERSION>))) 等属性来完成的。编译器会完成剩下的工作——如果您尝试使用尚未在您指定的部署目标中“引入”的声明,它会让您知道。

编辑: 我在上面使用 iOS 作为示例,但这适用于 macOS、watchOS 和所有其他 Apple 平台。