如何从ContentPage获取应用程序版本?

Tad*_*dej 5 c# xamarin.ios xamarin.android portable-class-library xamarin.forms

我试过这个:iPhone MonoTouch - 获取Bundle版本

NSBundle.MainBundle.ObjectForInfoDictionary("CFBundleVersion").ToString();
Run Code Online (Sandbox Code Playgroud)

但这没效果.由于NSBundle无法找到.

如何从ContentPage获取应用程序版本(iOS和Android)?

我最终得到的代码(感谢Steven Thewissen):

PCL(共享代码)

using System;
namespace MyApp.Interfaces
{
    public interface IApplicationVersion
    {
        string ApplicationsPublicVersion { get; set; }
        string ApplicationsPrivateVersion { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

Android的

using System;
using MyApp.Droid.Helpers;
using MyApp.Interfaces;
using Xamarin.Forms;

[assembly: Dependency(typeof(ApplicationVersion))]
namespace MyApp.Droid.Helpers
{
    public class ApplicationVersion : IApplicationVersion
    {
        public string ApplicationsPublicVersion { get; set; }
        public string ApplicationsPrivateVersion { get; set; }

        public ApplicationVersion()
        {
            var context = Android.App.Application.Context;
            var info = context.PackageManager.GetPackageInfo(context.PackageName, 0);

            ApplicationsPublicVersion = info.VersionName;
            ApplicationsPrivateVersion = info.VersionCode.ToString();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

iOS版

using System;
using MyApp.Interfaces;
using MyApp.iOS.Helpers;
using Foundation;
using Xamarin.Forms;

[assembly: Dependency(typeof(ApplicationVersion))]
namespace MyApp.iOS.Helpers
{
    public class ApplicationVersion : IApplicationVersion
    {
        public string ApplicationsPublicVersion { get; set; }
        public string ApplicationsPrivateVersion { get; set; }

        public ApplicationVersion()
        {
            ApplicationsPublicVersion = NSBundle.MainBundle.InfoDictionary[new NSString("CFBundleShortVersionString")].ToString();
            ApplicationsPrivateVersion = NSBundle.MainBundle.InfoDictionary[new NSString("CFBundleVersion")].ToString();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*sen 13

您可以通过实现依赖服务来完成此操作.首先,在共享代码中定义一个接口:

namespace MyApp
{
    public interface IAppVersionProvider
    {
        string AppVersion { get; }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在每个平台项目中实现该接口.

iOS版

[assembly: Dependency(typeof(AppVersionProvider))]
namespace MyApp.iOS
{
    public class AppVersionProvider : IAppVersionProvider
    {
        public string AppVersion => NSBundle.MainBundle.InfoDictionary[new NSString("CFBundleVersion")].ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

Android的

[assembly: Dependency(typeof(AppVersionProvider))]
namespace MyApp.Droid
{
    public class AppVersionProvider : IAppVersionProvider
    {
        public string AppVersion
        {
            get
            {
                var context = Android.App.Application.Context;
                var info = context.PackageManager.GetPackageInfo(context.PackageName, 0);

                return $"{info.VersionName}.{info.VersionCode.ToString()}";
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过以下方式从共享代码中检索版本号:

var version = DependencyService.Get<IAppVersionProvider>();
var versionString = version.AppVersion;
Run Code Online (Sandbox Code Playgroud)


小智 6

如果您不想使用依赖服务,则可以只使用该类VersionTracking

该属性将为您提供可以在 Android和 iOSVersionTracking.CurrentVersion中设置的版本。propertiesinfo.plist

这个类是由 提供的Xamarin.Essentials,可以给你很多信息。请查看此处的文档以获取更多信息。