Невозможно сослаться на пакет XCFramework

В настоящее время я разрабатываю 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, но это не решило проблему.

Если у кого-то есть идеи, как решить эту проблему, буду очень признателен!


73
1

Ответ:

Решено

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