Как интегрировать Cocoapods с проектом Swift?

Поскольку Apple представила Swift свой новый язык программирования, мне интересно, как вы можете интегрировать его с существующими библиотеками Objective-C, которые доступны через CocoaPods?

Ответ 1

Кажется, что процесс похож на тот, который описан в разделе Mix and Match Использование Swift с документацией Cocoa и Objective-C.

  • Создайте свой подфайл и запустите pod install.
  • Создайте новый заголовочный файл Objective-C, Example-Bridging-Header.h и добавьте его в проект.
  • Добавить оператор импорта в заголовок моста.
  • Задайте Objective-C Bridging Header для своей цели:

enter image description here

Теперь вы можете использовать свою библиотеку в этом случае 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, как описано здесь.