前言
Settings.Bundle是App的配置项,通过配置Settings.Bundle可以修改App的运行环境、显示App的授权信息等等。
添加Settings.Bundle
默认项目中是没有Settings.Bundle,需要手动添加。添加完了之后在“设置”中找到“对应的App”即可看到Settings.Bundle的界面。
再次运行程序时,程序设置页面不再有settings bundle的设置选项了,双击home键弹出多任务列表,从多任务列表中移除调试的app和系统设置app,再进入系统设置app就可以了
Settings.Bundle控件类型
- TextField(文本框)
- Title(标题)
- ToggleSwitch(开关)
- Slider(滑块)
- MultiValue(多值)
- Group(组)
- Child Pane(子窗格)
Type:配置类型
Title:配置项显示的Title
Identifier: 配置项的标识符,用来获取配置项的配置内容
Default Value :配置项默认值
TextField(文本框):
Autocapitalization Style: 自动大写。有四个值: None(无)、Sentences(句子首字母大写)、Words(单词首字母大写)、All Characters(所有字母大写)。
Autocorrection Style: 自动纠正拼写,如果开启,你输入一个不存在的单词,系统会划红线提示。有三个值:Default(默认)、No Autocorrection(不自动纠正)、Autocorrection(自动纠正)。
Keyboard Type: 键盘样式。有五个值:Alphabet(字母表,默认)、Numbers and Punctuation(数字和标点符号)、Number Pad(数字面板)、URL(比Alphabet多出了.com等域名后缀)、Email Address(比Alphabet多出了@)。
Text Field is Secure: 是否为安全文本。如果设置为YES,则内容以圆点符号出现。
ToggleSwitch(开关):
Value for ON:当开关置为ON时,取得的字符串值。
Value for OFF:当开关置为OFF时,取得的字符串值。
Slider(滑块)
Minimum Value: 最小值,Number类型。
Maximum Value: 最大值,Number类型。
Min Value Image Filename: 最小值那一端的图片。
Max Value Image Filename:最大值那一端的图片。
(图片大小必须为21*21,并且要放在Settings.bundle包内)
MultiValue(多值)
Values:值的集合。
Titles: 标题的集合,与值一一对应。
Child Pane
Filename:子plist的文件名。
//获取SettingsBundle信息
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults removeObjectForKey:@"Identifier值"];
// 修改值
[userDefaults setValue:@"abc" forKey:@"Identifier值"];
在用户实际修改了setting里的数据之前 , 这时配置数据并没有真正的写入到app的NSUserDefaults中, 此时用NSUserDefaults获取的值都是空的。对此, 可以在- (void)applicationDidBecomeActive:(UIApplication *)application
方法中获取信息。
Settings.Bundle动态配置
1、创建目录
在工程目录下创建文件夹Setting以及子文件夹Release和Debug(当然,也可以根据环境来创建,比如:Dev、Test、hotfix等), 并添加到工程中。
2、创建配置
点击工程文件, 选中info, 在Configurations下点击+, 复制一个Configuration。
3、添加Setting.bundle
新建Setting.Bundle, 但不要添加到当前Target中, 并分别保存到Release和Debug
文件夹下:
4、添加拷贝脚本
不添加到Target的原因就是 , 我们要用脚本把Setting.Bundle拷贝到ipa中。选中"Target", 切换到Build Phases, 点击+, 选中New Run Script Phase。
添加脚本:
if [ ${CONFIGURATION} = "Debug" ]; then
cp -r ${PROJECT_DIR}/${PROJECT_NAME}/Setting/Release/Settings.bundle ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
fi
if [ ${CONFIGURATION} = "Release" ]; then
cp -r ${PROJECT_DIR}/${PROJECT_NAME}/Setting/Release/Settings.bundle ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
fi