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! 👀

Migrando para o Swift 3

  • 1.
    Migrando para Swift3 Rodrigo Borges Soares iOS Developer @ VivaReal
  • 2.
    Eu 🤓 • Manauara •iOS Developer @ VivaReal 🏡 • Mobile & Co-Founder @ Meatless 🌱🚲
  • 3.
    Resumo • Pré-migração • Preparandoo 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 • Swift2.3 & Swift 3.0 • Migrar pro 2.3 primeiro e pro 3.0 depois • Migrar logo pro 3.0 ✅
  • 6.
  • 7.
    Dawn of “Próximo Xcodesó 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 • Dividirpara 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 parao Swift 3 The Final Day
  • 13.
    Migrando para oSwift 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 oSwift 3 • Maioria dos erros: dependências não migradas • Desmarcamos targets de Cocoapods • Integramos com as versões já migradas
  • 15.
    E o pullrequest ó… 👌
  • 16.
    Dawn of Vida pós-códigocompilado pós-migração 🌝 A New Day
  • 17.
    Pós-migração • Label doprimeiro parâmetro • Expressões booleanas com optionals • Tipos com prefixo NS • Non-escaping closures • ObjC id —> Swift Any • API Design Guidelines
  • 18.
    Label do primeiroparâ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.
  • 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
  • 21.
  • 22.
    Tipos com prefixoNS • 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 • Closuressã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
  • 24.
  • 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
  • 28.
  • 29.
    API Design Guidelines •SwiftLint • Definir e manter o Swift coding style do projeto
  • 30.
    Referências • Swift.org MigrationGuide • 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! 👀