我有一个MacRuby应用程序,旨在由其他人定制和分发。该应用程序实际上只有一些可以自定义的东西,但我想找到一种方法来打包应用程序,以便一个人可以运行脚本,指定一些配置选项,并让它设置应用程序配置,以便它已准备好分发给其他人。
例如,我有一个指向URL的字符串。我希望有人能够更改此URL,而无需在XCode中打开项目,也无需重新构建(或重新编译),以便Windows或Linux上的某个人可以进行此更改。
这种事情有可能吗?我是MacRuby和Objective-C的新手,因此可能有一个明显的解决方案,我不知道。
我使用名为AppConfig.plist
的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>homepage</key>
<string>http://google.com</string>
</dict>
</plist>
我的App Delegate可以像这样访问它:
config_path = NSBundle.mainBundle.pathForResource('AppConfig', ofType: 'plist')
@config = load_plist File.read(config_path)
# then access the homepage key like this: @config['homepage']
答案 0 :(得分:1)
是的,像其他应用一样使用CFP参考。然后,您的用户可以使用“defaults write”命令(带有适合您应用的参数)来自定义其行为,而无需修改应用程序本身。
答案 1 :(得分:1)
正如jkh所说,最简单的方法是使用plist。例如,您可以将所需的自定义项存储在项目根目录中的Stuff.plist中,并使用以下命令访问它:
stuff = load_plist File.read(NSBundle.mainBundle.pathForResource('Stuff', ofType: 'plist'))
或者,例如,如果Stuff.plist在您的Resources文件夹中(可能应该在哪里)
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测试它。要自己使用它,可以使用以下命令从macirb加载plist文件:
stuff = load_plist File.read('/path/to/Stuff.plist')
MacRuby在内核上实现了load_plist,但没有write_plist或类似的东西,但MacRuby确实在Object上实现了to_plist,所以任何东西都可以作为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 *
。