Você está na página 1de 9

Tutorial do CocoaPods para Swift: Primeiros passos

Tem havido muito burburinho sobre CocoaPods ultimamente. Você pode ter ouvido falar sobre isso de outro
desenvolvedor ou visto em um repositório do GitHub. Se você nunca usou isso antes, provavelmente está se
perguntando: "O que exatamente é o CocoaPods?"
É provavelmente melhor deixar o site CocoaPods fornecer a resposta:

CocoaPods é um gerenciador de dependências para os projetos Swift e Objective-C Cocoa. Tem mais de 30 mil
bibliotecas e é usado em mais de 1,9 milhões de aplicativos. CocoaPods pode ajudá-lo a dimensionar seus projetos
com elegância.

Uau, isso é um monte de bibliotecas usadas em uma tonelada de aplicativos! Escalar seu projeto
elegantemente soa bem também. :]
Mas o que é um gerente de dependência? E por que você precisa de um?
Um gerenciador de dependências facilita adicionar, remover, atualizar e gerenciar dependências de terceiros
usadas pelo seu aplicativo.
Por exemplo, em vez de reinventar sua própria biblioteca de rede, você pode facilmente acessar o
Alamofire usando um gerenciador de dependências. Você pode até especificar a versão exata a ser usada ou um
intervalo de versões aceitáveis.
Assim, mesmo que o Alamofire seja atualizado com alterações incompatíveis com versões anteriores, seu
aplicativo poderá continuar usando a versão mais antiga até que você esteja pronto para atualizá-la.

Tutorial CocoaPods
 Neste tutorial, você aprenderá a usar o CocoaPods com o Swift. Especificamente, você:
 Instale CocoaPods.
 Trabalhe com um aplicativo de demonstração funcional que faz você pensar em sorvete.
 Use CocoaPods para adicionar rede.
 Aprenda sobre o versionamento semântico.
 Adicione outra biblioteca usando uma versão flexível.

Nota: Este tutorial do CocoaPods requer familiaridade básica com o desenvolvimento do iOS e do Swift. Se você é
completamente novo no iOS e / ou Swift, confira alguns dos outros tutoriais escritos e / ou em vídeo neste site antes de fazer
este tutorial. Ou mergulhe no Aprendiz do iOS .

Este tutorial também inclui classes que usam o Core Graphics. Embora o conhecimento do Core Graphics seja benéfico, não é
estritamente necessário. Se você quiser saber mais sobre o Core Graphics, leia nossa série Modern Core Graphics With Swift .

Começando
Você primeiro precisa instalar o CocoaPods. Felizmente, CocoaPods é construído sobre Ruby, que vem com
todas as versões recentes do Mac OS X. Este tem sido o caso desde o OS X 10.7.
Abra o Terminal e digite o seguinte comando:

Digite sua senha quando solicitado. A saída do Terminal deve ser algo como isto:
Você deve usar sudo para instalar o CocoaPods, mas você não precisará usar o sudo depois de instalado.
Por fim, insira este comando no Terminal para concluir a configuração:

Este processo provavelmente levará alguns minutos enquanto ele clona o repositório CocoaPods Master
Specs em ~ / .cocoapods / em seu computador.
A verbose opção registra o progresso à medida que o processo é executado, permitindo que você assista ao
processo em vez de ver uma tela aparentemente "congelada".
Incrível, agora você está pronto para usar o CocoaPods!

Sorveteria, Inc.
Seu principal cliente é a Ice Cream Shop, Inc. O sorvete deles é tão popular que eles não conseguem
acompanhar os pedidos dos clientes no balcão. Eles recrutaram você para criar um aplicativo iOS elegante que
permitirá que os clientes comprem sorvete diretamente de seus iPhones.
Você começou a desenvolver o aplicativo e está indo bem. Faça o download do projeto iniciador tutorial do
CocoaPods a partir daqui .
Abra IceCreamShop.xcodeproj , em seguida, construa e corra para ver um sorvete de baunilha de dar água
na boca:

O usuário deve poder escolher um sabor de sorvete a partir dessa tela, mas isso não é possível porque você
não concluiu a implementação dessa funcionalidade.
Abra Main.storyboard no grupo Views / Storyboards & Nibs para ver o layout do aplicativo. Aqui está uma
rápida visão geral do coração do aplicativo, a cena "Escolha seu sabor":
 PickFlavorViewControlleré o controlador de visualização para esta cena. Ele lida com a interação do usuário
