Penso di essere riuscito a risolvere tutti i problemi che stavo incontrando.
- Sembra essere meglio usare i titoli degli elementi del gruppo per contenere le licenze (questo è ciò che Apple fa nelle app iWork). Esiste tuttavia un limite alla lunghezza di questi (e non ho ancora scoperto esattamente quale sia il limite), quindi è necessario suddividere ogni file di licenza in più stringhe.
- È possibile creare un'interruzione di riga all'interno di questi includendo un ritorno a capo letterale (ad es. Altrimenti noto come ^ M, \ r o 0x0A)
- Assicurati di non includere alcun testo letterale. Se lo fai, alcune o tutte le stringhe nel file verranno silenziosamente ignorate.
Ho un comodo script che utilizzo per generare i file .plist e .strings, mostrati di seguito.
Per usarlo:
- Crea una directory "licenze" nel tuo progetto
- Metti lo script in quella directory
- Metti ogni licenza in quella directory, una per file, con nomi di file che terminano con .license
- Eseguire qualsiasi riformattazione necessaria sulle licenze. (es. rimuovere gli spazi extra all'inizio delle righe, assicurarsi che non ci siano interruzioni di riga a metà paragrafo). Dovrebbe esserci una riga vuota tra ogni paragrafo
- Passare alla directory delle licenze ed eseguire lo script
- Modifica il tuo bundle di impostazioni Root.plist per includere una sezione figlia chiamata "Riconoscimenti"
Ecco lo 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);
Configurazione di Settings.bundle
Se non hai creato un Settings.bundle, vai su File -> Nuovo -> Nuovo file ...
Nella sezione Risorsa, trova il pacchetto di impostazioni. Usa il nome predefinito e salvalo nella radice del tuo progetto.
Espandi il Settings.bundle
gruppo e seleziona Root.plist
. Dovrai aggiungere una nuova sezione in cui la sua chiave sarà Preference Items
di tipo Array
. Aggiungi le seguenti informazioni:
I Filename
punti chiave per il plist che è stato creato da questo script. Puoi cambiarlo title
in quello che vuoi.
Esegui script in fase di compilazione
Inoltre, se desideri che questo script venga eseguito ogni volta che costruisci il tuo progetto, puoi aggiungere una fase di compilazione al tuo obiettivo:
- Vai al file del tuo progetto
- Seleziona il bersaglio
- Fare clic sulla scheda Build Phases
- Nell'angolo in basso a destra di quel riquadro, fare clic su "Aggiungi fase di compilazione"
- Seleziona "Add Run Script"
- Trascina e rilascia il tuo script perl nella sezione del tuo script. Modifica per assomigliare a questo:
cd $SRCROOT/licenses
( $SRCROOT
indica la radice del tuo progetto)
./yourScriptName.pl
Dopo aver terminato, puoi trascinare la Run Script
fase di creazione prima nel processo di creazione. Ti consigliamo di spostarlo prima in Compile Sources
modo che gli aggiornamenti al tuo pacchetto di impostazioni vengano compilati e copiati.
Aggiornamento per iOS 7: iOS 7 sembra gestire il tasto "Titolo" in modo diverso e sta incasinando il testo visualizzato. Per risolvere il problema, il file Riconoscimenti.plist generato deve utilizzare la chiave "FooterText" invece di "Title". Ecco come cambiare lo 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);
}