(57)【特許請求の範囲】
【請求項１】
ビジネス論理ソースコードを入力することであって、前記ビジネス論理ソースコードは、任意のプラットフォームに特有のコードを含有せず、前記ビジネス論理ソースコードは、アプリケーションに特有のアプリケーションの機能性を定義する、ことと、
第１のプラットフォームに関連付けられたプラットフォーム特有のコードおよび前記ビジネス論理ソースコードをコンパイルし、それによって、第１の一組のコンピュータ実行可能命令を生成することであって、前記第１の一組のコンピュータ実行可能命令の実行は、前記アプリケーションを提供することを前記第１のプラットフォームを提供するデバイスに行わせる、ことと、
第２のプラットフォームに関連付けられたプラットフォーム特有のコードおよび前記ビジネス論理ソースコードをコンパイルし、それによって、第２の一組のコンピュータ実行可能命令を生成することであって、前記第２の一組のコンピュータ実行可能命令の実行は、前記アプリケーションを提供することを前記第２のプラットフォームを提供するデバイスに行わせる、ことと
を含み、
前記第１の一組のコンピュータ実行可能命令を生成することは、第１の一組のプラットフォーム特有のコードをコンパイルすることを含み、前記第１の一組のプラットフォーム特有のコードは、前記第１のプラットフォームに特有であり、
前記第２の一組のコンピュータ実行可能命令を生成することは、第２の一組のプラットフォーム特有のコードをコンパイルすることを含み、前記第２の一組のプラットフォーム特有のコードは、前記第２のプラットフォームに特有であり、
前記ビジネス論理ソースコードは、レイヤーソースコードを含み、
前記第１の一組のコンピュータ実行可能命令を生成することは、前記レイヤーソースコードをコンパイルすることを含み、前記レイヤーソースコードは、前記第１のプラットフォームまたは前記第２のプラットフォームに特有のコードを含有せず、前記レイヤーソースコードは、コンテンツをレイヤーモジュールにロードするロード動作を含むレイヤークラスを定義し、前記レイヤーモジュールは、前記レイヤークラスのインスタンスであり、
前記第２の一組のコンピュータ実行可能命令を生成することは、前記レイヤーソースコードをコンパイルすることを含み、
前記第１の一組のプラットフォーム特有のコードは、前記第１のプラットフォーム上で実行されると、前記レイヤーモジュールを使用してレイヤーをユーザに提示するために使用可能な出力データを生成する動作を定義し、
前記第２の一組のプラットフォーム特有のコードは、前記第２のプラットフォーム上で実行されると、前記レイヤーモジュールを使用して前記レイヤーを別のユーザに提示するために使用可能な出力データを生成する動作を定義する、方法。
【請求項２】
第１の一組のソースコードをコンパイルすることによって、第１の一組のコンピュータ実行可能命令を生成することであって、前記第１の一組のソースコードは、ビジネス論理ソースコードを含み、前記第１の一組のコンピュータ実行可能命令は、第１のプラットフォーム上での実行に好適である、ことと、
第２の一組のソースコードをコンパイルすることによって、第２の一組のコンピュータ実行可能命令を生成することであって、前記第２の一組のソースコードは、前記ビジネス論理ソースコードを含み、前記第２の一組のコンピュータ実行可能命令は、第２のプラットフォーム上での実行に好適である、ことと
を含み、
前記ビジネス論理ソースコードは、前記第１のプラットフォームに特有のコードがなく、前記第２のプラットフォームに特有のコードがなく、
前記ビジネス論理ソースコードは、アプリケーションの機能性を定義し、前記アプリケーションの機能性は、前記アプリケーションに特有であり、
前記第１の一組のコンピュータ実行可能命令を生成することは、第１の一組のプラットフォーム特有のコードをコンパイルすることを含み、前記第１の一組のプラットフォーム特有のコードは、前記第１のプラットフォームに特有であり、
前記第２の一組のコンピュータ実行可能命令を生成することは、第２の一組のプラットフォーム特有のコードをコンパイルすることを含み、前記第２の一組のプラットフォーム特有のコードは、前記第２のプラットフォームに特有であり、
前記ビジネス論理ソースコードは、レイヤーソースコードを含み、
前記第１の一組のコンピュータ実行可能命令を生成することは、前記レイヤーソースコードをコンパイルすることを含み、前記レイヤーソースコードは、前記第１のプラットフォームまたは前記第２のプラットフォームに特有のコードを含有せず、前記レイヤーソースコードは、コンテンツをレイヤーモジュールにロードするロード動作を含むレイヤークラスを定義し、前記レイヤーモジュールは、前記レイヤークラスのインスタンスであり、
前記第２の一組のコンピュータ実行可能命令を生成することは、前記レイヤーソースコードをコンパイルすることを含み、
前記第１の一組のプラットフォーム特有のコードは、前記第１のプラットフォーム上で実行されると、前記レイヤーモジュールを使用してレイヤーをユーザに提示するために使用可能な出力データを生成する動作を定義し、
前記第２の一組のプラットフォーム特有のコードは、前記第２のプラットフォーム上で実行されると、前記レイヤーモジュールを使用して前記レイヤーを別のユーザに提示するために使用可能な出力データを生成する動作を定義する、方法。
【請求項３】
外部の第三者によって提供される、データ記憶システムから、前記第１の一組のプラットフォーム特有のコードをコピーすることをさらに含む、請求項２に記載の方法。
【請求項４】
前記ビジネス論理ソースコードは、アプリケーションソースコードを含み、
前記アプリケーションは、一組のレイヤーを有し、前記レイヤーのそれぞれはレイヤーＵＲＩに関連付けられ、
前記第１の一組のコンピュータ実行可能命令を生成することは、前記アプリケーションソースコードをコンパイルすることを含み、前記アプリケーションソースコードは、前記第１のプラットフォームまたは前記第２のプラットフォームに特有のコードを含有せず、前記アプリケーションソースコードは、アプリケーションモジュールの機能性を定義し、前記アプリケーションモジュールは、ナビゲーション要求が受信されると、呼び出されるナビゲーション動作を有し、前記ナビゲーション動作は、前記ナビゲーション要求によって指定されたレイヤーＵＲＩが、前記レイヤーモジュールに関連付けられているとき、ロード要求を前記レイヤーモジュールに提供し、前記ロード要求は、前記レイヤーモジュールのロード動作を行うための要求を含む、請求項２に記載の方法。
【請求項５】
前記第１の一組のプラットフォーム特有のコードは、第１のバインディングモジュールの機能性を定義し、前記第１のバインディングモジュールは、レイヤーモジュールを処理することにより、前記第１のプラットフォームにネイティブであるユーザインターフェース特徴を使用して前記レイヤーを提示するために使用可能な出力データを生成するレイヤー出力動作を有し、
前記第２の一組のプラットフォーム特有のコードは、第２のバインディングモジュールの機能性を定義し、前記第２のバインディングモジュールは、レイヤーモジュールを処理することにより、前記第２のプラットフォームにネイティブであるユーザインターフェース特徴を使用して前記レイヤーを提示するために使用可能な出力データを生成する異なるレイヤー出力動作を有する、請求項４に記載の方法。
【請求項６】
前記第１の一組のコンピュータ実行可能命令を生成することは、第１のパッケージを生成することを含み、前記第１のパッケージは、前記レイヤーモジュールの機能性を定義するコンピュータ実行可能命令と、前記アプリケーションモジュールと、前記第１のバインディングモジュールとを含み、前記第１のパッケージは、前記第１のプラットフォームを提供するコンピューティングデバイス上でのインストールに好適である、請求項５に記載の方法。
【請求項７】
デバイス上で実行されると、前記アプリケーションの動作を行うと考えられるシェルアプリケーションを提供することを前記デバイスに行わせるコンピュータ実行可能命令を含む、シェルアプリケーションパッケージを生成することをさらに含み、前記シェルアプリケーションは、実際には、ナビゲーション要求を前記アプリケーションモジュールに送信し、直列化されたインターフェースデータを第１のバインディングモジュールから受信し、前記アプリケーションモジュールおよび前記第１のバインディングモジュールは、サーバシステムで動作する、請求項４に記載の方法。
【請求項８】
前記一組の命令を生成することは、
第１のバインディングモジュールの機能性を定義する命令を含むクライアントパッケージを生成することであって、前記クライアントパッケージは、前記第１のプラットフォームを提供するコンピューティングデバイス上でのインストールに好適である、ことと、
前記レイヤーモジュールおよび前記アプリケーションモジュールの機能性を定義する命令を含むサーバパッケージを生成することであって、前記サーバパッケージは、サーバデバイス上でのインストールに好適である、ことと
を含む、請求項４に記載の方法。
【請求項９】
前記第１のプラットフォームを提供し、かつ、前記第１の一組のコンピュータ実行可能命令を実行可能であるデバイスに前記第１の一組のコンピュータ実行可能命令を配信することと、
前記第２のプラットフォームを提供し、かつ、前記第２の一組のコンピュータ実行可能命令を実行可能であるデバイスに前記第２の一組のコンピュータ実行可能命令を配信することと
をさらに含む、請求項２に記載の方法。
【請求項１０】
前記第１の一組のコンピュータ実行可能命令を配信することは、前記第１の一組のコンピュータ実行可能命令をアプリケーションストアでの購入に利用可能にすることを含み、
前記第２の一組のコンピュータ実行可能命令を配信することは、前記第２の一組のコンピュータ実行可能命令を前記アプリケーションストアまたは別のアプリケーションストアでの購入に利用可能にすることを含む、請求項９に記載の方法。
【請求項１１】
前記第１の一組のコンピュータ実行可能命令を配信することは、前記第１の一組のコンピュータ実行可能命令を前記第１のプラットフォームを提供する組織内のデバイスにプッシュすることを含み、
前記第２の一組のコンピュータ実行可能命令を配信することは、前記第２の一組のコンピュータ実行可能命令を前記第２のプラットフォームを提供する組織内のデバイスにプッシュすることを含む、請求項９に記載の方法。
【請求項１２】
前記ビジネス論理ソースコードは、どのプラットフォームが前記アプリケーションを起動しているかに応じて条件付きで実行されるコードを含まない、請求項２に記載の方法。
【請求項１３】
第１の一組のプラットフォーム特有のコードおよび第２の一組のプラットフォーム特有のコードを１人以上の外部の第三者から取得することであって、前記第１の一組のプラットフォーム特有のコードは、第１のプラットフォームに特有であり、前記第２の一組のプラットフォーム特有のコードは、第２のプラットフォームに特有である、ことと、
第１のアプリケーションのためのビジネス論理ソースコードを展開することであって、前記ビジネス論理ソースコードは、前記第１のアプリケーションに特有の前記第１のアプリケーションの機能性を定義し、前記第１の一組のプラットフォーム特有のコードおよび前記第２の一組のプラットフォーム特有のコードは、前記第１のアプリケーションに特有のコードがない、ことと、
１つ以上のコンピューティングデバイスを使用して、第１の一組のコンピュータ実行可能命令および第２の一組のコンピュータ実行可能命令を生成することと
を含み、
前記１つ以上のコンピューティングデバイスは、第１の一組のソースコードをコンパイルすることによって、前記第１の一組のコンピュータ実行可能命令を生成し、前記第１の一組のソースコードは、前記ビジネス論理ソースコードおよび前記第１の一組のプラットフォーム特有のコードを含み、
前記１つ以上のコンピューティングデバイスは、第２の一組のソースコードをコンパイルすることによって、前記第２の一組のコンピュータ実行可能命令を生成し、前記第２の一組のソースコードは、前記ビジネス論理ソースコードおよび前記第２の一組のプラットフォーム特有のコードを含み、
前記ビジネス論理ソースコードは、レイヤーソースコードを含み、
前記第１の一組のコンピュータ実行可能命令を生成することは、前記レイヤーソースコードをコンパイルすることを含み、前記レイヤーソースコードは、前記第１のプラットフォームまたは前記第２のプラットフォームに特有のコードを含有せず、前記レイヤーソースコードは、コンテンツをレイヤーモジュールにロードするロード動作を含むレイヤークラスを定義し、前記レイヤーモジュールは、前記レイヤークラスのインスタンスであり、
前記第２の一組のコンピュータ実行可能命令を生成することは、前記レイヤーソースコードをコンパイルすることを含み、
前記第１の一組のプラットフォーム特有のコードは、前記第１のプラットフォーム上で実行されると、前記レイヤーモジュールを使用してレイヤーをユーザに提示するために使用可能な出力データを生成する動作を定義し、
前記第２の一組のプラットフォーム特有のコードは、前記第２のプラットフォーム上で実行されると、前記レイヤーモジュールを使用して前記レイヤーを別のユーザに提示するために使用可能な出力データを生成する動作を定義する、方法。
【請求項１４】
第２のアプリケーションのためのビジネス論理ソースコードを展開することと、
前記第２のアプリケーションのためのビジネス論理ソースコードと、前記第１の一組のプラットフォーム特有のソースコードと、前記第２の一組のプラットフォーム特有のソースコードとを使用して、前記第１および第２のプラットフォーム上での実行に好適な一組のコンピュータ実行可能命令を生成することと
をさらに含む、請求項１３に記載の方法。
【請求項１５】
前記第１の一組のコンピュータ実行可能命令を第１のデバイスにインストールすることであって、前記第１のデバイスは、前記第１のプラットフォームを提供し、前記第１のデバイスによる前記第１の一組のコンピュータ実行可能命令の実行は、前記第１のプラットフォームにネイティブであるユーザインターフェース特徴のみを使用して、前記第１のアプリケーションのユーザインターフェースを提示することを前記第１のデバイスに行わせる、ことと、
前記第２の一組のコンピュータ実行可能命令を第２のデバイスにインストールすることであって、前記第２のデバイスは、前記第２のプラットフォームを提供し、前記第２のデバイスによる前記第２の一組のコンピュータ実行可能命令の実行は、前記第２のプラットフォームにネイティブであるユーザインターフェース特徴のみを使用して、前記第１のアプリケーションのユーザインターフェースを提示することを前記第２のデバイスに行わせる、ことと
をさらに含む、請求項１３に記載の方法。
【請求項１６】
コンピューティングシステムであって、前記コンピューティングシステムは、
１つ以上のデータ記憶メディアであって、
コンピュータ実行可能命令と、
アプリケーションのためのビジネス論理ソースコードであって、前記ビジネス論理ソースコードは、任意のプラットフォームに特有のソースコードがなく、前記ビジネス論理ソースコードは、前記アプリケーションの機能性を定義し、前記アプリケーションの機能性は、前記アプリケーションに特有である、ビジネス論理ソースコードと
を記憶する１つ以上のデータ記憶メディアと、
前記命令を前記１つ以上のデータ記憶メディアから読み取り、前記命令を実行する処理ユニットであって、前記処理ユニットによる前記命令の実行は、前記ビジネス論理ソースコードを使用して複数のパッケージを生成することを前記コンピューティングシステムに行わせ、前記パッケージは、異なるプラットフォーム上での実行に好適であり、前記プラットフォーム上での前記パッケージの実行は、前記アプリケーションを提供することを前記プラットフォームを提供するコンピューティングデバイスに行わせる、処理ユニットと
を含み、
前記処理ユニットは、第１の一組のコンピュータ実行可能命令を生成するように構成されており、前記第１の一組のコンピュータ実行可能命令は、第１の一組のプラットフォーム特有のコードをコンパイルすることを含み、前記第１の一組のプラットフォーム特有のコードは、第１のプラットフォームに特有であり、
前記処理ユニットは、第２の一組のコンピュータ実行可能命令を生成するように構成されており、前記第２の一組のコンピュータ実行可能命令は、第２の一組のプラットフォーム特有のコードをコンパイルすることを含み、前記第２の一組のプラットフォーム特有のコードは、第２のプラットフォームに特有であり、
前記ビジネス論理ソースコードは、レイヤーソースコードを含み、
前記第１の一組のコンピュータ実行可能命令を生成することは、前記レイヤーソースコードをコンパイルすることを含み、前記レイヤーソースコードは、前記第１のプラットフォームまたは前記第２のプラットフォームに特有のコードを含有せず、前記レイヤーソースコードは、コンテンツをレイヤーモジュールにロードするロード動作を含むレイヤークラスを定義し、前記レイヤーモジュールは、前記レイヤークラスのインスタンスであり、
前記第２の一組のコンピュータ実行可能命令を生成することは、前記レイヤーソースコードをコンパイルすることを含み、
前記第１の一組のプラットフォーム特有のコードは、前記第１のプラットフォーム上で実行されると、前記レイヤーモジュールを使用してレイヤーをユーザに提示するために使用可能な出力データを生成する動作を定義し、
前記第２の一組のプラットフォーム特有のコードは、前記第２のプラットフォーム上で実行されると、前記レイヤーモジュールを使用して前記レイヤーを別のユーザに提示するために使用可能な出力データを生成する動作を定義する、コンピューティングシステム。
【請求項１７】
前記異なるプラットフォームは、異なるタイプのモバイルデバイスによって提供されるプラットフォームを含む、請求項１６に記載のコンピューティングシステム。
【請求項１８】
命令を記憶するコンピュータ読み取り可能なデータ記憶メディアであって、前記命令は、コンピューティングシステムの処理ユニットによって実行されると、
第１のプラットフォームに特有のプラットフォーム特有のコードおよびビジネス論理ソースコードをコンパイルすることによって、第１の一組の命令を生成することであって、前記第１の一組の命令の実行は、アプリケーションを提供することを前記第１のプラットフォームを提供するデバイスに行わせ、前記ビジネス論理ソースコードは、任意のプラットフォームに特有のコードを含有せず、前記ビジネス論理ソースコードは、アプリケーションの機能性を定義し、前記アプリケーションの機能性は、前記アプリケーションに特有である、ことと、
第２のプラットフォームに特有のプラットフォーム特有のコードおよび前記ビジネス論理ソースコードをコンパイルすることによって、第２の一組の命令を生成することであって、前記第２の一組の命令の実行は、前記アプリケーションを提供することを前記第２のプラットフォームを提供するデバイスに行わせる、ことと
を前記コンピューティングシステムに行わせ、
前記ビジネス論理ソースコードは、レイヤーソースコードを含み、
前記第１の一組の命令を生成することは、前記レイヤーソースコードをコンパイルすることを含み、前記レイヤーソースコードは、前記第１のプラットフォームまたは前記第２のプラットフォームに特有のコードを含有せず、前記レイヤーソースコードは、コンテンツをレイヤーモジュールにロードするロード動作を含むレイヤークラスを定義し、前記レイヤーモジュールは、前記レイヤークラスのインスタンスであり、
前記第２の一組の命令を生成することは、前記レイヤーソースコードをコンパイルすることを含み、
前記第１の一組のプラットフォーム特有のコードは、前記第１のプラットフォーム上で実行されると、前記レイヤーモジュールを使用してレイヤーをユーザに提示するために使用可能な出力データを生成する動作を定義し、
前記第２の一組のプラットフォーム特有のコードは、前記第２のプラットフォーム上で実行されると、前記レイヤーモジュールを使用して前記レイヤーを別のユーザに提示するために使用可能な出力データを生成する動作を定義する、コンピュータ読み取り可能なデータ記憶メディア。
【請求項１９】
前記ビジネス論理ソースコードは、複数のレイヤーを定義し、
前記第１の一組の命令の実行は、コンテンツを前記レイヤーにロードすることと、前記第１のプラットフォームにネイティブであるユーザインターフェース特徴を使用して前記レイヤー内のコンテンツを表示することとを前記第１のプラットフォームを提供する前記デバイスに行わせ、
前記第２の一組の命令の実行は、前記コンテンツを前記レイヤーにロードすることと、前記第１のプラットフォームにネイティブであるユーザインターフェース特徴を使用して前記レイヤー内のコンテンツを表示することとを前記第２のプラットフォームを提供する前記デバイスに行わせる、請求項１８に記載のコンピュータ読み取り可能なデータ記憶メディア。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願）
本願は、米国を除く全ての指定国に対する出願人である米国企業のＩＴＲ  Ｇｒｏｕｐ，Ｉｎｃ．ならびに米国のみの指定国に対する出願人である米国民のＮａｔｈａｎ  Ｊ．  Ｃｌｅｖｅｎｇｅｒの名で２０１１年４月１５日に出願されたＰＣＴ国際特許出願であり、そして、２０１０年４月１５日に出願された米国特許出願シリアル番号第６１／３２４，６７２号に対する優先権を主張するものである。
【背景技術】
【０００２】
益々、高度モバイルコンピューティングデバイスは、今日の社会に普及しつつある。そのようなモバイルコンピューティングデバイスは、もはや、電話を架ける、またはテキストメッセージを交換する能力を有するだけではなく、現在は、本格的なソフトウェアアプリケーションを実行することが可能である。モバイルコンピューティングデバイスのためのソフトウェアアプリケーションは、種々の目的を果たすことができる。例えば、モバイルコンピューティングデバイスのためのいくつかのソフトウェアアプリケーションは、単純なビデオゲームである。別の実施例では、モバイルコンピューティングデバイスのためのいくつかのソフトウェアアプリケーションは、企業のための販売または在庫プロセスをサポートする。
【０００３】
異なるタイプのモバイルコンピューティングデバイスは、異なるオペレーティングシステムおよび能力を有する。例えば、いくつかの携帯電話は、ＡＮＤＲＯＩＤ（登録商標）オペレーティングシステムを使用して、他の携帯電話は、ＩＰＨＯＮＥ（登録商標）オペレーティングシステムを使用する。別の実施例では、いくつかのモバイルコンピューティングデバイスは、豊富なフルカラーグラフィカルユーザインターフェースをサポートする一方、他のモバイルコンピューティングデバイスは、単純なテキストベースのインターフェースのみ提供する。
【０００４】
異なるタイプのモバイルコンピューティングデバイスは、異なるオペレーティングシステムおよび能力を有するため、開発者が、異なるタイプのモバイルコンピューティングデバイスのためのソフトウェアアプリケーションを開発することを所望する場合、異なるタイプのモバイルコンピューティングデバイスのそれぞれのためのソフトウェアアプリケーションの別個のバージョンを開発する必要がある。例えば、開発者は、ＩＰＨＯＮＥ（登録商標）携帯電話のためのソフトウェアアプリケーションのバージョンと、ＢＬＡＣＫＢＥＲＲＹ（登録商標）携帯電話のためのソフトウェアアプリケーションの別のバージョンを開発する必要があり得る。異なるタイプのモバイルコンピューティングデバイスのためのソフトウェアアプリケーションの異なるバージョンの開発は、コストがかかり、時間がかかるプロセスとなり得る。
【発明の概要】
【課題を解決するための手段】
【０００５】
一式のコンピュータ可読命令は、一部分において、ビジネス論理ソースコードをコンパイルすることによって、生成される。デバイスによって提供されたプラットフォーム上でネイティブに実行されると、該一式のコンピュータ可読命令は、アプリケーションを提供する。別の一式のコンピュータ可読命令は、一部分において、同一ビジネス論理ソースコードをコンパイルすることによって、生成される。別のデバイスによって提供された別のプラットフォーム上でネイティブに実行されると、該別の一式のコンピュータ可読命令は、同一アプリケーションを提供する。該ビジネス論理ソースコードは、任意のプラットフォームに特有のコードを含有しない。さらに、該ビジネス論理ソースコードは、アプリケーションのすべてのアプリケーション特有の機能性を定義する。
例えば、本願発明は以下の項目を提供する。
（項目１）
ビジネス論理ソースコードを入力するステップであって、前記ビジネス論理ソースコードは、実質的な量の任意のプラットフォームに特有のコードを含有せず、前記ビジネス論理ソースコードは、アプリケーションに特有のアプリケーションの実質的にすべての機能性を定義する、ステップと、
第１のプラットフォームと関連付けられたプラットフォーム特有のコードおよび前記ビジネス論理ソースコードをコンパイルし、それによって、第１の一式のコンピュータ実行可能命令を生成するステップであって、前記第１の一式のコンピュータ実行可能命令の実行は、前記第１のプラットフォームを提供するデバイスに、前記アプリケーションを提供させる、ステップと、
第２のプラットフォームと関連付けられたプラットフォーム特有のコードおよび前記ビジネス論理ソースコードをコンパイルし、それによって、第２の一式のコンピュータ実行可能命令を生成するステップであって、前記第２の一式のコンピュータ実行可能命令の実行は、前記第２のプラットフォームを提供するデバイスに、前記アプリケーションを提供させる、ステップと
を含む、方法。
（項目２）
第１の一式のソースコードをコンパイルすることによって、第１の一式のコンピュータ実行可能命令を生成するステップであって、前記第１の一式のソースコードは、ビジネス論理ソースコードを含み、前記第１の一式のコンピュータ実行可能命令は、第１のプラットフォーム上での実行に好適である、ステップと、
第２の一式のソースコードをコンパイルすることによって、第２の一式のコンピュータ実行可能命令を生成するステップであって、前記第２の一式のソースコードは、前記ビジネス論理ソースコードを含み、前記第２の一式のコンピュータ実行可能命令は、第２のプラットフォーム上での実行に好適である、ステップと
を含み、
前記ビジネス論理ソースコードは、実質的に、前記第１のプラットフォームに特有のコードがなく、実質的に、前記第２のプラットフォームに特有のコードがなく、前記ビジネス論理ソースコードは、前記アプリケーションに特有である、実質的にすべての機能性を定義する、方法。
（項目３）
前記第１の一式のコンピュータ実行可能命令を生成するステップは、第１の一式のプラットフォーム特有のコードをコンパイルするステップを含み、前記第１の一式のプラットフォーム特有のコードは、前記第１のプラットフォームに特有であり、
前記第２の一式のコンピュータ実行可能命令を生成するステップは、第２の一式のプラットフォーム特有のコードをコンパイルするステップを含み、前記第２の一式のプラットフォーム特有のコードは、前記第２のプラットフォームに特有である、
項目２に記載の方法。
（項目４）
外部の第三者によって提供される、データ記憶システムから、前記第１の一式のプラットフォーム特有のコードをコピーするステップをさらに含む、項目３に記載の方法。
（項目５）
前記第１の一式のコンピュータ実行可能命令を生成するステップは、レイヤーソースコードをコンパイルするステップを含み、前記レイヤーソースコードは、前記第１のプラットフォームまたは前記第２のプラットフォームに特有のコードを含有せず、前記レイヤーソースコードは、コンテンツをレイヤーモジュールにロードする、ロード動作を含む、レイヤークラスを定義し、前記レイヤーモジュールは、前記レイヤークラスのインスタンスであり、
前記第２の一式のコンピュータ実行可能命令を生成するステップは、前記レイヤーソースコードをコンパイルするステップを含み、
前記第１の一式のプラットフォーム特有のコードは、前記第１のプラットフォーム上で実行されると、前記レイヤーモジュールを使用して、レイヤーをユーザに提示するために使用可能な出力データを生成する、動作を定義し、
前記第２の一式のプラットフォーム特有のコードは、前記第２のプラットフォーム上で実行されると、前記レイヤーモジュールを使用して、前記レイヤーを別のユーザに提示するために使用可能な出力データを生成する、動作を定義する、
項目３に記載の方法。
（項目６）
前記アプリケーションは、一式のレイヤーを有し、前記レイヤーはそれぞれ、レイヤーＵＲＩと関連付けられ、
前記第１の一式のコンピュータ実行可能命令を生成するステップは、アプリケーションソースコードをコンパイルするステップを含み、前記アプリケーションソースコードは、前記第１のプラットフォームまたは前記第２のプラットフォームに特有のコードを含有せず、前記アプリケーションソースコードは、アプリケーションモジュールの機能性を定義し、前記アプリケーションモジュールは、ナビゲーション要求が受信されると、呼び出される、ナビゲーション動作を有し、前記ナビゲーション動作は、前記ナビゲーション要求によって指定されたレイヤーＵＲＩが、前記レイヤーモジュールと関連付けられているとき、ロード要求を前記レイヤーモジュールに提供し、前記ロード要求は、前記レイヤーモジュールのロード動作を行うための要求を含む、
項目５に記載の方法。
（項目７）
前記第１の一式のプラットフォーム特有のコードは、第１のバインディングモジュールの機能性を定義し、前記第１のバインディングモジュールは、レイヤーモジュールを処理し、前記第１のプラットフォームにネイティブである、ユーザインターフェース特徴を使用して、レイヤーを提示するために使用可能な出力データを生成する、レイヤー出力動作を有し、
前記第２の一式のプラットフォーム特有のコードは、第２のバインディングモジュールの機能性を定義し、前記第２のバインディングモジュールは、レイヤーモジュールを処理し、前記第２のプラットフォームにネイティブである、ユーザインターフェース特徴を使用して、前記レイヤーを提示するために使用可能な出力データを生成する、異なるレイヤー出力動作を有する、
項目６に記載の方法。
（項目８）
前記第１の一式のコンピュータ実行可能命令を生成するステップは、第１のパッケージを生成するステップを含み、前記第１のパッケージは、前記レイヤーモジュールの機能性を定義する、コンピュータ実行可能命令と、前記アプリケーションモジュールと、前記第１のバインディングモジュールとを含み、前記第１のパッケージは、前記第１のプラットフォームを提供するコンピューティングデバイス上でのインストールに好適である、項目７に記載の方法。
（項目９）
デバイス上で実行されると、前記デバイスに、前記アプリケーションの動作を行うと考えられる、シェルアプリケーションを提供させる、コンピュータ実行可能命令を含む、シェルアプリケーションパッケージを生成するステップをさらに含み、前記シェルアプリケーションは、実際には、ナビゲーション要求を前記アプリケーションモジュールに送信し、直列化されたインターフェースデータを前記第１のバインディングモジュールから受信し、前記アプリケーションモジュールおよび前記第１のバインディングモジュールは、サーバシステムで動作する、項目６に記載の方法。
（項目１０）
前記一式の命令を生成するステップは、
前記第１のバインディングモジュールの機能性を定義する命令を含むクライアントパッケージを生成するステップであって、前記クライアントパッケージは、前記第１のプラットフォームを提供するコンピューティングデバイス上でのインストールに好適である、ステップと、
前記レイヤーモジュールおよび前記アプリケーションモジュールの機能性を定義する命令を含むサーバパッケージを生成するステップであって、前記サーバパッケージは、サーバデバイス上でのインストールに好適である、ステップと
を含む、項目６に記載の方法。
（項目１１）
前記第１の一式のコンピュータ実行可能命令を、前記第１のプラットフォームを提供し、前記第１の一式のコンピュータ実行可能命令を実行可能である、デバイスに配信するステップと、
前記第２の一式のコンピュータ実行可能命令を、前記第２のプラットフォームを提供し、前記第２の一式のコンピュータ実行可能命令を実行可能である、デバイスに配信するステップと
をさらに含む、項目２に記載の方法。
（項目１２）
前記第１の一式のコンピュータ実行可能命令を配信するステップは、前記第１の一式のコンピュータ実行可能命令をアプリケーションストアでの購入に利用可能にするステップを含み、
前記第２の一式のコンピュータ実行可能命令を配信するステップは、前記第２の一式のコンピュータ実行可能命令を前記アプリケーションストアまたは別のアプリケーションストアでの購入に利用可能にするステップを含む、
項目１１に記載の方法。
（項目１３）
前記第１の一式のコンピュータ実行可能命令を配信するステップは、前記第１の一式のコンピュータ実行可能命令を前記第１のプラットフォームを提供する組織内のデバイスにプッシュするステップを含み、
前記第２の一式のコンピュータ実行可能命令を配信するステップは、前記第２の一式のコンピュータ実行可能命令を前記第２のプラットフォームを提供する組織内のデバイスにプッシュするステップを含む、
項目１１に記載の方法。
（項目１４）
前記ビジネス論理ソースコードは、どのプラットフォームが前記アプリケーションを起動しているかに応じて、条件付きで実行される、コードを含まない、項目２に記載の方法。
（項目１５）
第１の一式のプラットフォーム特有のコードおよび第２の一式のプラットフォーム特有のコードを１人以上の外部の第三者から取得するステップであって、前記第１の一式のプラットフォーム特有のコードは、第１のプラットフォームと関連付けられ、前記第２の一式のプラットフォーム特有のコードは、第２のプラットフォームと関連付けられる、ステップと、
第１のアプリケーションのためのビジネス論理ソースコードを展開するステップであって、前記ビジネス論理ソースコードは、前記第１のアプリケーションに特有の前記第１のアプリケーションの実質的にすべての機能性を定義し、前記第１の一式のプラットフォーム特有のコードおよび前記第２の一式のプラットフォーム特有のコードは、実質的に、前記第１のアプリケーションに特有のコードがない、ステップと、
１つ以上のコンピューティングデバイスを使用して、第１の一式のコンピュータ実行可能命令および第２の一式のコンピュータ実行可能命令を生成するステップと
を含み、
前記１つ以上のコンピューティングデバイスは、第１の一式のソースコードをコンパイルすることによって、前記第１の一式のコンピュータ実行可能命令を生成し、前記第１の一式のソースコードは、前記ビジネス論理ソースコードおよび前記第１の一式のプラットフォーム特有のコードを含み、
前記１つ以上のコンピューティングデバイスは、第２の一式のソースコードをコンパイルすることによって、前記第２の一式のコンピュータ実行可能命令を生成し、前記第２の一式のソースコードは、前記ビジネス論理ソースコードおよび前記第２の一式のプラットフォーム特有のコードを含む、方法。
（項目１６）
第２のアプリケーションのためのビジネス論理ソースコードを展開するステップと、
前記第２のアプリケーションのためのビジネス論理ソースコード、前記第１の一式のプラットフォーム特有のソースコード、および前記第２の一式のプラットフォーム特有のソースコードを使用して、前記第１および第２のプラットフォーム上での実行に好適な一式のコンピュータ実行可能命令を生成するステップと
をさらに含む、項目１５に記載の方法。
（項目１７）
前記第１の一式のコンピュータ実行可能命令を第１のデバイスにインストールするステップであって、前記第１のデバイスは、前記第１のプラットフォームを提供し、前記第１のデバイスによる前記第１の一式のコンピュータ実行可能命令の実行は、前記第１のデバイスに、前記第１のプラットフォームにネイティブである、ユーザインターフェース特徴のみを使用して、前記第１のアプリケーションのユーザインターフェースを提示させる、ステップと、
前記第２の一式のコンピュータ実行可能命令を第２のデバイスにインストールするステップであって、前記第２のデバイスは、前記第２のプラットフォームを提供し、前記第２のデバイスによる前記第２の一式のコンピュータ実行可能命令の実行は、前記第２のデバイスに、前記第２のプラットフォームにネイティブである、ユーザインターフェース特徴のみを使用して、前記第１のアプリケーションのユーザインターフェースを提示させる、ステップと
をさらに含む、項目１５に記載の方法。
（項目１８）
１つ以上のデータ記憶メディアであって、
コンピュータ実行可能命令と、
アプリケーションのためのビジネス論理ソースコードであって、実質的に、任意のプラットフォームに特有のソースコードがなく、前記アプリケーションに特有である、実質的にすべての機能性を定義する、ビジネス論理ソースコードと
を記憶する、１つ以上のデータ記憶メディアと、
前記命令を前記１つ以上のデータ記憶メディアから読み取り、前記命令を実行する、処理ユニットであって、前記処理ユニットによる前記命令の実行は、前記コンピューティングシステムに、前記ビジネス論理ソースコードを使用し、複数のパッケージを生成させ、前記パッケージは、異なるプラットフォーム上での実行に好適であり、前記プラットフォーム上での前記パッケージの実行は、前記プラットフォームを提供するコンピューティングデバイスに、前記アプリケーションを提供させる、処理ユニットと
を含む、コンピューティングシステム。
（項目１９）
前記異なるプラットフォームは、異なるタイプのモバイルデバイスによって提供される、プラットフォームを含む、項目１８に記載のコンピューティングシステム。
（項目２０）
命令を記憶するコンピュータ可読データ記憶メディアであって、前記命令は、コンピューティングシステムの処理ユニットによって実行されると、前記コンピューティングシステムに、
第１のプラットフォームと関連付けられたプラットフォーム特有のコードおよびビジネス論理ソースコードをコンパイルすることによって、第１の一式の命令を生成することであって、前記第１の一式の命令の実行は、前記第１のプラットフォームを提供するデバイスに、アプリケーションを提供させ、前記ビジネス論理ソースコードは、実質的な量の任意のプラットフォームに特有のコードを含有せず、前記ビジネス論理ソースコードは、前記アプリケーションに特有であるアプリケーションの実質的にすべての機能性を定義させる、ことと、
第２のプラットフォームと関連付けられたプラットフォーム特有のコードおよび前記ビジネス論理ソースコードをコンパイルすることによって、第２の一式の命令を生成することであって、前記第２の一式の命令の実行は、前記第２のプラットフォームを提供するデバイスに、前記アプリケーションを提供させる、ことと
を行わせる、コンピュータ可読データ記憶メディア。
（項目２１）
前記ビジネス論理ソースコードは、複数のレイヤーを定義し、
前記第１の一式の命令の実行は、前記第１のプラットフォームを提供するデバイスに、コンテンツを前記レイヤーにロードさせ、および前記第１のプラットフォームにネイティブである、ユーザインターフェース特徴を使用して、前記レイヤー内のコンテンツを表示させ、
前記第２の一式の命令の実行は、前記第２のプラットフォームを提供するデバイスに、前記コンテンツを前記レイヤーにロードさせ、前記第１のプラットフォームにネイティブである、ユーザインターフェース特徴を使用して、前記レイヤー内のコンテンツを表示させる、
項目２０に記載のコンピュータ可読データ記憶メディア。
【図面の簡単な説明】
【０００６】
【図１】図１は、アプリケーションを開発および配信するための例示的システムを例証する、ブロック図である。
【図２】図２は、アプリケーションを配信するためのシステムの例示的代替実施形態を例証する、ブロック図である。
【図３】図３は、アプリケーションを配信するためのシステムの別の例示的代替実施形態を例証する、ブロック図である。
【図４】図４は、アプリケーションのコンピュータ可読命令を生成するための例示的システムを例証する、ブロック図である。
【図５】図５は、例示的アプリケーション開発プロセスを例証する、流れ図である。
【図６】図６は、例示的ソフトウェアシステムを例証する、ブロック図である。
【図７】図７は、クライアントベースの展開技法を使用する、アプリケーションを開発および配信するための例示的システムを例証する、ブロック図である。
【図８】図８は、クライアントベースの展開技法を使用する、アプリケーションを実行するための例示的システムを例証する、ブロック図である。
【図９】図９は、サーバベースの展開技法を使用する、アプリケーションを開発および配信するための例示的システムを例証する、ブロック図である。
【図１０】図１０は、サーバベースの展開技法を使用する、アプリケーションを実行するための例示的システムを例証する、ブロック図である。
【図１１】図１１は、クライアントシェル展開技法を使用する、アプリケーションを開発および配信するための例示的システムを例証する、ブロック図である。
【図１２】図１２は、クライアントシェル展開技法を使用する、アプリケーションを実行するための例示的システムを例証する、ブロック図である。
【図１３】図１３は、ハイブリッドアプリケーションを開発および配信するための例示的システムを例証する、ブロック図である。
【図１４】図１４は、ハイブリッドアプリケーションを実行するための例示的システムを例証する、ブロック図である。
【図１５】図１５は、コンテナモジュールの例示的動作を例証する、流れ図である。
【図１６】図１６は、アプリケーションモジュールの例示的ナビゲーション動作を例証する、流れ図である。
【図１７】図１７は、例示的コンピューティングデバイスを例証する、ブロック図である。
【発明を実施するための形態】
【０００７】
図１は、アプリケーションを開発および配信するための例示的システム１００を例証する、ブロック図である。図１の実施例では、開発者１０２は、アプリケーションを開発する。アプリケーションは、特有の機能性をユーザに提供するためのプログラムである。開発者１０２は、種々の機能性を提供する、アプリケーションを開発することができる。例えば、開発者１０２は、最もよく売れている本のリストを表示するためのアプリケーションを開発することができる。別の実施例では、開発者１０２は、ユーザが機械部品を注文するのを支援する、アプリケーションを開発することができる。
【０００８】
システム１００は、一式のコンピューティングデバイス１０４Ａ−１０４Ｎ（集合的に、「コンピューティングデバイス１０４」）を含む。図中、要素間の楕円形は、明確にするために、１つ以上の類似要素が、図から省略されていることを示す。文字Ａ−Ｎを含む、参照番号は、最小または最大数の要素を示すことを意図しない。
【０００９】
コンピューティングデバイスは、データを処理する、デバイスである。例示的タイプのコンピューティングデバイスは、電話、スマートフォン、フィーチャーフォン、タブレットコンピュータ、ネットブックコンピュータ、ノートブックコンピュータ、ハンドヘルドゲームデバイス、パーソナルメディアプレーヤ、および車載コンピュータ等のモバイルデバイスを含む。モバイルデバイスは、概して、手で搬送するように設計される、コンピューティングデバイスである。異なるモバイルデバイスは、異なるタイプのプラットフォームを提供する。例示的タイプのコンピューティングデバイスはまた、デスクトップコンピュータ、家庭用または市販器具、テレビセットトップボックス、デジタルビデオレコーダデバイス、テレビ、ゲームコンソール、ゲーム機器、売場専用コンピュータ、電子的在庫管理デバイス、産業コンピューティングデバイス、サーバコンピュータ、およびデータを処理する他のタイプのデバイスを含む。図１の実施例では、一式のコンピューティングデバイス１０４は、スマートフォン、フィーチャーフォン、デスクトップコンピュータ、およびラップトップコンピュータを含む。他の実施形態は、他のタイプのコンピューティングデバイスを含むことができる。
【００１０】
コンピューティングデバイス１０４の異なるものは、異なるプラットフォームを提供する。プラットフォームは、アプリケーションを起動することができる、フレームワークである。例示的タイプのプラットフォームは、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．からのＷＩＮＤＯＷＳ  ＰＨＯＮＥ７（登録商標）オペレーティングシステム、Ａｐｐｌｅ  Ｉｎｃ．からのＩＯＳ（登録商標）オペレーティングシステム、Ｇｏｏｇｌｅ  Ｉｎｃ．からのＡＮＤＲＯＩＤ（登録商標）オペレーティングシステム、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．からのＷＩＮＤＯＷＳ７（登録商標）オペレーティングシステム、Ｔｅｌｎｅｔフレームワーク、およびアプリケーションを起動することができる他のタイプのフレームワークを含む。
【００１１】
開発者１０２は、開発者コンピューティングシステム１０６を使用して、アプリケーションのバージョンが、コンピューティングデバイス１０４によって提供されるプラットフォーム上で起動可能であるように、アプリケーションを開発する。用語「コンピューティングシステム」は、１つ以上のコンピューティングデバイスを備える、システムを包含する。開発者コンピューティングシステム１０６は、開発環境１０８を提供し、アプリケーションを開発する際、開発者１０２を補助する。アプリケーションを開発する際、開発者１０２を補助するために、開発環境１０８は、開発者１０２が、アプリケーションのためのソースコードを調製するのを支援する、ツールを提供する。例えば、開発環境１０８は開発者１０２が、アプリケーションのためのソースコードを調製するのを支援する、テキスト編集ツールおよび試験ツール、を提供することができる。
【００１２】
加えて、開発環境１０８は、複数のパッケージ１１２Ａから１１２Ｎ（集合的に、「パッケージ１１２」）を生成する。パッケージ１１２は、同一アプリケーションに対応することができ、各パッケージは、実行される、または別様に、異なるプラットフォームと関連付けられるようにコンパイルされる。パッケージ１１２は、異なる一式のコンピュータ可読命令を含有する。パッケージ１１２の異なるものにおける命令は、パッケージ１１２と関連付けられたプラットフォーム上でネイティブに実行することができる。例えば、パッケージ１１２Ａは、第１のプラットフォームが、ネイティブに実行することができる、命令を含有することができ、パッケージ１１２Ｎは、第２のプラットフォームがネイティブに実行することができる、命令を含有することができる。パッケージ１１２内の命令の実行は、アプリケーションをユーザに提供させる。いくつかの実施形態では、一式のパッケージ１１２はまた、実行あるいは同一プラットフォームまたは他のプラットフォームとの関連付けのための異なるアプリケーションを含むことができる。
【００１３】
開発環境１０８は、一式のソースコードをコンパイルすることによって、パッケージ１１２を生成する。各一式のソースコードは、ビジネス論理ソースコード１１０および異なる一式のプラットフォーム特有のソースコード１１１を含む。言い換えると、開発者１０２は、ビジネス論理ソースコード１１０および一式のプラットフォーム特有のソースコード１１１を使用して、パッケージ１１２を生成する。開発環境１０８は、ビジネス論理ソースコード１１０を一式のプラットフォーム特有のソースコード１１１の異なるものとコンパイルすることによって、異なるプラットフォームのための異なる一式のコンピュータ実行可能命令を生成する。
【００１４】
ビジネス論理ソースコード１１０は、アプリケーションに特有である、実質的にすべての機能性を定義する。例えば、ビジネス論理ソースコード１１０は、アプリケーションによって表示されるべきデータを生成または読み出す、機能性を定義することができる。いくつかの実施形態では、ビジネス論理ソースコード１１０は、アプリケーションに特有のすべての機能性を定義する。他の実施形態では、ビジネス論理ソースコード１１０外のごく一部のコードが、アプリケーションに特有の機能性を定義する、それに影響を及ぼす、または作用する。例えば、そのような実施形態では、ビジネス論理ソースコード１１０外の１００未満のコードラインが、アプリケーションに特有の機能性を定義する。
【００１５】
ビジネス論理ソースコード１１０は、実質的に、任意のプラットフォームに特有のコードがない。いくつかの実施形態では、ビジネス論理ソースコード１１０は、任意のプラットフォームに特有のコードまたは機能コードを含むことができない。例えば、いくつかの実施形態では、ビジネス論理ソースコード１１０は、ＡＮＤＲＯＩＤ（登録商標）プラットフォーム、ＷＩＮＤＯＷＳ  ＰＨＯＮＥ７（登録商標）プラットフォーム、または任意の他のプラットフォームのＡＰＩに特有のコードを含まない。別の実施例では、ビジネス論理ソースコード１１０は、どのプラットフォームがアプリケーションを起動しているかに応じて、条件付きで実行される、コードを含まない。さらに別の実施例では、ビジネス論理ソースコード１１０は、アプリケーションに、アプリケーションを起動しているプラットフォームに応じて、異なるコンテンツを提示させる、または異なるナビゲーション構造を有させる、コードを含んでいない場合がある。他の実施形態では、ビジネス論理ソースコード１１０は、プラットフォームに特有のごく一部のコードを含むことができる。例えば、いくつかの実施形態では、ビジネス論理ソースコード１１０は、特定のプラットフォームに特有の２０未満のコードラインを含む。
【００１６】
一式のプラットフォーム特有のソースコード１１１は、アプリケーションが、特有のプラットフォーム上で動作するのを支援する、コードを含有する。一式のプラットフォーム特有のコード１１１は、異なるプラットフォームと関連付けられる。一式のプラットフォーム特有のコード１１１は、実質的に、アプリケーションに特有の機能性を定義する、コードがない。いくつかの実施形態では、一式のプラットフォーム特有のコード１１１は、特定のアプリケーションに特有の機能性を定義する、任意のコードを含まない。例えば、いくつかの実施形態では、一式のプラットフォーム特有のコード１１１は、特有のアプリケーションのユーザインターフェース内のコンテンツを定義するコード、ユーザがアプリケーションをナビゲートする方法を定義するコード、または具体的に識別されたアプリケーションに対してのみ実行されるコードのブロックを含んでいない場合がある。いくつかの実施形態では、一式のプラットフォーム特有のコード１１１は、特定のアプリケーションに特有の機能性を定義する、それに影響を及ぼす、または作用する、ごく一部のコードを含む。例えば、いくつかの実施形態では、一式のプラットフォーム特有のコード１１１はそれぞれ、特定のアプリケーションに特有の機能性を定義する、２０未満のコードラインを含む。
【００１７】
一式のプラットフォーム特有のコード１１１は、実質的に、アプリケーションに特有の機能性を定義する、コードがないため、開発者１０２および／または他の開発者は、一式のプラットフォーム特有のコード１１１に任意のまたは少なくとも実質的変更を行うことなく、多くのアプリケーションにおいて、一式のプラットフォーム特有のコード１１１を再使用することができる。例えば、開発者１０２は、付加的アプリケーションのためのビジネス論理ソースコードを開発することができる。本実施例では、開発者１０２は、次いで、付加的アプリケーションのためのビジネス論理ソースコードとともに、以前に使用された一式のプラットフォーム特有のソースコードを使用して、異なるプラットフォーム上での実行に好適な一式のコンピュータ実行可能命令を生成することができる。
【００１８】
いくつかの実施形態では、開発者１０２は、アプリケーションとの併用のために、プラットフォーム特有のコード１１１を適応するために、２０未満のコードラインを修正する必要があり得る。さらに、いくつかの実施形態では、開発者１０２は、アプリケーションとの併用のために、プラットフォーム特有のコード１１１を適応するために、コードをコメントアウトする、コードに関するコメントを除去する、またはパラメータの値を修正することのみ必要であり得る。
【００１９】
種々の実施形態では、開発者１０２は、種々の方法において、一式のプラットフォーム特有のコード１１１を取得することができる。例えば、開発者１０２は、一式のプラットフォーム特有のコード１１１を１人以上の外部の第三者から取得することができる。本実施例では、１人以上の外部の第三者は、販売業者、小売業者、コンサルタント、他の開発者、あるいは開発者１０２または開発者１０２が属する組織とは別個の他の事業体を含むことができる。さらに、本実施例では、開発者１０２は、金銭の支払等、価値のあるアイテムまたはサービスと引き換えに、一式のプラットフォーム特有のコード１１１を１人以上の外部の第三者から取得することができる。さらに、本実施例では、開発者コンピューティングシステム１０６は、一式のプラットフォーム特有のコード１１１を１人以上の外部の第三者によって提供されるデータ記憶システムから、ダウンロードまたは別様にコピーすることができる。別の実施例では、開発者１０２は、一式のプラットフォーム特有のコード１１１を書くことができる。いくつかの実施形態では、一式のプラットフォーム特有のコード１１１は、サービスとしてのソフトウェア（ＳａａＳ）ベースで利用可能となることができる。
【００２０】
いくつかの実施形態では、パッケージ１１２は、一式のプラットフォーム特有のコード１１１からコンパイルされたコンピュータ実行可能命令を含む。例えば、パッケージ１１２Ａが、所与のプラットフォームと関連付けられる場合、パッケージ１１２Ａは、所与のプラットフォームと関連付けられる、一式のプラットフォーム特有のコード１１１のうちの１つからコンパイルされたコンピュータ実行可能命令を含むことができる。
【００２１】
開発環境１０８が、パッケージ１１２を生成後、パッケージ１１２は、データ記憶システム１１４内に記憶される。種々の実施形態は、種々の方法において、データ記憶システム１１４を実装する。例えば、いくつかの実施形態は、データ記憶システム１１４をファイルシステムとして実装する。別の実施例では、データ記憶システム１１４は、関連データベースとして実装することができる。
【００２２】
コンピューティングデバイス１０４は、パッケージ１１２をデータ記憶システム１１４から取得する。種々の実施形態では、コンピューティングデバイス１０４は、種々の方法において、パッケージ１１２をデータ記憶システム１１４から取得する。例えば、コンピューティングデバイス１０４は、パッケージ１１２をデータ記憶システム１１４から読み出し、パッケージ１１２をコンピューティングデバイス１０４に送信する、要求をサーバ（図示せず）に送信することによって、パッケージ１１２のうちの適切なものを取得することができる。別の実施例では、コンピューティングデバイスは、データ記憶システム１１４からコンピューティングデバイス１０４のうちの１つ以上に、パッケージ１１２をプッシュする、配信プロセスを行うことができる。
【００２３】
開発者コンピューティングシステム１０６を使用して、または別様に、本明細書に開示されるように、開発されるアプリケーションは、いくつかの異なるシステムを使用して、配信することができる。例えば、図２は、アプリケーションを配信するための多くの可能性として考えられるシステムの中でもとりわけ、アプリケーションを配信するためのシステムの例示的代替実施形態のブロック図を例証する。図２の実施例では、アプリケーション配信システム２００は、図１の実施例に関して前述のように、データ記憶システム１１４およびコンピューティングデバイス１０４を含む。パッケージ１１２を取得するために、コンピューティングデバイス１０４は、ネットワーク２０２を介して、アプリケーションストア２０４と通信する。ネットワーク２０２は、種々のタイプのネットワークを備えることができる。例えば、ネットワーク２０２は、インターネット、ローカルエリアネットワーク、キャンパスエリアネットワーク、または別のタイプのネットワークを備えることができる。
【００２４】
アプリケーションストア２０４は、ソフトウェアアプリケーションのための電子マーケットである。例えば、アプリケーションストア２０４は、Ａｐｐｌｅ  Ｉｎｃ．のＡＰＰ  ＳＴＯＲＥ（登録商標）、Ｇｏｏｇｌｅ，Ｉｎｃ．のＡｎｄｒｏｉｄ  Ｍａｒｋｅｔ、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．のＷｉｎｄｏｗｓ（登録商標）  Ｐｈｏｎｅ  Ｍａｒｋｅｔｐｌａｃｅ、Ｒｅｓｅａｒｃｈ  Ｉｎ  Ｍｏｔｉｏｎ  Ｌｔｄ．のＡＰＰ  ＷＯＲＬＤ（登録商標）、Ａｍａｚｏｎ．ｃｏｍ、またはソフトウェアアプリケーションのための別の電子マーケットであり得る。いくつかの実施形態では、アプリケーションストア２０４の所有者またはオペレータは、データ記憶システム１１４を所有または操作してもよい。他の実施形態では、アプリケーションストア２０４およびデータ記憶システム１１４は、異なる事業体によって、所有および／または操作される。
【００２５】
コンピューティングデバイス１０４のユーザは、コンピューティングデバイス１０４を使用して、アプリケーションストア２０４を通して、アプリケーションを購入することができる。コンピューティングデバイス１０４のうちの１つのユーザが、アプリケーションを購入すると、アプリケーションストア２０４は、パッケージ１１２のうちの１つを読み出し、コンピューティングデバイスにパッケージを伝送する。いくつかの事例では、コンピューティングデバイス１０４のユーザは、異なるアプリケーションストアからの異なるプラットフォームと関連付けられる、パッケージ１１２のものを購入することができる。
【００２６】
図３は、アプリケーションを配信するためのシステムの別の例示的代替実施形態を例証する、ブロック図である。図３の実施例では、アプリケーション配信システム３００は、データ記憶システム１１４を含む。データ記憶システム１１４は、パッケージ１１２を記憶する。パッケージ１１２を取得するために、コンピューティングデバイス１０４は、ネットワーク２０２を介して、配信システム３０２と通信する。
【００２７】
配信システム３０２は、自動的に、パッケージ１１２をコンピューティングデバイス１０４に配信する、プロセスを行う。言い換えると、配信システム３０２は、パッケージ１１２をコンピューティングデバイス１０４にプッシュする。例えば、コンピューティングデバイス１０４は、組織と関連付けることができ、パッケージ１１２Ａは、第１のプラットフォームと関連付けることができ、パッケージ１１２Ｎは、第２の異なるプラットフォームと関連付けることができる。本実施例では、配信システム３０２は、コンピューティングデバイス１０４と通信し、コンピューティングデバイス１０４のうちのどれが、第１のプラットフォームを提供し、コンピューティングデバイス１０４のうちのどれが、第２のプラットフォームを提供するかを判定することができる。本実施例では、配信３０２は、パッケージ１１２Ａを第１のプラットフォームを提供するコンピューティングデバイス１０４にプッシュし、パッケージ１１２Ｎを第２のプラットフォームを提供するコンピューティングデバイス１０４にプッシュする。そのような自動化された配信プロセスを行うことは、正確なソフトウェアが、企業のコンピューティングデバイスにインストールされることを確実にするために、組織環境において有用であり得る。
【００２８】
図４は、アプリケーションのコンピュータ可読命令を生成するための例示的システム４００を例証する、ブロック図である。図４の実施例に例証されるように、コンパイラアプリケーション４０２は、パッケージ１１２を生成する。異なる実施形態では、パッケージ１１２は、アーカイブ形式であってもよく、またはそうでなくてもよい。いくつかの実施形態では、コンパイラアプリケーション４０２は、開発環境１０８の一部である。他の実施形態では、コンパイラアプリケーション４０２は、開発環境１０８と別個である。
【００２９】
コンパイラアプリケーション４０２は、ビジネス論理ソースコード１１０および一式のプラットフォーム特有のソースコード１１１のうちの１つ以上をコンパイルすることによって、パッケージ１１２を生成する。前述のように、ビジネス論理ソースコード１１０は、アプリケーションに特有のアプリケーションの機能性を定義する。ビジネス論理ソースコード１１０は、任意の所与のプラットフォームに特有のコードを含まない。一式のプラットフォーム特有のソースコード１１１は、アプリケーションが、特有のプラットフォーム上で動作するのを支援する、コードを含有する。一式のプラットフォーム特有のソースコード１１１は、特定のプラットフォームに特有である。
【００３０】
図４の実施例に例証されるように、ビジネス論理ソースコード１１０は、アプリケーションソースコード４０４およびレイヤーソースコード４０６を備える。アプリケーションソースコード４０４およびレイヤーソースコード４０６は、アプリケーション特有の機能性を定義し、実質的に、任意の所与のプラットフォームに特有のコードがない。アプリケーションソースコード４０４は、アプリケーション初期化動作およびナビゲーション動作を定義する。レイヤーソースコード４０６は、１つ以上のレイヤークラスを定義する。
【００３１】
一式のプラットフォーム特有のソースコード１１１は、コンテナソースコードセット４０８Ａ−４０８Ｎ（集合的に、「コンテナソースコードセット４０８」）およびバインディングソースコードセット４１０Ａ−４１０Ｎ（集合的に、バインディングソースコードセット４１０）を含む。コンテナソースコードセット４０８は、アプリケーションを初期化する、プラットフォーム特有の初期化動作を定義する。バインディングソースコードセット４１０は、異なるプラットフォームによって使用され、異なるプラットフォームにネイティブのユーザインターフェース特徴を使用して、レイヤーを表すことができる、出力データを生成する、レイヤー出力動作を定義する。コンテナソースコードセット４０８はそれぞれ、異なるプラットフォームに特有のコードを含有する。バインディングソースコードセット４１０はそれぞれ、異なるプラットフォームに特有のコードを含有する。バインディングソースコードセット４１０は、実質的に、任意の特定のアプリケーションに特有の機能性を定義する、コードがない。
【００３２】
種々の実施形態では、レイヤーソースコード４０６、アプリケーションソースコード４０４、コンテナソースコードセット４０８、およびバインディングソースコードセット４１０は、種々の高水準プログラミング言語で書かれる。例えば、いくつかの実施形態では、レイヤーソースコード４０６、アプリケーションソースコード４０４、コンテナソースコードセット４０８、および／またはバインディングソースコードセット４１０は、Ｃ＃プログラミング言語、オブジェクティブＣプログラミング言語、Ｃプログラミング言語、Ｃ＋＋プログラミング言語、Ｊａｖａ（登録商標）プログラミング言語、または別のタイプの高水準プログラミング言語で書かれる。レイヤーソースコード４０６、アプリケーションソースコード４０４、コンテナソースコードセット４０８、およびバインディングソースコードセット４１０は、高水準プログラミング言語で書かれるため、ソースコード内の構文エラーは、実行時の代わりに、コンパイル時に検出することができる。構文エラーは、実行時の代わりに、コンパイル時に検出されるため、パッケージ１１２を起動する、コンピューティングデバイスは、そのようなコンピューティングデバイスが、そのような構文エラーのため、クラッシュまたはハングアップする可能性が低いため、より信頼性があり得る。さらに、パッケージ１１２は、コンパイルされた高水準プログラミング言語コードを備えるため、アプリケーションは、パッケージが、解釈されたプログラミング言語コードを含有する場合より、効率的に実行することができる。したがって、解釈されたコードの代わりに、コンパイルされたコードを実行することによって、パッケージ１１２を起動する、コンピューティングデバイスは、より高速かつより確実に動作することができる。
【００３３】
いくつかの事例では、複数の異なるプラットフォームを、同一コンテナソースコードセット４０８および／または同一バインディングソースコードセット４１０と関連付けることができる。例えば、ＩＰＨＯＮＥ（登録商標）およびＩＰＡＤ（登録商標）は両方とも、同一コンテナソースコードセット４０８および／または同一バインディングソースコードセット４１０と関連付けることができる。いくつかの事例では、単一プラットフォームは、複数のコンテナソースコードセット４０８または複数のバインディングソースコードセット４１０と関連付けることができる。コンテナソースコードセット４０８および／またはバインディングソースコードセット４１０はそれぞれ、異なるファイル内に記憶することができる。
【００３４】
図５は、例示的アプリケーション開発プロセス５００を例証する、流れ図である。開発者１０２は、アプリケーション開発プロセス５００を行い、複数のプラットフォーム上で動作することができる、アプリケーションを開発する。言い換えると、開発者１０２は、アプリケーション開発プロセス５００を使用して、プラットフォーム間共通のアプリケーションを開発する。
【００３５】
アプリケーションを構築するために、開発者１０２は、アプリケーション内に含まれる、レイヤーを識別する（５０２）。レイヤーは、ユニットとして、アプリケーションによって、アプリケーションのユーザに提示される、一式のコンテンツを備える。レイヤーは、種々のコンテンツを含有することができる。例えば、アプリケーションのレイヤーは、本の粗筋、テレビスケジュールのリスト、スポーツの点数、ビデオクリップ、アプリケーションのメインメニュー、およびユニットとして、アプリケーションによって、アプリケーションのユーザに提示される、他の一式のコンテンツを含有することができる。
【００３６】
レイヤー内のコンテンツは、ユニットとして提示されるため、レイヤー内の付加的コンテンツを見るために、ナビゲーション動作を行う必要はない。ナビゲーション動作は、アプリケーションによって、ユーザに現在提示されているレイヤーを変更するための動作である。例えば、いくつかのプラットフォームでは、ユーザは、レイヤー内の付加的コンテンツをスクロールアップまたはダウンする必要がある場合があるが、付加的コンテンツを見るために、レイヤーから離れてナビゲートする必要はないであろう。
【００３７】
異なるプラットフォームは、異なる方法において、同一レイヤーを提示することができる。例えば、Ｔｅｌｎｅｔプラットフォームは、本のタイトルを表す、一連のプレーンテキストストリングとして、レイヤー内に本のタイトルのリストを提示することができる。本実施例では、自動音声応答（ＩＶＲ）プラットフォームは、本のタイトルの発話された音を出力することによって、本のタイトルの同一リストを表すことができる。さらに、本実施例では、ＩＰＨＯＮＥ（登録商標）プラットフォームは、本のタイトルを表す、リッチフォーマット形式のテキストストリングのリストとして、本のタイトルの同一リストを表すことができる。
【００３８】
アプリケーション内のレイヤーはそれぞれ、異なるレイヤー統一資源識別子（ＵＲＩ）と関連付けられる。例えば、アプリケーション内の第１のレイヤーは、本の粗筋を含有する、テキストエリアを含有し、アプリケーション内の第２のレイヤーは、別の本の粗筋を含有する、テキストエリアを含有する。本実施例では、第１のレイヤーは、レイヤーＵＲＩ「ｈｔｔｐ：／／ｗｗｗ．ｅｘａｍｐｌｅ．ｃｏｍ／ａｐｐｌｉｃａｔｉｏｎｌ／ｌａｙｅｒｌ？ｂｏｏｋＩＤ＝３２」と関連付けることができ、第２のレイヤーは、レイヤーＵＲＩ「ｈｔｔｐ：／／ｗｗｗ．ｅｘａｍｐｌｅ．ｃｏｍ／ａｐｐｌｉｃａｔｉｏｎｌ／ｌａｙｅｒｌ？ｂｏｏｋＩＤ＝５２５」と関連付けることができる。
【００３９】
レイヤーは、１つ以上のコンテンツ要素を備える。コンテンツ要素は、アプリケーションによって、ユーザに提示されるために構造化された一式のコンテンツを備える。種々のコンテンツ要素は、異なる方法において、一式のコンテンツを構造化する。例示的タイプのコンテンツ要素は、リスト、リストデータアイテム、メニュー、メニューアイテム、画像、テキストブロック、テキスト入力エリア、地理的地図、パネル等を含む。異なるプラットフォームは、異なる方法において、同一コンテンツ要素を表すことができる。例えば、ＩＰＨＯＮＥ（登録商標）プラットフォームは、メニュー内の各メニューアイテムと関連付けられた選択可能グラフィカル要素のリストとして、メニューを提示することができる。本実施例では、Ｔｅｌｎｅｔシステムは、メニュー内の各メニューアイテムと関連付けられたテキストストリングのリストと同一メニューを表すことができる。リスト内の各テキストストリングは、数と関連付けられる。本実施例では、Ｔｅｌｎｅｔシステムはまた、ユーザに、所望のメニューアイテムの数を入力することを求める、プロンプトを表示する。
【００４０】
レイヤーのコンテンツ要素は、ナビゲーション要素を含むことができる。ナビゲーション要素は、ユーザによって選択されると、アプリケーションに、アプリケーションの別のレイヤーにナビゲートさせる、コンテンツ要素である。各ナビゲーション要素は、ユーザが、ナビゲーション要素を選択すると、アプリケーションがナビゲートする、レイヤーのレイヤーＵＲＩを指定する。他のタイプのコンテンツ要素同様に、異なるプラットフォームは、異なる方法において、ナビゲーション要素を提示することができる。例えば、いくつかの実施形態では、ウェブブラウザプラットフォームは、ハイパーリンクとして、ナビゲーション要素を提示する。本実施例では、ＩＰＨＯＮＥ（登録商標）プラットフォームは、グラフィカル制御と同一ナビゲーション要素を提示することができる。
【００４１】
いくつかの可能性として考えられる実施形態では、アプリケーションのレイヤーは、ホームレイヤーを含む。アプリケーションのホームレイヤーは、デフォルトによって、アプリケーションのユーザが、アプリケーションとの協働を開始するために使用する、アプリケーションのレイヤーである。種々のアプリケーションでは、ホームレイヤーは、種々のタイプのコンテンツを含有する。例えば、いくつかのアプリケーションでは、ホームレイヤーは、アプリケーションのメインメニューのように作用し、ユーザを種々の他のアプリケーションのレイヤーにナビゲートする、ナビゲーション要素を備える。他のアプリケーションでは、ホームレイヤーは、アプリケーションのためのスプラッシュ画面である。
【００４２】
開発者１０２が、アプリケーション内に含まれるべきレイヤーを識別後、開発者１０２は、レイヤーソースコード４０６を開発する（５０４）。代替として、開発者１０２は、既に既存のレイヤーソースコードのライブラリから、レイヤーソースコード４０６を選択する。すなわち、レイヤーソースコード４０６は、複数のアプリケーションにおいて、再使用することができる。
【００４３】
レイヤーソースコード４０６は、１つ以上のレイヤークラスを定義する。一般に、レイヤークラスはそれぞれ、クラスの部材（オブジェクト）を特徴付ける、一式の属性および／またはサービスを定義する、記述ツールである。レイヤークラスはそれぞれ、識別されたレイヤーの異なる１つに対応する。レイヤーモジュールは、レイヤークラスのインスタンスである、ソフトウェアオブジェクトである。レイヤーモジュールは、レイヤーを表す。
【００４４】
レイヤーソースコード４０６によって定義される、レイヤークラスはそれぞれ、ロード動作を含有する。ロード動作は、データをレイヤーモジュールにロードする。ロード動作は、種々のアクティビティを行い、コンテンツを適切なレイヤーモジュールにロードすることができる。例えば、ロード動作は、メニューにメニューアイテムを取り込むことができる。別の実施例では、ロード動作は、ネットワークまたはデータベースからデータを読み出し、データをテキストブロックに取り込むことができる。
【００４５】
異なるプラットフォーム上で動作する、アプリケーションのバージョンのために、異なるレイヤーソースコード４０６を開発または選択する必要がない。言い換えると、レイヤーソースコード４０６は、任意のプラットフォームに特有ではない。その結果、レイヤーソースコード４０６によって定義されるロード動作は、アプリケーションが動作しているプラットフォームに関わらず、同一コンテンツをレイヤーモジュールにロードする。
【００４６】
アプリケーションを開発するために、開発者１０２はまた、アプリケーションソースコード４０４を開発する（５０６）。アプリケーションソースコード４０４は、アプリケーション初期化動作およびナビゲーション動作を定義する。実行されると、アプリケーション初期化動作は、ナビゲーションマップを初期化する。ナビゲーションマップは、レイヤーＵＲＩをレイヤーモジュールにマップする。いくつかの実施形態では、アプリケーションソースコード４０４は、自動的に、レイヤーＵＲＩを生成する。他の実施形態では、アプリケーションソースコード４０４は、所定のレイヤーＵＲＩを使用する。アプリケーションが、ナビゲーション要求を受信すると、ナビゲーション動作は、ナビゲーションマップを使用して、適切なレイヤーモジュールを複数のレイヤーモジュールから識別する。適切なレイヤーモジュールは、ナビゲーション要求によって指定されたレイヤーＵＲＩと関連付けられる。適切なレイヤーモジュールのロード動作が、次いで、呼び出され、コンテンツを適切なレイヤーモジュールにロードする。ナビゲーション要求は、アプリケーションをあるアプリケーションのレイヤーから別のアプリケーションのレイヤーにナビゲートするための要求である。
【００４７】
開発者１０２が、異なるプラットフォーム上で動作する、アプリケーションのバージョンのための異なるアプリケーションソースコード４０４を開発する必要はない。むしろ、同一アプリケーションソースコード４０４は、異なるプラットフォーム上で動作する、アプリケーションのバージョン内で使用される。言い換えると、アプリケーションソースコード４０４は、任意のプラットフォームに特有ではない。その結果、アプリケーションソースコード４０４によって指定される、ナビゲーション動作は、アプリケーションが動作しているプラットフォームに関わらず、レイヤーソースコードの同一ロード動作を使用する。
【００４８】
アプリケーションのビジネス論理ソースコード１１０は、アプリケーションソースコード４０４およびアプリケーションのレイヤーソースコード４０６を備える。ビジネス論理ソースコード１１０は、任意のプラットフォームに特有のコードを含有しない。さらに、ビジネス論理ソースコード１１０は、アプリケーションに特有である、アプリケーションのすべての機能性を定義する。言い換えると、アプリケーションの機能性は、アプリケーションのユーザによって知覚されるように、任意のプラットフォームに特有ではないように、ビジネス論理ソースコード１１０内に定義される。
【００４９】
さらに、アプリケーションを開発するために、開発者１０２は、アプリケーションが動作すべき、１つ以上のプラットフォームを選択する（５０８）。例えば、開発者１０２は、ＩＰＨＯＮＥ（登録商標）およびＩＰＡＤ（登録商標）と関連付けられたプラットフォームを選択することができる。別の実施例では、開発者１０２は、Ｔｅｌｎｅｔクライアントと関連付けられる、プラットフォームを選択することができる。異なるプラットフォームは、情報をユーザに提示し、ユーザからの入力を受信する、異なるアプリケーションプログラミングインターフェース（ＡＰＩ）を提供する。
【００５０】
アプリケーションが動作すべきプラットフォームを選択後、開発者１０２は、選択されたプラットフォームと関連付けられたバインディングソースコードセット４１０を選択する（５１０）。いくつかの実施形態では、開発者１０２は、所定の一式のバインディングソースコードのライブラリを取得する。そのような実施形態では、開発者１０２は、種々のソースからライブラリを取得することができる。種々の実施形態では、例えば、開発者１０２は、個々のバインディングをダウロードする、一式のバインディングをダウンロードする、その独自のバインディングおよび関連付けられたライブラリを開発する、またはＳａａＳとして提供されたライブラリからバインディングにアクセスすることができる。使用時、開発者１０２は、ライブラリ内に記憶された一式のバインディングソースコードから、選択されたプラットフォームと関連付けられたバインディングソースコードセット４１０を選択することができる。例えば、開発者１０２は、価値のあるアイテムまたはサービスと引き換えに、外部の第三者から、ライブラリのコピーおよび／またはライブラリを使用する権利を入手することができる。ライブラリ内の一式のバインディングソースコードは、アプリケーションの開発に先立って、開発者１０２または外部の第三者によって、ライブラリに追加することができる。ライブラリ内の一式のバインディングソースコードは、複数のアプリケーション内において、実質的に同一形態で再使用することができる。例えば、いくつかの実施形態では、ライブラリ内の一式のバインディングソースコードは、複数のアプリケーション内において、全く同一形態で再使用することができる。他の実施形態では、ライブラリ内の一式のバインディングソースコードは、一式のバインディングソースコードへの若干の変更（例えば、２０未満のコードライン）後、他のアプリケーションにおいて、再使用することができる。
【００５１】
バインディングソースコードセット４１０は、異なるプラットフォームにネイティブであるユーザインターフェース特徴を使用して、レイヤーを提示するために、異なるプラットフォームによって使用することができる、出力データを生成する、レイヤー出力動作を定義する。例えば、バインディングソースコードセット４１０Ａは、ＩＰＨＯＮＥ（登録商標）デバイスにネイティブであるユーザインターフェース特徴を使用して、レイヤーを提示するために、レイヤーモジュールを処理する、レイヤー出力動作を定義することができる。本実施例では、バインディングソースコードセット４１０Ｂは、ＡＮＤＲＯＩＤ（登録商標）ベースの携帯電話にネイティブであるユーザインターフェース特徴を使用して、レイヤーを提示するために、同一レイヤーモジュールを処理する、レイヤー出力動作を定義することができる。
【００５２】
次に、開発者１０２は、コンテナソースコードセット４０８を開発する（５１２）。コンテナソースコードセット４０８はそれぞれ、選択されたプラットフォームのうちの異なる１つに対応する。本書のいずれかの場所に詳細に説明されるように、コンテナソースコードセット４０８はそれぞれ、アプリケーションを初期化する、初期化動作を定義する。
【００５３】
いくつかの実施形態では、開発者１０２は、コンテナソースコードセット４０８を既存の一式のコンテナソースコードのライブラリから取得する。本ライブラリは、開発者が、本明細書に論じられるように、ライブラリからバインディングにアクセスするであろう同一方法において、開発者１０２、外部の第三者、または別の事業体によって、開発、維持、および／または拡張することができる。いくつかの事例では、開発者１０２は、価値のあるアイテムまたはサービスと引き換えに、外部の第三者から、ライブラリのコピーおよび／またはライブラリを使用するための権利を受信することができる。そのような実施形態では、開発者１０２は、コンテナソースコードセット４０８が、アプリケーションのアプリケーションソースコード４０４によって定義されるアプリケーションクラスを識別するように、ライブラリ内の既存の一式のコンテナソースコードを修正することによって、コンテナソースコードセット４０８を開発する。したがって、コンテナソースコードセット４０８は、アプリケーションおよび選択されたプラットフォームの個々のものに特有である。しかしながら、コンテナソースコードセット４０８は、そのアプリケーションを他のアプリケーションと区別する、任意の機能性を定義しない。例示的初期化動作は、図１５に関して、本明細書に説明される。
【００５４】
次に、開発者１０２は、アプリケーションのための展開技法を選択する（５１４）。アプリケーションのための展開技法は、アプリケーション内の種々のモジュールが動作する場所を統制する。種々の展開技法を使用する、アプリケーションの開発、配信、および実行は、図７から１４に関して説明される。
【００５５】
展開技法を選択後、１つ以上のコンピューティングシステムは、選択されたプラットフォームに対応するパッケージ１１２を生成する（５１６）。パッケージ１１２はそれぞれ、アプリケーションのためのアプリケーションソースコード４０４、アプリケーションのためのレイヤーソースコード４０６、特有のプラットフォームのためのコンテナソースコード５０８、および特有のプラットフォームのための一式のバインディングソースコード５１０からコンパイルされる、一式のコンピュータ可読命令を備える。パッケージ１１２のそれぞれ内の命令は、選択されたプラットフォームの適切なものを提供するデバイスによって、ネイティブに実行されると、同一アプリケーションを提供する。
【００５６】
命令は、命令とプラットフォームとの間の介在ソフトウェアが、命令を実行するために必要とされない時、プラットフォーム上でネイティブに実行する。例えば、特殊プラグインまたは仮想マシンは、選択されたプラットフォームの適切なもの上でパッケージ内の命令を実行するために必要とされない。
【００５７】
パッケージ１１２が開発された後、開発者１０２は、コンピューティングデバイス１０４上でのインストールおよび使用のために、パッケージ１１２を配信する（５１８）。種々の実施形態では、パッケージ１１２は、種々の方法において、配信される。例えば、いくつかの実施形態では、Ａｐｐｌｅ  Ｉｎｃ．のＡＰＰ  ＳＴＯＲＥ（登録商標）等のオンラインアプリケーションストアを使用して、パッケージ１１２を配信する。他の実施形態では、パッケージ１１２は、直接、コンピューティングデバイス１０４に配信される。
【００５８】
図６は、アプリケーション６００内の例示的モジュールを例証する、ブロック図である。図６の実施例に例証されるように、アプリケーション６００は、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６Ａから６０６Ｎ（集合的に、「レイヤーモジュール６０６」）、およびバインディングモジュール６０８を備える。アプリケーションのアプリケーションソースコード４０４は、アプリケーションモジュール６０４の機能性を定義する。レイヤーソースコード４０６内の異なるレイヤークラスは、レイヤーモジュール６０６の異なるもの機能性を定義する。コンテナソースコードセット４０８のうちの１つは、コンテナモジュール６０２の機能性を定義する。バインディングソースコードセット４１０のうちの１つは、バインディングモジュール６０８の機能性を定義する。
【００５９】
アプリケーション６００が、立ち上げられると、コンテナモジュール６０２は、実行を開始する。コンテナモジュール６０２が、実行を開始すると、コンテナモジュール６０２は、初期化動作を行う。初期化動作は、アプリケーションを初期化する。実施例の初期化動作は、図１５に関して説明される。初期化動作の一部として、コンテナモジュール６０２は、初期ナビゲーション要求をアプリケーションモジュール６０４に提供する。初期ナビゲーション要求は、アプリケーションのホームレイヤーを示す、レイヤーＵＲＩを指定する。
【００６０】
ナビゲーション要求の受信に応答して、アプリケーションモジュール６０４は、ナビゲーション動作を行う。例示的ナビゲーション動作は、図１６に関して、本明細書に説明される。ナビゲーション動作の一部として、アプリケーションモジュール６０４は、ナビゲーションマップを使用して、適切なレイヤーモジュールを識別する。適切なレイヤーモジュールは、ナビゲーション要求によって指定される、レイヤーＵＲＩと関連付けられたレイヤーモジュール６０６のうちの１つである。アプリケーションモジュール６０４は、次いで、ロード要求を適切なレイヤーモジュールに提供する。ロード要求は、適切なレイヤーモジュールのロード動作を行うための要求である。
【００６１】
適切なレイヤーモジュールが、ロード要求を受信すると、適切なレイヤーモジュールは、ロード動作を行う。ロード動作は、コンテンツを適切なレイヤーモジュールにロードする。種々の実施形態は、種々の方法において、ロード動作を実装する。例えば、いくつかの実施形態では、各レイヤーモジュールは、１つ以上のコンテンツ要素を備える。ロード動作は、データをレイヤーモジュールのコンテンツ要素のうちの１つ以上にロードすることによって、データをレイヤーモジュールにロードする。例えば、レイヤーモジュールは、リストを表す、コンテンツ要素を含有することができる。実施例では、ロード動作は、ウェブサイトから最も良く売れている本のタイトルを読み出し、タイトルをリストにロードすることによって、データをレイヤーモジュールにロードすることができる。レイヤーモジュール６０６はそれぞれ、異なるコンテンツ要素を含むことができ、ロード動作を異なるように実装することができる。その結果、異なるコンテンツは、レイヤーモジュール６０６の異なるものにロードされる。
【００６２】
適切なレイヤーモジュールが、ロード動作を行った後、適切なレイヤーモジュールは、ロード完了イベントをアプリケーションモジュール６０４に提供する。ロード完了イベントは、適切なレイヤーモジュールへの参照を含有する。
【００６３】
ロード完了イベントを適切なレイヤーモジュールから受信後、アプリケーションモジュール６０４は、ロード完了イベントを生成する。アプリケーションモジュール６０４によって生成されたロード完了イベントは、適切なレイヤーモジュールが、コンテンツのロードを完了したことを示す。いくつかの展開技法では、ロード完了イベントは、レイヤー参照を含有する。レイヤー参照は、適切なレイヤーモジュールへのポインタを備える。他の展開技法では、ロード完了イベントは、適切なレイヤーモジュールの直列化されたバージョンを含有する。
【００６４】
コンテナモジュール６０２は、アプリケーションモジュール６０４によって生成されたロード完了イベントをリッスンする。コンテナモジュール６０２が、アプリケーションモジュール６０４によって生成されたロード完了イベントを検出すると、コンテナモジュール６０２は、バインディングモジュール６０８の適切なレイヤーモジュールのレイヤー参照または直列化されたバージョンを提供する。
【００６５】
バインディングモジュール６０８が、適切なレイヤーモジュールのレイヤー参照または直列化されたバージョンを受信すると、バインディングモジュール６０８は、レイヤー出力動作を適切なレイヤーモジュール上で行う。レイヤー出力動作は、プラットフォームにネイティブである、１つ以上のユーザインターフェース特徴として、適切なレイヤーモジュールを表すために、プラットフォームによって使用することができる、出力データを生成する。後述のように、異なるバインディングモジュールは、レイヤー出力動作を適切なレイヤーモジュール上で行うことによって、種々のタイプの出力データを生成することができる。
【００６６】
種々の実施形態は、種々の方法において、レイヤー出力動作を実装する。例えば、いくつかの実施形態では、バインディングソースコードセット４１０はそれぞれ、コンテンツ出力動作を定義する。コンテンツ出力動作は、異なるタイプのコンテンツ要素に対応する。例えば、バインディングソースコードセット４１０は、リストのためのコンテンツ出力動作、リストデータアイテムのためのコンテンツ出力動作、メニューのためのコンテンツ出力動作、メニューアイテムのためのコンテンツ出力動作、画像のためのコンテンツ出力動作等を含むことができる。
【００６７】
異なるプラットフォームのためのバインディングソースコードセット４１０内のコンテンツ出力動作は、コンテンツ要素を表すために、異なるプラットフォームによって使用可能な出力データを生成する。例えば、バインディングソースコードセット４１０Ａは、ＩＰＨＯＮＥ（登録商標）プラットフォームが、リストを提示するために使用することができる、出力データを生成する、コンテンツ出力動作を定義することができる。本実施例では、バインディングソースコードセット４１０Ｂは、ＡＮＤＲＯＩＤ（登録商標）プラットフォームが、リストを提示するために使用することができる、出力データを生成する、コンテンツ出力動作を定義することができる。
【００６８】
レイヤー出力動作を適切なレイヤーモジュール上で行うと、バインディングモジュール６０８は、適切なレイヤーモジュール内のコンテンツ要素のそれぞれのための出力動作を利用する。例えば、適切なレイヤーモジュールのコンテンツ要素が、リストおよび画像を含む場合、バインディングモジュール６０８は、レイヤー出力動作を適切なレイヤーモジュール上で行うと、リストのための出力動作および画像のための出力動作を行う。このように、レイヤー出力動作は、特定のプラットフォームにネイティブな１つ以上のユーザインターフェース特徴として、適切なレイヤーモジュールの各コンテンツ要素を提示するために使用可能な出力データを生成する。
【００６９】
ユーザが、アプリケーションにおけるレイヤー内のナビゲーション要素を選択すると、アプリケーションモジュール６０４は、ナビゲーション要求を受信する。ナビゲーション要求は、別のアプリケーションのレイヤーのレイヤーＵＲＩを指定する。アプリケーションモジュール６０４が、ナビゲーション要求を受信すると、前述のプロセス他のレイヤーに関して繰り返される。
【００７０】
図７は、クライアントベースの展開技法を使用する、アプリケーションを開発および配信するための例示的システム７００を例証する、ブロック図である。アプリケーションが、クライアントベースの展開技法を使用して展開されると、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６、およびバインディングモジュール６０８は、クライアントコンピューティングデバイス上で動作する。
【００７１】
図７の実施例に例証されるように、システム７００は、開発者コンピューティングシステム１０６を備える。開発者コンピューティングシステム１０６は、コンパイラアプリケーション４０２を含む。クライアントベースの展開技法では、コンパイラアプリケーション４０２は、パッケージ１１２がそれぞれ、アプリケーションモジュール６０４、レイヤーモジュール６０６、コンテナモジュール、およびバインディングモジュールを定義する、コンパイルされた命令を含むように、パッケージ１１２を生成する。パッケージ１１２は、異なるプラットフォームを提供する、コンピューティングデバイス上でのインストールに好適である。
【００７２】
アプリケーションが、クライアントベースの展開技法を使用して展開されると、パッケージ１１２が、コンピューティングデバイス１０４に配信される。説明を容易にするために、図７の実施例は、タッチスクリーン式スマートフォンおよびフィーチャーフォンのみを例証する。しかしながら、他の実施形態では、コンピューティングデバイス１０４は、在庫管理デバイス、携帯電話、タブレットコンピュータ、ネットブックコンピュータ等、種々の異なるタイプのモバイルデバイスであり得る。さらに、モバイルデバイスのみ示されるが、コンピューティングデバイス１０４に関して、本書に説明される、同一能力および機能性は、いくつかの実施形態では、スマートフォンまたはタブレットコンピュータ等のモバイルデバイス、またはデスクトップコンピュータ、サーバコンピュータ等の非モバイルデバイスによって、行うことができることを理解されたい。
【００７３】
パッケージ１１２が、コンピューティングデバイス１０４に配信された後、コンピューティングデバイス１０４は、パッケージ１１２をインストールする。インストール後、コンピューティングデバイス１０４は、パッケージ１１２内の命令を実行する。
【００７４】
図８は、クライアントベースの展開技法を使用する、アプリケーションを実行するための例示的システム８００を例証する、ブロック図である。図８の実施例に例証されるように、システム８００は、コンピューティングデバイス１０４Ａを備える。図８の実施例は、コンピューティングデバイス１０４Ａに関して説明されるが、コンピューティングデバイス１０４の他のものは、クライアントベースの展開技法を使用する、アプリケーションを実行するための類似システムを採用することができることを理解されたい。
【００７５】
コンピューティングデバイス１０４Ａは、入力システム８０２および出力システム８０４を備える。入力システム８０２は、コンピューティングデバイス１０４Ａに、コンピューティングデバイス１０４Ａのユーザ８０６からの入力を受信させる。種々の実施形態では、入力システム８０２は、コンピューティングデバイス１０４Ａに、ユーザ８０６から入力を受信させる、種々の異なるタイプのシステムであり得る。例えば、入力システム８０２は、タッチスクリーン、キーボード、キーパッド、ポインティングデバイス（例えば、マウス、タッチパッド、トラックボール等）、ボタンアレイ、マイクロホン、またはコンピューティングデバイス１０４Ａに、ユーザ８０６からの入力を受信させる、別のタイプのシステムであり得る。出力システム８０４は、コンピューティングデバイス１０４Ａに、ユーザ８０６への出力を提供させる。種々の実施形態では、出力システム８０４は、ユーザへの出力を提供する、種々の異なるタイプのシステムであり得る。例えば、出力システム８０４は、グラフィック画面（例えば、モニタ、ＬＣＤ画面、ＬＥＤ画面等）、スピーカシステム、またはユーザに出力を提供可能な別のタイプのシステムであり得る。さらに、いくつかの実施形態では、入力システム８０２および出力システム８０４は、物理的に、同一システムである。例えば、入力システム８０２および出力システム８０４は、単一タッチスクリーンであり得る。
【００７６】
加えて、コンピューティングデバイス１０４Ａは、オペレーティングシステム８０８を提供する。オペレーティングシステム８０８は、コンピューティングデバイス１０４Ａのハードウェアリソースを管理し、ソフトウェアアプリケーションの動作をサポートする、ソフトウェアシステムである。種々の実施形態では、オペレーティングシステム８０８は、種々の異なるタイプのオペレーティングシステムであり得る。例えば、オペレーティングシステム８０８は、ＷＩＮＤＯＷＳ  ＰＨＯＮＥ７（登録商標）オペレーティングシステム、ＷＩＮＤＯＷＳ７（登録商標）オペレーティングシステム、ＩＰＨＯＮＥ（登録商標）オペレーティングシステム、ＯＳＸ（登録商標）オペレーティングシステム、Ｈｅｗｌｅｔｔ  Ｐａｃｋａｒｄ  ＣｏｍｐａｎｙからのＷＥＢＯＳ（登録商標）オペレーティングシステム、Ｌｉｎｕｘ（登録商標）オペレーティングシステム、ＡＮＤＲＯＩＤ（登録商標）オペレーティングシステム、Ｇｏｏｇｌｅ，Ｉｎｃ．からのＣＨＲＯＭＥ（登録商標）オペレーティングシステム、または別のタイプのオペレーティングシステムであり得る。
【００７７】
図８の実施例に例証されるように、コンピューティングデバイス１０４Ａは、パッケージ１１２Ａを備える。コンピューティングデバイス１０４Ａの処理ユニットによる、パッケージ１１２Ａ内の命令の実行は、コンピューティングデバイス１０４Ａに、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６、およびバインディングモジュール６０８を提供させる。
【００７８】
アプリケーションを使用するために、ユーザ８０６は、入力システム８０２を使用して、立ち上げコマンドをオペレーティングシステム８０８に提供する。応答して、オペレーティングシステム８０８は、立ち上げ要求をコンテナモジュール６０２に提供する。コンテナモジュール６０２が、立ち上げ要求を受信後、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６、およびバインディングモジュール６０８は、図６の実施例に関して、前述のように挙動する。
【００７９】
クライアントベースの展開では、バインディングモジュール６０８は、バインディングモジュール６０８が、レイヤーモジュールを処理すると、ユーザインターフェースコマンドを出力する。ユーザインターフェースコマンドは、出力システム８０４に、レイヤーモジュールによって表されるレイヤーを提示させる。例えば、ユーザインターフェースコマンドは、出力システム８０４に、レイヤーを表示させることができる、または出力システム８０４に、レイヤーを表す可聴信号を出力させることができる。
【００８０】
図９は、サーバベースの展開技法を使用する、アプリケーションを開発および配信するための例示的システム９００を例証する、ブロック図である。アプリケーションが、サーバベースの展開技法を使用して展開されると、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６、およびバインディングモジュール６０８は、サーバシステム９０２上で動作する。サーバベースの展開技法は、付加的アプリケーションをコンピューティングデバイス１０４にインストールすることが望ましくない、または不可能である状況において、有利であり得る。
【００８１】
図９の実施例に例証されるように、システム９００は、開発者コンピューティングシステム１０６を備える。システム９００はまた、コンピューティングデバイス１０４を備える。説明を容易にするため、タッチスクリーン式スマートフォンおよびフィーチャーフォンのみ、図９の実施例では例証される。しかしながら、他の実施形態では、コンピューティングデバイス１０４は、デスクトップコンピュータ、携帯電話、タブレットコンピュータ等、種々の異なるタイプのコンピューティングデバイスによって置換することができる。
【００８２】
システム９００はまた、サーバシステム９０２Ａから９０２Ｎ（集合的に、「サーバシステム９０２」）を備える。サーバシステム９０２は、コンピュータシステムである。サーバシステム９０２は、異なるプラットフォームを提供することができる。例えば、サーバシステム９０２Ａは、アクティブサーバーページ（ＡＳＰ）ベースのウェブサーバプラットフォームを提供することができ、サーバシステム９０２Ｂ（図示せず）は、Ｔｅｌｎｅｔサーバプラットフォームを提供することができ、およびサーバシステム９０２Ｎは、ＰＨＰベースのウェブサーバプラットフォームを提供することができる。
【００８３】
サーバベースの展開技法を使用して、アプリケーションを生成するために、コンパイラアプリケーション４０２は、パッケージ１１２を生成する。パッケージはそれぞれ、異なるプラットフォームと関連付けられる。コンパイラアプリケーション４０２は、アプリケーションのレイヤーソースコード４０６、アプリケーションのアプリケーションソースコード４０４、プラットフォームのためのコンテナソースコードセット４０８、およびプラットフォームのためのバインディングソースコードセット４１０をコンパイルすることによって、パッケージ１１２を生成する。パッケージ１１２はそれぞれ、レイヤーモジュール６０６、アプリケーションモジュール６０４、コンテナモジュール、およびバインディングモジュールを定義する、コンパイルされた命令を含む。パッケージ１１２はそれぞれ、パッケージと関連付けられたプラットフォームを提供する、サーバシステム９０２上でのインストールに好適である。
【００８４】
アプリケーションは、サーバベースの展開技法を使用して展開されると、パッケージ１１２は、サーバシステム９０２に配信され、サーバシステム９０２上にインストールされる。インストール後、サーバシステム９０２は、パッケージ１１２内の命令を実行し、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６、およびバインディングモジュール６０８を提供する。
【００８５】
コンピューティングデバイス１０４は、アプリケーションに特有のハードウェアまたはソフトウェアを含まない。例えば、コンピューティングデバイス１０４Ａは、標準的電話であり得、アプリケーションのＩＶＲバージョンは、サーバシステム９０２Ａにインストールされる。本実施例では、ユーザは、コンピューティングデバイス１０４Ａを使用して、サーバシステム９０２Ａをコールすることによって、アプリケーションと相互作用することができる。別の実施例では、ユーザは、コンピューティングデバイス１０４Ｎ上の汎用クライアントアプリケーションを使用して、アプリケーションと相互作用することができる。汎用クライアントアプリケーションは、特有のサーバベースのアプリケーションに結び付けられていない、アプリケーションを含む。例えば、ユーザは、コンピューティングデバイス１０４Ｎ上のウェブブラウザアプリケーションを使用して、アプリケーションのウェブバージョンと相互作用することができる。別の実施例では、ユーザは、コンピューティングデバイス１０４Ｎ上のＴｅｌｎｅｔクライアントを使用して、アプリケーションのＴｅｌｎｅｔバージョンと相互作用することができる。
【００８６】
図１０は、サーバベースの展開技法を使用する、アプリケーションを実行するための例示的システム１０００を例証する、ブロック図である。図１０の実施例に例証されるように、システム１０００は、コンピューティングデバイス１０４Ａおよびサーバシステム９０２Ａを備える。図５の実施例は、コンピューティングデバイス１０４Ａおよびサーバシステム９０２Ａに関して説明されるが、コンピューティングデバイス１０４およびサーバシステム９０２の他のものも、サーバベースの展開技法を使用する、アプリケーションを実行するための類似システムを採用することができることを理解されたい。
【００８７】
図８の実施例に例証されるコンピューティングデバイス１０４Ａ同様に、図１０の実施例に例証されるコンピューティングデバイス１０４Ａは、入力システム８０２、出力システム８０４、およびオペレーティングシステム８０８を備える。
【００８８】
しかしながら、パッケージ１１２Ａを含む代わりに、図１０の実施例に例証されるコンピューティングデバイス１０４Ａは、ブラウザアプリケーション１００２を備える。異なる実施形態では、ブラウザアプリケーション１００２は、異なるタイプのウェブブラウザアプリケーションであり得る。例えば、ブラウザアプリケーション１００２は、Ａｐｐｌｅ，Ｉｎｃ．からのＳＡＦＡＲＩ（登録商標）ウェブブラウザアプリケーション、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．からのＩＮＴＥＲＮＥＴ  ＥＸＰＬＯＲＥＲ（登録商標）ウェブブラウザアプリケーション、Ｍｏｚｉｌｌａ  ＦｏｕｎｄａｔｉｏｎからのＦＩＲＥＦＯＸ（登録商標）ウェブブラウザアプリケーション、Ｇｏｏｇｌｅ，Ｉｎｃ．からのＣＨＲＯＭＥ（登録商標）ウェブブラウザアプリケーション、または別のウェブブラウザアプリケーションであり得る。
【００８９】
コンピューティングデバイス１０４Ａは、図１０の実施例では、ウェブブラウザアプリケーションを提供するが、アプリケーションが、サーバベースの展開技法を使用して展開される、いくつかの事例では、コンピューティングデバイス１０４Ａは、ブラウザアプリケーション１００２の代わりに、他のタイプの汎用クライアントアプリケーションを提供することを理解されたい。例えば、コンピューティングデバイス１０４Ａは、ブラウザアプリケーション１００２の代わりに、Ｔｅｌｎｅｔクライアントを提供することができる。さらに、アプリケーションが、サーバベースの展開技法を使用して展開される、いくつかの事例では、コンピューティングデバイス１０４Ａは、汎用クライアントアプリケーションまたはオペレーティングシステムを提供しない。
【００９０】
サーバシステム９０２Ａは、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６、およびバインディングモジュール６０８を提供する。図１０の実施例に例証される、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６、およびバインディングモジュール６０８は、図６の実施例に例証される、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６、およびバインディングモジュール６０８と同様に動作する。
【００９１】
サーバシステム９０２Ａはまた、サーバアプリケーション１００４を提供する。アプリケーションを使用するために、ユーザ８０６は、入力システム８０２を使用して、ブラウザアプリケーション１００２と相互作用する。ブラウザアプリケーション１００２は、ウェブ要求をサーバアプリケーション１００４に送信する。ウェブ要求は、アプリケーション内のレイヤーのレイヤーＵＲＩを指定する。サーバアプリケーション１００４が、ウェブ要求を受信すると、サーバアプリケーション１００４は、ナビゲーション要求をアプリケーションモジュール６０４に提供する。アプリケーションモジュール６０４は、前述のように、ナビゲーション要求を処理する。続いて、バインディングモジュール６０８は、リソースデータを生成する。リソースデータは、レイヤーＵＲＩによって示される、レイヤーを表す。サーバアプリケーション１００４が、リソースデータを受信すると、サーバアプリケーション１００４は、ウェブ要求への応答として、ウェブ応答をブラウザアプリケーション１００２に送信する。ウェブ応答は、リソースデータを含有する。
【００９２】
ブラウザアプリケーション１００２が、ウェブ応答を受信すると、ブラウザアプリケーション１００２は、レイヤーをユーザ８０６に提示する、出力システム８０４を使用する。続いて、ユーザ８０６は、レイヤーのナビゲーション要素を選択することができる。ユーザ８０６が、ナビゲーション要素を選択すると、ブラウザアプリケーション１００２は、別のウェブ要求をサーバアプリケーション１００４に送信する。他のウェブ要求は、アプリケーション内の別のレイヤーのレイヤーＵＲＩを指定する。サーバアプリケーション１００４は、以前のウェブ要求と同様に、本ウェブ要求を処理する。
【００９３】
図１１は、クライアントシェル展開技法を使用する、アプリケーションを展開および配信するための例示的システム１１００を例証する、ブロック図である。システム１１００は、開発者コンピューティングシステム１０６を備える。加えて、システム１１００は、サーバシステム９０２およびコンピューティングデバイス１０４を備える。
【００９４】
クライアントシェル展開技法を使用して、アプリケーションを生成するために、コンパイラアプリケーション４０２は、パッケージ１１２およびシェルアプリケーションパッケージ１１０２Ａから１１０２Ｎ（集合的に、「シェルアプリケーションパッケージ１１０２」）を生成する。パッケージ１１２はそれぞれ、異なるプラットフォームと関連付けられる。シェルアプリケーションパッケージ１１０２はそれぞれ、異なるプラットフォームと関連付けられる。
【００９５】
コンパイラアプリケーション４０２は、レイヤーソースコード４０６、アプリケーションソースコード４０４、コンテナソースコードセット４０８、およびバインディングソースコードセット４１０をコンパイルすることによって、パッケージ１１２を生成する。パッケージ１１２はそれぞれ、１つ以上のレイヤーモジュール６０６、アプリケーションモジュール６０４、コンテナモジュール、およびバインディングモジュールを定義する、コンパイルされた命令を含む。パッケージ１１２はそれぞれ、パッケージと関連付けられたプラットフォームを提供する、サーバシステム９０２上でのインストールに好適である。シェルアプリケーションパッケージ１１０２はそれぞれ、シェルアプリケーションパッケージと関連付けられたプラットフォームを提供する、コンピューティングデバイス上で実行されると、シェルアプリケーションを提供する、命令を備える。
【００９６】
コンパイラアプリケーション４０２が、パッケージ１１２を構築後、パッケージ１１２は、サーバシステム９０２に配信およびインストールされる。加えて、シェルアプリケーションパッケージ１１０２は、コンピューティングデバイス１０４上にインストールされる。シェルアプリケーションパッケージ１１０２が、コンピューティングデバイス１０４上にインストールされた後、コンピューティングデバイス１０４は、コンピューティングデバイス１０４に、シェルアプリケーションを提供させる、シェルアプリケーションパッケージ１１０２内のコンピュータ可読命令を実行する。シェル動作は、コンピューティングデバイス１０４上でネイティブに動作する。
【００９７】
コンピューティングデバイス１０４のユーザの観点から、シェルアプリケーションは、アプリケーションのすべての動作を行うと考えられる。しかしながら、現実には、シェルアプリケーションは、実際に、ナビゲーション要求をサーバシステム９０２に送信し、直列化されたインターフェースデータをサーバシステム９０２から受信し、直列化されたインターフェースデータを使用して、アプリケーションのレイヤーをユーザに提示している。種々の実施形態は、種々の方法において、直列化されたインターフェースデータをフォーマットする。例えば、直列化されたインターフェースデータは、ＨＴＭＬデータ、ＸＭＬデータ、画像データ、または他の方法でフォーマットされた他のデータとして、フォーマットすることができる。クライアントシェル展開技法は、アプリケーションの作業をコンピューティングデバイス１０４から離れて行わせるが、アプリケーションが、コンピューティングデバイス１０４によって提供されているという体裁を提供することが有利である状況において、有用であり得る。
【００９８】
図１２は、クライアントシェル展開技法を使用する、アプリケーションを実行するための例示的システム１２００を例証する、ブロック図である。図１２の実施例に例証されるように、システム１２００は、コンピューティングデバイス１０４Ａおよびサーバシステム９０２Ａを備える。図１２の実施例は、コンピューティングデバイス１０４Ａおよびサーバシステム９０２Ａに関して説明されるが、コンピューティングデバイス１０４およびサーバシステム９０２の他のものが、クライアントシェル展開技法を使用する、アプリケーションを実行するための類似システムを採用することができることを理解されたい。
【００９９】
図１２の実施例に例証される、コンピューティングデバイス１０４Ａは、図８の実施例に例証される、コンピューティングデバイス１０４Ａに類似する。図８の実施例に例証される、コンピューティングデバイス１０４Ａ同様に、図１２の実施例に例証される、コンピューティングデバイス１０４Ａは、入力システム８０２、出力システム８０４、およびオペレーティングシステム８０８を提供する。しかしながら、コンピューティングデバイス１０４Ａは、ブラウザアプリケーション１００２の代わりに、シェルアプリケーション１２０２を提供する。シェルアプリケーションパッケージ１１０２のうちの１つ内の命令の実行は、コンピューティングデバイス１０４Ａに、シェルアプリケーション１２０２を提供させる。
【０１００】
さらに、図１２の実施例に例証される、サーバシステム９０２Ａは、図１０の実施例に例証される、サーバシステム９０２Ａに類似する。図１０の実施例に例証される、サーバシステム９０２Ａ同様に、図１２の実施例に例証される、サーバシステム９０２Ａは、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６、およびバインディングモジュール６０８を提供する。
【０１０１】
アプリケーションを使用するために、ユーザ８０６は、入力システム８０２を使用して、オペレーティングシステム８０８に、シェルアプリケーション１２０２を立ち上げるよう指示する。シェルアプリケーション１２０２が、立ち上がると、シェルアプリケーション１２０２は、初期ナビゲーション要求をアプリケーションモジュール６０４に提供する。初期ナビゲーション要求は、アプリケーションのホームレイヤーのレイヤーＵＲＩを指定する。アプリケーションモジュール６０４は、本書のいずれかの場所に説明されるように、ナビゲーション要求を処理する。
【０１０２】
バインディングモジュール６０８が、レイヤーモジュールを処理すると、バインディングモジュール６０８は、直列化されたインターフェースデータをシェルアプリケーション１２０２に提供する。直列化されたインターフェースデータは、レイヤーＵＲＩによって示されるアプリケーションのレイヤーを表す。シェルアプリケーション１２０２が、直列化されたインターフェースデータを受信すると、シェルアプリケーション１２０２は、出力システム８０４を使用して、アプリケーションのレイヤーをユーザ８０６に提示する。ユーザ８０６は、レイヤーのナビゲーション要素を選択することができる。ユーザ８０６が、レイヤーのナビゲーション要素を選択すると、シェルアプリケーションは、別のナビゲーション要求をコンテナモジュール６０２に提供する。他のナビゲーション要求は、ナビゲーション要素と関連付けられたレイヤーＵＲＩを指定する。
【０１０３】
図１３は、ハイブリッド展開技法を使用する、アプリケーションを展開および配信するための例示的システム１３００を例証する、ブロック図である。アプリケーションが、ハイブリッド展開技法を使用して展開されると、コンテナモジュール６０２およびバインディングモジュール６０８は、コンピューティングデバイス１０４上で動作し、アプリケーションモジュール６０４およびレイヤーモジュール６０６は、サーバシステム９０２上で動作する。ハイブリッド展開技法は、サーバシステム上で実行するために、プラットフォーム特有のコードにとって望ましくない状況において、有用であり得る。システム１３００は、開発者コンピューティングシステム１０６を備える。加えて、システム１３００は、サーバシステム９０２およびコンピューティングデバイス１０４を備える。
【０１０４】
ハイブリッド展開技法を使用して、アプリケーションを生成するために、コンパイラアプリケーション４０２は、アプリケーションのためのサーバパッケージ１３０２を生成する。サーバパッケージ１３０２を生成するために、コンパイラアプリケーション４０２は、アプリケーションのために、レイヤーソースコード４０６およびアプリケーションソースコード４０４をコンパイルする。故に、サーバパッケージ１３０２は、１つ以上のレイヤーモジュール６０６およびアプリケーションモジュール６０４を定義する、命令を含む。サーバパッケージ１３０２は、サーバシステム９０２Ａによって提供されるプラットフォーム上でのインストールに好適である。コンパイラアプリケーション４０２が、サーバパッケージ１３０２を生成した後、サーバパッケージ１３０２は、サーバシステム９０２Ａ上に配信およびインストールされる。他の実施形態では、サーバパッケージ１３０２は、サーバシステム９０２の他のもの上に配信およびインストールされることを理解されたい。
【０１０５】
さらに、ハイブリッド展開技法を使用して、アプリケーションを生成するために、コンパイラアプリケーション４０２は、選択されたプラットフォームのために、クライアントパッケージ１３０４Ａから１３０４Ｎ（集合的に、「クライアントパッケージ１３０４」）を生成する。コンパイラアプリケーション４０２は、選択されたプラットフォームのために、コンテナソースコードセット４０８およびバインディングソースコードセット４１０をコンパイルすることによって、クライアントパッケージ１３０４を生成する。故に、クライアントパッケージ１３０４は、コンテナモジュール６０２およびバインディングモジュール６０８を定義する、命令を含む。クライアントパッケージ１３０４のそれぞれ内の命令は、異なるプラットフォーム上でのネイティブ実行のために好適である。コンパイラアプリケーション４０２が、クライアントパッケージ１３０４を生成した後、クライアントパッケージ１３０４は、コンピューティングデバイス１０４上に配信およびインストールされる。
【０１０６】
図１４は、ハイブリッド展開技法を使用する、アプリケーションを実行するための例示的システム１４００を例証する、ブロック図である。図１４の実施例に例証されるように、システム１４００は、コンピューティングデバイス１０４Ａおよびサーバシステム９０２Ａを備える。図１４の実施例は、コンピューティングデバイス１０４Ａおよびサーバシステム９０２Ａに関して説明されるが、コンピューティングデバイス１０４およびサーバシステム９０２の他のものが、ハイブリッド展開技法を使用する、アプリケーションを実行するための類似システムを採用することができることを理解されたい。
【０１０７】
図１４の実施例に例証される、コンピューティングデバイス１０４Ａは、図８の実施例に例証される、コンピューティングデバイス１０４Ａに類似する。図８の実施例に例証される、コンピューティングデバイス１０４Ａ同様に、図１４の実施例に例証される、コンピューティングデバイス１０４Ａは、入力システム８０２、出力システム８０４、およびオペレーティングシステム８０８を提供する。しかしながら、パッケージ１１２Ａの代わりに、コンピューティングデバイス１０４Ａは、クライアントパッケージ１３０４Ａを備える。クライアントパッケージ１３０４Ａは、アプリケーションのコンテナモジュール６０２およびバインディングモジュール６０８を提供するが、アプリケーションのアプリケーションモジュール６０４またはレイヤーモジュール６０６は、提供しない。
【０１０８】
さらに、図１４の実施例に例証される、サーバシステム９０２Ａは、図９の実施例に例証される、サーバシステム９０２Ａに類似する。しかしながら、図１４の実施例に例証される、サーバシステム９０２Ａは、サーバパッケージ１３０２を備える。サーバパッケージ１３０２は、アプリケーションのアプリケーションモジュール６０４およびレイヤーモジュール６０６を提供するが、アプリケーションのコンテナモジュール６０２またはバインディングモジュール６０８は、提供しない。
【０１０９】
アプリケーションを使用するために、ユーザ８０６は、入力システム８０２を使用して、オペレーティングシステム８０８に、アプリケーションを立ち上げるよう指示する。アプリケーションが、立ち上がると、コンテナモジュール６０２は、初期ナビゲーション要求をサーバシステム９０２Ａにおけるアプリケーションモジュール６０４に提供する。初期ナビゲーション要求は、アプリケーションのホームレイヤーのレイヤーＵＲＩを指定する。アプリケーションモジュール６０４は、本書のいずれかの場所に説明されるように、初期ナビゲーション要求を処理する。
【０１１０】
続いて、コンテナモジュール６０２は、ロード完了イベントをアプリケーションモジュール６０４から受信する。ロード完了イベントは、レイヤーモジュールの直列化されたバージョンを備える。コンテナモジュール６０２は、レイヤーモジュールの直列化されたバージョンをコンピューティングデバイス１０４Ａにおけるバインディングモジュール６０８に提供する。バインディングモジュール６０８は、次いで、レイヤーモジュールの直列化されたバージョンを処理する。バインディングモジュール６０８が、レイヤーモジュールの直列化されたバージョンを処理すると、バインディングモジュール６０８は、オペレーティングシステム８０８に、出力システム８０４を使用して、レイヤーをユーザ８０６に表示させる、ユーザインターフェースコマンドを出力する。ユーザ８０６は、レイヤーのナビゲーション要素を選択することができる。ユーザ８０６が、レイヤーのナビゲーション要素を選択すると、オペレーティングシステム８０８は、別のナビゲーション要求をコンテナモジュール６０２に提供する。他のナビゲーション要求は、ナビゲーション要素と関連付けられたレイヤーＵＲＩを指定する。
【０１１１】
図１５は、コンテナモジュール６０２の例示的初期化動作１５００を例証する、流れ図である。図１５の実施例は、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６、およびバインディングモジュール６０８が、特有の方法で実装される、実施形態を説明する。他の実施形態では、コンテナモジュール６０２、アプリケーションモジュール６０４、レイヤーモジュール６０６、およびバインディングモジュール６０８が、他の方法で実装されることを理解されたい。
【０１１２】
図１５の実施例に例証されるように、初期化動作１５００は、コンテナモジュール６０２の実行が開始すると、開始する（１５０２）。種々の実施形態では、コンテナモジュール６０２の実行は、種々の時間で開始することができる。例えば、いくつかの実施形態では、コンテナモジュール６０２の実行は、オペレーティングシステム８０８が、ユーザ８０６からの入力に応答して、アプリケーションを立ち上げると、開始する。他の実施形態では、コンテナモジュール６０２の実行は、サーバアプリケーション１００４が、サーバシステム９０２Ａにおいて始動すると、開始する。さらに他の実施形態では、コンテナモジュール６０２の実行は、サーバシステム９０２のうちの１つが始動すると、始動する。さらに他の実施形態では、コンテナモジュール６０２の実行は、サーバシステム９０２Ａが、最初に、コンテナモジュール６０２のためのウェブ要求またはナビゲーション要求を受信する時、始動する。
【０１１３】
コンテナモジュール６０２の実行開始後、コンテナモジュール６０２は、バインディングモジュール６０８を初期化する（１５０４）。いくつかの実施形態では、バインディングモジュール６０８は、工場設計パターンに従う。そのような実施形態では、コンテナモジュール６０２は、バインディングモジュール６０８の静的初期化方法を呼び出すことによって、バインディングモジュール６０８を初期化する。
【０１１４】
異なるバインディングモジュールは、コンテナモジュール６０２が、バインディングモジュールを初期化すると、異なるアクションを行うことができる。例えば、いくつかのバインディングモジュールの初期化方法の呼び出しは、コンピューティングデバイス１０４Ａに、スプラッシュ画面を表示させる。本実施例では、他のバインディングモジュールの初期化方法の呼び出しは、コンピューティングデバイス１０４Ａに、任意のアクションを行わせない。
【０１１５】
次に、コンテナモジュール６０２は、イベントリスナを生成する（１５０６）。図１５の実施例では、アプリケーションソースコード４０４は、抽象アプリケーションクラスを定義する。抽象アプリケーションクラスは、アプリケーション初期化動作およびナビゲーション動作を定義する。イベントリスナは、抽象アプリケーションクラスによって生成されたロード完了イベントをリッスンする。本書のいずれかの場所に記載されるように、ロード完了イベントは、レイヤー参照を備える。開発者１０２が、クライアントベース、サーバベース、またはシェルアプリケーション展開技法を選択する事例では、ロード完了イベントは、レイヤー参照を含み、イベントリスナは、レイヤー参照をバインディングモジュール６０８に提供する。開発者１０２が、ハイブリッド展開技法を選択する事例では、ロード完了イベントは、レイヤーモジュールの直列化されたバージョンを含有し、イベントリスナは、レイヤーモジュールの直列化されたバージョンをバインディングモジュール６０８に提供する。
【０１１６】
コンテナモジュール６０２は、次いで、アプリケーションモジュール６０４をインスタンス化する（１５０８）。アプリケーションモジュール６０４は、アプリケーションソースコード４０４内に定義される、アプリケーションクラスインスタンスである。アプリケーションクラスは、抽象アプリケーションクラスを拡張する。アプリケーションクラスは、抽象アプリケーションクラスによって定義されるアプリケーション初期化動作をオーバーライドする。アプリケーションモジュール６０４のアプリケーション初期化動作は、アプリケーションクラスが、インスタンス化されると、常時、呼び出される。
【０１１７】
実行されると、アプリケーションモジュール６０４のアプリケーション初期化動作は、レイヤーモジュール６０６をインスタンス化する。レイヤーモジュール６０６はそれぞれ、レイヤーソースコード４０６内に定義される、異なるレイヤークラスのインスタンスである。レイヤークラスはそれぞれ、抽象レイヤークラスを拡張する。抽象レイヤークラスは、ロード動作を定義する。レイヤークラスはそれぞれ、異なる方法において、ロード動作を実装する。その結果、レイヤーモジュールのロード動作は、異なる挙動を有する。
【０１１８】
さらに、実行されると、アプリケーションモジュール６０４のアプリケーション初期化動作は、レイヤーＵＲＩをレイヤーモジュールにマップする、ナビゲーションマップを生成する。ナビゲーションマップは、レイヤーＵＲＩをレイヤーモジュールにマップする、ソフトウェアオブジェクトである。異なるアプリケーションは、異なるアプリケーションクラスを有する。異なるアプリケーションクラスは、異なるアプリケーション初期化方法を実装する。故に、異なるアプリケーションは、異なるナビゲーションマップを初期化することができる。
【０１１９】
アプリケーション初期化動作はまた、アプリケーションのためのスタイルを初期化する。アプリケーションのためのスタイルは、アプリケーション内のテキストの外観を制御することができる。いくつかの実施形態では、スタイルはまた、個々のレイヤーまたはコンテンツ要素のタイプのために初期化することができる。
【０１２０】
以下は、いくつかの実施形態で使用される、例示的コードアプリケーションクラスである。
【０１２１】
【化１−１】
0005845522.tif 000002
【０１２２】
【化１−２】
0005845522.tif 000003
アプリケーションオブジェクトをインスタンス化後、コンテナモジュール６０２は、アプリケーションオブジェクト参照をバインディングモジュール６０８に提供する（１５１０）。アプリケーションオブジェクト参照は、アプリケーションオブジェクトへの参照である。図１５の実施例では、バインディングモジュール６０８は、アプリケーション特性を有する。コンテナモジュール６０２は、アプリケーションオブジェクト参照をバインディングモジュール６０８のアプリケーション特性に割り当てる。
【０１２３】
コンテナモジュール６０２は、次いで、初期ナビゲーション要求を生成する（１５１２）。初期ナビゲーション要求は、アプリケーションのホームレイヤーのレイヤーＵＲＩを指定する。図１５の実施例では、コンテナモジュール６０２は、抽象アプリケーションクラスのナビゲート方法を呼び出し、ホームレイヤーのレイヤーＵＲＩをパラメータとして提供することによって、初期ナビゲーション要求を生成する。
【０１２４】
以下は、Ｃｏｎｓｏｌｅバインディングと併用される、例示的コンテナソースコードであって、Ｃｏｎｓｏｌｅバインディングは、Ｔｅｌｎｅｔプラットフォームと併用することができる。
【０１２５】
【化２−１】
0005845522.tif 000004
【０１２６】
【化２−２】
0005845522.tif 000005
以下は、Ｃｏｍｐａｃｔバインディングと併用することができる、例示的コンテナソースコードである。Ｃｏｍｐａｃｔバインディングは、Ｍｉｃｒｏｓｏｆｔ  ＷＩＮＤＯＷＳ（登録商標）ＣＥプラットフォームと併用することができる。
【０１２７】
【化３】
0005845522.tif 000006
以下は、ＭｏｎｏＴｏｕｃｈバインディングと併用される、例示的コンテナソースコードである。ＭｏｎｏＴｏｕｃｈバインディングは、ＡＰＰＬＥ  ＩＰＨＯＮＥおよびＡＰＰＬＥ  ＩＰＡＤプラットフォームと併用することができる。
【０１２８】
【化４−１】
0005845522.tif 000007
【０１２９】
【化４−２】
0005845522.tif 000008
図１６は、アプリケーションモジュール６０４の例示的ナビゲーション動作１６００を例証する、流れ図である。いくつかの実施形態では、アプリケーションモジュール６０４は、アプリケーションモジュール６０４が、ナビゲーション要求を受信する度に、ナビゲーション動作１６００を行う。
【０１３０】
図１６の実施例に例証されるように、ナビゲーション動作１６００は、アプリケーションモジュール６０４が、ナビゲーション要求を受信すると、始動する（１６０２）。ナビゲーション要求は、レイヤーＵＲＬを指定する。レイヤーＵＲＩは、ルート部分およびパラメータ部分を備える。レイヤーＵＲＩのパラメータ部分は、ゼロ以上のパラメータを備える。パラメータはそれぞれ、名前−値の対である。例えば、「ｈｔｔｐ：／／ｅｘａｍｐｌｅ．ｃｏｍ／ｂｏｏｋｓａｐｐ？ｂｏｏｋＩｄ＝２３４＆ｌａｎｇ＝ｅｎｇ」は、レイヤーＵＲＩであり得る。本実施例では、「ｈｔｔｐ：／／ｅｘａｍｐｌｅ．ｃｏｍ／ｂｏｏｋｓａｐｐ」は、レイヤーＵＲＩのルート部分である。本実施例では、レイヤーＵＲＩのパラメータ部分は、２つのパラメータ：「ｂｏｏｋＩｄ＝２３４」および「ｌａｎｇ＝ｅｎｇ」を備える。
【０１３１】
ナビゲーション要求の受信に応答して、アプリケーションモジュール６０４は、ナビゲーション要求によって指定されるレイヤーＵＲＩを使用して、適切なレイヤーモジュールを識別する（１６０４）。適切なレイヤーモジュールは、レイヤーモジュール６０６のうちの１つである。種々の実施形態では、アプリケーションモジュール６０４は、種々の方法において、適切なレイヤーモジュールを識別する。例えば、いくつかの実施形態では、アプリケーションモジュール６０４は、ナビゲーションマップを使用して、適切なレイヤーモジュールを識別する。本実施例では、ナビゲーションマップは、一式のエントリを備える。各エントリは、レイヤーモジュール６０６のうちの特定の１つに対する正規表現を満たす、任意のレイヤーＵＲＩをマップする。
【０１３２】
適切なレイヤーモジュールを識別後、アプリケーションモジュール６０４は、ロード要求を適切なレイヤーモジュールに提供する（１６０６）。種々の実施形態では、アプリケーションモジュール６０４は、種々の方法において、ロード要求を適切なレイヤーモジュールに提供する。例えば、いくつかの実施形態では、アプリケーションモジュール６０４は、適切なレイヤーモジュールのロード動作をコールすることによって、ロード要求を適切なレイヤーモジュールに提供する。アプリケーションモジュール６０４が、適切なレイヤーモジュールのロード動作をコールすると、アプリケーションモジュール６０４は、レイヤーＵＲＩ内に指定されたパラメータをロード動作に提供する。
【０１３３】
適切なレイヤーモジュールは、種々のアクティビティを行い、コンテンツを適切なレイヤーモジュールにロードすることができる。例えば、適切なレイヤーモジュールは、データをインターネットから取得し、そのデータレイヤー内の種々のコンテンツアイテムにロードすることができる。本実施例では、適切なレイヤーモジュールは、最も良く売れている本のリストをウェブサイトからプルし、本のそれぞれのタイトルをレイヤー内のリストのリストアイテムにプットすることができる。別の実施例では、適切なレイヤーモジュールは、カメラ、マイクロホン、スピーカ、およびコンピューティングデバイス１０４の他のタイプの特徴と相互作用し、コンテンツをレイヤーにロードすることができる。本実施例では、そのような相互作用は、いくつかのタイプのモバイルデバイスとのみ可能である。
【０１３４】
適切なレイヤーモジュール上でロード動作をコール後、アプリケーションモジュール６０４は、ロード完了イベントを生成する（１６０８）。ロード完了イベントは、レイヤー参照を備える。レイヤー参照は、適切なレイヤーモジュールのロード動作によって生成されるレイヤーデータ構造を記憶する、場所を識別する。
【０１３５】
図１７は、例示的コンピューティングデバイス１７００を例証する、ブロック図である。いくつかの実施形態では、開発者コンピューティングシステム１０６、コンピューティングデバイス１０４、および／またはサーバシステム９０２は、コンピューティングデバイス１７００のような１つ以上のコンピューティングデバイスを使用して、実装される。他の実施形態では、開発者コンピューティングシステム１０６、コンピューティングデバイス１０４、および／またはサーバシステム９０２は、図１７の実施例に例証されるもの以外のハードウェア構成要素を有する、コンピューティングデバイスを使用して実装されることを理解されたい。
【０１３６】
異なる実施形態では、コンピューティングデバイスは、異なる方法において、実装される。例えば、図１７の実施例では、コンピューティングデバイス１７００は、メモリ１７０２、処理システム１７０４、二次記憶装置デバイス１７０６、ネットワークインターフェースカード１７０８、ビデオインターフェース１７１０、ディスプレイデバイス１７１２、外部構成要素インターフェース１７１４、外部記憶デバイス１７１６、入力デバイス１７１８、プリンタ１７２０、および通信メディア１７２２を備える。他の実施形態では、コンピューティングデバイスは、より多いまたは少ないハードウェア構成要素を使用して、実装される。例えば、別の例示的実施形態では、コンピューティングデバイスは、ビデオインターフェース、ディスプレイデバイス、外部記憶デバイス、または入力デバイスを含まない。
【０１３７】
メモリ１７０２は、データおよび／または命令を記憶可能な１つ以上のコンピュータ可読データ記憶メディアを含む。本書で使用されるように、データ記憶メディアは、コンピューティングデバイスによって可読のデータおよび／またはソフトウェア命令を記憶する、デバイスまたは製品である。異なる実施形態では、メモリ１７０２は、異なる方法において、実装される。例えば、種々の実施形態では、メモリ１７０２は、種々のタイプのコンピュータ可読データ記憶メディアを使用して、実装される。例示的タイプのコンピュータ可読データ記憶メディアは、動的ランダムアクセスメモリ（ＤＲＡＭ）、ダブルデータレート同期動的ランダムアクセスメモリ（ＤＤＲ  ＳＤＲＡＭ）、待ち時間短縮ＤＲＡＭ、ＤＤＲ２  ＳＤＲＡＭ、ＤＤＲ３  ＳＤＲＡＭ、Ｒａｍｂｕｓ  ＲＡＭ、固体メモリ、フラッシュメモリ、読取専用メモリ（ＲＯＭ）、電気的消去可能プログラム可能ＲＯＭ、およびデータを記憶する、他のタイプのデバイスおよび／または製品を含むが、それらに限定されない。
【０１３８】
処理システム１７０４は、選択的に、ソフトウェア命令を実行する、１つ以上の物理的集積回路を含む。種々の実施形態では、処理システム１７０４は、種々の方法において、実装される。例えば、一例示的実施形態では、処理システム１７０４は、１つ以上の処理コアとして、実装される。例えば、本例示的実施形態では、処理システム１７０４は、１つ以上のＩｎｔｅｌ  ＣＯＲＥ（ＴＭ）シリーズマイクロプロセッサとして、実装されてもよい。別の例示的実施形態では、処理システム１７０４は、１つ以上の別個のマイクロプロセッサまたはマイクロコントローラとして、実装される。さらに別の例示的実施形態では、処理システム１７０４は、特有の機能性を提供する、ＡＳＩＣとして、実装される。さらに別の例示的実施形態では、処理システム１７０４は、ＡＳＩＣを使用し、ソフトウェア命令を実行することによって、特有の機能性を提供する。
【０１３９】
異なる実施形態では、処理システム１７０４は、異なる命令セット内のソフトウェア命令を実行する。例えば、種々の実施形態では、処理システム１７０４は、ｘ８６命令セット、電力命令セット、ＲＩＳＣ命令セット、ＳＰＡＲＣ命令セット、ＩＡ−６４命令セット、ＭＩＰＳ命令セット、および／または他の命令セット等の命令セット内のソフトウェア命令を実行する。
【０１４０】
二次記憶装置デバイス１７０６は、１つ以上のコンピュータ可読データ記憶メディアを含む。二次記憶装置デバイス１７０６は、処理システム１７０４によって直接アクセス不可能である、データおよびソフトウェア命令を記憶する。言い換えると、処理システム１７０４は、Ｉ／Ｏ動作を行い、データおよび／またはソフトウェア命令を二次記憶装置デバイス１７０６から読み出す。種々の実施形態では、二次記憶装置デバイス１７０６は、種々のタイプのコンピュータ可読データ記憶メディアによって、実装される。例えば、二次記憶装置デバイス１７０６は、１つ以上の磁気ディスク、磁気テープドライブ、ＣＤ−ＲＯＭディスク、ＤＶＤ−ＲＯＭディスク、Ｂｌｕ−Ｒａｙディスク、固体メモリデバイス、Ｂｅｒｎｏｕｌｌｉカートリッジ、および／または他のタイプのコンピュータ可読データ記憶メディアによって、実装されてもよい。
【０１４１】
ネットワークインターフェースカード１７０８は、コンピューティングデバイス１７００に、コンピュータ通信ネットワークにデータを送信し、そこからデータを受信させる。異なる実施形態では、ネットワークインターフェースカード１７０８は、異なる方法において、実装される。例えば、種々の実施形態では、ネットワークインターフェースカード１７０８は、Ｅｔｈｅｒｎｅｔ（登録商標）インターフェース、トークンリングネットワークインターフェース、光ファイバネットワークインターフェース、無線ネットワークインターフェース（例えば、ＷｉＦｉ、ＷｉＭａｘ等）、または別のタイプのネットワークインターフェースとして、実装される。
【０１４２】
ビデオインターフェース１７１０は、コンピューティングデバイス１７００に、ビデオ情報をディスプレイデバイス１７１２に出力させる。異なる実施形態では、ビデオインターフェース１７１０は、異なる方法において、実装される。例えば、一例示的実施形態では、ビデオインターフェース１７１０は、コンピューティングデバイス１７００のマザーボードに統合される。別の例示的実施形態では、ビデオインターフェース１７１０は、ビデオ拡張カードである。例示的タイプのビデオ拡張カードは、ＡＴＩ  Ｔｅｃｈｎｏｌｏｇｉｅｓ，Ｉｎｃ．（Ｍａｒｋｈａｍ、Ｏｎｔａｒｉｏ）製ＲＡＤＥＯＮ（登録商標）グラフィックスカード、Ｎｖｉｄｉａ  Ｃｏｒｐｏｒａｔｉｏｎ（Ｓａｎｔａ  Ｃｌａｒａ、Ｃａｌｉｆｏｒｎｉａ）製ＧＥＦＯＲＣＥ（登録商標）グラフィックスカード、および他のタイプのグラフィックスカードを含む。
【０１４３】
種々の実施形態では、ディスプレイデバイス１７１２は、種々のタイプのディスプレイデバイスとして、実装される。例示的タイプのディスプレイデバイスは、ブラウン管ディスプレイ、ＬＣＤディスプレイパネル、プラズマ画面ディスプレイパネル、タッチセンサ式ディスプレイパネル、ＬＥＤ画面、プロジェクタ、および他のタイプのディスプレイデバイスを含むが、それらに限定されない。種々の実施形態では、ビデオインターフェース１７１０は、種々の方法において、ディスプレイデバイス１７１２と通信する。例えば、種々の実施形態では、ビデオインターフェース１７１０は、ユニバーサルシリアルバス（ＵＳＢ）コネクタ、ＶＧＡコネクタ、デジタルビジュアルインターフェース（ＤＶＩ）コネクタ、Ｓ−ビデオコネクタ、高精細マルチメディアインターフェース（ＨＤＭＩ）インターフェース、ＤｉｓｐｌａｙＰｏｒｔコネクタ、または他のタイプのコネクタを介して、ディスプレイデバイス１７１２と通信する。
【０１４４】
外部構成要素インターフェース１７１４は、コンピューティングデバイス１７００に、外部デバイスと通信させる。種々の実施形態では、外部構成要素インターフェース１７１４は、異なる方法において、実装される。例えば、一例示的実施形態では、外部構成要素インターフェース１７１４は、ＵＳＢインターフェースである。他の例示的実施形態では、コンピューティングデバイス１７００は、Ｆｉｒｅ  Ｗｉｒｅインターフェース、シリアルポートインターフェース、パラレルポートインターフェース、ＰＳ／２インターフェース、および／またはコンピューティングデバイス１７００に、外部構成要素と通信させる、別のタイプのインターフェースである。
【０１４５】
異なる実施形態では、外部構成要素インターフェース１７１４は、コンピューティングデバイス１７００に、異なる外部構成要素と通信させる。例えば、図１７の実施例では、外部構成要素インターフェース１７１４は、コンピューティングデバイス１７００に、外部記憶デバイス１７１６、入力デバイス１７１８、およびプリンタ１７２０と通信させる。他の実施形態では、外部構成要素インターフェース１７１４は、コンピューティングデバイス１７００に、より多いまたは少ない外部構成要素と通信させる。他の例示的タイプの外部構成要素は、スピーカ、電話充電ジャック、モデム、メディアプレーヤドック、他のコンピューティングデバイス、スキャナ、デジタルカメラ、指紋読取機、およびコンピューティングデバイス１７００に接続することができる他のデバイスを含むが、それらに限定されない。
【０１４６】
外部記憶デバイス１７１６は、１つ以上のコンピュータ可読データ記憶メディアを備える、外部構成要素である。コンピューティングデバイス１７００の異なる実装は、異なるタイプの外部記憶デバイスとインターフェースをとる。例示的タイプの外部記憶デバイスは、磁気テープドライブ、フラッシュメモリモジュール、磁気ディスクドライブ、光学ディスクドライブ、フラッシュメモリユニット、ジップディスクドライブ、光ジュークボックス、および１つ以上のコンピュータ可読データ記憶メディアを備える、他のタイプのデバイスを含むが、それらに限定されない。入力デバイス１７１８は、ユーザ入力をコンピューティングデバイス１７００に提供する、外部構成要素である。コンピューティングデバイス１７００の異なる実装は、異なるタイプの入力デバイスとインターフェースをとる。例示的タイプの入力デバイスは、キーボード、マウス、トラックボール、スタイラス入力デバイス、キーパッド、マイクロホン、ジョイスティック、タッチセンサ式ディスプレイ画面、およびユーザ入力をコンピューティングデバイス１７００に提供する、他のタイプのデバイスを含むが、それらに限定されない。プリンタ１７２０は、データを紙に印刷する、外部デバイスである。コンピューティングデバイス１７００の異なる実装は、異なるタイプのプリンタとインターフェースをとる。例示的タイプのプリンタは、レーザプリンタ、インクジェットプリンタ、フォトプリンタ、コピー機、ファックス機、レシートプリンタ、ドットマトリクスプリンタ、またはデータを紙に印刷する、他のタイプのデバイスを含むが、それらに限定されない。
【０１４７】
通信メディア１７２２は、コンピューティングデバイス１７００のハードウェア構成要素間の通信を促進する。異なる実施形態では、通信メディア１７２２は、コンピューティングデバイス１７００の異なる構成要素間の通信を促進する。例えば、図１７の実施例では、通信メディア１７２２は、メモリ１７０２、処理システム１７０４、二次記憶装置デバイス１７０６、ネットワークインターフェースカード１７０８、ビデオインターフェース１７１０、および外部構成要素インターフェース１７１４間の通信を促進する。コンピューティングデバイス１７００の異なる実装では、通信メディア１７２２は、異なる方法において、実装される。例えば、コンピューティングデバイス１７００の異なる実装では、通信メディア１７２２は、ＰＣＩバス、ＰＣＩＥｘｐｒｅｓｓバス、アクセラレーテッドグラフィックスポート（ＡＧＰ）バス、ＩＮＦＩＮＩＢＡＮＤ（登録商標）インターコネクト、シリアルアドバンスドテクノロジーアタッチメント（ＡＴＡ）インターコネクト、パラレルＡＴＡインターコネクト、ファイバチャネルインターコネクト、ＵＳＢバス、小型コンピューティングシステムインターフェース（ＳＣＳＩ）インターフェース、または別のタイプの通信メディアとして、実装されてもよい。
【０１４８】
メモリ１７０２は、種々のタイプのデータおよび／またはソフトウェア命令を記憶する。例えば、図１７の実施例では、メモリ１７０２は、ベーシックインプット／アウトプットシステム（ＢＩＯＳ）１７２４、オペレーティングシステム１７２６、アプリケーションソフトウェア１７２８、およびプログラムデータ１７３０を記憶する。ＢＩＯＳ１７２４は、処理システム１７０４によって実行されると、コンピューティングデバイス１７００に、ブートアップさせる、一式のソフトウェア命令を含む。オペレーティングシステム１７２６は、処理システム１７０４によって実行されると、コンピューティングデバイス１７００に、コンピューティングデバイス１７００のアクティビティおよびリソースの共有を調整する、オペレーティングシステムを提供させる、一式のソフトウェア命令を含む。例示的タイプのオペレーティングシステムは、Ｍｉｃｒｏｓｏｆｔ  ＷＩＮＤＯＷＳ（登録商標）、Ｌｉｎｕｘ（登録商標）、Ｕｎｉｘ（登録商標）、ＡｐｐｌｅＯＳＸ（登録商標）、Ａｐｐｌｅ  ＩＯＳ（登録商標）、ＨＰ  ＷＥＢＯＳ（登録商標）、Ｇｏｏｇｌｅ  ＣＨＲＯＭＥ（登録商標）ＯＳ、Ｇｏｏｇｌｅ  ＡＮＤＲＯＩＤ（登録商標）ＯＳ等を含むが、それらに限定されない。アプリケーションソフトウェア１７２８は、処理システム１７０４によって実行されると、コンピューティングデバイス１７００に、コンピューティングデバイス１７００のユーザにアプリケーションを提供させる、一式のソフトウェア命令を含む。プログラムデータ１７３０は、アプリケーションソフトウェア１７２８によって生成および／または使用される、データである。
【０１４９】
前述の種々の実施形態は、例証のみとして提供され、限定として解釈されるべきではない。当業者は、本明細書に例証および説明される例示的実施形態および用途に従うことなく、種々の修正および変更を行ってもよいことを容易に認識するであろう。例えば、図に示される動作は、実施例に過ぎない。種々の実施形態では、類似動作は、図中に示されるものより多いまたは少ないステップを含むことができる。さらに、他の実施形態では、類似動作は、図に示される動作のステップを異なる順序で行うことができる。
【図４】
0005845522.tif 000009
【図１】
0005845522.tif 000010
【図２】
0005845522.tif 000011
【図３】
0005845522.tif 000012
【図５】
0005845522.tif 000013
【図６】
0005845522.tif 000014
【図７】
0005845522.tif 000015
【図８】
0005845522.tif 000016
【図９】
0005845522.tif 000017
【図１０】
0005845522.tif 000018
【図１１】
0005845522.tif 000019
【図１２】
0005845522.tif 000020
【図１３】
0005845522.tif 000021
【図１４】
0005845522.tif 000022
【図１５】
0005845522.tif 000023
【図１６】
0005845522.tif 000024
【図１７】
0005845522.tif 000025