Xamarin Studio和iOS:在编译时修改Root.plist

时间:2016-04-22 02:40:58

标签: ios xamarin

在我的Debug版本中,我想在Settings.bundle/Root.plist文件中显示一些设置。主要是,我想显示移动应用程序正在使用哪个后端环境,并使其可以为测试人员配置。

在我的发布版本中,我想在Settings.bundle/Root.plist文件中隐藏这些设置,因为它始终指向生产。

如何在编译时修改Root.plist文件,因为无法在运行时修改文件?

1 个答案:

答案 0 :(得分:1)

在OS-X上,有一个名为PlistBuddy的命令可以列出/更改.plist文件。

/usr/libexec/PlistBuddy
Usage: PlistBuddy [-cxh] <file.plist>
    -c "<command>" execute command, otherwise run in interactive mode
    -x output will be in the form of an xml plist where appropriate
    -h print the complete help info, with command guide

您可以使用自定义MSBuild任务使用.plist-c "Add"-c "Set"命令修改-c "Delete",运行/usr/libexec/PlistBuddy -h以获取有关使用的帮助各种命令。

从iOS项目根目录开始,在控制台上以xml格式输出.plist

find . -name "Root.plist" | xargs -n 1 -J % /usr/libexec/PlistBuddy -x -c "Print" %
<?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>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>Title</key>
            <string>Debug Settings</string>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
        </dict>
        <dict>
            <key>DefaultValue</key>
            <string>1</string>
            <key>FalseValue</key>
            <string>0</string>
            <key>Key</key>
            <string>__monotouch_debug_enabled</string>
            <key>Title</key>
            <string>Enabled</string>
            <key>TrueValue</key>
            <string>1</string>
            <key>Type</key>
            <string>PSToggleSwitchSpecifier</string>
        </dict>
        <dict>
            <key>AutocapitalizationType</key>
            <string>None</string>
            <key>AutocorrectionType</key>
            <string>No</string>
            <key>DefaultValue</key>
            <string>automatic</string>
            <key>Key</key>
            <string>__monodevelop_host</string>
            <key>Title</key>
            <string>Xamarin Studio Host</string>
            <key>Type</key>
            <string>PSTextFieldSpecifier</string>
        </dict>
    </array>
    <key>StringsTable</key>
    <string>Root</string>
    <key>Title</key>
    <string>AppSettings</string>
</dict>
</plist>