¿Cómo integrar Cocoapods con un proyecto Swift?

84

Cuando Apple presentó Swift , su nuevo lenguaje de programación, me pregunto cómo se puede integrar con las bibliotecas Objective-C existentes que están disponibles a través de CocoaPods .

Michal K.
fuente
También puede leer mi artículo reciente sobre cómo configurar CocoaPods con su proyecto Swift.
Hemang

Respuestas:

78

Cocoapods 0.36 y superior presenta la use_frameworks!instrucción que implica que el encabezado puente no es necesario para importar pods Objective-C en Swift.

A continuación, encontrará un ejemplo completo con MBProgressHUD y 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. Eliminación

Elimine las #importaciones de su encabezado puente o incluso elimine el archivo de encabezado puente si no lo necesita. Si elige la última posibilidad, no olvide eliminar la ruta (a este archivo de encabezado de puente eliminado) en la configuración de su proyecto Xcode.

3. Agregar importaciones

Agregue import MBProgressHUDy / o import Alamofireen la parte superior de todos los archivos Swift que necesiten estas clases.

4. Corrija las enumeraciones si es necesario

Ahora estás usando frameworks de buena fe, ¡así que tus enumeraciones se han movido en vuelo! Es posible que tenga una línea de Swift que esté bien con el encabezado de puente como este:

progressHUD.mode = MBProgressHUDModeIndeterminate

Eso ahora tiene que convertirse en esto:

progressHUD.mode = MBProgressHUDMode.Indeterminate

No es gran cosa, pero la pila de errores puede llevarlo por mal camino y pensar que tiene un problema mayor que el que tiene si está usando muchas enumeraciones de Objective-C.

( Fuente de esta respuesta )

Para su información: supongo (tendrá que probarlo usted mismo para estar seguro) que use_frameworks! La instrucción en su Podfile solo es compatible con proyectos Xcode dirigidos a iOS> = 8.

Rey Mago
fuente
73

Parece que el proceso es similar al descrito en la sección Mezclar y combinar de Uso de Swift con Cocoa y la documentación de Objective-C .

  1. Crea tu Podfile y ejecútalo pod install.
  2. Cree un nuevo archivo de encabezado de Objective-C Example-Bridging-Header.h, y agréguelo al proyecto.
  3. Agregue una declaración de importación al encabezado del puente .
  4. Establecer Objective-C Bridging Headerpara su objetivo:

ingrese la descripción de la imagen aquí

Ahora puede usar su biblioteca, en ese caso, MKUnits, en su archivo Swift:

let kilograms = NSNumber.mass_kilogram(2)()
let pounds = NSNumber.mass_pound(10)()
let result = kilograms.add(pounds)
println(result)

Más aquí: Integración de Cocoapods con un proyecto Swift

Michal K.
fuente
3
Para mí, la declaración de importación necesitaba incluir el directorio del proyecto, también conocido #import <Reachability/Reachability.h>como #import "Reachability.h".
Kyle Clegg
Solo una actualización. Los Swift POD, es decir: Swift Libs, pronto serán compatibles con CocoaPods. La próxima versión 0.36 traerá el soporte completo de Swift en CocoaPods. La mayor parte de la función ya está completa y puede probar los Swift Pods ahora mismo usando las instrucciones de mi publicación de blog
Sachin Palewar,
2
Cocoapods 0.36 y superior presenta use_frameworks! instrucción que implica que el encabezado de puente ya no es necesario para importar pods Objective-C en Swift (consulte mi respuesta a continuación).
Rey-Mago
5
Además de lo anterior, descubrí que tenía que agregar "Pods / **" a mis "Rutas de búsqueda de encabezado de usuario" en Configuración de compilación. También tuve que agregar "#import <Foundation / Foundation.h>" al archivo puente.
Swifty McSwifterton
1
Gracias Swifty. ¡Probé use_frameworks! pero no funcionó para mí. Agregar "Pods / **" a la ruta de búsqueda del usuario funcionó.
user3246173
16

ACTUALIZACIÓN : Se ha lanzado la versión estable de CocoaPods 0.36. Es compatible oficialmente con Swift.


CocoaPods ahora es compatible con Swift en su última versión 0.36. Todavía está en versión beta pero funciona.

Primero debe instalar CocoaPods beta (actualmente beta 2) ejecutando esto en su Terminal.

sudo gem install cocoapods --pre

Eso es practicamente todo. Puede agregar bibliotecas Swift como lo haría normalmente.

Pero hay un problema si desea agregar una biblioteca escrita en Objective-C a un proyecto Swift a través de CocoaPods. Necesita agregar la línea use_frameworks!a su Podfile. He aquí un ejemplo.

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

También escribí una publicación de blog sobre esto.

Isuru
fuente
3
use_frameworks!es solo para iOS> = 8 ¿verdad? Si es así, debe escribir esto en su respuesta.
confile
2

Si recibe un error de archivo no encontrado en su bridging-header.h, es posible que desee asegurarse de que su biblioteca de Pods esté vinculada en su esquema de compilación.

La sección de solución de problemas de CocoaPods describe cómo hacer esto en el artículo # 4 aquí

Michelle
fuente
1

Ahora puede usar la versión cocoapods 0.36.0 ejecutando sudo gem install cocoapodsque admite la integración de marcos rápidos. Cuando usa un marco escrito por Swift, debe usarlo explícitamente en Podfile:

platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'
Allen
fuente
0

En mi caso, descubrí que no estaba agregando pods al objetivo principal, sino solo a los objetivos Test y TestUI en Podfile como se explica aquí .

Zeeawan
fuente