2017年7月15日土曜日

ライセンスと謎アイコン

アプリを作るにあたって、いくつものオープンソースのライブラリなどを使わせてもらっています。ありがとうございます。

それらはBSDやMITなどのゆる~いライセンスですが、当然ライセンス条項に従った表記が必須です。そこで今回は、ライセンス条項の中の著作権表記とライセンス条項をアプリ内のどこで表示するかという話です。

Androidアプリでは専用のダイアログを用意してます。つまりライセンス表記用に画面をひとつ作っているわけです。

では、iOSではどうしているかというと、settings.bundleを使っています。本来はその名のとおり、そのアプリ固有の各種設定を操作する画面ですが、バージョンやライセンス表記に使うのにも都合がいいです。

まずプロジェクトの直下にSettings.bundleを追加します。




白いレゴブロックのようなパッケージが追加されます(どうでもいいことですけど、このアイコンどういう意味なんでしょうか)。中を見るとRoot.plistがありますので、Source Codeとして開きます。


上位のdictタグの下を変更します。
<?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>PSGroupSpecifier</string>
   <key>Title</key>
 <!-- 中略 -->
   <key>MinimumValue</key>
   <integer>0</integer>
   <key>MaximumValue</key>
   <integer>1</integer>
   <key>MinimumValueImage</key>
   <string></string>
   <key>MaximumValueImage</key>
   <string></string>
  </dict>
 </array>
 <!-- ここまで -->
</dict>
</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>PreferenceSpecifiers</key>
 <array>
        <dict>
            <key>Title</key>
            <string>About</string>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
            <key>FooterText</key>
            <string>Copyright 20xx xxxxxx All Rights Reserved.
            </string>
        </dict>
        <dict>
            <key>Type</key>
            <string>PSChildPaneSpecifier</string>
            <key>Title</key>
            <string>Legal</string>
            <key>File</key>
            <string>Legal</string>
        </dict>
 </array>
 <key>StringsTable</key>
 <string>Root</string>
 <!-- ここまで -->
</dict>
</plist>
次にいったんXcodeを離れて、Finderでプロジェクトの下のSettings.bundleを右クリックして、「パッケージの内容を表示」で開きます。

ここにお好きな名前で、.plistファイルを作成します。わかりやすいようにLegal.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>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>Title</key>
            <string></string>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
            <key>FooterText</key>
            <string>Awsome Library
                
MIT License
        
Copyright (c) 20xx FooBar Co.Ltd
        
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
        
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
        
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
            </string>
        </dict>
    </array>
</dict>
</plist>
Settings.bundleのフッターの文字列を利用しているわけです。

Xcodeに戻って、Settings.bundleを開くとLegal.plistが作成されているのが確認できます。


これで実行すれば、設定アプリの中に今作ったアプリが追加されて、中に「Legal」が追加されています。


ラベルですが、僕は「Legal」としていますが、「Acknowledgements」などとしているアプリもありますね。複数の記述をするときは、Legal.plistarrayタグの下のdictタグを繰り返せば大丈夫です。

Legal.plistに記載するライセンス条項は、そのライブラリの中の文言を改変せず、そのままコピーします。通常はLICENSEというファイル名で置かれていることが多いですね。

ただ、正直なところ、改行位置だけは修正しています。改行位置がそのままだと非常に読みにくくなってしまうので、それでは本末転倒じゃないかと、そうしています。本当はよくないのかもしれませんが、改行位置ならセーフじゃないかなぁと思っています。法的な問題なので安易に大丈夫とは言えません。その辺り、詳しい方がいらっしゃったら意見を伺いたいところです。