我已将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();
}
}
App Delegate:
public override void OnActivated(UIApplication application)
{
SettingsBundleHelper.SetVersionAndBuildNumber();
}
我按照this tutorial来实现此功能。
此后,应用设置中的版本号始终为1.0
另一个问题:
如何在Xamarin.iOS
app中实现自动增量内部版本号?因为每次创建新info.plist
时我都不想更新ipa
版本号。
答案 0 :(得分:0)
我认为你走错了路。我们只能访问Settings.bundle
中的值,但我们无法在运行时更改它,因为设置包位于应用包的内部。
正如您所说,您已经知道NSUserDefaults
和Settings.bundle
始终保持同步。您可以通过相同的NSUserDefaults
获取Key
的值。但您应注意的是,在我们手动更改设置的值后,NSUserDefaults
会获得该值。
这意味着您将在首次启动时获得null
。这就是您的教程调用setVersionAndBuildNumber()
来设置来自bundle的NSUserDefaults
值的原因。然后当设置更改NSUserDefaults
时也会发生变化。
在您的情况下,您设置了类型PSTitleValueSpecifier
,因此无法在设置中更改此值。此外,我们不能也不应该在运行时动态修改它。以下是有关如何在Xamarin上使用设置包的示例,您可以参阅它以获取更多详细信息:https://github.com/xamarin/ios-samples/tree/master/AppPrefs
如何在Xamarin.iOS app中实现自动增量内部版本号?
如上所述,我们项目中嵌入的文件无法在运行时动态修改。每次要存档新的ipa时,都应手动更新它。
答案 1 :(得分:0)
我已按照this answer实施了所需的内容,因此我仍在使用我的问题中提到的相同Root.plist
文件,然后实施以下内容:
BuildNumberIncremental.sh
Before Build
- &gt;在命令字段中添加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"
${ProjectDir}
替换为您的Xamarin.iOS目录。现在每次构建应用程序时,它都会在Root.plist中保存新值,即1.5(b6)