Не удается отправить приложение iOS в iTunes при использовании пакета SPM

Когда я пытаюсь отправить приложение iOS, которое включает пакет SPM, который использует новый двоичный файл target отправка не выполняется из-за следующих двух ошибок:

Invalid Swift Support. The file MyApp.app/Frameworks/libHello.a doesn’t have the correct file type for this location. Ensure you’re using the correct file, rebuild your app using the current public (GM) version of Xcode, and resubmit it.

Invalid Bundle Structure - The binary file 'MyApp.app/Frameworks/libHello.a' is not permitted. Your app can’t contain standalone executables or libraries, other than a valid CFBundleExecutable of supported bundles. Refer to the Bundle Programming Guide at https://developer.apple.com/go/?id=bundle-structure for information on the iOS app bundle structure.

Я считаю, что это связано с SPM, поскольку когда я вручную перетаскиваю пакет Hello.xcframework в проект, он позволяет мне успешно отправить.

Попытки сделать другие вещи, такие как изменение настроек сборки Xcode, настройка package.swift и использование липо, чтобы убедиться, что срезы архитектуры действительны, ни к чему не приводят.

Я смотрел фреймворк встраивания на этапах сборки, он не был включен только в этап фреймворка ссылок. Я заметил одну вещь: когда я архивировал приложение, статическая библиотека libHello.a находилась в папке фреймворка приложения, что странно, поскольку ее там не должно быть, поскольку они интегрированы с двоичным файлом приложения. Когда я удалю этот файл, я могу продолжить отправку приложения без каких-либо проблем. Но я не думаю, что это временное решение было бы идеальным в долгосрочной перспективе.

Чтобы упростить задачу, я создал простую статическую библиотеку с одним классом и методом. Затем я использую Xcode, архивирую полученную статическую библиотеку в XCFramework, используя xcodebuild -create-xcframework. См. Github Repo: https://github.com/shams-ahmed/Hello

Действия по воспроизведению:

  • Создать новый проект Xcode
  • Добавьте пакет Hello SPM с помощью интерфейса SPM с URL: https://github.com/shams-ahmed/Hello
  • Архивировать проект
  • Проверить приложение
  • Вы можете отменить выбор всех опций
  • Сбой с указанным выше сообщением об ошибке

Что мне нужно сделать, чтобы SPM работал со статической библиотекой? Теперь предполагается, что это будет поддерживаться в Xcode 12 и Swift 5.3.

Информация:

  • Xcode 12.0
  • Swift 5.3
  • Использование нового проекта Xcode
  • P.S должен использовать статическую библиотеку

person Shams Ahmed    schedule 29.09.2020    source источник


Ответы (1)


Похоже, это невозможно со статическими библиотеками (файлы .a), потому что .binaryTarget с xcframework связан с динамическими фреймворками, а XCode просто копирует зависимый от платформы объект из xcframework в папку Frameworks вашего .app вместо ссылки на двоичный файл вашего приложения.

Журнал сборки XCode:

PBXCp .../Hello.xcframework/ios-x86_64-simulator/libHello.a .../Test.app/Frameworks/libHello.a 

Есть два решения:

  1. Скомпилируйте исходники библиотеки как динамические фреймворки и сделайте из них xcframework.
  2. Если у вас есть только файлы .a, вы можете создавать оболочки динамических фреймворков, которые связывают статические библиотеки и предоставляют к ним доступ через API, а затем создают xcframework.
person iUrii    schedule 29.09.2020
comment
Хотелось бы, чтобы это было хорошо задокументировано, в интерфейсе командной строки разрешено состояние -library. Спасибо, что ответили на вопросы. - person Shams Ahmed; 02.10.2020