Je pense que j'ai maintenant réussi à résoudre tous les problèmes que je rencontrais.
- Il semble préférable d'utiliser les titres des éléments de groupe pour détenir les licences (c'est ce que fait Apple dans les applications iWork). Il y a cependant une limite sur la longueur de ceux-ci (et je n'ai pas encore découvert exactement quelle est la limite), vous devez donc diviser chaque fichier de licence en plusieurs chaînes.
- Vous pouvez créer un saut de ligne à l'intérieur de ceux-ci en incluant un retour chariot littéral (autrement dit, appelé ^ M, \ r ou 0x0A)
- Veillez à ne pas inclure de texte intermédiaire de littéral. Si vous le faites, certaines ou toutes les chaînes du fichier seront ignorées en silence.
J'ai un script pratique que j'utilise pour générer les fichiers .plist et .strings, illustrés ci-dessous.
Pour l'utiliser:
- Créez un répertoire 'licences' sous votre projet
- Mettez le script dans ce répertoire
- Mettez chaque licence dans ce répertoire, une par fichier, avec des noms de fichiers qui se terminent par .license
- Effectuez tout reformatage nécessaire sur les licences. (par exemple, supprimez les espaces supplémentaires au début des lignes, assurez-vous qu'il n'y a pas de sauts de ligne au milieu du paragraphe). Il devrait y avoir une ligne vide entre chaque paragraphe
- Accédez au répertoire des licences et exécutez le script
- Modifiez votre ensemble de paramètres Root.plist pour inclure une section enfant appelée «Remerciements»
Voici le 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);
Configuration de votre Settings.bundle
Si vous n'avez pas créé de Settings.bundle, allez dans Fichier -> Nouveau -> Nouveau fichier ...
Dans la section Ressource, recherchez l'ensemble de paramètres. Utilisez le nom par défaut et enregistrez-le à la racine de votre projet.
Développez le Settings.bundle
groupe et sélectionnez Root.plist
. Vous devrez ajouter une nouvelle section où sa clé sera Preference Items
de type Array
. Ajoutez les informations suivantes:
La Filename
clé pointe vers le plist créé par ce script. Vous pouvez changer le title
en ce que vous voulez.
Exécuter le script au moment de la construction
De plus, si vous souhaitez que ce script s'exécute chaque fois que vous générez votre projet, vous pouvez ajouter une phase de génération à votre cible:
- Accédez à votre dossier de projet
- Sélectionnez la cible
- Cliquez sur l'onglet Phases de construction
- Dans le coin inférieur droit de ce volet, cliquez sur `` Ajouter une phase de construction ''
- Sélectionnez "Ajouter un script d'exécution"
- Faites glisser et déposez votre script perl dans la section de votre script. Modifiez pour ressembler à quelque chose comme ceci:
cd $SRCROOT/licenses
( $SRCROOT
pointe vers la racine de votre projet)
./yourScriptName.pl
Une fois que vous avez terminé, vous pouvez faire glisser la Run Script
phase de construction plus tôt dans le processus de construction. Vous voudrez le déplacer avant Compile Sources
afin que les mises à jour de votre ensemble de paramètres soient compilées et copiées.
Mise à jour pour iOS 7: iOS 7 semble gérer la touche "Titre" différemment et gâche le texte rendu. Pour résoudre ce problème, le fichier Acknowledgements.plist généré doit utiliser la clé "FooterText" au lieu de "Title". Voici comment changer le 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);
}
Voici la même solution fournie par @JosephH (sans traductions), mais réalisée en Python pour tous ceux qui préfèrent python à perl
la source
<3
Perl. ;)current_file = codecs.open(filename, 'r', 'utf-8')
pour les licences Unicode.En guise d'alternative, pour ceux qui utilisent CocoaPods, il générera un plist `` Acknowledgements '' pour chaque cible spécifiée dans votre Podfile qui contient les détails de la licence pour chaque Pod utilisé dans cette cible (en supposant que les détails ont été spécifiés dans la spécification du Pod). Le fichier de liste de propriétés qui peut être ajouté au groupe de paramètres iOS.
Il existe également des projets en cours pour permettre à ces données d'être converties et affichées dans l'application à la place:
https://github.com/CocoaPods/cocoapods-install-metadata
https://github.com/cocoapods/CPDAcknowledgements
la source
J'ai pensé lancer mon itération sur le génial code python de Sean dans le mix. La principale différence est qu'il prend un répertoire d'entrée, puis le recherche de manière récursive pour les fichiers LICENCE. Il dérive la valeur du titre du répertoire parent du fichier LICENSE, donc il joue bien avec les cocoapodes.
La motivation était de créer un script de construction pour maintenir automatiquement la section légale de mon application à jour lorsque j'ajoute ou supprime des pods. Il fait également d'autres choses comme supprimer les nouvelles lignes forcées des licences afin que les paragraphes soient un peu meilleurs sur les appareils.
https://github.com/carloe/LicenseGenerator-iOS
la source
J'ai fait un script en Ruby inspiré du script @JosephH. Cette version représentera, à mon avis, mieux les projets open source individuels.
Wisit iOS-AcknowledgementGenerator pour télécharger le script et l'exemple de projet.
Voici à quoi ressembleront les remerciements dans votre application:
la source
Ceci est un addendum à la réponse de JosephH. (Je n'ai pas le représentant pour commenter)
J'ai dû
<key>StringsTable</key> <string>Acknowledgements</string>
descendre au-dessus du dernier</dict>
dans le script Perl.Avant cette modification, la section Acknowledgements de l'application était vide et XCode ne pouvait pas lire le Acknowledgements.plist résultant. ("Les données n'ont pas pu être lues car elles ne sont pas au bon format.")
(XCode 6.3.2 iOS 8.3)
la source
Le script Python de Sean dans ce fil fonctionne. Mais il y a quelques choses de base à savoir.
la source
Ack Ack: Acknowledgment Plist Generator
Il y a quelque temps, j'ai créé un script Python qui scanne les fichiers de licence et crée un joli plist Acknowledgements que vous pouvez utiliser dans votre Settings.plist. Cela fait beaucoup de travail pour vous.
https://github.com/Building42/AckAck
Caractéristiques
--help
pour plus de détails)Installer
Courir
Capture d'écran
Si vous avez des suggestions d'améliorations, n'hésitez pas à publier un problème ou une demande d'extraction sur GitHub!
la source