CocoaPods é um popular Gestor de dependências para os projectos Swift e Objective-C Cocoa. Milhares de bibliotecas e milhões de aplicativos o usam, de acordo com o site da CocoaPods. Mas o que é um gerente de dependência e por que você precisa de um?
um gestor de dependências torna mais fácil Adicionar, Remover, actualizar e gerir as dependências de terceiros que o seu aplicativo usa.
Por exemplo, em vez de reinventar a sua própria biblioteca de rede, pode facilmente puxar o Alamofire usando um gestor de dependências. Você pode especificar a versão exata para usar ou uma gama de versões aceitáveis.
isto significa que, mesmo que o Alamofire receba uma actualização com alterações que não são compatíveis com o passado, o seu aplicativo pode continuar a usar a versão mais antiga até estar pronto para a actualizar.
neste tutorial, você vai aprender a usar CocoaPods com Swift. Especificamente, você irá:
- instalar CocoaPods.trabalhe com um aplicativo de demonstração funcional que o faz pensar em sorvete.
- Use CocoaPods para adicionar rede.
- Aprenda sobre versionamento semântico.
- adicione outra biblioteca usando uma versão flexível.
Este tutorial também inclui classes que usam gráficos de núcleo. Embora o conhecimento dos gráficos centrais seja benéfico, não é necessário. Se quiser saber mais, leia os nossos gráficos modernos com a série Swift.
- iniciando
- instalando a sua primeira dependência
- uma palavra sobre bibliotecas
- de volta à instalação da sua primeira dependência
- usando vagens instaladas
- agora para uma cobertura saborosa
- versionamento semântico
- tempo de desafio
- mostrando progresso
- raywenderlich.com Semanal
- classificação média
- Adicionar uma classificação para este conteúdo
iniciando
Descarregue o projecto inicial, carregando no botão Obter materiais no topo ou no fundo do tutorial.
ao longo deste tutorial, irá trabalhar com uma aplicação chamada Ice Cream Shop, Inc. Você vai usar CocoaPods para adicionar dependências ao aplicativo da maneira fácil, em vez de escrever o seu próprio.
Antes de poder prosseguir com este tutorial, você precisa instalar CocoaPods. Felizmente, CocoaPods usa Ruby, que navega com todas as versões do macOS X desde a versão 10.7.
abra o Terminal e indique o seguinte comando:
sudo gem install cocoapods
indique a sua senha quando solicitado. A saída do Terminal irá mostrar várias saídas relacionadas com a obtenção, instalação e documentação, concluindo com “XX gems instalados”.
sudo
para instalar CocoaPods, mas uma vez instalado, você não precisará usá-lo novamente neste tutorial.finalmente, indique este comando no Terminal para completar a configuração:
pod setup --verbose
este processo leva alguns minutos porque clones o repositório de CocoaPods Master Specs em~/.cocoapods / no teu computador.
O verbose
opção regista o progresso à medida que o processo corre, permitindo-lhe assistir ao processo em vez de ver uma tela aparentemente” congelada”.fantástico, agora estás preparado para usar CocoaPods!sorvete, Inc.o seu cliente principal é a gelataria, Inc. O gelado deles é tão popular que não conseguem acompanhar as ordens dos clientes no balcão. Recrutaram-no para criar uma aplicação elegante que permite aos clientes encomendar gelado dos seus iPhones.começou a desenvolver a aplicação e está a correr bem. Veja o seu progresso abrindo a IceCreamShop.xcodeproj, em seguida, construir e correr. Você verá um cone de sorvete de baunilha com rega na boca:
o Usuário deve ser capaz de escolher um sabor de sorvete a partir desta tela, mas isso ainda não é possível. Seu primeiro passo é terminar de implementar esta funcionalidade.
Open Main.storyboard from the Views/Storyboards & Nibs group to see the app’s layout. Aqui está uma rápida visão geral de coração do app, a Escolher o Seu Sabor cena:
-
PickFlavorViewController
é o controlador de visualização para esta cena. Ele lida com a interação do Usuário e fornece os dados para a vista de Coleta que exibe os diferentes sabores de sorvete. -
IceCreamView
é uma visão personalizada que exibe um cone de sorvete baseado no modo de suporte,Flavor
. -
ScoopCell
é uma coleção personalizada vista célula que contém umScoopView
, que obtém as cores de umaFlavor
modelo.
= = Ligações externas = = a localização tem sabores de assinatura em comum, cada um carrega seus próprios sabores locais, também. Por esta razão, um serviço web precisa fornecer os dados para oFlavor
S.no entanto, isso ainda não explica por que os usuários não podem selecionar seus sabores de sorvete.
Open PickFlavorViewController.swift, encontrado sob o grupo de controladores, e você verá um método stubbed:
private func loadFlavors() { // TO-DO: Implement this}
Aha, não há sabores! Você precisa implementar a função!
embora possa usar
URLSession
e escrever as suas próprias classes de rede, existe uma forma mais fácil: usar o Alamofire!poderá sentir-se tentado a transferir esta biblioteca e arrastar os ficheiros de código directamente para o seu projecto. No entanto, isso seria da maneira mais difícil. CocoaPods fornece uma solução muito mais elegante e ágil.
instalando a sua primeira dependência
o seu primeiro passo é fechar o Xcode. Sim, Leste isso bem.
é hora de criar o Podfile, onde você irá definir as dependências do seu projeto.
Abra o Terminal e navegue até o diretório que contém o seu IceCreamShop projeto usando o comando cd:
cd ~/Path/To/Folder/Containing/IceCreamShop
em seguida, digite o seguinte comando:
pod init
Isto cria um Podfile para o seu projeto.
finalmente, escreva o seguinte comando para abrir o ficheiro com o Xcode para edição:
open -a Xcode Podfile
Nota: Não use o TextEdit para editar o ficheiro porque substitui as cotações-padrão por aspas tipográficas mais atraentes. Isto pode fazer com que CocoaPods fiquem confusos e atirem erros. Em vez disso, use Xcode ou outro editor de texto de programação para editar o seu Podfile.o Podfile por omissão parece-se com este:
# Uncomment the next line to define a global platform for your project# platform :ios, '9.0'target 'IceCreamShop' do # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! # Pods for IceCreamShopend
Excluir
#
e espaço antes deplatform
e, em seguida, excluir as outras linhas começando com#
.o seu ficheiro ‘Podfile’ deverá agora ser parecido com o seguinte:
platform :ios, '9.0'target 'IceCreamShop' do use_frameworks!end
Isto diz ao CocoaPods que o seu projecto tem como alvo os iOS 9.0 e irá usar os frameworks em vez das bibliotecas estáticas. Enquanto o Swift e o CocoaPods suportam o static linking, nem todas as bibliotecas que você inclui o do. Um deles que você vai usar neste projeto não.
Se você só programou em Swift, isso pode parecer um pouco estranho. Isso é porque o Podfile está escrito em Ruby. Você não precisa saber Ruby para usar CocoaPods, mas você deve estar ciente de que mesmo pequenos erros de texto irá causar CocoaPods para lançar erros.
uma palavra sobre bibliotecas
você verá o termo biblioteca muitas vezes usado como um termo geral que realmente significa uma biblioteca ou framework. Este tutorial é culpado de misturar casualmente estas palavras, também.
Você pode estar se perguntando sobre as diferenças entre uma biblioteca, uma estrutura e um CocoaPod. Não faz mal se achares a terminologia um pouco confusa!
Um CocoaPod, ou pod para breve, é um termo geral para uma biblioteca ou framework que é adicionado ao seu projeto usando o CocoaPods.
iOS 8 introduziu frameworks dinâmicos, que lhe permitem agrupar códigos, imagens e outros activos. Antes do iOS 8, você criou CocoaPods como bibliotecas estáticas “fat”. “Fat” significa que continham vários conjuntos de instruções de código, como o i386 para o simulador, o armv7 para dispositivos, etc. No entanto, o Swift não permite que bibliotecas estáticas contenham recursos como imagens ou ativos.
de volta à instalação da sua primeira dependência
É finalmente altura de adicionar a sua primeira dependência usando CocoaPods. Adicione o seguinte ao seu ficheiro ‘Podfile’, logo a seguir a :
pod 'Alamofire', '4.9.1'
Isto diz ao CocoaPods que deseja incluir a versão 4.9.1 do Alamofire como uma dependência do seu projecto.
Salve e feche o Podfile.
agora precisa de dizer ao CocoaPods para instalar as dependências do seu projecto.
introduza o seguinte comando no Terminal, depois de garantir que ainda está na pasta que contém o projecto IceCreamShop e o Podfile:
pod install
deverá ver o resultado desta forma:
Analyzing dependenciesAdding spec repo `trunk` with CDN `https://cdn.cocoapods.org/`Downloading dependenciesInstalling Alamofire (4.9.1)Generating Pods projectIntegrating client project Please close any current Xcode sessions and use `IceCreamShop.xcworkspace` for this project from now on.Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
abra a pasta do projecto com o Finder e verá que o CocoaPods criou uma nova IceCreamShop.o ficheiro xcworkspace e uma pasta de vagens para guardar todas as dependências do projecto.
nota: a partir de agora, como o aviso da linha de comandos mencionado, você deve sempre abrir o projeto com o .ficheiro xcworkspace e não o .xcodeproj. Caso contrário, você vai encontrar erros de construção.excelente! Acabaste de adicionar a tua primeira dependência usando CocoaPods!usando vagens instaladas
Agora, você vai usar a sua nova dependência, Alamofire.se o projecto Xcode estiver aberto, feche-o agora e abra a IceCreamShop.xcworkspace.
Open PickFlavorViewController.swift and add the following just below the existing import:
import Alamofire
Build and run. Você não verá nenhuma mudança ainda, mas tenha certeza de que Alamofire está agora disponível.
seguinte, substituir
loadFlavors()
com o seguinte:private func loadFlavors() { // 1 Alamofire.request( "https://www.raywenderlich.com/downloads/Flavors.plist", method: .get, encoding: PropertyListEncoding(format: .xml, options: 0)) .responsePropertyList { response in // 2 guard let self = self else { return } // 3 guard response.result.isSuccess, let dictionaryArray = response.result.value as? ] else { return } // 4 self.flavors = self.flavorFactory.flavors(from: dictionaryArray) // 5 self.collectionView.reloadData() self.selectFirstFlavor() } }
Aqui está o play-by-play do que está acontecendo neste código:
- você usa Alamofire para criar um pedido de obtenção e baixar um plist contendo sabores de sorvete.
- para quebrar um ciclo de referência forte, você usa uma referência fraca a
self
no bloco de completação da resposta. Uma vez que o bloco executa, você imediatamente recebe uma forte referência aself
para que você possa definir propriedades sobre ele mais tarde. - Em seguida, você verifica o
response.result
mostra sucesso e oresponse.result.value
é um conjunto de dicionários. - Agora, você definir
self.flavors
para uma matriz deFlavor
objetos queFlavorFactory
cria. Esta é uma classe a” colega ” escreveu para você (de nada!), que toma uma série de dicionários e os usa para criar instâncias deFlavor
. - finalmente, você recarrega a janela da colecção e seleciona o primeiro sabor.
construir e executar. Agora você pode escolher um sabor de sorvete!
agora para uma cobertura saborosa
a aplicação parece boa, mas você ainda pode melhorá-la.reparou que a aplicação demora um segundo a baixar o ficheiro flavors? Se você estiver em uma conexão rápida à Internet, você pode não notar o atraso, mas seus clientes nem sempre serão tão sortudos.
o seu próximo passo é mostrar um indicador de carga no seu aplicativo, para ajudar os clientes a entender que ele está carregando dados e não apenas twiddling suas bibliotecas. MBProgressHUD é um indicador muito bom que vai funcionar bem aqui. E suporta CocoaPods; que coincidência! :]
para usar este pod, você precisa adicioná-lo ao seu Podfile. Em vez de abrir o Podfile partir da linha de comando, você pode agora encontrar nas Vagens de destino no espaço de trabalho:
Abra Podfile e adicione o seguinte, logo após o Alamofire linha:
pod 'MBProgressHUD', '~> 1.0'
Salve o arquivo e instale as dependências via pod instalar no Terminal, assim como você fez antes.Notaste alguma coisa diferente desta vez? Sim, você especificou o número da versão como ~> 1.0. Mas porquê?
CocoaPods recomenda que todas as vagens usem versionamento semântico. Tira um momento para perceber o que é isso.
versionamento semântico
muitas vezes, você verá uma versão escrita como esta: 1.0.0. Esses três números são números grandes, pequenos e remendos.
Por exemplo, para a versão número 1.0.0, 1 é o número maior, o primeiro 0 é o número menor, e o segundo 0 é o número do patch.
Se o número principal aumentar, indica que a versão contém alterações não-retrocompatíveis. Quando você atualizar um pod para a próxima versão principal, você pode precisar corrigir erros de compilação ou o pod pode se comportar de forma diferente do que antes.
Se o número menor aumentar, indica que a versão contém uma nova funcionalidade que é compatível para trás. Quando você decide atualizar, você pode ou não precisar da nova funcionalidade, mas ela não deve causar quaisquer erros de construção ou alterar o comportamento existente.
Se o número do patch aumentar, significa que a nova versão contém correcções de erros, mas nenhuma nova funcionalidade ou alterações de comportamento. Em geral, você sempre quer atualizar as versões patch o mais rápido possível para ter a versão mais recente e estável do pod.
finalmente, quando você aumenta o número de ordem mais elevado — maior, em seguida menor, em seguida, patch-de acordo com as regras acima, você deve reiniciar quaisquer números de ordem mais baixa para zero.
Aqui está um exemplo:
considere um pod que tem um número de versão atual de 1.2.3.
Se fizer alterações que não sejam compatíveis com o passado, não tiver novas funcionalidades, mas corrigir erros existentes, dar-lhe-á a versão 2.0.0.
tempo de desafio
Se uma cápsula tem uma versão atual de 2.4.6 e você faz alterações que corrigem bugs e adicionam funcionalidade backward-compatível, qual deve ser o novo número de versão?explicação: Se você fizer alterações que incluem uma nova funcionalidade que é compatível para trás, você aumenta o número menor e repõe o patch para zero.
Se um pod tem uma versão atual de 3.5.8 e você faz mudanças na funcionalidade existente que não são compatíveis para trás, qual deve ser o número da nova versão?resposta: 4.0.0. explicação: Se as alterações modificarem o comportamento existente e não forem compatíveis para trás, você deve aumentar o número maior e repor os números menores e patch em zero.
Se um pod tem uma versão atual de 10.20.30 e você só corrige bugs, qual deve ser o novo número da versão?explicação: Se você só corrigir erros, você só aumenta o número do patch.
tendo dito tudo isso, há uma exceção a estas regras:
Se o número de versão de um pod é inferior a 1.0.0, ele é considerado uma versão beta. Pequenos aumentos de Número podem incluir mudanças que não são compatíveis com o passado.
Então, de volta para MBProgressHUB: Usando
~> 1.0
significa que você deve instalar a versão mais recente que é maior do que ou igual a1.0
mas menor do que2.0
.isto garante que irá obter as últimas correcções de erros e funcionalidades quando instalar este pod, mas não irá, acidentalmente, puxar para trás alterações incompatíveis.
existem vários outros operadores que você pode usar também. Para uma lista completa, consulte a Referência de sintaxe do Podfile.
Agora que você aprendeu como os operadores trabalham com o seu CocoaPods, é hora de terminar o seu aplicativo.
mostrando progresso
Se se lembrar, estava a criar um indicador de progresso para mostrar aos seus utilizadores quando os sabores estão a carregar na aplicação.
para terminar esta funcionalidade, volte ao PickFlavorViewController.swift e adicione o seguinte logo após o outro importações:
import MBProgressHUD
em seguida, adicione os seguintes métodos auxiliares depois de
loadFlavors()
:private func showLoadingHUD() { let hud = MBProgressHUD.showAdded(to: contentView, animated: true) hud.label.text = "Loading..."}private func hideLoadingHUD() { MBProgressHUD.hide(for: contentView, animated: true)}
Agora, no
loadFlavors()
, adicione as seguintes duas linhas (como indicado):private func loadFlavors() { showLoadingHUD() // <-- Add this line Alamofire.request( "https://www.raywenderlich.com/downloads/Flavors.plist", method: .get, encoding: PropertyListEncoding(format: .xml, options: 0)) .responsePropertyList { response in guard let self = self else { return } self.hideLoadingHUD() // <-- Add this line // ...
Como o método de nomes implicam,
showLoadingHUD()
mostra um exemplo deMBProgressHUD
enquanto o pedido GET downloads.hideLoadingHUD()
esconde o HUD quando o pedido termina. Uma vez queshowLoadingHUD()
está fora do fechamento, ele não precisa do prefixoself
.construir e executar. Agora você vai ver um indicador de carga enquanto os sabores estão carregando. Se a sua ligação à internet for demasiado rápida para isto, pode adicionar uma declaração
sleep(_:)
pouco antes dehideLoadingHUD()
para que possa experimentar a bondade que é MBProgressHUD. :]Great work! Os clientes podem agora selecionar o seu sabor favorito de sorvete e eles vêem um indicador de carregamento enquanto os sabores estão baixando.para onde ir a partir daqui?
você pode baixar o projeto completo usando o botão de Download de materiais na parte superior ou inferior desta página.Parabéns! Você agora sabe o básico de usar CocoaPods, incluindo criar e modificar dependências e entender versionamento semântico. Você está agora pronto para começar a usá-los em seus próprios projetos!
há muito mais que você pode fazer com CocoaPods. Você pode procurar por vagens existentes no site oficial do CocoaPods. Além disso, consulte os guias CocoaPods para aprender os detalhes mais finos desta excelente ferramenta. Mas fica avisado, assim que começares a usá-lo, vais perguntar-te como conseguiste sem ele! :]
espero que tenha gostado de ler este tutorial CocoaPods tanto quanto eu o escrevi. Quais são os teus CocoaPods preferidos? Quais são as que você mais confia para projetos cotidianos? Sinta-se livre para compartilhar, ou para fazer quaisquer perguntas, nos comentários abaixo!
raywenderlich.com Semanal
O raywenderlich.com newsletter é a maneira mais fácil de ficar atualizado sobre tudo o que você precisa saber como um desenvolvedor móvel.
obtenha uma digestão semanal dos nossos tutoriais e cursos, e receba um curso gratuito de E-mail em profundidade como um Bônus!
classificação média
4.8/5
Adicionar uma classificação para este conteúdo
Login para adicionar uma classificação
33 classificações