SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Migrando para Swift 3
Rodrigo Borges Soares
iOS Developer @ VivaReal
Eu 🤓
• Manauara
• iOS Developer @ VivaReal 🏡
• Mobile & Co-Founder @ Meatless 🌱🚲
Resumo
• Pré-migração
• Preparando o projeto e dependências
• Durante a migração
• Processo de migração
• Pós-migração
• Mudanças do Swift 3 e ajustes do projeto pós-migração
Dawn of
WWDC 2016 🌚
The First Day
WWDC 2016
• Swift 2.3 & Swift 3.0
• Migrar pro 2.3 primeiro e pro 3.0 depois
• Migrar logo pro 3.0
✅
6~7 meses depois…
Dawn of
“Próximo Xcode só vai aceitar Swift 3” 😰
The Second Day
Preparando para migrar
• Frameworks privados
• Dependências: Análise de suporte ao Swift 3
Frameworks privados
• Dividir para conquistar
• Dividimos nossos apps em Frameworks privados
• API requests, Fluxos de UI, UI Kit, Utils (Extensions, protocols)
• Cocoapods, Carthage, etc
• Mais fácil de migrar e continuar o desenvolvimento de novas
features
Dependências (3rd parties)
• Problema: Projeto com muitas dependências (Cocoapods) 👎
• Esperar dependência migrar, procurar outra ou DIY?
• Tentar reduzir ao máximo número de dependências do projeto
Dependências (3rd parties)
• Dependências em Objective-C:
Dawn of
Migrando para o Swift 3
The Final Day
Migrando para o Swift 3
• Xcode: Swift Migration Assistant
• Mostra os targets que serão migrados
• Targets que não possuem código Swift não são
selecionados
Migrando para o Swift 3
• Maioria dos erros: dependências não migradas
• Desmarcamos targets de Cocoapods
• Integramos com as versões já migradas
E o pull request ó…
👌
Dawn of
Vida pós-código compilado pós-migração 🌝
A New Day
Pós-migração
• Label do primeiro parâmetro
• Expressões booleanas com optionals
• Tipos com prefixo NS
• Non-escaping closures
• ObjC id —> Swift Any
• API Design Guidelines
Label do primeiro parâmetro
• Label do primeiro parâmetro agora é default
• Motivação: Comportamento consistente entre todos os
labels da função, clareza e consistência
• SE-0046
Label do primeiro parâmetro
Expressões booleanas & optionals
• Operandos de expressões booleanas não podem ser
optionals
• Motivação: Optionals não são Comparable
• if let, guard let, etc
• SE-0121
Expressões booleanas & optionals
Tipos com prefixo NS
• Prefixos NS foram removidos da Swift Foundation 🙏
• NSURL —> URL, NSUserDefaults —> UserDefaults
• Motivação: Clareza e concisão para os tipos base do Swift
• SE-0086
Non-escaping closures
• Closures são non-escaping por default
• Escaping closures podem “escapar” do corpo de uma
função, sendo salvos em uma variável global, por exemplo
• Motivação: Natureza noescape de algoritmos funcionais,
compilador pode avisar quando precisar de uma closure
non-escaping
• SE-0103
Non-escaping closures
ObjC id —> Swift Any
• Objetos id são importados no Swift como Any (não
AnyObject)
• Motivação: AnyObject não funciona naturalmente com
Value Types
• SE-0116
API Design Guidelines
• Nomes de métodos ficam zoados depois da migração
• É necessário ajustá-los seguindo as Swift API Design
Guidelines
API Design Guidelines
• Clarity at the point of use
• Clarity is more important than brevity
• Write a documentation comment
API Design Guidelines
API Design Guidelines
• SwiftLint
• Definir e manter o Swift coding style do projeto
Referências
• Swift.org Migration Guide
• Swift.org API Design Guidelines
• Swift Evolution
That’s all folks! ✌
Rodrigo Borges
rborges.soares@gmail.com
@rdgborges
lindekin.com/in/rdgborges
medium.com/@rdgborges
🤓
📧
🐦
💻
📝
Estamos contratando! 👀