e é a fonte de dados para a exibição de coleção que exibe os diferentes sabores de sorvete.
 IceCreamViewé uma exibição personalizada que exibe uma casquinha de sorvete e é apoiada por
um Flavormodelo.
 ScoopCellé uma célula de exibição de coleção personalizada que contém um ScoopView, que obtém cores
de um Flavor modelo.

Embora todos os locais da Sorveteria tenham sabores de assinatura em comum, cada um também carrega seus
próprios sabores locais. Por esse motivo, as Flavor instâncias contidas nos dados precisam ser fornecidas por um
serviço da web.
No entanto, isso ainda não responde à pergunta: "Por que o usuário não pode selecionar um sabor de sorvete?"
Abra o PickFlavorViewController.swift , encontrado no grupo Controladores , e você verá um método stubbed:

Ah-ha, não há sabores! Você precisa // Implement this.


Embora você possa usar URLSessione escrever suas próprias classes de rede, há uma maneira mais fácil: use
o Alamofire !
Você pode se sentir tentado a simplesmente baixar essa biblioteca e arrastar os arquivos de origem
diretamente para o seu projeto. No entanto, isso seria o difícil. CocoaPods fornece uma solução muito mais elegante
e ágil.
Então, sem mais delongas ...

Instalando sua primeira dependência


Você primeiro precisa fechar o Xcode .
Sim, você leu certo. É hora de criar o Podfile, onde você definirá as dependências do seu projeto.
Abra o Terminal e navegue até o diretório que contém seu projeto IceCreamShopusando o comando cd :

Em seguida, insira o seguinte comando:


Isso cria um Podfile para o seu projeto.
Por fim, digite o seguinte comando para abrir o Podfile usando o Xcode para edição:

Nota: Você não deve usar o TextEdit para editar o Podfile porque ele substitui aspas padrão por citações compostas com
grafismo mais atraentes. Isso pode fazer com que o CocoaPods fique confuso e lance erros, então é melhor usar o Xcode ou
outro editor de texto de programação para editar o seu Podfile.
O Podfile padrão é assim:

Exclua o # e o espaço antes da plataforma e exclua as outras linhas que começam com # .

Seu Podfile agora deve ficar assim:

Isso informa ao CocoaPods que seu projeto está direcionando o iOS 9.0 e usará estruturas em vez de
bibliotecas estáticas.
Para usar o CocoaPods escrito no Swift, você deve incluir explicitamente o use_frameworks!uso de
estruturas. Se você esquecer de incluir isso e o CocoaPods detectar que você está tentando usar um Swift CocoaPod,
você receberá um erro ao tentar instalar os pods.
Se você apenas já programou no Swift, isso pode parecer um pouco estranho - é porque o Podfile é
realmente escrito em Ruby. Você não precisa saber Ruby para usar o CocoaPods, mas você deve estar ciente de que
até pequenos erros de texto farão com que o CocoaPods lance um erro.

Uma palavra sobre bibliotecas


