Je pense que j'ai maintenant réussi à résoudre tous les problèmes que j'ai été en cours d'exécution dans.
- Il semble préférable d'utiliser l'élément de groupe de titres à détenir des licences (c'est ce que Apple ne dans le les apps iWork). Il y a cependant une limite sur la longueur de ceux-ci (et je n'ai pas encore découvert exactement ce que la limite de l'est), donc vous avez besoin pour briser chaque fichier de licence dans plusieurs chaînes de caractères.
- Vous pouvez créer un saut de ligne à l'intérieur de ces comprennent un littéral de retour de chariot (ie. autrement connu sous le nom ^M, \r ou 0x0A)
- Assurez-vous de ne pas inclure le caractère "s la mi-texte. Si vous le faites, certaines ou toutes les chaînes dans le fichier sera ignoré en silence.
J'ai une commodité script que j'utilise pour aider à générer de l' .plist et .fichier de chaînes, illustré ci-dessous.
Pour l'utiliser:
- Créer un "licences" sous-répertoire de votre projet
- Mettre le script dans le répertoire
- Mettre chaque licence dans ce répertoire, un fichier par fichier, avec des noms de fichiers .licence
- Effectuer tout le nécessaire de reformater sur les licences. (eg. supprimer les espaces supplémentaires au début de la ligne, s'assurer qu'il n'y a pas de sauts de ligne à la mi-paragraphe). Il devrait y avoir une ligne vide entre chaque paragraphe
- Changement de licences répertoire et exécuter le script
- Modifier les paramètres de votre faisceau de Racine.plist pour inclure un enfant section "Remerciements" de
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);
La configuration de vos Paramètres.bundle
Si vous n'avez pas créé de Paramètres.bundle, allez dans Fichier --> Nouveau --> Nouveau Fichier...
En vertu de la section des Ressources, trouver les Paramètres Bundle. Utilisez le nom par défaut et l'enregistrer à la racine de votre projet.
Développez l' Settings.bundle
groupe et sélectionnez Root.plist
. Vous aurez besoin d'ajouter une nouvelle section où sa clé sera Preference Items
de type Array
. Ajoutez les informations suivantes:
L' Filename
points clés de la plist qui a été créé par ce script. Vous pouvez modifier l' title
de ce que jamais vous le souhaitez.
Exécuter Le Script Au Moment De La Construction
Aussi, si vous voulez l'exécution de ce script à chaque fois que vous construisez votre projet, vous pouvez ajouter une phase de construction de votre cible:
- Accédez à votre fichier de projet
- Sélectionnez la cible
- Cliquez sur les Phases de construction de l'onglet
- Dans le coin inférieur droit de ce volet, cliquez sur 'Ajouter une Phase de construction'
- Sélectionnez "Ajouter Exécuter Le Script'
- Faites glisser et de déposer votre script perl dans la section de votre script. Modifier pour ressembler à quelque chose comme ceci:
1 cd
/Utilisateurs/nom d'utilisateur/Projet/licences
2
./yourScriptName.pl
Astuce: Si le chemin d'accès à votre projet contient des espaces, assurez-vous de leur échapper avec \
caractères. Comme ceci:
/Utilisateurs/nom d'utilisateur/Documents/Mes\ iPhone\ Apps/Projet/licences
Après vous avez terminé, vous pouvez glisser l' Run Script
phase de génération plus tôt dans le processus de construction. Vous aurez envie de le déplacer vers le haut avant d' Compile Sources
, de sorte que les mises à jour de vos Paramètres de Faisceau compilé et copié.
Mise à jour pour iOS 7: iOS 7 semble gérer le "Titre" de la clé différente et est gâcher le rendu du texte. Pour corriger que le Remerciements.plist besoin d'utiliser le "FooterText de la clé" au lieu de "Titre". Cette façon de modifier 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);
}