Hello, São Francisco. Hello, WWDC 2016.
Na semana de 13–17 de junho, em São Francisco, aconteceu mais uma WWDC, a conferência de desenvolvedores da Apple. Essa foi minha primeira vez na conferência e aproveitando toda a explosão de ideias e motivação que ela me trouxe, decidi escrever sobre as coisas mais interessantes que aprendi nessa semana. 🤓
Keynote
No Bill Graham Auditorium, primeiro dia de WWDC, às 10h, Tim Cook & cia apresentaram ao mundo as principais novidades relacionadas aos seus sistemas operacionais.
Quase metade da Keynote foi reservada especialmente para o novo iOS 10. As novidades foram divididas em 10 pontos principais, como redesign e UX, QuickType, Siri, Messages e Maps.
Notificações e Widgets
Logo de primeira, confesso que me senti realizado. Como um antigo usuário de Android, não entendia a falta de cuidado da Apple com interface e funcionalidades das notificações e widgets.
Felizmente foi revelado um redesign completo nas notificações, com direito a conteúdos expandidos, melhor interface para resposta de mensagens e visualização de fotos e vídeos na própria notificação. Além disso, os widgets do sistema estão mais acessíveis: na tela de bloqueio, ao fazer swipe para a esquerda na tela principal e ao fazer um 3D Touch no ícone de um aplicativo.
Foi possível notar a grande importância dada ao 3D Touch nessas novas interações, o qual deve continuar sendo uma das bases de interação dos próximos devices. Ele é utilizado também para ações como expandir e limpar todas as notificações.
Proactive Suggestions: iOS mais inteligente
Outro ponto que gostei muito foi que o iOS está ficando mais inteligente. Agora o sistema pode recomendar textos, endereços e aplicativos baseados no contexto de navegação do usuário.
Por exemplo, se você utilizar o Yelp para procurar um restaurante e logo depois abrir o Uber, ao clicar no campo de texto, o iOS sugere o endereço do restaurante que você tinha visto logo acima do teclado (QuickType).
A experiência pode ser ainda melhor: após ver o restaurante e abrir o App Switcher para trocar de app, o sistema pode mostrar a sugestão de um aplicativo como o Uber ser aberto já configurado com o endereço do restaurante. Com o iOS 10, é o fim daquele troca troca de informações entre apps!
Apple ❤️ Developers
Com o lançamento das novas versões da Siri, Maps e iMessage, a Apple deu um grande passo em prol da diversidade no iOS: abriu as 3 plataformas para os desenvolvedores. 🤓🎉
A Siri conseguirá entender comandos de apps de terceiros. Será possível enviar mensagens e fazer chamadas de áudio ou vídeo do WhatsApp e pedir um Uber através de comandos de voz. Os desenvolvedores poderão ensinar vocabulários específicos de cada app para a Siri, o que torna as possibilidades de interações bastante promissoras.
Além de um novo design, o Maps ganhou também algumas sugestões inteligentes pro usuário. Agora se você abrir o Maps no horário que geralmente vai para o trabalho, o endereço vai aparecer como sugestão para iniciar uma nova navegação. Com a também abertura do Maps para os desenvolvedores, será possível reservar uma mesa em um restaurante, pedir um táxi e pagar ambos sem sequer sair do aplicativo.
Uma das surpresas da Keynote: O novo iMessage suportará aplicativos e terá uma loja própria para eles. Desenvolvedores podem criar stickers packs e apps com interfaces customizadas, suportando interações entre os dois lados da conversa. Além disso, esses apps podem mostrar deep links para outras apps, melhorando o engajamento dos usuários.
Sessões & Labs
Durante o restante da semana, no Moscone Center, rolaram várias sessões introdutórias e também mais avançada sobre os lançamentos.
Nos labs podíamos conversar com engenheiros e designers da Apple, tirando dúvidas sobre novas APIs, resolvendo bugs e ganhando dicas de como melhorar a experiência dos usuários.
A partir de agora, vou falar sobre mais algumas novidades para desenvolvedores que foram lançadas durante essa semana.
Swift
Esse ano tivemos muitas novidades sobre Swift, sobre a relação com a comunidade open source, Swift multi-plataforma, uso interno da linguagem e mudanças da versão 3.
Swift Open Source
É clara a importância da comunidade na evolução para a versão 3. No repositório swift-evolution, desenvolvedores podem submeter propostas de mudanças para a linguagem. Foi de lá que saíram várias novidades do Swift 3, como o fim dos for-loops do C e a obrigatoriedade de especificar a label do primeiro parâmetro de métodos. Há também várias mailing lists com propósitos diferentes, sobre o compilador, LLDB, Package Manager e outros.
Para mostrar a crença no Swift por parte da Apple, foram mostradas algumas aplicações internas da linguagem. Na implementação do novo Docks do macOS Sierra, após a migração de códigos em C e Objective-C para Swift, eles conseguiram reduzir em 15% a quantidade de código — mesmo desenvolvendo novas funcionalidades.
Migração para Swift 3
Desde que o Swift foi lançado, temos a discussão sobre migrar ou não. Os early-adopters sofreram com a constante atualização da linguagem, tendo que refatorar boa parte do código a cada nova versão.
Para amenizar o problema da migração, junto com o Swift 3, será lançado o Swift 2.3. Basicamente, ele é o Swift 2 com os novos SDKs lançados com a versão 3. A ideia do 2.3 é que seja uma solução interina enquanto os desenvolvedores não migram para o 3. Essa versão possibilita fazer builds, testar, submeter para a App Store e que os desenvolvedores tenham um tempo maior para se preparar para as mudanças mais complexas da versão 3. 👍
Para saber mais: What’s new in Swift.
Swift API Design Guidelines
Com a versão 3, o Swift ganha muitas mudanças na sua API que deixarão o código mais simples e limpo, ou melhor, mais Swifty.
Na página do Swift API Design Guidelines, temos uma descrição bem completa sobre as mudanças no API Naming do Swift. Os 3 pontos que são a base dessas mudanças estão especificados lá:
- Clarity at the point of use: Os nomes de métodos e propriedades foram alterados para ficarem mais claros e concisos, deixando de lado algumas heranças do Objective-C, como aqueles métodos com nomes enormes e repetitivos.
- Clarity is more important than brevity: Apesar das mudanças na API Naming, a clareza do código Swift é mais importante que escrever métodos com a menor quantidade possível de caracteres. A ideia é que as features do Swift naturalmente contribuam para um código menos verbose.
- Write a documentation comment: Sobre a importância de escrever a documentação do seu código. Ela é tanta que o Xcode 8 vem com um comando específico para criar documentações de métodos, classes e propriedades.
A cada exemplo das mudanças, mais e mais palmas. A vontade era sair da sessão e ir direto refatorar o código para a versão 3. Afinal, todo mundo que escrevia códigos como:
array.insert(1, atIndex: 0)x = url.URLByAppendingPathComponent("file.txt")someString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Agora podiam escrevê-los assim:
array.insert(1, at: 0)x = url.appendingPathComponent("file.txt")someString.trimmingCharacters(in: NSCharacterSet.whitespaces())
Particularmente, algumas das mudanças que mais gostei foram no GCD. Antes, para rodar um código assincronamente na thread principal, você precisava de algo como:
dispatch_async(dispatch_get_main_queue(), {})
No Swift 3, esse mesmo código é escrito assim:
DispatchQueue.main.async {
}
Bem mais Swifty, não? 😍
Além disso, até as APIs do Objective-C podem ser importadas em um projeto Swift de uma forma bem mais simples e concisa. Constantes de Strings estão mais fortes com a nova definição delas no Swift 3.
Tchau, NSUserDefaultsDidChangeNotification.
Oi, UserDefaults.didChangeNotification!
Há muitas outras coisas legais na sessão Swift API Design Guidelines!
Apple Watch e watchOS 3
Uma das novidades mais esperadas por mim eram as mudanças no watchOS 3. Desenvolvo para o Apple Watch desde a primeira versão e desde lá sinto os problemas de performance dos apps para o Watch. Após a atualização para o watchOS 2, com os apps rodando nativamente no Watch, a Apple deu um passo para a resolução desse problema.
Performance, performance, performance!
Tudo indica que é a partir do watchOS 3 que teremos mudanças significativas nas interfaces, interações e na performance dos aplicativos no relógio. 🙏
A mudança mais significativa, tanto de performance quanto de interface, é que o watchOS 3 terá um Dock (como no macOS) que substituirá a tela de Glance e onde os aplicativos mais utilizados pelo usuário serão mantidos em memória.
Com isso, esses aplicativos serão abertos instantaneamente, sem aquele loading inicial presente em praticamente todos os apps para o Watch. Como o Dock substituirá as Glances, os desenvolvedores devem se preparar para mostrar no Dock os snapshots mais atualizados do app. Assim, os usuários podem ver os dados da tela inicial do aplicativo sem precisar entrar no app.
Ao colocar a complication de uma app na tela inicial, o sistema a mantém em memória, pronta para ser aberta e com um tempo maior para ser atualizada em background.
Várias APIs de Background Tasks foram disponibilizadas para que os desenvolvedores mantenham as informações o mais atualizadas possível, antes dos usuários abrirem suas apps. Complications podem receber até 50 push updates por dia, mas é importante saber quais os melhores momentos para atualizá-las. Não gaste sua munição enquanto o usuário estiver dormindo. 👍
Melhorias na navegação e UX
Smartwatches devem ser baseados em interações rápidas. E isso não parecia ser algo que a Apple se preocupava nas versões anteriores do watchOS. Parecia. As mudanças de UX no watchOS 3 tem o objetivo de estimular interações rápidas, de no máximo 2 segundos.
O watchOS 3 manterá em foreground apps que precisam ser abertas constantemente, como listas de compras e fitness. Assim, ao olhar no relógio durante as suas atividades, o usuário sempre terá a informação que precisa. Após 8 minutos sem atividade, o watchOS mostrará novamente a tela inicial.
Com o novo Table Vertical Paging Mode, interações que antes eram implementadas com 2 telas (tela da lista + tela de detalhes), agora podem ser definidas apenas com uma tela e o usuário utiliza a digital crown para navegar entre cada tela de detalhes.
Para conferir mais novidades do watchOS 3, recomendo as sessões: What’s New in watchOS 3 e Quick Interaction Techniques for watchOS.
Interfaces Adaptativas
Uma sessão sobre esse tema iniciou com um mantra:
The system is going to do most of the work so you don’t have to.
O que pode ser traduzido para: "Nós fizemos o Xcode, Interface Builder, Size Classes e etc para vocês. Por favor, usem!". 😳
Traits
Traits descrevem o ambiente em que seu app está rodando. Os itens que compõem esse ambiente são agrupados em: Layout, Aparência e Capacidades. O Layout pode ser descrito pelas Size Classes, Dynamic Type e Layout Direction. A Aparência é definida pelo Display Gamut (faixa de cores que um device pode mostrar) e o Interface Style. Por fim, as capacidades do ambiente são definidas por features como o 3D Touch.
Imagina que legal se a gente tivesse um lugar onde pudéssemos ter acesso a todas essas configurações do device do usuário e, assim, adaptar a interface com base nelas? A boa notícia é que temos um lugar assim! E ele se chama UITraitCollection. 🙏
Boa parte da apresentação é sobre como desenvolver interfaces adaptativas levando em conta as Size Classes e em como reagir às mudanças nos Traits com o método traitCollectionDidChange:.
PS: Um tempo atrás, eu falei sobre Size Classes & interfaces adaptativas nesse post aqui.
What's New In Interface Builder
Vou perder alguns seguidores no Twitter, mas gostaria de dizer que sou um fã do Interface Builder. Gosto do poder que ele nos dá para trabalhar com Auto Layout, Size Classes, navegação entre as View Controllers, entre outros.
Foi lançado um ótimo novo recurso para os fãs do IB como eu. Antes, só podíamos visualizar no IB as nossas interfaces em um formato de iPhone/iPad genérico ou de acordo com as Size Classes. Agora, é possível selecionar qualquer device e ver, com um nível muito grande de fidelidade, como as telas ficarão em cada um deles.
É como se tivessem colocado os simuladores de cada device no IB, buscando uma visualização quase pixel-perfect das interfaces. E, de fato, é quase isso o que acontece. No Xcode 8, o IB realmente usa o simulador para renderizar as telas do aplicativo. 😮
Outra mudança sensacional é que agora em qualquer nível de zoom você consegue fazer alterações nas suas telas. *mais palmas*
Para ficar por dentro de todas as novidades sobre interfaces adaptativas, recomendo Making Apps Adaptive, Part 1 e Making Apps Adaptive, Part 2.
Sugestões Proativas
No iOS 9, a Apple apresentou uma busca mais inteligente no Spotlight, mostrando resultados de dentro das apps. Para isso, os desenvolvedores indexam os conteúdos que os usuários veem nos apps, tornando-os disponíveis para o sistema.
Seguindo essa tendência, o iOS 10 fica ainda mais inteligente e conseguirá indicar a sua app e conteúdos que você viu por meio dela em outros apps ou partes do sistema, aumentando o engajamento dos usuários.
Por exemplo, se você viu um apartamento no app do VivaReal, marcou uma visita com o corretor e abre aplicativo de Mapas para verificar a melhor forma de chegar ao destino, o iOS sugerirá a localização do imóvel que você acabou de ver. Acontecerá o mesmo caso você abra um app de táxi e clique no campo para adicionar o destino.
Além de outras apps, um app pode ser sugerido em outras partes do sistema:
- App Switcher. Caso você tenha visto um lugar no Yelp, ao abrir essa tela de troca de apps, o iOS será capaz de fornecer uma sugestão para chamar um motorista do Uber e ir para o lugar em questão;
- Tela de bloqueio. Através do Handoff (continuando a atividade que começou em outro device) ou com uma seção nova dedicada a aplicativos de mídia;
- Aplicativo Contatos. Para apps de mensagens, agora o iOS colocará em cada contato as informações em cada mensageiro (WhatsApp, por exemplo) e dará destaque à forma que você costuma mais contatar cada pessoa.
Para mais detalhes, indico a sessão Increase Usage of Your App With Proactive Suggestions.
let bye = "So long and thanks for all the donuts"
Esse foi um breve depoimento sobre a minha experiência e as novidades lançadas lá na WWDC 2016. Entre as muitas outras sessões incríveis, recomendo também:
- What’s New In Cocoa Touch: Mais sobre Traits e Size Classes, Dynamic Types, GCD, SFSpeechRecognizer, UICollectionView com self-sizing flow layout, NSUserActivity, App Search, etc;
- What's New in Core Data: Query Generations, UICollectionViewDataSourcePrefetching e CoreData menos verbose;
- Improving Existing Apps with Modern Best Practices: Técnicas para refatorar seu código enquanto adiciona suporte às novas features do iOS;
- Introduction to Notifications: As novas notificações estão sensacionais. Vale a pena conferir como você pode utilizar o máximo delas.
- Protocol and Value Oriented Programming in UIKit Apps: Protocolos, Value Types, Generics e como criar uma app manutenível, testável e que você mostra com orgulho pra outros devs.
Para quem for nos próximos anos, a parte dos labs é tão importante quanto às sessões (ou até mais!). Alguns são por ordem de chegada e outros você precisa agendar, como os labs de Design e App Store.
Indico também que deem uma olhada no WWDC Parties antes de ir. Durante toda a semana os escritórios no centro de São Francisco são abertos para os desenvolvedores que estão pela cidade. Esse ano eu fui em festas na Microsoft, Slack, Mapbox, Yelp e outras. Todas com entrada, comida e bebidas gratuitas (e mais um monte de stickers). 🤓👌
Caso tenha gostado do post, não deixe de curtir e compartilhar com a comunidade! Qualquer dúvida ou sugestão é só deixar um comentário ou entrar em contato comigo!✌️