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);
}
Hier ist die gleiche Lösung, die @JosephH (ohne Übersetzungen) bereitgestellt hat, jedoch in Python für alle, die Python gegenüber Perl bevorzugen
quelle
<3
Perl-Syntax. ;)current_file = codecs.open(filename, 'r', 'utf-8')
für Unicode-Lizenzen.Alternativ wird für Benutzer von CocoaPods eine Liste "Danksagungen" für jedes in Ihrer Poddatei angegebene Ziel generiert, die die Lizenzdetails für jeden in diesem Ziel verwendeten Pod enthält (vorausgesetzt, die Details wurden in der Pod-Spezifikation angegeben). Die Eigenschaftslistendatei, die dem iOS-Einstellungspaket hinzugefügt werden kann.
Es sind auch Projekte im Gange, mit denen diese Daten konvertiert und stattdessen in der App angezeigt werden können:
https://github.com/CocoaPods/cocoapods-install-metadata
https://github.com/cocoapods/CPDAcknowledgements
quelle
Ich dachte, ich würde meine Iteration auf Seans fantastischen Python-Code in der Mischung werfen. Der Hauptunterschied besteht darin, dass ein Eingabeverzeichnis verwendet und dann rekursiv nach LIZENZDATEIEN durchsucht wird. Der Titelwert wird aus dem übergeordneten Verzeichnis der LICENSE-Datei abgeleitet, sodass er gut mit Cocoapods funktioniert.
Die Motivation bestand darin, ein Build-Skript zu erstellen, um den rechtlichen Bereich meiner App automatisch auf dem neuesten Stand zu halten, wenn ich Pods hinzufüge oder entferne. Es werden auch einige andere Dinge ausgeführt, z. B. das Entfernen erzwungener Zeilenumbrüche aus Lizenzen, damit die Absätze auf den Geräten etwas besser aussehen.
https://github.com/carloe/LicenseGenerator-iOS
quelle
Ich habe ein Skript in Ruby erstellt, das vom @ JosephH-Skript inspiriert ist. Diese Version wird meiner Meinung nach die einzelnen Open Source-Projekte besser repräsentieren.
Wisit iOS-AcknowledgementGenerator zum Herunterladen des Skripts und des Beispielprojekts.
So sehen Bestätigungen in Ihrer App aus:
quelle
Dies ist ein Nachtrag zu JosephHs Antwort. (Ich habe nicht den Repräsentanten, um zu kommentieren)
Ich musste mich im Perl-Skript
<key>StringsTable</key> <string>Acknowledgements</string>
nach oben bewegen</dict>
.Vor dieser Änderung war der Abschnitt "Danksagungen" in der App leer und XCode konnte die resultierende Acknowledgements.plist nicht lesen. ("Die Daten konnten nicht gelesen werden, da sie nicht im richtigen Format vorliegen.")
(XCode 6.3.2 iOS 8.3)
quelle
Das Python-Skript von Sean in diesem Thread funktioniert. Aber es gibt ein paar grundlegende Dinge zu wissen.
quelle
Ack Ack: Bestätigungslistengenerator
Vor Zeit habe ich ein Python-Skript erstellt, das nach Lizenzdateien und eine schöne Acknowledgements Plist erstellt, die Sie in Ihrer Settings.plist verwenden können. Es erledigt einen Großteil der Arbeit für Sie.
https://github.com/Building42/AckAck
Eigenschaften
--help
für Details)Installieren
Lauf
Bildschirmfoto
Wenn Sie Verbesserungsvorschläge haben, können Sie gerne ein Problem posten oder eine Anfrage auf GitHub ziehen!
quelle