SHIBUYA 3%

(元在宅が)渋谷で働くエンジニアの備忘録的memo & 雑記 - ココロはいつもSHIBUYAに在り

Debug/Releaseで定数を使い分けれるWrapperクラスを書く

以前書いた記事で、
Swiftでの環境変数を使ってDebug/Releaseで定数を使い分ける - SHIBUYA 3%

User-Definedを使ってDebug/Releaseでそれぞれ設定した値を取得できるようになったんですが、
やはり、毎回NSBundle.mainBundle().objectForInfoDictionaryKey("xxxx") as! Stringを書くのは面倒で、かつkeyはStringなのでタイプミスがあっても起動してエラーになるまで気づかないことも起こりえるので、いろいろ調べました。

以下、参考にしたライブラリです。
- hyperoslo/Sugar · GitHub
- kostiakoval/AppInfo: Application informatio... - GitHub

NSBundle.mainBundle()からplist情報を取得するためのWrapperクラスを作る

gistcdd43d281b33124301c6

あとは呼びたい箇所で、以下のように記載。

log.info(AppInfo.version)
log.info(AppInfo.build)
log.info(AppInfo.identifier)

上記のAppInfoは、plistが存在する前提やってるのでForced Unwrapping!を指定してます。
補完も効くようになって、タイプミスも起こらず、
呼び出し側で、if letで書く必要はありません!

User-Definedで設定したplistの値はextensionで外出しして、定数専用のファイルで管理したい

extensionで先ほどのAppInfoを拡張して作りました。

gist348cc0f8e922b5e0fab9

こんな感じで!

これで公開リポジトリでkeyを間違って上げてしまうとかに注意するのは当然として、
Run Scriptで、環境変数からPlistBuddyで定数セットしてCIとかでまわせる!

PlistBuddyはまたいずれメモる

developer.apple.com

  • Computed Properties
  • Stored Properties
  • Read-Only Computed Properties
  • Type Properties