В настоящее время я разрабатываю SDK в формате XCFramework, но столкнулся с проблемами при отображении изображений. Репозиторий примеров можно найти здесь.
Целью Example является SDK, включающей папку Assets.xcassets. Внутри Assets.xcassets есть изображение с именем neko.png, которое я пытаюсь отобразить в MyImage.swift.
Вот соответствующий фрагмент кода из MyImage.swift:
public var body: some View {
HStack {
Image("neko")
.resizable()
.frame(width: 100, height: 100)
Image("neko", bundle: Bundle(identifier: "com.example.Example"))
.resizable()
.frame(width: 100, height: 100)
Image("neko", bundle: Bundle(for: Dummy.self))
.resizable()
.frame(width: 100, height: 100)
}
}
Цель ExampleApp — это приложение iOS, имитирующее интеграцию SDK. Я связал Example.framework через «Фреймворки, библиотеки и встроенный контент». В ContentView.swift я вызываю MyImage():
var body: some View {
VStack {
MyImage()
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
}
.padding()
}
Однако при запуске ExampleApp возникает следующая ошибка, и изображение не отображается:
No image named 'neko' found in asset catalog for /Users/xxxxx/Library/Developer/CoreSimulator/Devices/xxxxx/data/Containers/Bundle/Application/xxxxx/ExampleApp.app
Добавление neko.png к ExampleAppAssets.xcassets решает проблему.
Кажется, я неправильно передаю bundle при вызове Image() в MyImage.swift. Кроме того, когда я запускаю print(Bundle.allFrameworks) внутри ExampleApp, Example.framework не включается.
Я также попробовал добавить .xcframework, созданный с использованием xcodebuild, в «Фреймворки, библиотеки и встроенный контент» вместо Example.framework, но это не решило проблему.
Если у кого-то есть идеи, как решить эту проблему, буду очень признателен!





Ваш фреймворк представляет собой статическую библиотеку, статические библиотеки не имеют собственных пакетов. Установите настройки сборки->Связывание общих->Тип Mach-O с динамической библиотекой.