Movendo Lottie Rapidamente para o Futuro

Uma história pessoal sobre como o Airbnb reescreveu a popular biblioteca de código aberto Lottie em um novo idioma

Tyler Hedrick em Airbnb Engineering & Data Science Seguir 7 de maio · 5 min ler Venha se juntar a nós para trabalhar no desenvolvimento do Swift em nosso lindo escritório!

O Lottie é uma biblioteca para Android, iOS, Web e Windows que analisa as animações do Adobe After Effects exportadas como JSON com o Bodymovin e as processa nativamente no celular e na Web. Se você ainda não leu a postagem de Brandon sobre a reescrita Swift de Lottie no iOS, confira! Gostaríamos de fornecer um pouco mais sobre o motivo pelo qual decidimos investir nesta reescrita.

Lottie foi escrito há dois anos em Objective-C numa época em que o Airbnb não estava totalmente migrado para o Swift, e a maioria das empresas ainda não adotou o Swift. Avanço rápido para 2019 – mais de 50% de todos os principais aplicativos que não são jogos estão usando o Swift . O aplicativo da Airbnb tem mais de 90% de código Swift e não escrevemos o Objective-C há anos. Era hora de trazer o Lottie, um de nossos repositórios de código aberto mais populares, para o futuro, reescrevendo-o no Swift.

Por que reescrever?

Muitos desenvolvedores fariam uma pausa se você dissesse que planeja reescrever uma grande biblioteca de código aberto do zero. Por que não apenas construir em cima disso? A versão do Objective-C estava funcionando bem; por que não manter o status quo? Percebemos que, ao considerar as diferenças entre o Objective-C e o Swift, uma reescrita era apropriada por vários motivos:

  • A interoperabilidade do Objective-C para Swift ainda não é excelente . Funciona, mas é o máximo que você pode dizer sobre isso. Se apenas escrevêssemos algumas camadas de Lottie no Swift, acabaríamos com uma base de código híbrida que força os colaboradores a lidar com esse desafio por mais tempo e não move a biblioteca para frente.
  • O Swift tem muitos aperfeiçoamentos de linguagem maravilhosos , como structs, correspondência de padrões, melhor imutabilidade, controles de acesso mais rígidos, tipos poderosos de enum, paradigmas de programação funcional e muito mais. Nenhum desses recursos está disponível em Objective-C, o que significa que a base de código do Lottie também perderia todos esses recursos e quaisquer novos que fossem introduzidos no futuro.
  • A mudança de contexto de Objective-C para Swift leva tempo , e torna o trabalho em Lottie e uma base de código moderna lado-a-lado mais difícil e frustrante.
  • Mais e mais engenheiros estão aprendendo Swift primeiro sem nunca tocar em Objective-C. À medida que o número de engenheiros com esse background aumenta, os projetos escritos em Objective-C ficam desatualizados e inacessíveis a esses engenheiros mais novos do iOS.

Minha própria história rápida

Quando eu comecei no Airbnb, eu realmente não conhecia o Swift. Eu estava muito confortável e feliz escrevendo Objective-C; por que mudar isso? Em 2017, a Swift estava passando por muitas mudanças e a interoperabilidade com a Objective-C foi um grande desafio para se lidar. As mensagens de erro muitas vezes eram difíceis de seguir e o compilador não dava muita ajuda. Objetivo-C era uma linguagem muito mais madura e simplesmente funcionava melhor. Por essas razões, eu não gostava ativamente do Swift e evitava usá-lo sempre que podia.

Curiosamente, uma das principais razões pelas quais me juntei ao Airbnb foi porque eu sabia que precisava aprender Swift para avançar em minha carreira como engenheiro de iOS. A Airbnb foi líder na transição para o Swift, tendo reescrito a maior parte do aplicativo no Swift 2 no final de 2016. Quando entrei, o aplicativo tinha acabado de ser atualizado para suportar o Swift 3 , e eu estava cautelosamente otimista sobre me forçar a usar o linguagem que evitei por anos. Assim como com qualquer linguagem (programação ou não), você pode aprender muito rapidamente imergindo-se totalmente nela. Fui apresentado a structs, paradigmas poderosos de programação funcional e escrevendo código orientado a protocolos. Cheguei ao trabalho animado para aprender mais sobre essa linguagem, e todos os dias ficou um pouco mais fácil. Sim, houve obstáculos ao longo do caminho (o principal deles sendo tempos de compilação lenta), mas depois de alguns meses eu realmente cresci para amar a linguagem e todas as suas complexidades.

Já faz dois anos desde que eu escrevi o Objective-C, e agora estou no time que possui e mantém a biblioteca Lottie. Como parte disso, tive que examinar o código-fonte do Lottie às vezes para resolver erros ou perguntas feitas por outros engenheiros. Fazer isso se tornou uma grande mudança de contexto para o Objective-C, que me tira do fluxo usual e está ficando cada vez mais difícil.

Enquanto eu estava trabalhando na implementação de um novo botão animado usando uma animação Lottie, me deparei com um bug onde certas camadas da animação não estavam sendo ocultadas corretamente com base no estado do botão. Enquanto eu procurava o código-fonte de renderização para encontrar o culpado, rapidamente me vi perdido no código Objective-C que estava em camadas como uma cebola. Lottie tem classes para diferentes tipos de camadas, máscaras, formas, gradientes, traçados e transformações. Tem sido contribuído por muitos outros engenheiros que escrevem código com estilos diferentes. Existem métodos que foram adicionados e todos fazem a mesma coisa de maneiras ligeiramente diferentes. Eu fiquei frustrado tentando decifrar o que era importante e o que era apenas barulho que precisava ser filtrado.

Tornou-se óbvio que tentar depurar esse problema sem ajuda era quase impossível. A fim de permitir que mais pessoas contribuíssem diretamente com a biblioteca para resolver esses tipos de problemas, percebemos que nossa melhor opção era mover o Lottie para o futuro e reescrevê-lo no Swift.

Durante a reescrita, pude trabalhar com Brandon diretamente na nova versão do Lottie e dar informações sobre como ela poderia ser melhorada. Quando integramos a nova versão no aplicativo da Airbnb, eu pude encontrar novos bugs e reportá-los ou contribuir de volta e corrigi-los eu mesmo. Eu adicionei suporte para compatibilidade com Objective-C e corrigi alguns problemas com a nova classe AnimatedSwitch . Ser capaz de trabalhar nesta biblioteca foi fortalecedor, e eu finalmente sinto que posso não só depurar novos problemas, mas também retribuir à comunidade melhorando-a para todos.

Compromisso da Airbnb com o código aberto

O Airbnb adora trabalhar com a comunidade de código aberto. Não poderíamos criar nossos aplicativos e serviços com a maior rapidez e facilidade, sem uma infinidade de softwares de código aberto, e queremos fazer o que pudermos para devolver. Esta foi a nossa principal motivação para abrir o código Lottie há dois anos. Quando fizemos uma parceria com Brandon Withrow para reescrever Lottie em Swift, sabíamos que a única opção seria fazê-lo a céu aberto e dar acesso à comunidade o mais cedo possível. Desde a atualização da versão open source do Lottie para a versão 3.0, recebemos muitos comentários, problemas e solicitações da comunidade que melhoraram muito essa nova versão.

Esperamos que você e suas equipes aproveitem esta atualização e que outros membros da comunidade continuem a fazer parceria conosco nessa nova plataforma modernizada para torná-la melhor. Muito obrigado por todo seu apoio aos projetos de código aberto da Lottie e da Airbnb!