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);
}