Сборка Swift для iOS и VisionOS на Xcode 14 и 15 без предупреждений.
Мы хотели бы найти способ писать блоки кода Swift только для iOS в коде, который поддерживает несколько платформ Apple и работает без предупреждений как в Xcode 14, так и в 15.
Это осложняется тем, что#if os(iOS)
оценивается как истина, поэтому тест#if os(iOS) && !os(visionOS)
необходим для сборки кода только для iOS в Xcode 15. Однако при этом генерируется предупреждение в 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
Но это некрасиво, так как блок кода нужно дублировать. Есть ли способ лучше?
1 ответ
В 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
но в противном случае код будет построен правильно без дублирования кода.