Você verá o termo "biblioteca" frequentemente usado como um termo geral que significa, na verdade, uma
biblioteca ou estrutura. Este tutorial é culpado de misturar casualmente essas palavras também. Na verdade,
quando alguém se refere a uma "biblioteca Swift", na verdade eles se referem a uma "estrutura dinâmica Swift"
porque as bibliotecas estáticas Swift não são permitidas.
Você pode estar se perguntando: “Qual é a diferença entre uma biblioteca, um framework e um CocoaPod?”
E, acredite, tudo bem se você achar a coisa toda um pouco confusa!
Um CocoaPod, ou “pod”, é um termo geral para uma biblioteca ou estrutura que é adicionada ao seu projeto usando
CocoaPods.
O iOS 8 introduziu estruturas dinâmicas, e estas permitem que códigos, imagens e outros recursos sejam
agrupados. Antes do iOS 8, os CocoaPods eram criados como bibliotecas estáticas "gordas" . "Fat" significa que eles
continham vários conjuntos de instruções de código (por exemplo, i386 para o simulador, armv7 para dispositivos,
etc.), mas não é permitido que bibliotecas estáticas contenham recursos, como imagens ou ativos.
Outra diferença importante é que os frameworks dinâmicos têm classes de namespace e as bibliotecas
estáticas não. Então, se você tivesse duas classes chamadas MyTestClassem diferentes bibliotecas estáticas dentro
de um único projeto, o Xcode não seria capaz de construir o projeto porque não conseguiria link corretamente
citando símbolos duplicados. No entanto, o Xcode está perfeitamente feliz em construir um projeto que tenha duas
classes com o mesmo nome em diferentes estruturas.
Por que isso importa? Ao contrário do Objective-C, as bibliotecas de tempo de execução padrão do Swift não
são incluídas no iOS! Isso significa que sua estrutura deve incluir as bibliotecas de tempo de execução necessárias do
Swift. Como consequência, os conjuntos escritos em Swift devem ser criados como estruturas dinâmicas. Se a Apple
permitisse bibliotecas estáticas do Swift, isso causaria símbolos duplicados em bibliotecas diferentes que usam as
mesmas dependências de tempo de execução padrão.
Felizmente, CocoaPods cuida de tudo isso para você. Ele ainda cuida apenas de incluir as dependências
necessárias uma vez. Tudo que você precisa fazer é lembrar de incluir use_frameworks! no seu Podfile ao trabalhar
com o Swift CocoaPods e você ficará bem.

Regressar à Instalação da sua Primeira Dependência


Finalmente é hora de adicionar sua primeira dependência usando CocoaPods. Adicione o seguinte ao seu
Podfile, logo após use_frameworks!:

Isso diz ao CocoaPods que você quer incluir o Alamofire versão 4.4.0 - a versão mais recente e estável no
momento de escrever este tutorial - como uma dependência para o seu projeto.
Salve e feche o Podfile.
Agora você precisa informar ao CocoaPods para instalar as dependências do seu projeto. Digite o seguinte
comando no Terminal , depois de garantir que você ainda esteja no diretório que contém o projeto IceCreamShop e
o Podfile :

Você deve ver uma saída semelhante à seguinte:

Abra a pasta do projeto usando o Finder e você verá que o CocoaPods criou um
novo arquivo IceCreamShop.xcworkspace e uma pasta Pods na qual armazenar todas as dependências do projeto.
Nota: A partir de agora, como o aviso da linha de comandos mencionado, você deve sempre abrir o projeto com o arquivo
.xcworkspace e não com o .xcodeproj; caso contrário, você encontrará erros de construção.
Excelente! Você acabou de adicionar sua primeira dependência usando o CocoaPods!

Usando Pods Instalados


Se o projeto do Xcode estiver aberto, feche-o agora e abra o IceCreamShop.xcworkspace .
Abra PickFlavorViewController.swift e adicione o seguinte logo abaixo da importação existente:
Acerte ⌘ + b para construir o projeto. Se tudo correu bem, você não deve receber nenhum erro de
compilação.
Em seguida, substitua loadFlavors()pelo seguinte:

Aqui está o play-by-play do que está acontecendo:

1. Você usa o Alamofire para criar uma solicitação GET e baixar uma lista contendo sabores de sorvete.
2. Para quebrar um ciclo de referência forte, você usa uma referência fraca a si mesmo no bloco de conclusão
de resposta. Depois que o bloco é executado, você obtém imediatamente uma referência forte a si mesmo
para poder definir as propriedades posteriormente.
3. Em seguida, você verifica se response.result ele foi bem-sucedido e se response.result.value há uma matriz
de dicionários.
4. Se tudo correr bem, você define strongSelf.flavors uma matriz de Flavor objetos criados por
um FlavorFactory. Esta é uma classe que um “colega” escreveu para você (você é bem-vindo!), que pega
uma série de dicionários e os usa para criar instâncias de Flavor.
5. Por fim, recarregue a visualização da coleção e selecione o primeiro sabor.

Construa e execute. Agora você deve poder escolher um sabor de sorvete!


Agora para uma cobertura saborosa
O aplicativo está com boa aparência, mas você ainda pode melhorá-lo.
Você notou que o aplicativo leva um segundo para baixar o arquivo de sabores? Talvez você não tenha uma
conexão rápida com a Internet, mas os clientes nem sempre terão tanta sorte.
Para ajudar os clientes a entender que o aplicativo está realmente carregando algo, e não apenas mexendo nas
bibliotecas, você pode mostrar um indicador de carregamento. MBProgressHUD é um bom indicador que funcionará
bem aqui. E suporta CocoaPods, que coincidência! :]
Você precisa adicionar isso ao seu Podfile. Em vez de abrir o Podfile a partir da linha de comando, agora você
pode encontrá-lo no destino Pods no espaço de trabalho:

