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)
| 归档时间: |
|
| 查看次数: |
3289 次 |
| 最近记录: |