Модуль, зібраний із Swift 5.1, не може бути імпортований компілятором Swift 5.1.2


91

У мене є рамка (в даному випадку це RxSwift), яку я компілював за допомогою Xcode 11.0 в традиційний RxSwift.frameworkпакет стилів

Це імпорт штрафу в Xcode 11.0, а також 11.1 ніколи не було з ним ніяких проблем

Сьогодні після випуску Xcode 11.2 від Apple, я оновив, і мені з'явилася помилка:

Модуль, зібраний із Swift 5.1, не може бути імпортований компілятором Swift 5.1.2

Я звик швидко виконувати невідповідність компілятора, і я знаю, що можу просто перекомпілювати RxSwift за допомогою Xcode 11.2 і продовжувати роботу, але головна особливість Swift 5.1 - стабільність модуля .

У мене було враження, що тепер, коли ми маємо стабільність модулів, рамки не потрібно буде продовжувати перекомпілювати з кожним новим випуском Xcode, але це явно не так.

Якщо хтось може пояснити, що тут відбувається, я дуже вдячний. Чи виявляється помилка Xcode 11.2? чи мені якось потрібно сказати, що я хотів стабільності модуля, коли я спочатку компілювався з Xcode 11.0?



Для мене Toolchain з більш старою версією швидкої працював: stackoverflow.com/a/43142147/5846135
Zeero0

Відповіді:


107

Гаразд, виявляється, якщо ви дивитесь відео WWDC, вони пояснюють це: https://developer.apple.com/videos/play/wwdc2019/416/

Потрібно встановити параметр « Збір бібліотек для розповсюдження» на « Так» у налаштуваннях побудови рамки, інакше швидкий компілятор не генерує необхідних .swiftinterfaceфайлів, які є ключовим для майбутніх компіляторів, здатних завантажити вашу стару бібліотеку.

Це закінчується у вашому файлі project.pbxproj у вигляді:

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

Після встановлення цього прапора рамку, яку я скомпілював за допомогою Xcode 11.0 (swift 5.1), можна було використовувати Xcode 11.2 (swift 5.1.2), і все, здається, працює правильно.

Сподіваємось, це питання / відповідь послужить корисним посиланням для всіх, хто не переглянув усі відеозаписи WWDC

Якщо помилка все-таки зберігається, перейдіть до продукту > Очистити папку "Збірка" та створіть знову.


1
Дивовижно! Тепер сподіваємось, що всі розробники фреймворків сторонніх розробників виявлять це - ха-ха :)
Mihai Fratu

25
Це не допомагає в моєму випадку. Я встановив це "ТАК", але я все одно отримую помилку. Будь-які ідеї?
davidOhara

3
Я працюю з Карфагеном та 10 рамками ... ish. Чи carthageдостатньо розумний, щоб забрати це з мого файлу .pbxproj , або, як сказано вище @MihaiFratu, чи всі сторонні розробники фреймворків повинні встановлювати це самостійно у своїх рамкових проектах?
nteissler

9
@davidOhara в моєму випадку це стосувалося цієї відомої проблеми в Xcode 11.2: Якщо модуль побудований з BUILD_LIBRARIES_FOR_DISTRIBUTION і містить загальнодоступний тип з тим же ім'ям, що і сам модуль, клієнти не зможуть імпортувати модуль. (19481048) (FB5863238) у примітках до випуску Xcode 11.2: developer.apple.com/documentation/xcode_release_notes/…
Річард

2
@davidOhara На жаль, я не знайшов вирішення проблеми. Для нас перейменування класу також неможливо, оскільки це основний клас нашої системи і може порушити код клієнта. Якщо я будую фреймворк за допомогою Xcode 11.2, тоді він компілюється на Xcode 11.2, але він не буде компілюватися на 11.1 або раніше. Сьогоднішній випуск Xcode 11.2.1 GM не вирішив проблему. Ось квиток на швидкому трекері випуску, якщо ви хочете стежити за ним: bugs.swift.org/browse/SR-11704 До нього також додається радар.
Річард

2

У мене була така ж помилка при імпорті сторонніх бібліотек. Я зафіксував це за допомогою інструментальних ланцюгів у Xcode та взявши реліз 19 вересня 2019 року звідси https://swift.org/download/#releases . Після цього мені довелося повторно імпортувати свої бібліотеки, і це спрацювало.


це було найпростішим рішенням спасибі
Крішан Патель

У мене проблема з рамковим модулем, зібраним із Swift 5.1.2, не можна імпортувати Swift 5.2.2. Як ми можемо вирішити цю проблему?
Кішань Сутар

0

Ви можете використовувати Carthage, щоб додати рамку RxSwift.

В основному, Carthage надає вам подібний традиційний пакет стилів RxSwift.framework .

Потім спробуйте carthage update --no-use-binaries.


Downvote тому, що за допомогою картажу ви просто перебудовуєте свою бібліотеку на новому компіляторі. Питання явно стосується завантаження бінарних бібліотек, побудованих попереднім компілятором
Orion Edwards

0

Це призвело до помилки компілятора.

  1. carthage bootstrap --platform ios
  2. brew bundle
  3. pod repo update

brew bundle? що воно робить?
skywinder

Downvote тому, що за допомогою картажу ви відновлюєте бібліотеку на новому компіляторі. Питання явно стосується завантаження бінарних бібліотек, побудованих попереднім компілятором
Orion Edwards
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.