Як інтегрувати 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! інструкція у вашому підфайлі сумісна лише з проектами Xcode, націленими на iOS> = 8.


73

Здається, що процес схожий на той, що описаний у розділі « Змішати та зіставити» документації « Використання Swift з какао» та «Objective-C» .

  1. Створіть свій Podfile і запустіть 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".
Kyle Clegg

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

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

5
На додаток до вищезазначеного, я виявив, що мені довелося додати "Pods / **" до моїх "Шляхів пошуку в заголовках користувача" у налаштуваннях збірки. Мені також довелося додати "#import <Foundation / Foundation.h>" до мостового файлу.
Свіфті МакСвіфтертон

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!до вашого підфайлу. Ось приклад.

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

Я також написав допис у блозі щодо цього.


3
use_frameworks!це лише для iOS> = 8 так? Якщо так, то напишіть це у своїй відповіді.
конфіл

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.