Nessa apresentação falei um pouco sobre como foi a migração para Swift 3 do app do VivaReal. Citei algumas das mudanças da nova versão do Swift e como deixar o código mais de acordo com as API Design Guidelines.
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
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
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
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
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