Когда 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, которая подходит для заголовка моста, например:
Ничего особенного, но куча ошибок может ввести вас в заблуждение, что у вас есть более серьезная проблема, чем если бы вы использовали много перечислений Objective-C.
Для информации: я полагаю (чтобы убедиться в этом, вам придется проверить это самостоятельно), что use_frameworks! Инструкция в вашем Podfile совместима только с проектами Xcode, ориентированными на iOS> = 8.
Для меня оператор импорта должен был включать в себя каталог проекта, #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'
Теперь вы можете использовать версию cocoapods 0.36.0, запустив sudo gem install cocoapodsкоторая поддерживает интеграцию быстрых фреймворков. Когда вы используете фреймворк, написанный на swift, вы должны явно использовать его в Podfile:
platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'
Ответы:
В 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.
источник
Кажется, что процесс похож на тот, который описан в разделе « Смешивание и сопоставление » документации « Использование Swift с Cocoa и Objective-C» .
pod install
.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
источник
#import <Reachability/Reachability.h>
а не#import "Reachability.h"
.ОБНОВЛЕНИЕ : Выпущена стабильная версия 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'
Я также написал об этом сообщение в блоге .
источник
use_frameworks!
это только для iOS> = 8 верно? Если да, напишите это в своем ответе.Если вы получаете ошибку «файл не найден» в вашем bridging-header.h, вы можете убедиться, что ваша библиотека Pods связана в вашей схеме сборки.
В разделе устранения неполадок CocoaPods описано, как это сделать, в пункте 4 здесь.
источник
Теперь вы можете использовать версию cocoapods 0.36.0, запустив
sudo gem install cocoapods
которая поддерживает интеграцию быстрых фреймворков. Когда вы используете фреймворк, написанный на swift, вы должны явно использовать его в Podfile:platform :ios, '8.0' use_frameworks! pod 'Alamofire'
источник
В моем случае я обнаружил, что добавляю модули не в основную цель, а только в целевые объекты Test и TestUI в Podfile, как описано здесь .
источник