A Apple acabou de realizar o keynote de abertura para o World Wide Developers Conference (WWDC), evento anual específico para desenvolvedores de iOS e OS X , realizado em Moscone Center, em São Francisco. Ano passado a grande notícia foi o novo design com o iOS 7. Este ano o evento foi ainda mais focado em desenvolvedores.
Uma coisa que todos já aguardavam era um novo design para o OS X, para seguir a nova linha limpa de Jony Ive que se iniciou com o iOS 7. O novo OS X 10.10 foi anunciado com o nome de “Yosemite”, indo na lógica de usar nomes de locais conhecidos da Califórnia. Foi interessante até terem feito uma piada de que poderia ser OS X Weeds (que é “maconha” em inglês, além do nome de um local mesmo). Sinais da era pós-Jobs de um pouco mais de coloquialismo.
O novo design retorna um pouco às raízes do início da vida do OS X, com a linguagem visual translúcida do falecido “Aqua”, mas agora com uma cara que remete um pouco ao Windows Vista e Windows 7 de vidro fosco translúcido. Uma nova iconografia e barra de ferramentas integrado à barra de título como no iOS devem trazer mais sobrevida a este que ainda é um dos melhores sistemas operacionais para desktop em existência.
De longe a funcionalidade mais importante é o “Continuity” que basicamente aumenta a integração entre o sistema operacional e os dispositivos móveis. Exemplo: quantas vezes você começou a escrever um email no iPhone e gostaria de poder terminá-lo no aplicativo do desktop? Agora é possível somente com um clique. E quando você encontra um número de telefone numa página web e gostaria de ligar imediatamente? Agora o sistema reconhece números em diversos aplicativos e consegue fazer a ligação diretamente no iPhone.
Coisas esperadas eram novas adições de funcionalidades nos aplicativos padrão do iOS e OS X, como o novo aplicativo de Mail oferecendo mais opções de gestos para marcar um email ou apagá-lo. Além disso, novos aplicativos como o “Photos” entre iOS e OS X, permitindo não só editar como sincronizar as fotos e visualizar a mesma experiência em todos os dispositivos. Isso é algo que se iniciou no iOS 7 e OS X Mavericks com aplicativos com o Calendar, Notes, Maps.
O “Spotlight”, a ferramenta de busca do OS X, agora mudou seu visual e abre uma janela pequena no centro do seu desktop, seguindo a mesma linha de usabilidade de aplicativos de terceiros como o Alfred. O OS X Yosemite também recebe a aba de “Hoje” (Today) com widgets de aplicativos, que permite escolher quais notificações quer mostrar e em qual ordem. No iOS 8 agora há widgets configuráveis.
Com toda essa integração, o iCloud continua ganhando mais funcionalidades e uma delas é o iCloud Drive. Nas versões anteriores já se tornou padrão os aplicativos nativos da Apple como o simples TextEdit até aplicativos do iWork como Keynote, Pages e Numbers automaticamente criarem arquivos diretamente para serem sincronizados no iCloud. Esse espaço não era facilmente navegável pelo Finder, por exemplo. E isso é mais um passo na direção de competir com outros que fazem coisas similares como Dropbox e Google Drive.
O Yosemite, assim como o Mavericks, será gratuito quando for lançado. Normalmente a versão Beta é disponível apenas para desenvolvedores registrados, mas desta vez a Apple está abrindo o programa de Beta para o público. Quem quiser se candidatar e viver com um sistema instável (porque é Beta!) vá à página da Apple para o programa de beta.
Um fato importante para desenvolvedores é a fragmentação da plataforma. Uma das grandes vantagens é que toda nova versão de iOS é imediatamente atualizada pela grande maioria dos usuários de dispositivos iOS – 9 em cada 10 dispositivos já está com a versão iOS 7. O oposto acontece no mundo Android, onde fabricantes vendem hardware ultrapassado para baixar preços e simplesmente não dão suporte de atualização como deveriam. O resultado disso é que somente 1 em cada 10 dispositivos Android roda com a versão mais recente, o KitKat.
Isso é um pesadelo para desenvolvedores, que precisam dar suporte a versões obsoleta. Pior do que isso: para usuários de dispositivos baratos, significa não só que eles não recebem novas funcionalidades como também estão sendo negligenciados em termos de atualizações críticas de seguranças. Isso explica porque 99% dos malwares de dispositivos móveis tem como alvo a plataforma Android. Isso é um fato que a Apple tem razão em deixar bem claro.
A Maçã demonstrou várias novas funcionalidades pequenas em aplicativos como Messages, além de um novo framework chamado HealthKit. Com ele os mais diversos aplicativos que coletam informações podem usar essa nova API para concentrar os diversos aspectos de dados (batimentos cardíacos, variações de peso, medições de glicose, etc) em um único perfil consolidado, que pode ser usado por serviços de saúde e até mesmo hospitais no futuro.
O aplicativo padrão de saúde do sistema, o Health, é um exemplo de como podemos ter uma visão consolidada. Aplicativos médicos são uma tendência. Só não é algo trivial especialmente graças à restrita legislação de dados de saúde, que visam garantir a segurança e privacidade dos dados.
E agora chegamos ao grande foco deste keynote: os diversos novos frameworks, como o HealthKit, que estão na fundação do iOS 8. Outro novo no iOS 8 é o HomeKit, que oferece formas padrão para automação de casas. O Google já avançou nesta direção ao adquirir a Nest, que fabrica dispositivos para controlar digitalmente os diversos aparelhos da sua casa, como o aquecedor baseado em termostato.
Nos EUA esse segmento está muito mais avançado que no Brasil. Mas outra tendência é o barateamento da infraestrutura necessária para tornar a sua casa cada vez mais “inteligente” e conectada. Duas novas adições ao iOS foram particularmente mais importantes neste ponto da apresentação. A primeira, e mais simples, é que finalmentes será possível substituir o teclado padrão por teclados de terceiros. Isso significa que o famoso e excelente SwiftKey Keyboard, que era exclusivo no Android finalmente poderá migrar para iOS.
A segunda, mais complexa, é o que a Apple chamou de “Extensions”. Hoje, apps no iOS são completamente isolados – ou seja: um app nunca pode acessar dados de outro app. A única forma de integração de dados que se tinha era via o rudimentar “copy e paste” manual, ou algo parecido com hyperlinks para abrir determinados apps. Além disso havia a barra de “compartilhar” no Control Center mas reservada somente a apps pré-escolhidos pela Apple (como Facebook ou Twitter).
A partir de agora uma app poderá oferecer uma “extension” que permitirá trocas de dados mediadas pelo iOS para garantir a segurança e privacidade entre aplicações. Desta forma finalmente poderemos ter vários outros aplicativos na aba de compartilhar do iOS (como o Android sempre teve) e, a partir de um aplicativo, podemos enviar o arquivo aberto neste momento para que outro faça alguma edição e depois retornar ao anterior com o conteúdo modificado.
Isso tudo abre toda um novo horizonte de possibilidades no iOS e finalmente a eleva em nível de paridade com o Android KitKat. E agora que temos paridade com o Android, agora vem as coisas que farão ultrapassá-la.
Hoje em dia, desenvolver uma app para iOS significa não somente fazer o aplicativo que se instala no dispositivo propriamente dito, mas também desenvolver uma série de serviços do lado servidor para cuidar de coisas comuns como Autenticação, armazenamento de dados, banco de dados, pesquisa por esses dados, envio de notificações. Essa categoria é chamada de BaaS ou (Backend as a Service) e existem diversas ferramentas e serviço como o Helios que é de código aberto – e o Parse. Mas agora a própria Apple está tentando tornar essa categoria totalmente desnecessária e diminuir ainda mais a barreira de entrada para quem não sabe desenvolver serviços web.
Outro grande avanço é o lançamento da fundação “Metal”. Atualmente qualquer aplicativo gráfico 3D utiliza frameworks como o Core Animation que, por sua vez, se utiliza de uma camada de mais baixo nível que implementa “OpenGL” e pode significar, em teoria, um ganho de até 10 vezes mais performance de processamento gráfico. Uma das desvantagens é remover a portabilidade de certos pedaços de código que poderiam também executar em outras plataformas, criando de fato um lock-in ao Metal. Por outro lado esse problema foi direcionado para a “engines” gráficas como a famosa Unreal Engine ou Unity, portanto acredito que não haverá grandes problemas nisso.
Nas demonstrações feitas no palco, eles afirmaram que indo direto com o Metal é possível portar uma engine que originalmente foi feita para consoles (provavelmente da categoria XBox 360 ou PS3), para rodar diretamente em iPads. Isso deve gerar frutos em breve quando jogos com gráficos realmente de classe console começarem a aparecer em alguns meses.
Além de ir diretamente ao Metal, haverá novos Kits para desenvolvedores de jogos casuais (os avançados vão direto ao Metal sempre) na forma do SpriteKit que já existia no iOS 7 para jogos 2D e o SceneKit que agora traz uma maneira mais fácil de criar jogos 3D. Em termos do que se usa normalmente no mundo de código aberto, o SpriteKit seria o concorrente do Cocos2D e o SceneKit uma versão mais introdutória de um Unity 3D. Ela provê os processamentos comuns de engine de física, efeitos de partícula, detecção de colisão e muito mais.
Quando você termina uma aplicação pode testar sem precisar jogar direto na AppStore. E não só isso mas compartilhar a versão beta com seus clientes ou amigos para que todos possam dar feedback. Para isso surgiram plataformas com o famoso TestFlight. Em fevereiro de 2014 a empresa Burstly foi comprada pela Apple e o resultado já foi mostrado hoje com o TestFlight integrado diretamente à AppStore, com as mesmas funcionalidades mas o melhor: gratuito para todos os desenvolvedores. Essa era uma funcionalidade das mais vitais e agora faz parte do toolkit de todos.
No final da keynote finalmente foi apresentada a grande novidade para os desenvolvedores: há mais de 9 milhões de devs registrados na Apple e todos precisam necessariamente saber a linguagem Objetive-C para poder programar aplicativos para iOS ou OS X.
O Objetive-C, de forma simplificada, é uma “camada” por cima da boa e velha linguagem C. Segundo a opinião deste autor, é a versão definitiva de um C orientado a objetos que o C++ nunca conseguiu ser. Ela é bastante elegante, fornecendo funcionalidades reais de orientação a objetos que mesmo linguagens mais novas como Java não tem ainda. Ela deriva diretamente da linhagem de Smalltalk de Alan Kay e por isso possui funcionalidades como compatibilidade de objetos por protocolos, passagem de mensagens e, em versões mais recentes, blocos e closures.
Ao contrário de C++ o Objective-C mantém compatibilidade direta com C permitindo usar bibliotecas de sistema operacional escritas originalmente em C de forma muito simples e sem indireções. Em anos recentes, a Apple lentamente e continuamente migrou o compilador e o toolchain do antigo GCC (Gnu C Compiler) para o LLVM (Low Level Virtual Machine) que é uma infraestrutura para compiladores. LLVM é muito difícil de explicar em termos leigos mas o importante é entender que ela pode compilar o Objective-C numa LLVM IR (“intermediate representation”, uma representação interna) que ele consegue realizar otimizações para deixá-la mais rápida ao gerar o binário final. Outra vantagem é que o compilador pode pegar linguagens em diferentes sintaxes e gerar o mesmo IR antes de ligá-las no binário final.
Isso significa que não só C ou Objetive-C mas uma “outra linguagem” poderia gerar o mesmo IR. A linguagem Objective-C, por ser tão próxima ao C e compatível com ela, nunca teve uma “roupagem”, uma “sintaxe” mais elegante, apesar de possuir construções muito elegantes. Quando a Apple começou a mudança para LLVM alguns anos atrás, já sabíamos que era uma questão de tempo para que ela mudasse a linguagem.
E para não cair em problemas de radicalismos de facções, ela decidiu não escolher nenhuma linguagem já existente e criou uma nova, chamada Swift. Na prática ela mantém certos aspectos da herança de C como as chaves mas trás coisas mais modernas, como Type Inference que evita que você precise declarar o tipo de uma variável antes de inicializá-la e faz o compilador determinar o tipo baseado no valor atribuído a ela.
Aos amantes de Java, o Swift continua não sendo uma linguagem com virtual machine e garbage collector. Em vez disso ele continua herdando o procedimento ARC de “Automatic Reference Counting”. A linguagem remove os ponto-e-vírgula, faz closures serem mais limpos na sintaxe, tira muitos dos parênteses como em blocos de “if” e “case” e assim por diante. Quem já lidou com linguagens igualmente “limpas” em termos de sintaxe como Scala, Ruby, Python, Go, vai se sentir bastante confortável e automaticamente produtivo. Obviamente a parte mais complicada continua sendo se acostumar e se tornar fluente com o framework Cocoa, e isso ainda é a mesma coisa.
O novo XCode possui um equivalente REPL (“Read-Eval-Print-Loop”) que muitas linguagens dinâmicas possuem mas agora integrada ao editor do XCode e com execução do seu código em momento de edição com uma interpretação gráfica desse código para que você possa ter feedback instantâneo do seu código antes mesmo de terminá-lo. Isso ainda precisamos ver em projetos grandes para ter certeza, mas costuma ser um fator de crashes no XCode ter muita coisa sendo executada em background que envolve seu código. Mas a esta altura, o controle da Apple com o LLVM e as últimas interações do XCode devem ter dado o nível de estabilidade necessário.
Para aprender a programar na linguagem Swift, a Apple publicou seu próprio livro sobre a linguagem e ela já está disponível gratuitamente no iTunes Books Store.
Somente uma sintaxe e estrutura de código mais agradáveis já seriam motivos suficientes para migrar, mas além disso a Apple clama que escrever em Swift pode aumentar as chances de otimização do LLVM e acelerar certos tipos de processamento mais intensivo de 1.3 a até 2 vezes mais. Isso provavelmente podem ser possíveis pontos onde a otimização pode tentar adicionar coisas como o Grand Central Dispatch (GCD) para paralelizar loops, por exemplo, coisas que escrevendo em Objective-C estamos fazendo um loop não-paralelo e precisaríamos manualmente adicionar o suporte ao GCD.
No geral, foi um excelente WWDC. Ano passado ficamos com um gosto de “quero mais” pois o foco foi muito mais na nova linguagem de design do iOS 7. O OS X Mavericks foi um bom lançamento, mas novamente pareceu um “meio do caminho” na integração com o iOS. Agora, o OS X Yosemite dá uma impressão muito mais polida e acabada de um sistema operacional firme no desktop e com integrações úteis e claras com seu companheiro móvel. Já o iOS 8, finalizada a migração cosmética, finalmente nos traz em pé de paridade com funcionalidades do mundo Android como teclados de terceiros, extensões e intercomunicação entre aplicativos, widgest customizáveis na aba de notificações.
Além de trazer a paridade, com os diversos novos frameworks como HealthKit, HomeKit, Extensions, SpriteKit, SceneKit, CloudKit, ultrapassa e aumenta o espectro de possibilidade de todos os aplicativos da AppStore. Esperem novas versões significativamente mais integradas e úteis do que antes nos meses seguintes ao lançamento do iOS 8.
Os desenvolvedores provavelmente receberam tudo que esperavam e mais.
A mídia convencional talvez tenha ficado decepcionada pois esperava lançamento de novos produtos como já aconteceu no passado, talvez o iPhone 6, um Macbook Air com Retina Display, mas nenhum novo produto foi anunciado hoje. E nem deveria: a WWDC é uma conferência específica para desenvolvedores. Com o que foi anunciado aqui novos produtos devem vir em um evento separado no quartel general da Apple, em Cupertino, provavelmente na época de Setembro, que é o melhor momento de preparar o público para as compras de Natal. E é onde eu apostaria ver um novo iPhone 6 ser lançado.
Até lá os desenvolvedores terão a chance de aprender Swift, aprender os novos frameworks, e lançar versões melhoradas de seus aplicativos a tempo para um possível iOS 8 a ser lançado junto com um possível novo iPhone. É assim que um bom cronograma de lançamentos deve funcionar e o WWDC 2014 teve um excelente início e fez este autor, que atualmente é um usuário de Android, realmente considerar o retorno para o mundo iOS.