私のiOSアプリケーションは、Apache 2.0および同様のライセンスに基づいてライセンスされた多数のサードパーティコンポーネントを使用します。これには、次のようなさまざまなテキストを含める必要があります。
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
この情報を設定バンドルの「ライセンス」サブエントリの下に置くための合理的な先例があるようです(iPadのFacebook、ページ、基調講演、数字、ウィキパニオンではすべてこれを行うようです)。
私は実際に同じことを達成するために少し苦労しています。私はテキストを行ごとに分割し、一度に1行ずつxcodeに入力する必要があるようです(そして、xcode4には、リストの編集時にクラッシュする問題があるようです)。
ほぼ確実にどこかで実行するスクリプト、または私が見逃した簡単な方法があるように思えます。
私は今、私が遭遇したすべての問題を解決することができたと思います。
以下に示す.plistおよび.stringsファイルの生成に役立つ便利なスクリプトがあります。
使用するには:
スクリプトは次のとおりです。
#!/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
グループを展開し、Root.plist
を選択します。キーがArray
型のPreference Items
になる新しいセクションを追加する必要があります。次の情報を追加します。
Filename
キーは、このスクリプトによって作成されたplistを指します。 title
を必要なものに変更できます。
また、プロジェクトをビルドするたびにこのスクリプトを実行する場合は、ビルドフェーズをターゲットに追加できます。
cd $SRCROOT/licenses
($SRCROOT
はプロジェクトのルートを指します)./yourScriptName.pl
それが終わったら、ビルドプロセスのRun Script
ビルドフェーズをより早くドラッグできます。設定バンドルの更新がコンパイルされてコピーされるように、Compile Sources
の前に上に移動します。
iOS 7の更新: iOS 7は「タイトル」キーを異なるように処理しているようで、レンダリングされたテキストを台無しにしています。修正するには、生成されたAcknowledgements.plistで「タイトル」の代わりに「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);
}
@JosephHが提供したものと同じソリューション(翻訳なし)がありますが、PerlよりもPythonを好む人のためにpythonで行われました。
import os
import sys
import plistlib
from copy import deepcopy
os.chdir(sys.path[0])
plist = {'PreferenceSpecifiers': [], 'StringsTable': 'Acknowledgements'}
base_group = {'Type': 'PSGroupSpecifier', 'FooterText': '', 'Title': ''}
for filename in os.listdir("."):
if filename.endswith(".license"):
current_file = open(filename, 'r')
group = deepcopy(base_group)
title = filename.split(".license")[0]
group['Title'] = title
group['FooterText'] = current_file.read()
plist['PreferenceSpecifiers'].append(group)
plistlib.writePlist(
plist,
"../Settings.bundle/Acknowledgements.plist"
)
別の方法として、CocoaPodsを使用している場合、Podfileで指定された各ターゲットの「Acknowledgements」plistを生成します。このリストには、そのターゲットで使用される各Podのライセンスの詳細が含まれます(詳細はPod仕様で指定されていると仮定)。 iOS設定バンドルに追加できるプロパティリストファイル。
代わりに、このデータをアプリ内で変換して表示できるようにするプロジェクトも進行中です。
私はショーンの素晴らしいpythonミックス内のコードに繰り返しを投げると思いました。主な違いは、入力ディレクトリを取得し、LICENSEファイルを再帰的に検索することです。タイトル値を取得します。 LICENSEファイルの親ディレクトリから取得するため、cocoapodsでうまく機能します。
動機は、ポッドを追加または削除するときに、アプリの法的セクションを自動的に最新の状態に保つビルドスクリプトを作成することでした。また、ライセンスから強制改行を削除するなど、デバイス上で段落が少し良く見えるようにすることも行います。
スクリプトを作成しましたRuby @JosephHスクリプトによってインスパイアされました。このバージョンは、私自身の意見では、個々のオープンソースプロジェクトをよりよく表現します。
Wisit iOS-AcknowledgementGenerator スクリプトとサンプルプロジェクトをダウンロードします。
これは、承認がアプリでどのように見えるかです:
これは、JosephHの答えに対する補遺です。 (コメントする担当者がいません)
移動する必要がありました<key>StringsTable</key> <string>Acknowledgements</string>
下から最後まで</dict>
Perlスクリプト内。
この変更の前は、アプリのAcknowledgmentsセクションは空で、XCodeは結果のAcknowledgements.plistを読み取ることができませんでした。 (「データが正しい形式ではないため、データを読み取ることができませんでした。」)
(XCode 6.3.2 iOS 8.3)
このスレッドのSeanのPythonスクリプトは動作します。しかし、知っておくべき基本的なことがいくつかあります。
Ack Ack:Acknowledgement Plist Generator
しばらく前に、Pythonライセンスファイルをスキャンし、Settings.plistで使用できるNice Acknowledgments plistを作成するスクリプトを作成しました。あなたのための仕事。
https://github.com/Building42/AckAck
機能
--help
詳細については)インストール
wget https://raw.githubusercontent.com/Building42/AckAck/master/ackack.py
chmod +x ackack.py
実行
./ackack.py
スクリーンショット
改善の提案がある場合は、GitHubに問題を投稿するか、リクエストをプルしてください。