carthage ou cocoapods

30

Upload: cleber-henriques

Post on 13-Feb-2017

64 views

Category:

Software


0 download

TRANSCRIPT

Carthage ou Cocoapods?

Cleber Henriques

Technical Leader @ ilegra

[email protected]/cleberhenriques facebook.com/cleber.henriques

Senta que lá vem história...

iOS Timeline

2007 ‑ Lançamento do iPhone e iPhone OS.2008 ‑ iPhone OS 2 ‑ iOS SDK & App Store2009 ‑ iPhone OS 32010 ‑ iOS 42011 ‑ iOS 5 ‑ CocoaPods2012 ‑ iOS 62013 ‑ iOS 72014 ‑ iOS 8 ‑ Swift & Carthage2015 ‑ iOS 92016 ‑ iOS 10 ‑ Estamos aqui �

"CocoaPods is a dependency manager for Swift and Objective‑C Cocoa projects. It has over23 thousand libraries and is used in over 1.2 million apps. CocoaPods can help you scale your

projects elegantly."

Instalação:

No terminal:

# Xcode 7 + 8 $ sudo gem install cocoapods --pre

# Xcode 7 sudo gem install activesupport -v 4.2.6 sudo gem install cocoapods

O CocoaPods é escrito em Ruby e a equipe do CocoaPods recomenda que você utilize o Rubydefault do OSX

Utilizacão

No terminal, vá para a raiz do projeto pod init  para criar o PodfileAbrir o PodfileAdicionar as bibliotecas desejadas no PodfileSalvar o Podfile pod install  para iniciar a instalação das dependências open App.xcworkspace  ‑ A partir de agora você deve utilizar o workspace paratrabalhar!

Sobre o Podfile:

platform :ios, '8.0' // Versão mínima do iOS que o projeto dará suporte. use_frameworks! // Necessário para compilar bibliotecas escritas em Swift.

target 'MyApp' do // Target do projeto que irá usar as bibliotecas pod 'AFNetworking' // Nome da biblioteca. pod 'ORStackView', '~> 3.0' // Nome da biblioteca e especificação de versão pod 'SwiftyJSON', :git => 'https://github.com/ SwiftyJSON/SwiftyJSON.git', :branch => 'dev' // Nome e especificação da Branch end

E porquê tem uma pasta Pods no meu projeto agora?

É  a pasta que o CocoPods criou para armazenar as dependências que você instalou.Adicionar ela ao repositório do projeto é uma decisão sua.Mas se não adicionar, não esqueça de "Lockar" as versões das dependências.Adicionar ao repositório ou não, dá uma boa discussão :)

De consumidor a fornecedor...Agora vamos aprender a contribuir com a comunidade, distribuindo a nossa própriadependência.

O nome dela é MapChoices e com ela vai ser possível mostrar em uma  UIActionSheet  osaplicativos de mapas instalados no iPhone do usuário.

Bora lá...

Criando o projeto com o CocoaPodsNo terminal, execute o seguinte comando:

pod lib create MapChoices

Este comando irá criar o esqueleto do projeto. Basta você ir respondendo algumas perguntas.

Esqueleto do projeto:

Com o projeto pronto, agora é hora de fazer o deploy.

Mas primeiro...

... precisamos nos autenticar no Trunk:

Agora devemos acessar o link que o trunk nos enviou para confirmar a conexão da nossamáquina com o trunk.

pod trunk register [email protected] 'Cleber Henriques' --description='macbook pro'

Agora sim, vamos ao deploy:Ao rodar:

pod trunk push

O Comando  push  irá:

Executar o  linter  no seu Podspec localmente.Se o  linter  executar com sucesso, o CocoaPods irá enviar seu Podspec para o Trunk etorná‑lo público.Alertar via webhook outros serviços a existência de um novo CocoaPod. Por exemplo:CocoaPods.org

Sobre o Podspec:

Pod::Spec.new do |s| s.name = 'MapChoices' s.version = '0.1.0' s.summary = "A simple iOS library that let users choose which navigation should the app open." s.description = "A simple iOS library that let users choose which navigation should the app open. With just one method call, you show a UIActionSheet with all the installed map Apps in the user's phone."

s.homepage = 'https://github.com/OpenCraft/MapChoices' # s.screenshots = 'www.example.com/screenshots_1' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'Cleber' => '[email protected]' } s.source = { :git => 'https://github.com/OpenCraft/MapChoices.git', :tag => s.version.to_s } # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

s.ios.deployment_target = '8.0' s.source_files = 'MapChoices/Classes/**/*' end

Carthage

"A simple, decentralized dependency manager for Cocoa"

InstalaçãoAcessar a pagina: https://github.com/Carthage/Carthage/releasesBaixar o arquivo  Carthage.pkg Abrir e seguir as instruções na tela.

UtilizaçãoFluxo básico:

Criar o Cartfile:  touch Cartfile , que irá listar todas as bibliotecas que você quer ter emseu projeto.No terminal:  carthage update .O comando anterior irá baixar e compilar cada biblioteca nas pastas:Carthage/CheckoutsImportar os binários  .framework  no projeto do Xcode.

Sobre o Cartfile:

github "ReactiveCocoa/ReactiveCocoa" >= 2.3.1 # Requer no mínimo versão 2.3.1

github "Mantle/Mantle" ~> 1.0 # (1.0 ou maior, porém menor que 2.0)

github "jspahrsummers/libextobjc" == 0.4.1 # Exatamente a versão 0.4.1

github "jspahrsummers/xcconfigs" # Usar sempre a ultima versão disponível

github "jspahrsummers/xcconfigs" "branch" # Use the latest version

# Use a project from GitHub Enterprise github "https://enterprise.local/ghe/desktop/git-error-translations"

# Use a project from any arbitrary server, on the "development" branch git "https://enterprise.local/desktop/git-error-translations2.git" "development"

git "file:///directory/to/project" "branch" # Use a local project

De consumidor a fornecedor, de novo.Agora que já temos nossa biblioteca pronta e distribuída pelo CocoaPods, torná‑la disponívelpelo Carthage é mais simples do que você pode imaginar.

Passo 1Criar um projeto de Framework no Xcode:

Passo 2Adicionar as classes da biblioteca existente no projeto de framework:

Passo 3Certificar‑se que o esquema está compartilhado:

Passo 4Adicionar a badge de compatibilidade com o Carthage no Readme.md de sua biblioteca:

CarthageCarthage compatiblecompatible

Ship it! �

git commit -am "Added Carthage support" git push origin master

Agora é só utilizar :)CocoaPods:

pod 'MapChoices', '~> 0.1.0'

Carthage:

github 'OpenCraft/MapChoices' ~> 0.1.0

Principais diferenças:

CocoaPods:

É mais fácil de integrar.Existem mais frameworks disponíves. (Mas isto está mudando...)

Carthage:

É decentralizadoÉ menos intrusivo e mais flexível que o CocoaPods

Concluindo...

Muito obrigado!Essa apresentação foi feita utilizando o Marp.