Не удается найти SwiftUI или объединить типы при создании пакета Swift для «Любого устройства iOS»

#ios #swift #swiftui #combine #swift-package-manager

#iOS #swift #swiftui #объединить #swift-package-manager

Вопрос:

У меня есть пакет Swift, который поддерживает iOS 10, macOS 10.13, tvOS 10 и watchOS 2. Я хочу, чтобы этот пакет предоставлял некоторые функции SwiftUI, которые можно было бы использовать, когда ссылочный модуль может импортировать SwiftUI. Например, приведение моего типа пакета ( Persisted ) в соответствие с протоколом SwiftUI DynamicProperty :

 #if canImport(SwiftUI)
import SwiftUI

@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
extension Persisted: DynamicProperty { }

#endif
 

С учетом вышеизложенного проект больше не создается при сборке для «Любого устройства iOS (arm64)» — я получаю ошибку компилятора:

Не удается найти тип ‘DynamicProperty’ в области видимости

Когда я меняю цель сборки на любой симулятор iPhone, он строится нормально. Он также работает нормально при сборке для «любого Mac», «Любого устройства tvOS» и т. Д. Что мне нужно сделать, чтобы создать пакет для любой iOS?

Ответ №1:

Согласно этому сообщению reddit, это связано с доступностью SwiftUI на определенных архитектурах ARM.

Следующее условие решило проблему для меня:

 #if canImport(SwiftUI) amp;amp; (!os(iOS) || arch(arm64))
 

Комментарии:

1. Когда я это сделал, я столкнулся с проблемой, из-за которой предварительные просмотры больше не работают, поскольку они создаются для iOS с архитектурой x64 (на компьютерах, отличных от Apple Silicon). Вместо этого я переключил его на !arch(arm) , исключая 32-разрядный ARM, и это сработало нормально.