2016-09-16 4 views
5

Обновлен до Xcode 8 и преобразован в последний синтаксис Swift 3.0. У меня есть ряд Cocoapods в моем проекте, а некоторые - на Swift 2.3 (например, для некоторых старых модулей требуется, чтобы Alamofire установил v3.5, который запускает Swift 2.3).Как скомпилировать модули с Swift 2.3 и 3.0?

Я поставил эти стручки использовать Наследство Swift -> Да, но при сборке я получаю ошибку:

Module complied with Swift 2.3 cannot be imported in Swift 3.0: /Users/....XSDK/XSDK.framework/swiftmodule/x86_64.swiftmodule 

Я не использую Карфаген (ссылка на других вопросах). Только кокопод.

Нужно ли преобразовать мой проект в Swift 2.3? Или я могу использовать Swift 3.0 в своем проекте и по-прежнему использовать устаревшие Cocoapods?

+0

К сожалению, у меня тоже есть эта проблема. Кажется, вы не можете его скомпилировать. Владелец кода должен скомпилировать его и снова вытолкнуть. Ствол, который я пытался установить, вытолкнул его на веб-сайт, но еще не был в какао-контейнерах. – Dallas

+4

Swift еще не стабилен ABI, то есть он не совместим с бинарными. Вы не можете смешивать фреймворки, написанные в Swift 2.3, с приложениями или другими фреймворками, которые используют Swift 3 (или любую другую версию Swift для этого, пока ABI не будет стабильным). – HAS

+0

@hegranes вы нашли решение этой проблемы? –

ответ

0

Чтобы получить унаследованные коко-каподы, работающие в вашем проекте, необходимо выполнить два шага.

1) Изучите cocoapod и убедитесь, что вы устанавливаете правильную версию cocoapod, которая может быть не последней, или может быть на отдельной ветви, например.

$pod 'Your Cocoapod', :git => 'https://github.com/.....', :branch => 'branch_name' 

2) В подкатегории установите версию Swift. Вы также можете сделать это вручную в настройках сборки каждого модуля, но этот код устанавливает его автоматически.

post_install do |installer| 
    installer.pods_project.targets.each do |target| 
    target.build_configurations.each do |config| 
     config.build_settings['SWIFT_VERSION'] = '2.3' # or '3.0' 
     #config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO' 
    end 
    end 
end 
1

К сожалению, поскольку Swift не является ABI Stable, вы не можете комбинировать стручки, подобные этому. Причиной этого является то, что theres огромная быстрая стандартная библиотека, которую все быстрые стручки (и фреймворки, dylibs, .a, .o и т. Д.) Должны ссылаться после компиляции. стандартная библиотека зависит от уровня языка, и вы не можете включать несколько экземпляров быстрых стандартных библиотек в одном приложении.

Прошло пару месяцев с момента выпуска 5-го выпуска. На данный момент вы, вероятно, захотите сделать прыжок до 3. Если вы найдете стручок, который не был обновлен до скорости 3, возможно, разветвите его и обновите и отправьте на pr. Автор будет любить вас! :)

Смежные вопросы