#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, и это сработало нормально.