quinta-feira, 21 de fevereiro de 2013

iOS: Pastas no XCode: Groups vs Folder Reference

Hoje o assunto é um detalhe do XCode que até agora não teve importância para mim, mas começou a ter. Saber a diferença entre Groups e Folder Reference nos projetos do XCode.

Quando você adiciona um arquivo ou vários ou até mesmo uma estrutura de pastas, você vai lá e clica em "Add files" e uma caixa abre e existe uma parte assim:


Mas qual delas escolher? Vamos por partes e explicar primeiro o que é um grupo:



Groups
Com um grupo, apenas a referência do arquivo é gravado e internamente, os arquivos são todos jogados na raíz do projeto, havendo apenas uma organização visual dentro dentro do XCode com as suas pastas amarelas. Na hora, de criar o build, vai tudo para raíz, tanto que quando utiliza esse tipo de referência, na hora de especificar um arquivo, você usa apenas o nome do arquivo. Para projetos que não precisa ter muito senso de organização, isso basta.
Entretanto, se você estiver criando algo para iPad e iPhone e tem recursos separados por pastas, aí mora um problema: se dentro dessas pastas possuirem dois arquivos com o mesmo nome, é provavel que o XCode adicione os dois arquivos em grupos diferentes, mas somente um deles é que vai ser incluído na build.
Uma vantagem do group é que se você deletar um arquivo em que é referenciado pelo XCode, o XCode sentirá a falta e avisará o usuário do arquivo desaparecido.

Folder Reference
No caso do Folder Reference, as pastas azuis, o XCode manterá a referência da pasta e não de cada arquivo. A grande vantagem é que tudo que estiver dentro da pasta será automaticamente adicionado no projeto e se eu modificar externamente, por exemplo, uma imagem que utilizo, o XCode já vai estar atualizado com o arquivo.
Também acho mais organizado porque a estrutura internas do XCode é exatamente igual a estrutura de pastas no disco. Então, os arquivos não são apenas jogados. O único porém disso é que diferente do Group, quando quero referenciar um arquivo, terei que dar o caminho relativo completo, e não apenas o nome do arquivo.
Outra disvantagem do Folder Reference é que se eu excluir um arquivo acidentalmente no disco, não haverá um aviso de arquivo faltando, uma vez que a referência é feita pela pasta e não nos arquivos.

Conclusão
Enfim, essas são as principais diferenças. Eu particularmente prefiro bastante usar Folder Reference, entretanto, alguns casos que utilize os recursos do XCode, como Interface Builder, funcionam melhor com arquivos sendo referenciado. O ideal é analisar cada caso de arquivos que tiver e classificar se não é melhor utilizar uma referência por pasta ou por arquivo.

Um comentário: