Сборка 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но в противном случае код будет построен правильно без дублирования кода.

Другие вопросы по тегам