我已将 Settings.bundle
添加到我的应用中,以在应用程序设置中添加版本和构建数字,并且可以正确添加。我遇到的问题是,它始终仅获得默认值,之后它没有根据实际的应用程序版本和构建数字进行更新(即使在运行应用程序之后(。
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>DefaultValue</key>
<string>1.0</string>
<key>Key</key>
<string>current_version_number</string>
<key>Title</key>
<string>Version</string>
<key>Type</key>
<string>PSTitleValueSpecifier</string>
</dict>
</array>
</dict>
</plist>
我创建了此自定义类以更新版本并构建编号:
public static class SettingsBundleHelper
{
static string AppVersionKey = "current_version_number";
public static void SetVersionAndBuildNumber()
{
string version = NSBundle.MainBundle.ObjectForInfoDictionary("CFBundleShortVersionString").ToString();
string build = NSBundle.MainBundle.ObjectForInfoDictionary("CFBundleVersion").ToString();
NSUserDefaults.StandardUserDefaults.SetString(AppVersionKey, $"{version}({build})");
NSUserDefaults.StandardUserDefaults.Synchronize();
}
}
应用程序委托:
public override void OnActivated(UIApplication application)
{
SettingsBundleHelper.SetVersionAndBuildNumber();
}
我遵循本教程实现此功能。
之后,应用程序设置中的版本号始终为 1.0
另一个问题:
如何在Xamarin.iOS
应用中实现自动增量构建号?因为我不想每次创建新的ipa
时都更新info.plist
构建编号。
我认为您的方式是错误的。我们只能从Settings.bundle
访问该值,但是我们不能在运行时更改它,因为设置捆绑包位于您的应用程序捆绑包中。
正如您所说,您已经知道NSUserDefaults
和Settings.bundle
始终保持同步。您可以通过相同的Key
从NSUserDefaults
获取值。但是您应该注意的是,在我们更改 settings 手动的值之后,NSUserDefaults
将获得值。
这意味着您将在第一个启动时间获得null
。这就是为什么您的教程调用setVersionAndBuildNumber()
从捆绑包设置NSUserDefaults
的值的原因。然后,当设置更改NSUserDefaults
也会更改。
在您的情况下,您设置了类型的PSTitleValueSpecifier
,因此无法在 settings 中更改此值。同样,我们不能也不应该在运行时动态修改它。这是有关如何在Xamarin上使用设置捆绑的示例P>
如何在xamarin.ios应用程序中实现自动增量构建号?
正如我们上面所说,嵌入项目中的文件无法在运行时动态修改。您应该每次要存档新IPA时手动更新它。
我已经通过以下答案实现了所需的要求,因此我仍在使用相同的 Root.plist
文件,然后在我的问题中提到,然后实现以下内容:
- 在项目目录中创建新文件
BuildNumberIncremental.sh
- 在Visual Studio->右键单击Xamarin.ios Project->选择"选项" ->在构建节点下选择自定义命令 ->添加新命令为
Before Build
->在命令字段中添加sh BuildNumberIncremental.sh
。 - 添加以下脚本:
buildnumberincremental.sh
Version_Number=$(/usr/libexec/PlistBuddy ${ProjectDir}/info.plist -c "print :CFBundleShortVersionString")
Build_Number=$(($(/usr/libexec/PlistBuddy ${ProjectDir}/info.plist -c "print :CFBundleVersion") + 1))
Full_Version="$Version_Number(b$((Build_Number + 1)))"
/usr/libexec/PlistBuddy ${ProjectDir}/info.plist -c "set :CFBundleVersion $Build_Number"
/usr/libexec/PlistBuddy ${ProjectDir}/Settings.bundle/Root.plist -c "set PreferenceSpecifiers:0:DefaultValue $Full_Version"
- 用您的Xamarin.ios Directory替换
${ProjectDir}
。
现在,每次我构建应用程序时,都会在root.plist中保存新值。1.5(b6)