iOSの設定画面にアプリのライセンスを置く
WWDCのアプリが設定画面にライセンスを置いていて「じゃあそうしよう」みたいな話になったので調べた。
Settings.bundleとRoot.plistを用意
まずはSettings.bundleってファイルを作れば良くって、その作り方はググるとすぐ出てくる。
具体的には「New File > Resource > Settings Bundle」でOK。
で、そのBundleのディレクトリの下に以下のような内容のRoot.plistを用意する
<?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>Root</string> <key>PreferenceSpecifiers</key> <array> <dict> <key>Type</key> <string>PSChildPaneSpecifier</string> <key>Title</key> <string>License</string> <key>File</key> <string>Acknowledgements</string> </dict> </array> </dict> </plist>
Acknowledgements.plistを作る
上で作ったRoot.plistはAcknowledgements.plistを読むような設定になっている(
で、例えば既に「Acknowledgement.txt」がResourcesディレクトリにあるとして、
以下のようなscriptをResourcesディレクトリに置いて叩けばAcknowledgements.plistが作れる(「Resourcesディレクトリにscript置くのはどうなの?」という疑問は置いておく)
#!perl use strict; use warnings; use FindBin; my $input = shift || "$FindBin::Bin/Acknowledgement.txt"; my $output = "$FindBin::Bin/Settings.bundle/Acknowledgements.plist"; open my $rfh, '<', $input or die "cannot open $input: $!"; my $license = do { local $/; <$rfh> }; close $rfh; my $template = do { local $/; <DATA> }; my $plist = sprintf($template, $license); open my $wfh, '>', $output or die "cannot open $output: $!"; print {$wfh} $plist; close $wfh; __DATA__ <?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> <dict> <key>Type</key> <string>PSGroupSpecifier</string> <key>Title</key> <string>%s</string> </dict> </array> </dict> </plist>
実際に「Resources/Settings.bundle/Acknowledgements.plist」が作成されていればOK。