アプリケーションのバージョン管理は、メンテナンスの重要なコンポーネントです。エンドユーザーは、デバイスにインストールされているアプリケーションのバージョンや、インストール可能なアップグレードバージョンについて、具体的な情報を常に必要としています。
互換性を判断したり、依存関係を特定するために、アプリケーションのバージョンをシステムにクエリする必要があることがあります。たとえば、互換性を判断したりアップグレード/ダウングレードの関係を確立するために、バージョンをチェックする必要があることがあります。GeneXus によって生成されたネイティブ モバイル アプリケーションは、デバイスにインストールされるので、アプリケーションの新しいバージョンを展開しようとするとき、アプリケーションのサーバー側に対して行われた変更が原因で、古いバージョンが動作しなくなったり、動作が失敗したりする危険があります。
各 GeneXus ネイティブ モバイル アプリケーションのコアは、
Flexible Client です。これは、サーバーがメタデータの新しいバージョン、または更新バージョンを持っているかをアプリケーションが検出し、そのバージョンを使用して動作を開始できることを意味します。
Flexible Client は、多くの利点をもたらします:
- アプリケーションストアのすべての承認段階を待つことなく、アプリの一部を更新できます。
- 古いクライアントのユーザーには更新が必要なことが通知され、クライアントのバージョンの更新が自動的に開始されます。
ただし、これですべてのシナリオをカバーするわけではありません。たとえば、新しいバージョンで、新しいユーザーコントロールなどのバイナリコードが変更されている場合、Flexible Client は新しいバージョンに更新することができません。この場合、「
Not Supported Client スキーム」の状況が適用されます。要約すると、メタデータのバージョンを更新する必要がある場合 (
マイナーチェンジが発生した場合)、開発者はアプリの更新を自動的に開始できます。これに対して、「
Not Supported Client スキーム」のシナリオがある場合 (
メジャーチェンジが発生した場合) は、アプリケーションでユーザーをストアにリダイレクトし、最新バージョンのダウンロードを促す方法が最適です。
このドキュメントでは、簡単な例を使い、ネイティブモバイル向け GeneXus でバージョンを管理する方法について説明します。
ネイティブモバイルの [ Main object properties ] には、バージョン管理プロセスに関わるプロパティがプラットフォームごとに 3 つずつあります。
- Version Code
X と Y の 2 つの数値を「.」(ドット) で区切った文字列値で、アプリケーションの相対的なバージョンを表します。X はメジャーアップグレード、Y はマイナーアップグレードを示します。たとえば、値「2.4」は、このアプリケーションのメジャーアップグレードが 2 回、このメジャーバージョンに対するマイナーアップグレードが 4 回あったことを意味します。
- Version Name
エンドユーザーに表示されるアプリケーションのリリースバージョンを示す文字列値です。わかりやすいように、前述のプロパティの値にドットとビルド番号を付加します (例:「2.4.126」)。
- Where the application must be updated
エンドユーザーにメジャーアップグレードが必要な場合にアプリケーションをダウンロードできる URL です (通常はストア)。
各プラットフォームでの動作を見てみます。
Android 固有
[ Android Version Code ] プロパティ |
開発者がアプリケーションの新バージョン (*.apk ファイル) を公開するたびに、この値を Google Play ストア (または別のストア) に求められます。値がなかった場合、次のようなエラーメッセージが表示されます:
|
[ Android Version Name ] プロパティ |
ストアのアプリ情報に表示されるバージョンです。
|
[ Update URL ] プロパティ |
このドキュメントを参照してください。
|
Apple 固有
[ Apple Version Code ] プロパティ |
このプロパティの Android 版と同じ意味です。Apple App Store でアプリケーションをアップグレードするプロセスに従う必要があります。
|
[ Apple Version Name ] プロパティ |
このプロパティの Android 版と同じ概念ですが、Apple App Store である点が異なります。
|
[ App Store URL ] プロパティ |
アプリケーションがホストされる iTunes Web サイトの URL です。書式は次のとおりです:
https://itunes.apple.com/app/id<your_apple_app_identifier> (例: https://itunes.apple.com/app/id887880596)
ここで Apple App ID はアプリケーションの公開後に付与されます (iTunes Connect で照会可能)。
上級ユーザーの場合は、次のように manifest.plist ファイルのカスタム URL を指定することもできます。
itms-services://?action=download-manifest&url=<url_to_the_manifest.plist_file>
<url_to_the_manifest.plist_file> はエスケープが必要です (例: URL http://www.my-domain.com/path/to/manifest.plist は https%3A%2F%2Fwww.my-domain.com%2Fpath%2Fto%2Fmanifest.plist と記述)。 |
小さい変更の場合、またはアプリ自身が更新可能な変更の場合、"." (ドット) の後の数字を変更します。これにより、デバイスにあるアプリケーションに自動的にメタデータ情報を更新させます。
|
現在のバージョン |
|
新しいバージョン |
Android の場合
|
|
|
|
Apple の場合 |
|
|
|
結果
|
新しいバージョンの検出 |
更新完了 |
Android の場合
|
|
|
Apple の場合 |
|
|
アプリケーションが更新中であることをエンドユーザーに通知するメッセージと、終了時に更新されたことをエンドユーザーに通知するメッセージは、ナレッジベース内の Language オブジェクトに次のメッセージを設定することでカスタマイズできます:
- GXM_UpdatingApplication
- GXM_ApplicationUpdated
GeneXus 17 Upgrade 4 以降、完全に無効にすることも可能です。そのためには、値 "(none)" (引用符なし) をこれら 2 つのメッセージに設定します。
アプリケーションをストアからダウンロードしてアップグレードする必要があるメジャーチェンジの場合、「.」(ドット) の前の数字を次のように変更します。これにより、エンドユーザーは URL でストアにリダイレクトされ、アプリケーションの新しいバージョンをダウンロードするよう促されます。
注: アプリケーションが Android にインストールされている場合、
エンドユーザーは、アプリケーションによる自動更新を許可する必要があります。これは、
[ Update URL ] プロパティに APK へのリンクが設定されている限り必要です。 こうすることで、メジャーバージョンが変更された場合に更新を確認するだけで済みます。
|
現在のバージョン |
|
新しいバージョン |
Android の場合
|
|
|
|
Apple の場合 |
|
|
|
結果
|
新しいバージョンの検出 |
ストアへのリダイレクト |
更新の開始 |
Android の場合
|
|
|
|
Apple の場合 |
|
|
|
デバイスは、サーバーの次の名前のファイルを確認します:
- Android: <main> .android.json
- Apple: <main> .ios.json
これには次のバージョンが格納されています: {"minor": "0", "major": "1", "uri": ""}
デバイスはその JSON のバージョンをサーバーにある JSON のバージョンに対して確認し、異なる場合はアプリケーションが更新されます。
デプロイツールでデプロイが行われた場合は、メタデータがパッケージ内に残るように、
[ App Update ] プロパティを設定する必要があることを考慮してください。
オンライン ネイティブ モバイル アプリケーションのアーキテクチャ
ネイティブモバイルのバージョン管理の詳細
[ App Update ] プロパティ