Самый простой способ, как сказал jkh, это использовать plist. Например, вы можете сохранить необходимые настройки в Stuff.plist в корне вашего проекта и получить к нему доступ с помощью следующего:
stuff = load_plist File.read(NSBundle.mainBundle.pathForResource('Stuff', ofType: 'plist'))
или, если, например, Stuff.plist находится в папке «Ресурсы» (где это, вероятно, должно быть)
stuff = load_plist File.read(NSBundle.mainBundle.pathForResource('Stuff', ofType:'plist', inDirectory:'Resources'))
stuff
теперь хэш (или NSMutableDictionary) вашего материала. Например, если Stuff.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>my_stuff</key>
<dict>
<key>favorite_color</key>
<string>green</string>
<key>first_car</key>
<string>Reliant K</string>
</dict>
<key>his_stuff</key>
<dict>
<key>favorite_color</key>
<string>blue</string>
<key>first_car</key>
<string>240D</string>
</dict>
</dict>
</plist>
Вы должны иметь доступ к значениям следующим образом:
my_favorite_color = stuff[:my_stuff][:favorite_color]
На самом деле я не проверял это в комплекте приложений, но я проверял это с помощью macirb. Чтобы поиграть с ним самостоятельно, вы можете загрузить plist-файл из macirb, используя следующую команду:
stuff = load_plist File.read('/path/to/Stuff.plist')
MacRuby реализует load_plist в ядре, но не write_plist или что-то в этом роде, однако MacRuby реализует to_plist для объекта, так что на диск может быть записано все что угодно!
File.open('/path/to/new_plist.plist','w'){|f| f.write(['a','b','c'].to_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">
<array>
<string>a</string>
<string>b</string>
<string>c</string>
</array>
</plist>
Теперь пользователь может определять настройки напрямую через plist, и уже созданное приложение будет считывать значения во время выполнения. Будьте осторожны с этим, так как вы не хотите случайно eval
любой rm *
с.