A maior vantagem que uma estrutura tem sobre as bibliotecas estáticas é que elas agem como uma maneira pura de empacotar o binário da biblioteca compilada e quaisquer cabeçalhos relacionados. Eles podem ser inseridos no seu projeto (assim como as estruturas internas do SDK, como Foundation e UIKit) e devem funcionar (na maioria das vezes).
A maioria das estruturas contém bibliotecas dinâmicas; estruturas criadas no Xcode usando o modelo do Mac Framework criarão uma biblioteca dinâmica. O iPhone não suporta estruturas dinâmicas, motivo pelo qual se tornou comum que bibliotecas reutilizáveis de código iOS fossem distribuídas como bibliotecas estáticas.
Bibliotecas estáticas são boas, mas requerem um pouco de trabalho extra por parte do usuário. Você precisa vincular seu projeto à biblioteca e copiar os arquivos de cabeçalho no seu projeto ou referenciá-los em algum lugar, definindo os caminhos de pesquisa de cabeçalho apropriados nas configurações de construção.
Então: em resumo, minha opinião é que a melhor maneira de distribuir sua biblioteca é como uma estrutura. Para criar uma estrutura "estática" para iOS, você pode essencialmente usar uma estrutura normal e substituir o binário pela sua biblioteca estática compilada. É assim que distribuo uma de minhas bibliotecas, Resty , e é como pretendo distribuir minhas bibliotecas no futuro.
Você pode querer olhar para o Rakefile fornecido nesse projeto (caso não saiba, Rake é o equivalente a Make de Ruby). Eu tenho várias tarefas para compilar meu projeto (usando xcodebuild
) e empacotá-las como uma estrutura estática para iOS. Você deve achar isso útil.
Como alternativa, você pode usar esses modelos do Xcode 4 para criar uma estrutura iOS.
Atualização 9 de dezembro de 2013 : esta é uma resposta popular, por isso pensei em editar para dizer que minha primeira opção para distribuição de bibliotecas mudou. Minha primeira escolha para qualquer biblioteca de terceiros como consumidor ou produtor é o CocoaPods. Eu distribuo minhas bibliotecas usando CocoaPods e ofereço uma biblioteca estática pré-compilada com cabeçalhos como opção de fallback.