以编程方式编辑plist

时间:2014-05-14 22:04:06

标签: ios objective-c plist

在我开始制作时我永远不会记得改变任何东西所以我只是使用apple提供的这种方法(https://developer.apple.com/library/mac/qa/qa1361/_index.html)来检测我是在调试还是在生产中因此所有的更改都是为了我(切换到真实的广告,使用生产网址等)

我有以下关于Urban Airship的plist

AirshipConfig.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>analyticsEnabled</key>
    <false/>
    <key>inProduction</key>
    <false/>
    <key>developmentAppKey</key>
    <string>SOMESTRINGHERE</string>
    <key>developmentAppSecret</key>
    <string>SOMESTRINGHERE</string>
    <key>productionAppKey</key>
    <string>SOMESTRINGHERE</string>
    <key>productionAppSecret</key>
    <string>SOMESTRINGHERE</string>
</dict>
</plist>

现在,对于Urban Airship,当我发布到应用程序商店时,我必须将inProduction更改为true,当我正在调试时,我必须将false更改为

所以在我的app委托中,我试图用以下if更改plist。我仍然试图让plist的内容看到它正在工作,但我一直得到(null)作为我的NSLog

if([Def AmIBeingDebugged]){
    //Development set to false
    NSString* plistPath = [[NSBundle mainBundle] pathForResource:@"AirshipConfig" ofType:@"plist"];
    NSLog(@"%@", [NSArray arrayWithContentsOfFile:plistPath]);
}else{
    //Production set to true
}

任何关于设置正确的plist值的帮助都会非常受欢迎,因为我已经撞墙而无法弄清楚为什么它总是(null)因为我认为我需要内容所以我可以重写文件。

1 个答案:

答案 0 :(得分:2)

首先为所有Xcode构建配置创建AirshipConfig.plist的单独副本,并以AirshipConfig_$(CONFIGURATION).plist格式命名(例如AirshipConfig_Debug.plistAirshipConfig_Release.plist)。然后将其内容更新为您想要的内容(例如,将inProduction设置为适当的值。)

然后在Xcode中为您的应用程序目标创建一个新的“运行脚本”构建阶段,并将其命名为“Copy Urban Airship config file to bundle”。将其添加为脚本的内容:

cp "${SRCROOT}/MyProjectName/AirshipConfig_${CONFIGURATION}.plist" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipConfig.plist"

这会将正确构建配置的配置文件复制到您的应用包中,并使用外部库所需的文件名(AirshipConfig.plist)。 在上面的示例中,只需确保配置文件的源路径正确。