Ich glaube, ich habe es jetzt geschafft, alle Probleme zu lösen, auf die ich gestoßen bin.
- Es scheint am besten zu sein, Gruppenelementtitel zu verwenden, um die Lizenzen zu halten (dies ist, was Apple in den iWork-Apps tut). Die Länge dieser Dateien ist jedoch begrenzt (und ich habe noch nicht genau herausgefunden, wie hoch die Grenze ist). Daher müssen Sie jede Lizenzdatei in mehrere Zeichenfolgen aufteilen.
- Sie können innerhalb dieser einen Zeilenumbruch erstellen, indem Sie einen wörtlichen Wagenrücklauf einfügen (dh auch als ^ M, \ r oder 0x0A bezeichnet).
- Stellen Sie sicher, dass kein Literal in der Mitte des Textes enthalten ist. Wenn Sie dies tun, werden einige oder alle Zeichenfolgen in der Datei stillschweigend ignoriert.
Ich habe ein praktisches Skript, mit dem ich die unten gezeigten Dateien .plist und .strings generieren kann.
Um es zu benutzen:
- Erstellen Sie unter Ihrem Projekt ein Lizenzverzeichnis
- Legen Sie das Skript in dieses Verzeichnis
- Legen Sie jede Lizenz in dieses Verzeichnis, eine pro Datei, mit Dateinamen, die mit .license enden
- Führen Sie alle erforderlichen Neuformatierungen der Lizenzen durch. (z. B. zusätzliche Leerzeichen am Zeilenanfang entfernen, sicherstellen, dass in der Mitte des Absatzes keine Zeilenumbrüche vorhanden sind). Zwischen jedem Absatz sollte eine Leerzeile stehen
- Wechseln Sie in das Lizenzverzeichnis und führen Sie das Skript aus
- Bearbeiten Sie das Einstellungspaket Root.plist so, dass es einen untergeordneten Abschnitt mit dem Namen "Danksagungen" enthält.
Hier ist das Skript:
#!/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);
Einrichten Ihres Settings.bundle
Wenn Sie kein Settings.bundle erstellt haben, gehen Sie zu Datei -> Neu -> Neue Datei ...
Suchen Sie im Abschnitt Ressource das Einstellungspaket. Verwenden Sie den Standardnamen und speichern Sie ihn im Stammverzeichnis Ihres Projekts.
Erweitern Sie die Settings.bundle
Gruppe und wählen Sie Root.plist
. Sie müssen einen neuen Abschnitt hinzufügen, in dem der Schlüssel Preference Items
vom Typ ist Array
. Fügen Sie die folgenden Informationen hinzu:
Der Filename
Schlüssel zeigt auf die Liste, die von diesem Skript erstellt wurde. Sie können das ändern title
, was immer Sie wollen.
Führen Sie das Skript zur Erstellungszeit aus
Wenn Sie möchten, dass dieses Skript bei jeder Erstellung Ihres Projekts ausgeführt wird, können Sie Ihrem Ziel eine Erstellungsphase hinzufügen:
- Gehen Sie zu Ihrer Projektdatei
- Wählen Sie das Ziel aus
- Klicken Sie auf die Registerkarte Phasen erstellen
- Klicken Sie in der unteren rechten Ecke dieses Bereichs auf "Build-Phase hinzufügen".
- Wählen Sie "Run-Skript hinzufügen".
- Ziehen Sie Ihr Perl-Skript per Drag & Drop in den Abschnitt für Ihr Skript. Ändern Sie, um ungefähr so auszusehen:
cd $SRCROOT/licenses
( $SRCROOT
zeigt auf die Wurzel Ihres Projekts)
./yourScriptName.pl
Nachdem Sie dies abgeschlossen haben, können Sie die Run Script
Erstellungsphase früher im Erstellungsprozess ziehen. Sie sollten es vorher nach oben verschieben, Compile Sources
damit die Aktualisierungen Ihres Einstellungspakets kompiliert und kopiert werden.
Update für iOS 7: iOS 7 scheint die "Titel" -Taste anders zu behandeln und bringt den gerenderten Text durcheinander. Um dies zu beheben, muss die generierte Acknowledgements.plist anstelle von "Title" den Schlüssel "FooterText" verwenden. So ändern Sie das Skript:
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);
}