Imaginemos que nuestra app utiliza un fichero de BBDD *.db que necesitamos actualizar al publicar una nueva versión en la tienda. Cuando los usuarios actualicen la app, no sabremos desde que versión están actualizando. Además los nuevos ficheros que de distribuyen con el fichero APK serán actualizados, pero aquellos que ya existían no serán actualizados. Tener un control de la versión de la app nos permitirá controlar los cambios y actualizar los ficheros manualmente que sean necesarios.
Para la gestión de versiones yo uso estas rutinas:
unit AppVersion;
interface
{$IF DEFINED(iOS)}
uses Macapi.CoreFoundation;
{$ENDIF}
{$IF DEFINED(ANDROID)}
uses
Androidapi.JNI.JavaTypes,
FMX.Helpers.Android,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.Helpers;
{$ENDIF}
{$IF DEFINED(MSWINDOWS)}
uses
SysUtils;
{$ENDIF}
function GetAppVersionStr: string;
implementation
{$IF DEFINED(MSWINDOWS)}
function GetAppVersionStr: string;
var
Rec: LongRec;
begin
Rec := LongRec(GetFileVersion(ParamStr(0)));
Result := Format('%d.%d', [Rec.Hi, Rec.Lo])
end;
{$ENDIF}
{$IF DEFINED(ANDROID)}
function GetAppVersionStr: string;
var
PackageManager: JPackageManager;
PackageInfo : JPackageInfo;
begin
PackageManager := SharedActivity.getPackageManager;
PackageInfo := PackageManager.getPackageInfo(SharedActivityContext.getPackageName(), TJPackageManager.JavaClass.GET_ACTIVITIES);
Result:= JStringToString(PackageInfo.versionName);
end;
{$ENDIF}
{$IF DEFINED(iOS)}
function GetAppVersionStr: string;
var
CFStr: CFStringRef;
Range: CFRange;
begin
CFStr := CFBundleGetValueForInfoDictionaryKey(
CFBundleGetMainBundle, kCFBundleVersionKey);
Range.location := 0;
Range.length := CFStringGetLength(CFStr);
SetLength(Result, Range.length);
CFStringGetCharacters(CFStr, Range, PChar(Result));
end;
{$ENDIF}
end.