3

我遇到了一个问题,Xcode 13b2(iOS 15 SDK)更改了AVCapturePhoto.previewCGImageRepresentation(). 在 Xcode 12.5.1 (iOS 14 SDK) 中,此方法返回Unmanged<CGImage>. 在 13b2 - 13b4 中,它返回CGImage?.

我需要在两个 Xcode 版本下编译我的代码,因为 Xcode 13 有其他问题,并且不能用于将构建提交到 App Store。我以为我写这个很聪明,但它不会编译,因为它不是条件代码编译检查,而是运行时检查:

extension AVCapturePhoto {
    func stupidOSChangePreviewCGImageRepresentation() -> CGImage? {
        if #available(iOS 15, *) {
            return self.previewCGImageRepresentation()
        } else {
            return self.previewCGImageRepresentation()?.takeUnretainedValue()
        }
    }
}

另一种可能性可能是创建用户定义的 Xcode 设置,但我认为这不能基于 Xcode 或 SDK 版本有条件地完成。

可能会有一些不安全的指针表演可以做......</p>

还有其他想法吗?

4

1 回答 1

4

您可以检查 swift 编译器版本。在撰写本文时,维基百科上提供了详尽的列表。

https://en.wikipedia.org/wiki/Xcode#Toolchain_versions

extension AVCapturePhoto {
    func stupidOSChangePreviewCGImageRepresentation() -> CGImage? {
    #if compiler(>=5.5)
        return self.previewCGImageRepresentation()
    #else
        return self.previewCGImageRepresentation()?.takeUnretainedValue()
    #endif
    }
}
于 2021-08-17T20:26:06.853 回答