Criando um projeto open-source: iOS-Check-Permission
Autor: Douglas Del Frari | Publicado: 2015-08-06T18:41:00-03:00

No dia a dia do programador é bastante comum trabalhar com diversos algoritmos para resolver problemas específicos da empresa ou do cliente. Muitos dos programas as vezes ficam esquecidos quando o projeto acaba. Uma forma de preservar as soluções de código desenvolvidos é criar um ou mais componentes e publicá-los em comunidades abertas. Vou descrever uma experiência de publicar um componente no Github.com.

O componente iOS-Check-Permission

 Criei um componente para permitir as aplicações em iOS solicitarem a permissão de uso dos seguintes recursos nativos do celular de forma transparente a o mais simples possível:

Calendar (permitir acessar o calendário do usuário para marcar eventos)
Reminder (permitir usar o recurso de agendamentos de lembretes)
Gallery (ter acesso as fotos ou vídeos da galeria do aparelho)
Location (para usar o GPS obtendo a localização atual)



iOS-Check-Permission [1]

Ouça também o podcast:



Por que criar um componente/biblioteca?

Havia necessidade de escrever um código para ter acesso a galeria de imagens do usuário usando a tecnologia do iOS, bem como, a necessidade de obter a permissão da Câmera do celular para tirar fotos com o iPhone. Um código inicial foi escrito para fazer isso funcionar usando a linguagem Objective-C. Porém, percebi que poderíamos reusar essa solução em outros projetos, caso isso fosse necessário. 

No início, havia uma classe utilitária para ser usada dentro do projeto, com a solução de código que permitia reusar o recurso para usar a câmera nativa sempre que fosse necessária. Esse recurso requer solicitar autorização do usuário para poder ser utilizado no aparelho. Com o andar do projeto, algumas outras permissões foram sendo necessárias, pois a medida que novos recursos foram sendo requisitados, tais como uso da galeria de imagens do iPhone e do recurso de lembretes (Reminders), também precisei de uma solução parecida com o que já tinha feito.

Então venho a ideia de componentizar a atual classe utilitária para se tornar um componente reusável. Embora essa ideia não tenha nada de sofisticado, para se tornar um componente na prática é preciso decidir onde vai colocar isso. Poderia ser, por exemplo, no próprio repositório do projeto, dentro da empresa que você trabalha.
Mas será que outras pessoas iriam encontrar?
Será que os próprios colegas da empresa em questão saberiam que isso está ali disponível?
A prática mostra que não. E que seria preciso colocar o componente em outro repositório, preferencialmente que seja popular e conhecido entre a comunidade de usuários de desenvolvedores. Assim, pensei e resolvi colocar no repositório Github, cujo nome do componente se tornou

&nbsp; iOS-Check-Permission - https://github.com/douglasddf/iOS-Check-Permission&nbsp; 
O resultado foi que encontrei um pretexto para continuar fazendo o que mais gosto: programar.&nbsp;
Após alguns resultados positivos, surgiu a necessidade de fazer um exemplo de uso para demonstrar as funcionalidades básicas do componente, bem como, já servir de base para outros entenderem como poderia ser usado. O vídeo abaixo foi feito para ilustrar sem que o desenvolvedor precise instalar as ferramentas Xcode.



Para colocar no GITHUB foi necessária criar uma conta e ler os guias para entender como enviar o código para lá. Como o próprio nome diz, GIT&nbsp;+ HUB se baseia na ferramenta do GIT {já escrevi outro post aqui sobre ele}. Outros conhecimentos foram necessários, como escrever um pequeno texto em English para descrever o que o componente faz. Afinal, se não explicar, como os outros vão saber para que serve?

Outro ponto que posso destacar é que no processo de estar fazendo, surgiu a demanda de fazer a biblioteca suportar o recurso de Localização (Location). No entanto, para minha surpresa, a forma de fazer isso funcionar não se parecia em nada com a abordagem dos outros recursos. Ou seja, surge um novo desafio pessoal. :)

Além disso, após já ter publicada a biblioteca no repositório e ter avisado os colegas, vem aquele amigo e diz que ainda não está bom o suficiente, precisa suportar o COCOAPOD. Mais um desafio que surge e que você não previu antes, mas que passou a ser importante para que o componente possa ter maior alcance.

Então você percebe que não tem tempo. O que você faz?
A relação do tempo têm haver com a priorização que queremos dar as tarefas diárias. Programar é muito bom quando se faz com prazer, logo, posso arrumar tempo para isso no dia a dia. Pois quanto maior for o desafio, maior será o seu aprendizado. Mas não se sabe ou não se aprende somente na teoria, mas na prática e gerando resultados que vai prover as lições para nos mostrar as respostas.

Resultados só vem após tentar, fazer e conseguir.&nbsp;
Compartilhar uma solução na comunidade de open-source, tal como o github, faz com que haja uma preocupação extra com a qualidade do código final. Mas para mim, o mais legal é ter o sentimento de contribuir com a comunidade e porque não: contribuir com a humanidade, do seu jeito, da sua forma, com seu esforço.

Pode não ter dinheiro envolvido, mas tem a causa de contribuir que essa, de uma forma desconhecida, há de se ter um benefício a longo prazo a você e a muitos outros. &nbsp;