#watchos
#watchos
Вопрос:
У меня есть общая среда для моих приложений iOS и watchOS, которая содержит каталог ресурсов с некоторыми названными цветами. Я хотел бы получить доступ к именованным цветам в моем приложении watchOS. В iOS я могу использовать UIColor.init(named name: String, in bundle: Bundle, compatibleWith traitCollection: UITraitCollection)
, чтобы указать системе доступ к имени из переданного пакета.
watchOS также утверждает, что этот инициализатор доступен с watchOS 4; однако автозаполнение Xcode не находит его, при попытке его использования я получаю ошибку сборки, и это немного странно, потому что UITraitCollection
(которая является частью сигнатуры этого метода) все равно не доступна нам в watchOS.
Как я могу получить доступ к ресурсу из каталога ресурсов в моей общей среде?
Ответ №1:
Не уверен, что это лучшее решение, но я добавил свои iOS Assets.xcassets в расширение WatchApp на панели целевого членства, и это решило проблему.
Комментарии:
1. Спасибо — это, возможно, немного лучше, чем просто дублировать каждый ресурс между платформой и приложением watch вручную, но в конечном итоге это все равно дублирует ресурсы. 🙁
Ответ №2:
У меня была такая же проблема, и я отправлю отзыв / радар, но в то же время смог использовать Color
объект SwiftUI, который имеет init(_ name: String, bundle: Bundle? = nil)
значение моста в watchOS, и использовать UIColor(Color)
конструктор для получения эквивалентного UIColor
экземпляра. ie:
UIColor(Color("myColor", bundle: myBundle))
В моем конкретном случае фактический код, который я использую, предоставляется через расширения в UIColor, Color и Bundle, так что я ввел доступ к каталогу активов и bundle, но это, по сути, механизм под капотом.
Ответ №3:
Это взлом, но я создал заголовок objc, чтобы сделать UITraitCollection
определение доступным для watchOS. Это позволило получить доступ к UIColor(named name: String, in bundle: Bundle?, compatibleWith traitCollection: UITraitCollection?)
методу.
Файл заголовка Objc добавлен в платформу:
#if TARGET_OS_WATCH
@import UIKit;
@interface UITraitCollection : NSObject
@end
#endif