2014年1月23日木曜日

iOSアプリで使用OSSライセンス表記などの自動化 ※CocoaPods使用

iOSアプリで、使っているオープンソースのライブラリのライセンス表記を自動でしようというお話。

hyoromoさんのブログが分かりやすく書いてあるので、基本的なところはそちらを見て頂くとして(笑、ここでは
CocoaPodsを使っているプロジェクトの場合向けの方法を書こうと思います。

Settings.bundleを用意

Settings.bundle を作成して、iOSの設定で、アプリ設定を表示する設定をします。
ライセンスの情報は、Aknowledgements.plistを使用する設定をしておきます。
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>PSGroupSpecifier</string>
   <key>Title</key>
   <string>About</string>
  </dict>
  <dict>
   <key>DefaultValue</key>
   <string>DummyVersion</string>
   <key>Key</key>
   <string>version_preference</string>
   <key>Title</key>
   <string>Version</string>
   <key>Type</key>
   <string>PSTitleValueSpecifier</string>
  </dict>
  <dict>
   <key>Type</key>
   <string>PSChildPaneSpecifier</string>
   <key>Title</key>
   <string>Acknowledgements</string>
   <key>File</key>
   <string>Acknowledgements</string>
  </dict>
 </array>
</dict>
</plist>


Aknowledgements.plistもファイルは用意しておきます。(中身なしでOK)



PodsでAcknowledgements.plistを更新

Podfileに以下を追加。
post_install do | installer |
  require 'fileutils'
  FileUtils.cp_r('Pods/Pods-Acknowledgements.plist', 'Resources/Settings.bundle/Acknowledgements.plist', :remove_destination => true)
end

これで、pods install をすれば、Acknowledgement.plistを更新してくれます。
アプリで表示するとこんな感じ。


This application makes use of the following third party libraries:
の文面を変えたい場合、以下をPodfileに加えます。

class ::Pod::Generator::Acknowledgements
  def header_text
    "These great open source libraries were used in the development. "
  end
end

これで手作業でplist作成することもない。反映漏れもない。便利だ。
気軽にライブラリ追加できるってもんです。

ついでに、バージョン番号など自動化しておきたい所の設定も。

Info.plistのVersionをRoot.plistにコピー

Build Phases の Run script で以下を追加。
VERSION_NUMBER=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
/usr/libexec/PlistBuddy ${TARGET_BUILD_DIR}/${FULL_PRODUCT_NAME}/Settings.bundle/Root.plist -c "set PreferenceSpecifiers:1:DefaultValue $VERSION_NUMBER"

Build番号をGitリビジョンに自動更新

Build Phases の Run script で以下を追加。
BUILD_NUMBER=$(git rev-list HEAD | wc -l | tr -d ' ')
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "$INFOPLIST_FILE"

Build番号の値の自動更新の話で、ビルドするたびにインクリメントする方法がよく見かけたのですが、 ビルドなんてめっちゃするし、その回数が見えれてもそんなに嬉しい訳でもない....
ということで、Gitリビジョンを入れてみたのですが、これも更新してコミットしたらまたリビジョン変わるわけで... だけど、ビルドの回数よりはまだよいのじゃないかな という発想で。

追記。
Build番号を、git rev-parse --short HEAD で埋め込んでいたのですが、これだと英数字が入ってしまうので、コミット回数にかえてみました。
Build番号って、Appleにバージョンアップ申請する際に以前より大きい数字になっていないといけないってものなので数字である必要がある ので。

• • •