在Xcode 14和Xcode 15上构建适用于iOS和visionOS的Swift,无需警告

woobm2wo  于 2023-08-07  发布在  iOS
关注(0)|答案(1)|浏览(221)

我们希望找到一种方法来编写iOS专用的Swift代码块,该代码块支持多个Apple平台,并且在Xcode 14和15上运行时没有警告。
由于#if os(iOS)visionOS的求值结果为true,因此需要测试#if os(iOS) && !os(visionOS)才能在Xcode 15上构建仅限iOS的代码,这一事实使问题变得复杂。但是,这会在Xcode 14上生成警告,因为无法识别visionOS
#if os(iOS) && (swift(<5.9) || !os(visionOS))也会在Xcode 14上产生警告。
我们发现以下代码在这两种情况下运行时都不会发出警告:

#if swift(>=5.9)
      #if os(iOS) && !os(visionOS)
        code block
      #endif
    #else 
      #if os(iOS)
        code block
      #endif
    #endif

字符串
但这是丑陋的,因为代码块需要复制。还有更好的办法吗?

gev0vcfq

gev0vcfq1#

在Xcode 14.3和Xcode 15下,以下代码将允许您在没有任何警告的情况下编译:

#if swift(>=5.9) && os(visionOS)
    // visionOS code, if any, under Xcode 15
#elseif os(iOS)
    // iOS code under Xcode 14/15
#endif

字符串
当然,您可以根据需要添加其他#elseif os(xxx)(例如macOS)。
在Xcode 14.2下,你会得到一个关于未知visionOS的警告,但是代码会正确地构建,没有任何代码重复。

相关问题