Mais conteúdo relacionado

Semelhante a Migrando para o Swift 3

Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordtchandy
 
TDC2016SP - TypeScript em aplicações modernas
TDC2016SP - TypeScript em aplicações modernasTDC2016SP - TypeScript em aplicações modernas
TDC2016SP - TypeScript em aplicações modernastdc-globalcode
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015Renato Groff
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpComunidade NetPonto
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015Renato Groff
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Vinicius Pulgatti
 
[GUTS-RS] Práticas de desenvolvimento aplicadas na automação de testes com Se...
[GUTS-RS] Práticas de desenvolvimento aplicadas na automação de testes com Se...[GUTS-RS] Práticas de desenvolvimento aplicadas na automação de testes com Se...
[GUTS-RS] Práticas de desenvolvimento aplicadas na automação de testes com Se...GUTS-RS
 
Introdução a arquitetura Serverless na AWS
Introdução a arquitetura Serverless na AWSIntrodução a arquitetura Serverless na AWS
Introdução a arquitetura Serverless na AWSTimóteo Nascimento
 
Introdução ao Rails (Linguagil)
Introdução ao Rails (Linguagil)Introdução ao Rails (Linguagil)
Introdução ao Rails (Linguagil)Daniel Lopes
 
Sistemas Distribuídos - Comunicação Distribuída – CORBA
Sistemas Distribuídos - Comunicação Distribuída – CORBASistemas Distribuídos - Comunicação Distribuída – CORBA
Sistemas Distribuídos - Comunicação Distribuída – CORBAAdriano Teixeira de Souza
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvcJhordam Siqueira
 

Semelhante a Migrando para o Swift 3 (20)

Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 
TDC2016SP - TypeScript em aplicações modernas
TDC2016SP - TypeScript em aplicações modernasTDC2016SP - TypeScript em aplicações modernas
TDC2016SP - TypeScript em aplicações modernas
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015
 
Aula 05 - Java Script Básico
Aula 05 -  Java Script BásicoAula 05 -  Java Script Básico
Aula 05 - Java Script Básico
 
Web tools pt-br
Web tools pt-brWeb tools pt-br
Web tools pt-br
 
Web Tools Pt Br
Web Tools Pt BrWeb Tools Pt Br
Web Tools Pt Br
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharp
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
 
[GUTS-RS] Práticas de desenvolvimento aplicadas na automação de testes com Se...
[GUTS-RS] Práticas de desenvolvimento aplicadas na automação de testes com Se...[GUTS-RS] Práticas de desenvolvimento aplicadas na automação de testes com Se...
[GUTS-RS] Práticas de desenvolvimento aplicadas na automação de testes com Se...
 
Introdução a arquitetura Serverless na AWS
Introdução a arquitetura Serverless na AWSIntrodução a arquitetura Serverless na AWS
Introdução a arquitetura Serverless na AWS
 
10-codigo-limpo-parte-3.pdf
10-codigo-limpo-parte-3.pdf10-codigo-limpo-parte-3.pdf
10-codigo-limpo-parte-3.pdf
 
Introdução ao Rails (Linguagil)
Introdução ao Rails (Linguagil)Introdução ao Rails (Linguagil)
Introdução ao Rails (Linguagil)
 
Introdução ao AngularJS!
Introdução ao AngularJS!Introdução ao AngularJS!
Introdução ao AngularJS!
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
Sistemas Distribuídos - Comunicação Distribuída – CORBA
Sistemas Distribuídos - Comunicação Distribuída – CORBASistemas Distribuídos - Comunicação Distribuída – CORBA
Sistemas Distribuídos - Comunicação Distribuída – CORBA
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
 

Mais de Rodrigo Borges

Drag and Drop no iOS 11
Drag and Drop no iOS 11Drag and Drop no iOS 11
Drag and Drop no iOS 11Rodrigo Borges
 
Notificações no iOS 10
Notificações no iOS 10Notificações no iOS 10
Notificações no iOS 10Rodrigo Borges
 
3D Touch: Preparando sua app para o futuro do iOS
3D Touch: Preparando sua app para o futuro do iOS3D Touch: Preparando sua app para o futuro do iOS
3D Touch: Preparando sua app para o futuro do iOSRodrigo Borges
 
Em busca de um layout bonito e adaptativo: UICollectionView, Auto Layout e Si...
Em busca de um layout bonito e adaptativo: UICollectionView, Auto Layout e Si...Em busca de um layout bonito e adaptativo: UICollectionView, Auto Layout e Si...
Em busca de um layout bonito e adaptativo: UICollectionView, Auto Layout e Si...Rodrigo Borges
 
Ingressos no pulso - Levando festas e ingressos para o Apple Watch
Ingressos no pulso - Levando festas e ingressos para o Apple WatchIngressos no pulso - Levando festas e ingressos para o Apple Watch
Ingressos no pulso - Levando festas e ingressos para o Apple WatchRodrigo Borges
 
Ingresse e o Apple Watch
Ingresse e o Apple WatchIngresse e o Apple Watch
Ingresse e o Apple WatchRodrigo Borges
 
Um Protocolo de Disseminação de Dados Adaptativo para Redes Veiculares
Um Protocolo de Disseminação de Dados Adaptativo para Redes VeicularesUm Protocolo de Disseminação de Dados Adaptativo para Redes Veiculares
Um Protocolo de Disseminação de Dados Adaptativo para Redes VeicularesRodrigo Borges
 

Mais de Rodrigo Borges (9)

Drag and Drop no iOS 11
Drag and Drop no iOS 11Drag and Drop no iOS 11
Drag and Drop no iOS 11
 
Notificações no iOS 10
Notificações no iOS 10Notificações no iOS 10
Notificações no iOS 10
 
3D Touch: Preparando sua app para o futuro do iOS
3D Touch: Preparando sua app para o futuro do iOS3D Touch: Preparando sua app para o futuro do iOS
3D Touch: Preparando sua app para o futuro do iOS
 
Hello, WWDC 2016!
Hello, WWDC 2016!Hello, WWDC 2016!
Hello, WWDC 2016!
 
Em busca de um layout bonito e adaptativo: UICollectionView, Auto Layout e Si...
Em busca de um layout bonito e adaptativo: UICollectionView, Auto Layout e Si...Em busca de um layout bonito e adaptativo: UICollectionView, Auto Layout e Si...
Em busca de um layout bonito e adaptativo: UICollectionView, Auto Layout e Si...
 
Ingressos no pulso - Levando festas e ingressos para o Apple Watch
Ingressos no pulso - Levando festas e ingressos para o Apple WatchIngressos no pulso - Levando festas e ingressos para o Apple Watch
Ingressos no pulso - Levando festas e ingressos para o Apple Watch
 
Ingresse e o Apple Watch
Ingresse e o Apple WatchIngresse e o Apple Watch
Ingresse e o Apple Watch
 
Um Protocolo de Disseminação de Dados Adaptativo para Redes Veiculares
Um Protocolo de Disseminação de Dados Adaptativo para Redes VeicularesUm Protocolo de Disseminação de Dados Adaptativo para Redes Veiculares
Um Protocolo de Disseminação de Dados Adaptativo para Redes Veiculares
 
Going Mobile
Going MobileGoing Mobile
Going Mobile
 

