是否见过在iOS系统设置中往下拉找到自己的APP,然后点进去,可以看到APP中有很多的信息 比如 版权 企业介绍 版本号 等等。
接下来带你实现
1.创建 Settings.bundle
2.配置Root.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>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSTitleValueSpecifier</string>
<key>Title</key>
<string></string>
</dict>
<dict>
<key>Type</key>
<string>PSTitleValueSpecifier</string>
<key>Title</key>
<string>版本</string>
<key>Key</key>
<string>version</string>
<key>DefaultValue</key>
<string>8.3.4</string>
<key>IsSecure</key>
<false/>
<key>KeyboardType</key>
<string>Alphabet</string>
<key>AutocapitalizationType</key>
<string>None</string>
<key>AutocorrectionType</key>
<string>No</string>
</dict>
</array>
</dict>
</plist>
3.完成 效果图
项目名=测试新
版本号=1.0
缺点是版本号不能自动关联info.plist版本号 每次改版本号要改两个地方
#高级用法按Target区分使用不同的设置文件
1.配置增加
在Run Script里添加如下代码 路径需要根据项目配置处理
因为Settings.bundle这个文件的名字是不能改变的,因此我们只能改变路径来实现同名文件的存在并且不冲突,
将代码中 “这里替换为文件夹名字”修改为Settings.bundle文件的路径
比如 Settings/XiangMu
if [ ${CONFIGURATION} = "Release" ]; then
cp -r ${PROJECT_DIR}/${PROJECT_NAME}/这里替换为文件夹名字/Settings.bundle ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
fi
if [ ${CONFIGURATION} = "Debug" ]; then
cp -r ${PROJECT_DIR}/${PROJECT_NAME}/这里替换为文件夹名字/Settings.bundle ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
fi
项目中每个target都可以添加 按需配置就可以了 只有对应的Target配置了 在设置中才会显示
在APP启动的代理方法中调用加载设置文件方法 验证添加的Settings文件能否可以正确读取
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self loadSettingsBundle];
return YES;
}
// 加载设置文件
- (void)loadSettingsBundle
{
NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
if(!settingsBundle)
{
DLog(@"加载Settings.bundle文件失败");
return;
}
NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]];
NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
for(NSDictionary *prefSpecification in preferences) {
NSString *key = [prefSpecification objectForKey:@"Key"];
if(key) {
[defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key];
}
}
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
}