Abra o Podfile e adicione o seguinte logo após a linha Alamofire :

Salve o arquivo e instale as dependências por meio da instalação do pod no Terminal, exatamente como
você fez antes.
Observe algo diferente desta vez? Sim, você especificou o número da versão como ~> 1.0 . Oque esta
acontecendo aqui?
CocoaPods recomenda que todos os pods usem o Versioning Semântico .

Versão Semântica
Os três números são definidos como números maiores , menores e de versão de correção .
Por exemplo, o número da versão 1.0.0 seria interpretado como:

Quando o número principal é aumentado, isso significa que alterações compatíveis com versões anteriores
não foram introduzidas. Quando você atualiza um pod para a próxima versão principal, pode ser necessário corrigir
erros de compilação ou o pod pode se comportar de maneira diferente de antes.
Quando o número menor é aumentado, isso significa que uma nova funcionalidade foi adicionada, mas é
compatível com versões anteriores. Quando você decide atualizar, você pode ou não precisar da nova
funcionalidade, mas isso não deve causar erros de compilação nem alterar o comportamento existente.
Quando o número do patch é aumentado, isso significa que correções de bugs foram adicionadas, mas
nenhuma nova funcionalidade foi adicionada ou mudanças de comportamento foram feitas. Em geral, você sempre
quer atualizar as versões de patch o mais rápido possível para ter a versão mais recente e estável do pod.
Por último, o maior número de ordem (maior que menor que patch) deve ser aumentado de acordo com as
regras acima e qualquer número de ordem inferior deve ser zerado.
Precisa de um exemplo?
Considere um pod que tenha um número de versão atual de 1.2.3.
Se forem feitas alterações que não sejam compatíveis com versões anteriores, não tenham nova
funcionalidade, mas corrijam bugs existentes, a próxima versão seria 2.0.0.

Hora do Desafio

Se um pod tiver uma versão atual do 2.4.6 e forem feitas alterações que corrijam bugs e adicionem funcionalidade
compatível com versões anteriores, qual deve ser o novo número de versão?

Se um pod tiver uma versão atual do 3.5.8 e forem feitas alterações nas funcionalidades existentes que não são
compatíveis com versões anteriores, qual deve ser o novo número da versão?

Se um pod tiver uma versão atual de 10.20.30 e apenas bugs forem corrigidos, qual deve ser o novo número de
versão?

Dito tudo isto, há uma exceção a estas regras:


Se o número da versão de um pod for menor que 1.0.0 , ele será considerado uma versão beta, e um
aumento menor de números poderá incluir alterações incompatíveis com versões anteriores.
Portanto, no caso de MBProgressHUB usar ~> 1.0significa que você deve instalar a versão mais recente que
é maior ou igual a 1.0mas menor que 2.0.
Isso garante que você obtenha as correções de bugs e os recursos mais recentes ao instalar esse pod, mas
não ativará acidentalmente alterações incompatíveis com versões anteriores.
Há vários outros operadores disponíveis também. Para obter uma lista completa, consulte a Referência de
Sintaxe do Podfile .
Mostrando Progess
Agora, de volta ao PickFlavorViewController.swift , adicione o seguinte logo após as outras importações:

Em seguida, adicione os seguintes métodos auxiliares após loadFlavors():

Agora loadFlavors(), adicione as duas linhas seguintes (conforme indicado):

Como os nomes dos métodos implicam, showLoadingHUD()mostra uma instância


de MBProgressHUDenquanto o pedido GET é baixado e hideLoadingHUD()oculta o HUD quando a solicitação é
finalizada. Como showLoadingHUD()está fora do fechamento, ele não precisa ser prefixado comself.
Construa e execute. Agora você deve ver um indicador de carregamento enquanto os sabores estão sendo
carregados:

Ótimo trabalho! Os clientes podem agora selecionar o seu sabor de sorvete favorito e mostrar um indicador
de carregamento enquanto os sabores estão sendo baixados.

Você também pode gostar