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 .
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:
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.
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.
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.
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
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'
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 .
Respostas:
Cocoapods 0.36 e acima apresentam o
use_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 MBProgressHUD
e / 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.
fonte
Parece que o processo é semelhante ao descrito na seção Mix and Match da documentação Using Swift with Cocoa and Objective-C .
pod install
.Example-Bridging-Header.h
, e adicione-o ao projeto.Objective-C Bridging Header
para o seu alvo: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
fonte
#import <Reachability/Reachability.h>
vez de#import "Reachability.h"
.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.
fonte
use_frameworks!
é apenas para iOS> = 8 certo? Se sim, você deve escrever isso em sua resposta.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
fonte
Agora você pode usar a versão 0.36.0 do cocoapods executando o
sudo gem install cocoapods
que 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'
fonte
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 .
fonte