Acho que agora consegui resolver todos os problemas que estava enfrentando.
- Parece ser melhor usar títulos de elemento de grupo para manter as licenças (isso é o que a Apple faz nos aplicativos iWork). No entanto, há um limite para o comprimento deles (e ainda não descobri exatamente qual é o limite), então você precisa dividir cada arquivo de licença em várias sequências.
- Você pode criar uma quebra de linha dentro deles incluindo um retorno de carro literal (ou seja, também conhecido como ^ M, \ r ou 0x0A)
- Certifique-se de não incluir nenhum texto do meio literal. Se você fizer isso, algumas ou todas as strings no arquivo serão ignoradas silenciosamente.
Eu tenho um script de conveniência que uso para ajudar a gerar o arquivo .plist e .strings, mostrado abaixo.
Para usá-lo:
- Crie um diretório de 'licenças' em seu projeto
- Coloque o script nesse diretório
- Coloque cada licença nesse diretório, uma por arquivo, com nomes de arquivo que terminam .license
- Execute qualquer reformatação necessária nas licenças. (por exemplo, remova os espaços extras no início das linhas, certifique-se de que não haja quebras de linha no meio do parágrafo). Deve haver uma linha em branco entre cada parágrafo
- Mude para o diretório de licenças e execute o script
- Edite seu pacote de configurações Root.plist para incluir uma seção secundária chamada 'Agradecimentos'
Aqui está o script:
#!/usr/bin/perl -w
use strict;
my $out = "../Settings.bundle/en.lproj/Acknowledgements.strings";
my $plistout = "../Settings.bundle/Acknowledgements.plist";
unlink $out;
open(my $outfh, '>', $out) or die $!;
open(my $plistfh, '>', $plistout) or die $!;
print $plistfh <<'EOD';
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StringsTable</key>
<string>Acknowledgements</string>
<key>PreferenceSpecifiers</key>
<array>
EOD
for my $i (sort glob("*.license"))
{
my $value=`cat $i`;
$value =~ s/\r//g;
$value =~ s/\n/\r/g;
$value =~ s/[ \t]+\r/\r/g;
$value =~ s/\"/\'/g;
my $key=$i;
$key =~ s/\.license$//;
my $cnt = 1;
my $keynum = $key;
for my $str (split /\r\r/, $value)
{
print $plistfh <<"EOD";
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>$keynum</string>
</dict>
EOD
print $outfh "\"$keynum\" = \"$str\";\n";
$keynum = $key.(++$cnt);
}
}
print $plistfh <<'EOD';
</array>
</dict>
</plist>
EOD
close($outfh);
close($plistfh);
Configurando seu Settings.bundle
Se você não criou um Settings.bundle, vá para Arquivo -> Novo -> Novo arquivo ...
Na seção Recursos, encontre o Pacote de configurações. Use o nome padrão e salve-o na raiz do seu projeto.
Expanda o Settings.bundle
grupo e selecione Root.plist
. Você precisará adicionar uma nova seção onde sua chave será Preference Items
do tipo Array
. Adicione as seguintes informações:
A Filename
chave aponta para o plist que foi criado por este script. Você pode alterar o title
para o que quiser.
Executar script em tempo de construção
Além disso, se você deseja que este script seja executado sempre que construir seu projeto, você pode adicionar uma fase de construção ao seu destino:
- Vá para o arquivo do seu projeto
- Selecione o alvo
- Clique na guia Build Phases
- No canto inferior direito desse painel, clique em 'Adicionar fase de construção'
- Selecione 'Adicionar Script de Execução'
- Arraste e solte seu script perl na seção de seu script. Modifique para se parecer com isto:
cd $SRCROOT/licenses
( $SRCROOT
aponta para a raiz do seu projeto)
./yourScriptName.pl
Depois de terminar isso, você pode arrastar a Run Script
fase de construção mais cedo no processo de construção. Você vai querer movê-lo antes Compile Sources
para que as atualizações de seu pacote de configurações sejam compiladas e copiadas.
Atualização para iOS 7: o iOS 7 parece lidar com a chave "Título" de maneira diferente e bagunça o texto renderizado. Para corrigir que o Acknowledgements.plist gerado precisa usar a chave "FooterText" em vez de "Title". Veja como alterar o script:
for my $str (split /\r\r/, $value)
{
print $plistfh <<"EOD";
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>FooterText</key> # <= here is the change
<string>$keynum</string>
</dict>
EOD
print $outfh "\"$keynum\" = \"$str\";\n";
$keynum = $key.(++$cnt);
}
Esta é a mesma solução que @JosephH forneceu (sem traduções), mas feita em Python para quem prefere python em vez de perl
fonte
<3
Perl. ;)current_file = codecs.open(filename, 'r', 'utf-8')
para licenças Unicode.Como alternativa, para aqueles que usam CocoaPods, ele gerará uma plist de 'Reconhecimentos' para cada destino especificado em seu Podfile, que contém os detalhes da licença para cada Pod usado nesse destino (assumindo que os detalhes foram especificados na especificação do Pod). O arquivo de lista de propriedades que pode ser adicionado ao pacote de configurações do iOS.
Também há projetos em andamento para permitir que esses dados sejam convertidos e exibidos no aplicativo:
https://github.com/CocoaPods/cocoapods-install-metadata
https://github.com/cocoapods/CPDAcknowledgements
fonte
Pensei em lançar minha iteração no incrível código python de Sean na mistura. A principal diferença é que ele pega um diretório de entrada e então procura recursivamente por arquivos de LICENÇA. Ele deriva o valor do título do diretório pai do arquivo LICENSE, portanto, funciona bem com cocoapods.
A motivação era criar um script de compilação para manter automaticamente a seção jurídica do meu aplicativo atualizada conforme adiciono ou removo pods. Ele também faz algumas outras coisas, como remover novas linhas forçadas das licenças para que os parágrafos fiquem um pouco melhores nos dispositivos.
https://github.com/carloe/LicenseGenerator-iOS
fonte
Fiz um script em Ruby inspirado pelo script @JosephH. Esta versão irá, na minha opinião, representar melhor os projetos individuais de código aberto.
Wisit iOS-AcknowledgementGenerator para baixar o script e o projeto de amostra.
Esta é a aparência dos reconhecimentos em seu aplicativo:
fonte
Este é um adendo à resposta de JosephH. (Não tenho representante para comentar)
Tive que
<key>StringsTable</key> <string>Acknowledgements</string>
descer para acima do último</dict>
no script Perl.Antes dessa modificação, a seção Agradecimentos no aplicativo estava vazia e o XCode não conseguia ler o Acknowledgements.plist resultante. ("Os dados não puderam ser lidos porque não estão no formato correto.")
(XCode 6.3.2 iOS 8.3)
fonte
O script Python de Sean neste tópico funciona. Mas há algumas coisas básicas a saber.
fonte
Ack Ack: Acknowledgement Plist Generator
Há algum tempo, criei um script Python que verifica os arquivos de licença e cria um plist de Agradecimentos que você pode usar em Settings.plist. Isso faz muito trabalho para você.
https://github.com/Building42/AckAck
Recursos
--help
para obter detalhes)Instalar
Corre
Captura de tela
Se você tiver sugestões de melhorias, fique à vontade para postar um problema ou solicitar solicitação no GitHub!
fonte