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


84

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


Вы также можете прочитать мою недавнюю статью о том, как настроить CocoaPods с вашим проектом Swift.
Hemang

Ответы:


78

В Cocoapods 0.36 и выше представлена use_frameworks!инструкция, которая подразумевает, что заголовок моста не требуется для импорта модулей Objective-C в Swift.

Ниже приведен полный пример использования MBProgressHUD и Alamofire :

1. Подфайл

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! Инструкция в вашем Podfile совместима только с проектами Xcode, ориентированными на iOS> = 8.


73

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

  1. Создайте свой подфайл и запустите pod install.
  2. Создайте новый файл заголовка Objective-C Example-Bridging-Header.hи добавьте его в проект.
  3. Добавьте оператор импорта в заголовок моста .
  4. Установите 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


3
Для меня оператор импорта должен был включать в себя каталог проекта, #import <Reachability/Reachability.h>а не #import "Reachability.h".
Кайл Клегг

Просто обновление. Swift POD, то есть: Swift Libs также скоро будут поддерживаться CocoaPods. В следующей версии 0.36 будет полная поддержка Swift в CocoaPods. Большая часть функции уже завершена, и вы можете протестировать Swift Pods прямо сейчас,
следуя

2
В Cocoapods 0.36 и выше представлена ​​функция use_frameworks! инструкция, которая подразумевает, что заголовок моста больше не требуется для импорта модулей Objective-C в Swift (см. мой ответ ниже).
King-Wizard

5
В дополнение к вышесказанному я обнаружил, что мне нужно добавить «Pods / **» к моим «Пути поиска заголовков пользователей» в настройках сборки. Мне также пришлось добавить "#import <Foundation / Foundation.h>" в файл моста.
Swifty McSwifterton

1
Спасибо, Свифти. Я пробовал use_frameworks! но у меня это не сработало. Добавление "Pods / **" в путь поиска пользователя сработало.
user3246173

16

ОБНОВЛЕНИЕ : Выпущена стабильная версия CocoaPods 0.36. Он официально поддерживает Swift.


CocoaPods теперь поддерживает Swift в своем последнем выпуске 0.36. Он все еще находится в стадии бета-тестирования, но работает.

Сначала вам нужно установить бета-версию CocoaPods (в ​​настоящее время бета 2), запустив ее в своем Терминале.

sudo gem install cocoapods --pre

Это почти все. Вы можете добавлять библиотеки Swift, как обычно.

Но есть одна загвоздка, если вы хотите добавить библиотеку, написанную на Objective-C, в проект Swift через CocoaPods. Вам нужно добавить строку use_frameworks!в свой Podfile. Вот пример.

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

Я также написал об этом сообщение в блоге .


3
use_frameworks!это только для iOS> = 8 верно? Если да, напишите это в своем ответе.
confile

2

Если вы получаете ошибку «файл не найден» в вашем bridging-header.h, вы можете убедиться, что ваша библиотека Pods связана в вашей схеме сборки.

В разделе устранения неполадок CocoaPods описано, как это сделать, в пункте 4 здесь.


1

Теперь вы можете использовать версию cocoapods 0.36.0, запустив sudo gem install cocoapodsкоторая поддерживает интеграцию быстрых фреймворков. Когда вы используете фреймворк, написанный на swift, вы должны явно использовать его в Podfile:

platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'

0

В моем случае я обнаружил, что добавляю модули не в основную цель, а только в целевые объекты Test и TestUI в Podfile, как описано здесь .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.