私は今、私が遭遇していたすべての問題を解決することができたと思います。
- グループ要素のタイトルを使用してライセンスを保持するのが最善のようです(これはAppleがiWorkアプリで行うことです)。ただし、これらの長さには制限があり(その制限がまだ正確にわかっていません)、各ライセンスファイルを複数の文字列に分割する必要があります。
- これらの中に改行を作成するには、リテラルのキャリッジリターンを含めます(つまり、^ M、\ r、または0x0Aとも呼ばれます)。
- リテラル "のミッドテキストを含めないでください。含めると、ファイル内の一部またはすべての文字列が暗黙的に無視されます。
以下に示す.plistファイルと.stringsファイルの生成に使用する便利なスクリプトがあります。
それを使用するには:
- プロジェクトの下に「licenses」ディレクトリを作成します
- スクリプトをそのディレクトリに置きます
- 各ライセンスをファイルごとに1つ、そのファイル名が.licenseで終わるディレクトリに配置します。
- ライセンスに必要な再フォーマットを実行します。(たとえば、行頭の余分なスペースを削除し、段落の途中で改行がないことを確認します)。各段落の間に空白行が必要です
- ライセンスディレクトリに移動してスクリプトを実行する
- 設定バンドルのRoot.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のセットアップ
Settings.bundleを作成していない場合は、[ファイル]-> [新規]-> [新しいファイル...]に移動します。
「リソース」セクションで、設定バンドルを見つけます。デフォルトの名前を使用して、プロジェクトのルートに保存します。
展開Settings.bundle
グループを選択しRoot.plist
。キーがPreference Items
typeになる新しいセクションを追加する必要がありArray
ます。次の情報を追加します。
Filename
このスクリプトによって作成されたのplistへのキーポイント。あなたはtitle
何でも好きなように変更することができます。
ビルド時にスクリプトを実行
また、プロジェクトをビルドするたびにこのスクリプトを実行する場合は、ビルドフェーズをターゲットに追加できます。
- プロジェクトファイルに移動します
- ターゲットを選択
- 「ビルドフェーズ」タブをクリックします
- そのペインの右下隅で、「ビルドフェーズの追加」をクリックします。
- 「実行スクリプトを追加」を選択します
- Perlスクリプトをドラッグして、スクリプトのセクションにドロップします。次のように変更します。
cd $SRCROOT/licenses
($SRCROOT
プロジェクトのルートを指します)
./yourScriptName.pl
それが完了したらRun Script
、ビルドプロセスのより早い段階でビルドフェーズをドラッグできます。Compile Sources
設定バンドルの更新がコンパイルされてコピーされるように、前に上に移動する必要があります。
iOS 7のアップデート: iOS 7は「タイトル」キーを別の方法で処理するようで、レンダリングされたテキストをめちゃくちゃにしています。これを修正するには、生成されたAcknowledgements.plistが「Title」ではなく「FooterText」キーを使用する必要があります。このスクリプトの変更方法:
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);
}