Como integrar Cocoapods com um projeto Swift?

84

Quando a Apple apresentou o Swift , sua nova linguagem de programação, eu me pergunto como você pode integrá-lo às bibliotecas Objective-C existentes que estão disponíveis através do CocoaPods .

Michal K.
fonte
Você também pode ler meu artigo recente sobre como configurar CocoaPods com seu projeto Swift.
Hemang

Respostas:

78

Cocoapods 0.36 e acima apresentam ouse_frameworks! instrução que implica que o cabeçalho de ponte não é necessário para importar pods Objective-C em Swift.

Veja abaixo um exemplo completo usando MBProgressHUD e 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. Exclusão

Remova o #imports de seu cabeçalho de ponte ou até mesmo exclua o arquivo de cabeçalho de ponte se você não precisar dele. Se você escolher a última possibilidade, não se esqueça de excluir o caminho (para este arquivo de cabeçalho de ponte excluído) na configuração do projeto Xcode.

3. Adicionando importações

Adicionar import MBProgressHUDe / ouimport Alamofire no topo de todos os arquivos Swift que precisam dessas classes.

4. Corrija os enums, se necessário

Agora você está usando frameworks genuínos, então seus enums mudaram durante o vôo! Você pode ter uma linha de Swift que combinava com o cabeçalho de ponte como este:

progressHUD.mode = MBProgressHUDModeIndeterminate

Isso agora tem que se tornar isso:

progressHUD.mode = MBProgressHUDMode.Indeterminate

Não é grande coisa, mas a pilha de erros pode levá-lo ao erro, dizendo que você tem um problema maior do que se estiver usando muitos enums Objective-C.

( Fonte desta resposta )

Para sua informação: Eu acho (você terá que testar você mesmo para ter certeza) que o use_frameworks! a instrução em seu Podfile só é compatível com projetos Xcode destinados a iOS> = 8.

O rei da bruxaria
fonte
73

Parece que o processo é semelhante ao descrito na seção Mix and Match da documentação Using Swift with Cocoa and Objective-C .

  1. Crie seu Podfile e execute pod install.
  2. Crie um novo arquivo de cabeçalho Objective-C Example-Bridging-Header.h, e adicione-o ao projeto.
  3. Adicione a declaração de importação ao cabeçalho da ponte .
  4. Defina Objective-C Bridging Headerpara o seu alvo:

insira a descrição da imagem aqui

Agora você pode usar sua biblioteca, nesse caso, MKUnits, em seu arquivo Swift:

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

Mais aqui: Integrando Cocoapods com um projeto Swift

Michal K.
fonte
3
Para mim, a declaração de importação precisava incluir o diretório do projeto, também conhecido como em #import <Reachability/Reachability.h>vez de #import "Reachability.h".
Kyle Clegg
Apenas uma atualização. Swift PODs, ou seja: Swift Libs, em breve também será compatível com CocoaPods. A próxima versão 0.36 trará suporte total a Swift no CocoaPods. A maior parte do recurso já está completa e você pode fazer um test-drive dos Swift Pods agora mesmo usando as instruções do meu blog
Sachin Palewar
2
Cocoapods 0.36 e superior apresentam o use_frameworks! instrução que implica que o cabeçalho de ponte não é mais necessário para importar pods Objective-C em Swift (por favor, veja minha resposta abaixo).
King-Wizard de
5
Além do acima, descobri que tinha que adicionar "Pods / **" aos meus "Caminhos de pesquisa de cabeçalho do usuário" nas configurações de compilação. Também tive que adicionar "#import <Foundation / Foundation.h>" ao arquivo de ponte.
Swifty McSwifterton
1
Obrigado, Swifty. Tentei use_frameworks! mas não funcionou para mim. Adicionar "Pods / **" ao caminho de pesquisa do usuário funcionou.
user3246173
16

ATUALIZAÇÃO : a versão estável 0.36 do CocoaPods foi lançada. Ele oficialmente suporta Swift.


CocoaPods agora suporta Swift em sua versão 0.36 mais recente. Ainda está em beta, mas funciona.

Primeiro você precisa instalar o CocoaPods beta (atualmente beta 2) executando-o em seu Terminal.

sudo gem install cocoapods --pre

É basicamente isso. Você pode adicionar bibliotecas Swift como faria normalmente.

Mas há um problema se você quiser adicionar uma biblioteca escrita em Objective-C a um projeto Swift por meio do CocoaPods. Você precisa adicionar a linha use_frameworks!ao seu Podfile. Aqui está um exemplo.

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

Eu escrevi uma postagem no blog sobre isso também.

Isuru
fonte
3
use_frameworks!é apenas para iOS> = 8 certo? Se sim, você deve escrever isso em sua resposta.
confile
2

Se você estiver recebendo um erro de arquivo não encontrado em seu bridging-header.h, verifique se a biblioteca de pods está sendo vinculada ao esquema de compilação.

A seção de solução de problemas do CocoaPods descreve como fazer isso no item 4 aqui

Michelle
fonte
1

Agora você pode usar a versão 0.36.0 do cocoapods executando o sudo gem install cocoapodsque oferece suporte para integrar frameworks rápidos. Ao usar uma estrutura escrita por swift, você deve usá-la explicitamente no Podfile:

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

No meu caso, descobri que não estava adicionando pods ao destino principal, mas apenas aos destinos de Teste e TestUI no Podfile, conforme explicado aqui .

Zeeawan
fonte