WidgetKit: изображение из Assets.xcassets не загружается (errno = 2), но прямой доступ к файлу работает.IOS

Программируем под IOS
Ответить
Anonymous
 WidgetKit: изображение из Assets.xcassets не загружается (errno = 2), но прямой доступ к файлу работает.

Сообщение Anonymous »

Я разрабатываю виджет для iOS, используя SwiftUI и WidgetKit. Я пытаюсь загрузить простое фоновое изображение в виджет, но сталкиваюсь с постоянной проблемой, когда изображения внутри каталога активов (

Код: Выделить всё

Assets.xcassets
) не найдены, что приводит к черному фону.
Настройка:
  • У меня есть специальный Assets.xcassets в папке расширения виджета.
  • Набор изображений () проверено Целевое членство для расширения виджета.
  • Я пробовал очистить папку сборки (

    Код: Выделить всё

    Shift+Cmd+K
    ) и многократное удаление производных данных.
Проблема: Когда я пытаюсь загрузить изображение, используя стандартный подход SwiftUI или даже принудительно используя Bundle, изображение не появляется.
Попытка 1 (Стандартная):
Swift

Код: Выделить всё

Image("bg1")
.resizable()
// Result: Shows a placeholder/empty space.
Попытка 2 (явный пакет): Я пытался принудительно загрузить его из пакета расширения с помощью UIImage:
Swift

Код: Выделить всё

private class BundleFinder {} // Dummy class to find bundle

func getWidgetImage() -> UIImage {
let bundle = Bundle(for: BundleFinder.self)
if let image = UIImage(named: "bg1", in: bundle, compatibleWith: nil) {
return image
}
print("Image not found in bundle")
return UIImage()
}
Результат: Консоль выдает следующую ошибку: fopen error for file: errno = 2 (Нет такого файла или каталога)
Обходной путь (что на самом деле сработало): Единственный способ отобразить изображение - это удалив его из каталога ресурсов и перетащив файл .jpg непосредственно в навигатор проекта. (в папку расширения), проверив «Копировать элементы при необходимости» и «Целевое членство».
Затем загрузка по необработанному пути работает отлично:
Swift

Код: Выделить всё

let bundle = Bundle(for: BundleFinder.self)
if let path = bundle.path(forResource: "bg1", ofType: "jpg"),
let image = UIImage(contentsOfFile: path) {
return image // This works!
}
Мой вопрос: Почему Assets.xcassets не может предоставить изображение расширению виджета, несмотря на правильное целевое членство, что приводит к ошибке errno = 2? Есть ли известная ошибка в Xcode или WidgetKit, касающаяся каталогов активов в расширениях, или существует ли определенная настройка сборки, необходимая для обеспечения доступности каталога активов?

Подробнее здесь: https://stackoverflow.com/questions/798 ... irect-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»