Migrando para o Swift 3

  • 1. Migrando para Swift 3 Rodrigo Borges Soares iOS Developer @ VivaReal
  • 2. Eu 🤓 • Manauara • iOS Developer @ VivaReal 🏡 • Mobile & Co-Founder @ Meatless 🌱🚲
  • 3. Resumo • Pré-migração • Preparando o projeto e dependências • Durante a migração • Processo de migração • Pós-migração • Mudanças do Swift 3 e ajustes do projeto pós-migração
  • 4. Dawn of WWDC 2016 🌚 The First Day
  • 5. WWDC 2016 • Swift 2.3 & Swift 3.0 • Migrar pro 2.3 primeiro e pro 3.0 depois • Migrar logo pro 3.0 ✅
  • 7. Dawn of “Próximo Xcode só vai aceitar Swift 3” 😰 The Second Day
  • 8. Preparando para migrar • Frameworks privados • Dependências: Análise de suporte ao Swift 3
  • 9. Frameworks privados • Dividir para conquistar • Dividimos nossos apps em Frameworks privados • API requests, Fluxos de UI, UI Kit, Utils (Extensions, protocols) • Cocoapods, Carthage, etc • Mais fácil de migrar e continuar o desenvolvimento de novas features
  • 10. Dependências (3rd parties) • Problema: Projeto com muitas dependências (Cocoapods) 👎 • Esperar dependência migrar, procurar outra ou DIY? • Tentar reduzir ao máximo número de dependências do projeto
  • 11. Dependências (3rd parties) • Dependências em Objective-C:
  • 12. Dawn of Migrando para o Swift 3 The Final Day
  • 13. Migrando para o Swift 3 • Xcode: Swift Migration Assistant • Mostra os targets que serão migrados • Targets que não possuem código Swift não são selecionados
  • 14. Migrando para o Swift 3 • Maioria dos erros: dependências não migradas • Desmarcamos targets de Cocoapods • Integramos com as versões já migradas
  • 15. E o pull request ó… 👌
  • 16. Dawn of Vida pós-código compilado pós-migração 🌝 A New Day
  • 17. Pós-migração • Label do primeiro parâmetro • Expressões booleanas com optionals • Tipos com prefixo NS • Non-escaping closures • ObjC id —> Swift Any • API Design Guidelines
  • 18. Label do primeiro parâmetro • Label do primeiro parâmetro agora é default • Motivação: Comportamento consistente entre todos os labels da função, clareza e consistência • SE-0046
  • 19. Label do primeiro parâmetro
  • 20. Expressões booleanas & optionals • Operandos de expressões booleanas não podem ser optionals • Motivação: Optionals não são Comparable • if let, guard let, etc • SE-0121
  • 22. Tipos com prefixo NS • Prefixos NS foram removidos da Swift Foundation 🙏 • NSURL —> URL, NSUserDefaults —> UserDefaults • Motivação: Clareza e concisão para os tipos base do Swift • SE-0086
  • 23. Non-escaping closures • Closures são non-escaping por default • Escaping closures podem “escapar” do corpo de uma função, sendo salvos em uma variável global, por exemplo • Motivação: Natureza noescape de algoritmos funcionais, compilador pode avisar quando precisar de uma closure non-escaping • SE-0103
  • 25. ObjC id —> Swift Any • Objetos id são importados no Swift como Any (não AnyObject) • Motivação: AnyObject não funciona naturalmente com Value Types • SE-0116
  • 26. API Design Guidelines • Nomes de métodos ficam zoados depois da migração • É necessário ajustá-los seguindo as Swift API Design Guidelines
  • 27. API Design Guidelines • Clarity at the point of use • Clarity is more important than brevity • Write a documentation comment
  • 29. API Design Guidelines • SwiftLint • Definir e manter o Swift coding style do projeto
  • 30. Referências • Swift.org Migration Guide • Swift.org API Design Guidelines • Swift Evolution
  • 31. That’s all folks! ✌ Rodrigo Borges rborges.soares@gmail.com @rdgborges lindekin.com/in/rdgborges medium.com/@rdgborges 🤓 📧 🐦 💻 📝 Estamos contratando! 👀