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 .
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:
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.
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.
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'
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í
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'
Respuestas:
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 MBProgressHUD
y / oimport Alamofire
en 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.
fuente
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 .
pod install
.Example-Bridging-Header.h
, y agréguelo al proyecto.Objective-C Bridging Header
para su objetivo: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
fuente
#import <Reachability/Reachability.h>
como#import "Reachability.h"
.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.
fuente
use_frameworks!
es solo para iOS> = 8 ¿verdad? Si es así, debe escribir esto en su respuesta.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í
fuente
Ahora puede usar la versión cocoapods 0.36.0 ejecutando
sudo gem install cocoapods
que 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'
fuente
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í .
fuente