我想我现在已经设法解决了我遇到的所有问题.
- 似乎最好使用组元素标题来持有许可证(这就是苹果在iWork应用程序中所做的).但是,这些文件的长度是有限制的(我还没有发现确切的限制是什么),因此您需要将每个许可证文件拆分为多个字符串.
- 您可以通过包含文字回车符(即,也称为^M、\r或0x0A)在这些字符中创建换行符
- 确保不包括任何文字的中间文本.如果这样做,文件中的部分或全部字符串将被静默忽略.
我有一个方便的脚本,用来帮助生成.普利斯特和.字符串文件,如下所示.
要使用它,请执行以下操作:
- 在您的项目下创建一个‘License’目录
- 把脚本放到那个目录中
- 将每个许可证放入该目录,每个文件一个,文件名以结尾.许可证
- 对许可证执行任何必要的重新格式化.(例如,删除行首的多余空格,确保段落中间没有换行符).每段之间应该有一个空行
- 切换到许可证目录(&A)运行脚本(&A)
- 编辑你的设置.plist包含一个名为"确认"的子部分
以下是脚本:
#!/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);
设置您的Settings.Bundle
If you haven't created a Settings.bundle, go to File --> New --> New File...
在资源部分下,找到设置包.使用默认名称并将其保存到项目的根目录中.
展开Settings.bundle
组并 Select Root.plist
.您需要添加一个新节,其中它的键将是类型Array
的Preference Items
.添加以下信息:
此脚本创建的plist的Filename
个关键点.你可以把title
换成任何你想要的.
在构建时执行脚本
此外,如果希望在构建项目时运行此脚本,可以向目标添加构建阶段:
- 转到您的项目文件
- Select 目标
- 单击构建阶段选项卡
- 在该窗格的右下角,单击"添加构建阶段"
- Select "添加运行脚本"
- 将Perl脚本拖放到脚本对应的部分.将其修改为如下所示:
cd $SRCROOT/licenses
($SRCROOT
指向项目的根目录)
./yourScriptName.pl
个
完成后,可以在构建过程中更快地拖动Run Script
构建阶段.您需要将其在Compile Sources
之前上移,以便对设置包的更新进行编译和复制.
Update for iOS 7:iOS7似乎对"title"键的处理有所不同,并且弄乱了呈现的文本.要解决生成的Acknowgements.plist需要使用"FooterText"键而不是"title"键的问题.下面介绍如何更改脚本:
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);
}