Модуль, скомпільований за допомогою swift 3.0, не можна імпортувати в Swift 3.0.1


87

Я оновив Xcode до 8.1 GM і тепер отримую нижченаведену помилку для SwiftyJSON. Інші імпортовані фреймворки, здається, працюють. Чи є спосіб змусити це працювати в Swift 3, поки SwiftyJSON не оновить їх фреймворк? Я використовував Carthage для імпорту / оновлення фреймворків. Я також спробував змінити Use Legacy Swift language versionOn і Off безрезультатно.

Модуль, скомпільований за допомогою Swift 3.0, не можна імпортувати в Swift 3.0.1: Modules / SwiftyJSON.swiftmodule / arm64.swiftmodule

Відповіді:


171

SwiftyJson завантажується заздалегідь скомпільованим Carthage. Попередньо скомпільоване завантаження здійснюється із версією Swift 3.0 Це змушує компілятор скаржитися на те, що версія неправильна. Використовуючи таку команду:

carthage update --platform iOS --no-use-binaries

SwiftyJson (і всі інші фреймворки в Carthage) будуть компілюватися локально, використовуючи локальну версію Swift (3.0.1), і компілятор більше не скаржиться.


7
Ви, ймовірно, заощадили мені годину пошуку. Дякую.
djv

24
Будь ласка. Чесно кажучи, картаген повинен бути трохи розумнішим і перевірити швидкий номер версії.
zirinisp

Будь-які інші ідеї? Тому що це не спрацювало для мене, хоча в моєму випадку у мене проблеми з Unbox
Xernox

Це було чудово. Чи є спосіб вбудувати це Cartfileтак, щоб я міг просто друкувати, carthage updateне вимагаючи знань / турбот про додаткові прапори?
Крейг Отіс,

1
У мене була подібна помилка з PromiseKit 4.0 після оновлення з до XCode 8.0 до XCode 8.1. У мене сталася помилка EXC_BAD_ACCESS. Врешті-решт PromiseKit довелося перекомпілювати зі швидким 3.0.1 і проблему було вирішено.
Рікардо Анжос,

21

Видаліть чаш програми з DerivedData та відновіть. помилка може бути виправлена.

Шлях DerivedData такий:

~/Library/Developer/Xcode/DerivedData/

У мене вийшло, я видаляю цей фолтер, видаляю папку pod і використовую "встановлення pod". І виправлений.
Jose Pose S

Привіт. Це рішення спрацювало для мене. Чи можете ви детально пояснити, що відбувається, коли ми очищаємо похідні дані? Як помилка зникає?
iPhoneDeveloper

Працював і у мене, дякую.
Хася

10

Переконайтеся, що ви помістили новий пакет XCode 8.1 GM у папку Applications. Ми зіткнулися з цією проблемою, коли хтось із нас запускав Carthage для оновлення наших залежностей, але не замінив стару програму XCode 8.0 у папці програм (8.1 GM працював з робочого столу).

Ви хочете переконатися, що коли ви запускаєте наступне в терміналі: xcrun swift -versionщо він повертається Apple Swift version 3.0.1.


Це спрацювало для мене, дякую! Також командою, яка працювала в терміналі, була xcrun swift -version
HH887

2
Все ще надходить те саме випуск. Будь-які інші пропозиції
harsh_v

2
Ця команда спрацювала для мене: оновлення картриджа --платформа iOS - no-use-binaries
HH887

2
Я зробив, carthage update --platform iOS --no-use-binariesі це все ще не працює. Я очистив свій проект і перезапустив Xcode, і я все ще отримую повідомлення про помилку. Ще щось я можу спробувати?
Кліфтон Лабрум

1
Я спробував це. ПовертаєтьсяApple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Target: x86_64-apple-macosx10.9
Кліфтон Лабрум

9

Оновлення за замовчуванням Xcodeдо нового на терміналі спрацювало для мене.

Крок 1: Використовуйте наступну команду, щоб оновити версію Xcode до останньої на терміналі. Посилання

sudo xcode-select -switch <path/to/>Xcode.app

Крок 2: Спробуйте команду оновлення картриджа

carthage update --platform iOS

9

Просто щоб повідомити останні оновлення:

Carthage випустив версію 0.20 27 лютого 2017 року.

Зараз Carthage використовує двійковий файл попередньої збірки, лише якщо доступний двійковий файл збірки сумісний .

Це вже сказано, вам більше не потрібно використовувати: --no-use-binariesщоб уникнути несумісного фреймворку попередньої збірки.

Тож переконайтеся, що у вас версія Carthage більше ніж,0.20 і просто виконайте:

carthage update --platform iOS

XCode 8.3.3 Після оновлення Carthage до версії 0.25 і після виконання нижче, він працював для мене оновлення Carthage --платформа iOS - no-use-binaries
anoop4real

@ anoop4real Без вас це не працює --no-use-binaries? Carthage повинен мати можливість виявити, чи двійковий файл сумісний з вашою версією компілятора. Якщо він не сумісний, він повинен автоматично скинути завантажений двійковий файл і побудувати фреймворк локально.
kanekin

5

Так само, як сказав @zirinisp:

  1. Ви можете використовувати наступну команду:carthage update --platform iOS --no-use-binaries
  2. Використовуючи таку команду: xcrun swift -versionщоб побачити версію Swift
  3. Зробіть це: Xcode->preferences->locationsщоб очистити похідні дані та архівувати дані, найважливіше змінити інструменти командного рядка на " Xcode 8.1"
  4. Використовуючи таку команду:, xcrun swift -versionви можете побачити швидку версію 3.0.1
  5. Встановити Use Legacy Swift Language Version = NO

Сподіваюся, це вам допоможе


1
  1. Перемістіть бета-версію / GM-версію, якщо Xcode у папку / Applications, і назвіть її Xcode-beta

  2. Перевірте результати:

    xcrun swift --version

запустивши цю команду в терміналі, її вихід повинен відповідати швидкій версії, яку ви хочете скомпілювати, оскільки Carthage використовує вихід цієї команди для визначення локальної версії Swift.

  1. Оновіть версію Xcode до останньої на терміналі, виконавши таку команду:

    sudo xcode-select -s /Applications/Xcode-beta.app/

  2. Створіть бібліотеки для iOS і заважає Carthage завантажувати існуючі (але несумісні) попередньо скомпільовані двійкові файли, виконавши наступну команду:

    carthage update --platform iOS --no-use-binaries

  3. Очистити та побудувати


0

У мене була точно така ж проблема з бібліотекою XCTest_Gherkin, і вона мені працювала:

  1. Product-> Scheme->XCTest-Gherkin
  2. Product -> Build

Сподіваюся, це допоможе. Я використовую Cocoapods.


0

У налаштуваннях Xcode Build переконайтеся, що ваші шляхи пошуку Framework містять відповідну папку Carthage Build:

$(inherited)
$(PROJECT_DIR)/Carthage/Build/iOS
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.