LoginSignup
4
2

More than 5 years have passed since last update.

Xcodeからの実行時にのみ特定のUserDefaultsを設定する

Last updated at Posted at 2016-12-10

(色々な値の引数での指定方法を追記しました)

これは何?

NSBindingDebugLogLevelのようにデバッグ時やテスト時にだけ、特定のUserDefaultsを設定したいときがあると思います。
こういう時はUserDeaultsのArgument Domainが便利です。

Argument Domainはその名の通り、実行時に引数として指定することのできる、非永続的なドメインです。
またArgument Domainは最も優先度が高いドメインのため、保存されたUser Defaultsが存在していたとしても、それを無視します。

使い方は?

引数としての指定方法は
$ ./App.app/Contents/MacOS/App -NSBindingDebugLogLevel 1
のように実行ファイル名に続けて-Key Valueと指定します。

毎回それするの面倒くさくない?

Argument Domainを利用してXcode上での実行時にのみ特定のUserDefaultsを設定するようにします。

設定方法(Xcode8.1)

まず、Scheme の Edit Scheme...から目的のSchemeを選択します。
スクリーンショット 2016-12-10 18.53.26.png

次にRunのArgumentsを選択します。そして先ほどのUserDefaultsを設定します。
スクリーンショット 2016-12-10 18.54.08.png

ここで注意!
-Key Valueは1か所に両方書くこと。ばらばらにすると正しく認識されません。

以上です。
設定方法さえ知っていれば簡単ですが、ここまでたどり着くのが割とややこしいですね。特にSchemeのEdit Scheme...出すところが。

値の指定方法いろいろ

引数での値の指定はProperty ListのXML形式およびASCII形式を使用します。複雑な辞書や配列でない限りASCII形式を利用した方が楽だと思います。

以下に指定方法を例示します。
また値に空白文字が含まれる場合はシングルクォーテンションまたはダブルクォーテーションで囲みます。

数値

数値はそのまま数字を指定します。
-key 1

文字列

これもそのままです。空白文字を含む場合はクォーテーションで囲みます。
-key Hellow
-key 'Hellow World!'

真偽値

YES, NOを指定します。1,0でも有効です。
-key YES
-key 0

配列

カッコ内にカンマ区切りで要素を並べます。
-key '(dog, cat, "Mountain gorilla")'

辞書

中カッコ内に=で結ばれたペアを;区切りで並べます。
-key '{a="Mountain gorilla"; b=cat;}'

おまけ

XML形式も一応使えます。
-key '<?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>Name</key> <string>John Doe</string> <key>Phones</key> <array> <string>408-974-0000</string> <string>503-333-5555</string> </array> </dict> </plist>'

おまけのおまけ

NSDataとNSDateはASCII形式では指定できません。XMLで頑張りましょう。

メリット

  • マクロなどを使いソースコードで設定を入れ替えるなどしなくていいため、ソースコードを汚さない。
  • 非永続なためUserDefaultsデータベースを汚さない。

デメリット

  • 設定方法がややこしい。
  • つまり、変更するのもややこしい。
  • 設定したこと忘れそう。
  • 複数人での開発のとき設定方法を周知するの面倒くさい。
  • 設定する暇があったらターミナルからやった方が早くね?

資料

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2