Sanırım şimdi karşılaştığım tüm sorunları çözmeyi başardım.
- Lisanslara sahip olmak için grup öğesi başlıklarını kullanmak en iyisi gibi görünüyor (Apple'ın iWork uygulamalarında yaptığı şey budur). Bununla birlikte, bunların uzunluğunda bir sınır vardır (ve henüz tam olarak sınırın ne olduğunu keşfetmedim), bu nedenle her bir lisans dosyasını birden çok dizeye ayırmanız gerekir.
- Değişmez bir satır başı (yani, ^ M, \ r veya 0x0A olarak bilinir) ekleyerek bunların içinde bir satır sonu oluşturabilirsiniz.
- Metnin ortasına herhangi bir değişmez bilgi eklemediğinizden emin olun. Bunu yaparsanız, dosyadaki dizelerin bazıları veya tümü sessizce yok sayılır.
Aşağıda gösterilen .plist ve .strings dosyasını oluşturmaya yardımcı olması için kullandığım kullanışlı bir komut dosyası var.
Kullanmak için:
- Projenizin altında bir 'lisanslar' dizini oluşturun
- Betiği bu dizine koyun
- Her lisansı, .license ile biten dosya adlarıyla dosya başına bir tane olacak şekilde bu dizine yerleştirin.
- Lisanslar üzerinde gerekli tüm yeniden biçimlendirmeleri yapın. (örneğin, satırların başındaki fazla boşlukları kaldırın, paragrafın ortasında satır sonu olmamasını sağlayın). Her paragrafın arasında boş bir satır olmalıdır
- Lisanslar dizinine geçin ve komut dosyasını çalıştırın
- Root.plist ayar paketinizi 'Teşekkürler' adlı bir alt bölüm içerecek şekilde düzenleyin
İşte senaryo:
#!/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);
Ayarlarınızı yapma.bundle
Bir Settings.bundle oluşturmadıysanız, Dosya -> Yeni -> Yeni Dosya ... seçeneğine gidin.
Kaynak bölümünün altında, Ayarlar Paketini bulun. Varsayılan adı kullanın ve projenizin kök dizinine kaydedin.
Settings.bundle
Grubu genişletin ve seçin Root.plist
. Anahtarının Preference Items
türünde olacağı yeni bir bölüm eklemeniz gerekecek Array
. Aşağıdaki bilgileri ekleyin:
Filename
Bu komut dosyası tarafından oluşturulan plist için önemli noktalar. Değiştirebilirsintitle
.
Derleme Zamanında Komut Dosyasını Yürüt
Ayrıca, bu betiğin projenizi her oluşturduğunuzda çalışmasını istiyorsanız, hedefinize bir derleme aşaması ekleyebilirsiniz:
- Proje dosyanıza gidin
- Hedefi seçin
- Derleme Aşamaları sekmesini tıklayın
- Bu bölmenin sağ alt köşesinde, 'Derleme Aşaması Ekle'yi tıklayın.
- 'Çalıştır Komut Dosyası Ekle'yi seçin
- Perl komut dosyanızı komut dosyanızın bölümüne sürükleyip bırakın. Şunun gibi görünmesi için değiştirin:
cd $SRCROOT/licenses
( $SRCROOT
projenizin köküne işaret eder)
./yourScriptName.pl
Bunu bitirdikten sonra, Run Script
yapım aşamasını yapım sürecinde daha erken sürükleyebilirsiniz . Compile Sources
Ayar Paketinizdeki güncellemelerin derlenip kopyalanması için daha önce yukarı taşımak isteyeceksiniz .
İOS 7 için güncelleme: iOS 7, "Başlık" anahtarını farklı şekilde işliyor gibi görünüyor ve oluşturulan metni karıştırıyor. Oluşturulan Acknowledgements.plist'in "Title" yerine "FooterText" anahtarını kullanması gerektiğini düzeltmek için. Komut dosyası şu şekilde değiştirilir:
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);
}