Поскольку Apple представила Swift свой новый язык программирования, мне интересно, как вы можете интегрировать его с существующими библиотеками Objective-C, которые доступны через CocoaPods?
Как интегрировать Cocoapods с проектом Swift?
Ответ 1
Кажется, что процесс похож на тот, который описан в разделе Mix and Match Использование Swift с документацией Cocoa и Objective-C.
- Создайте свой подфайл и запустите
pod install
. - Создайте новый заголовочный файл Objective-C,
Example-Bridging-Header.h
и добавьте его в проект. - Добавить оператор импорта в заголовок моста.
- Задайте
Objective-C Bridging Header
для своей цели:
Теперь вы можете использовать свою библиотеку в этом случае MKUnits в вашем файле Swift:
let kilograms = NSNumber.mass_kilogram(2)()
let pounds = NSNumber.mass_pound(10)()
let result = kilograms.add(pounds)
println(result)
Подробнее здесь: Интеграция Cocoapods с проектом Swift
Ответ 2
Cocoapods 0.36 и выше вводит инструкцию use_frameworks!
, которая подразумевает, что заголовок моста не требуется для импорта Objective-C pods в Swift.
Ниже приведен полный пример, используя MBProgressHUD и Alamofire:
1. Podfile
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.3'
use_frameworks!
pod 'Alamofire', '>= 1.2.2' # Swift pod
pod 'MBProgressHUD', '>= 0.9.1' # Objective-C pod
2. Удаление
Удалите #imports из заголовка моста или даже удалите заголовочный файл моста, если он вам не нужен. Если вы выберете последнюю возможность, не забудьте удалить путь (к этому удаленному файлу заголовков мостов) в конфигурации проекта Xcode.
3. Добавление импорта
Добавьте import MBProgressHUD
и/или import Alamofire
вверху каждого файла Swift, которому нужны эти классы.
4. При необходимости исправьте перечисления
Теперь вы используете добросовестные рамки, поэтому ваши перечисления переместились в полете! У вас может быть строка Swift, которая отлично сочетается с мостиковым заголовком:
progressHUD.mode = MBProgressHUDModeIndeterminate
Теперь это должно стать следующим:
progressHUD.mode = MBProgressHUDMode.Indeterminate
Не большая сделка, но куча ошибок может привести вас в заблуждение, что у вас есть большая проблема, чем у вас, если вы используете много переходов Objective-C.
Для вашей информации: я думаю (вам нужно будет проверить сами, чтобы убедиться), что use_frameworks! команда в вашем подфайле совместима только с проектами Xcode, ориентированными на iOS >= 8.
Ответ 3
UPDATE: выпущена стабильная версия CocoaPods 0.36. Он официально поддерживает Swift.
CocoaPods теперь поддерживает Swift в своем последнем выпуске 0,36. Он все еще в бета-версии, но он работает.
Сначала вам нужно установить бета-версию CocoaPods (в настоящее время бета-версию 2), запустив ее в своем терминале.
sudo gem install cocoapods --pre
Это в значительной степени. Вы можете добавить библиотеки Swift, как обычно.
Но есть уловка, если вы хотите добавить библиотеку, написанную в Objective-C, в проект Swift через CocoaPods. Вам нужно добавить строку use_frameworks!
в ваш подфайл. Вот пример.
use_frameworks!
platform :ios, '8.0'
pod 'MagicalRecord'
Я написал сообщение в блоге об этом.
Ответ 4
Если вы получаете сообщение об ошибке, не найденной в вашем файле bridge.h, вы можете захотеть убедиться, что ваша библиотека Pods связана в вашей схеме сборки.
В разделе устранения неполадок CocoaPods описано, как это сделать в пункте № 4 здесь
Ответ 5
Теперь вы можете использовать версию cocoapods 0.36.0, запустив sudo gem install cocoapods
, которая поддерживает интеграцию быстрых фреймворков. Когда вы используете фреймворк, написанный быстрым, вы должны явно использовать его в подпикселе:
platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'
Ответ 6
В моем случае я обнаружил, что я не добавлял контейнеры для основной цели, а только для целевых объектов Test и TestUI в Podfile, как описано здесь.