падение dyld при включении стабильности модуля для двоичного фреймворка Swift - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь включить стабильность модуля для моего двоичного фреймворка Swift.

Моя настройка выглядит следующим образом:

  • Xcode 11.1
  • Включено "Сборка библиотек дляОпция "Распространение"

Я проверил, что выводимая структура .frame включает в себя необходимые файлы .swiftinterface в рамках, поэтому теоретически я считаю, что она должна работать.

Однако, когда япопытка использовать эту платформу из любого приложения, dyld падает при запуске с __abort_with_payload.

Я пробовал это в следующих случаях:

  • Необработанный каркас, скомпилированный Xcode (Формат .framework)
  • lipo толстый каркас (формат .framework)
  • Новый формат XCFramework (.xcframework)

Во всех случаях, которые я тестировалвключение этой опции, по-видимому, приводит к сбою приложения при запуске.

Единственное, что приходит на ум, - это то, что мой фреймворк сам по себе зависит от других сторонних (недвоичных) фреймворков, которыекомпилируются в via Cocoapods.

В лекции WWDC '19 о бинарных фреймворках нам говорят, что «все ваши зависимости должны быть созданы с помощью параметра сборки Build Libraries for Distribution, чтобы получитьчто бинарная совместимость гарантирует, что мы говорили "- однако это не дает понять, возможно ли построить только сам бинарный фреймворк со стабильностью модуля и иметь зависимости, построенные из исходного кода.

Я также попытался включить«Сборка библиотек для распространения» в настройках сборки подпроекта «Pods», но это по-прежнему не решает проблему.

Есть предложения?

1 Ответ

2 голосов
/ 30 октября 2019

Я разработал, как это исправить.

Как и предполагалось (но не очень ясно) в докладе WWDC, кажется, что все библиотечные зависимости должны иметь "Сборку библиотек дляНастройка сборки "Distribution" включена.

Cocoapods

Cocoapods в настоящее время не имеет встроенной поддержки для этого (или XCFrameworks, в этом отношении), однако это может временноможно взломать, добавив следующее в Podfile вашего приложения:

post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
          config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
      end
    end
end

Это обеспечит построение всех зависимостей для распространения.

Carthage

Carthage didn также не поддерживает стабильность модуля. Вам нужно передать пользовательские настройки сборки XCode, чтобы при запуске carthage build ваши платформы создавались с включенной «Сборкой библиотек для распространения»:

echo 'BUILD_LIBRARY_FOR_DISTRIBUTION=YES'>/tmp/config.xcconfig; XCODE_XCCONFIG_FILE=/tmp/config.xcconfig carthage build; rm /tmp/config.xcconfig
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...