1.使用场景
1.1项目中全局动态设置一些开关和值
在项目开发过程中,我们项目会在各种环境对应的域名下运行;例如开发人员使用的内部域名、测试人员使用的测试域名、线上环境的正式域名;如果在项目中用一个字符串常量对各种环境下的域名进行表示,每次更换环境域名,我们就不可避免的需要修改这个常量字符串,并进行打包。
那么,怎样才能打包一次,可以在各种环境域名下进行动态切换呢?
关于上述问题的通用的有两种解决方案:第一种是在项目内进行动态选择;第二种是在系统的设置界面下的对应App应用中进行动态选择。
我们今天的主题是第二种解决方案。

2.设置步骤
2.1添加一个Settings.bundle文件夹

2.2设置Root.plist文件中的值
Group设置一个组,在这个组的下边的item,都属于这个组;Text Field Item组中的文本框;Toggle Switch Item开关;Slider Item滑块;Multi Value Item枚举单项选择列表。

这些Item的key和value如下图设置:

2.3Root.list的代码:
<?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>其他设置</string>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>开关</string>
<key>Key</key>
<string>other_settings_switch</string>
<key>DefaultValue</key>
<true/>
</dict>
<dict>
<key>Type</key>
<string>PSSliderSpecifier</string>
<key>Key</key>
<string>other_settings_slider</string>
<key>DefaultValue</key>
<real>0.5</real>
<key>MinimumValue</key>
<integer>0</integer>
<key>MaximumValue</key>
<integer>1</integer>
</dict>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>服务器设置</string>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>选择服务器</string>
<key>Key</key>
<string>existing_server</string>
<key>DefaultValue</key>
<integer>0</integer>
<key>Values</key>
<array>
<integer>0</integer>
<integer>1</integer>
</array>
<key>Titles</key>
<array>
<string>正式服务器</string>
<string>测试服务器</string>
</array>
</dict>
<dict>
<key>DefaultValue</key>
<string></string>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>自定义服务器</string>
<key>Key</key>
<string>custom_server</string>
</dict>
</array>
</dict>
</plist>
3完成系统设置修改
设置-》App项目-》自定义设置

4代码中获取对应item的值
//UserDefaults类,提供了一个与系统进行交互的编程接口。
//该对象可以保存、恢复应用程序相关的偏好设置,配置数据等。
let userDefaults = UserDefaults.standard
//通过在Root.plist属性列表文件中,设置的键名,读取对应的自定义的域名。
let article = userDefaults.object(forKey: "custom_server")
//以同样的方式,根据键名,读取布尔值。
let visible = userDefaults.object(forKey: "other_settings_switch")
//继续读取通过滑杆设置的参数值
let value = userDefaults.object(forKey: "other_settings_slider")
//在控制台分别输出三个参数值
print("article:\(String(describing: article))")
print("visible:\(String(describing: visible))")
print("value:\(String(describing: value))")
网友评论