Share via


ラボ 1b: イメージへのアプリの追加

アプリ (IoT Core Default アプリなど) を取得してパッケージ化し、デバイスに読み込むことができる新しい Windows IoT Core イメージを作成します。

Note

このプロセスは、バックグラウンドとフォアグラウンドの両方のアプリで同じです。 注意すべき唯一の違いは、1 つのフォアグラウンド アプリのみをスタートアップ アプリとして選ぶことができ、その他すべてのインストール済みアプリはバックグラウンド アプリとして実行されることです。

前提条件または要件

Note

この製造ガイドに従って進むと、ProjectA は C:\IoT-ADK-AddonKit\Source-arm\Products\SampleA にある SampleA イメージに似てきます。

ラボ 1a: 基本イメージの作成」で作成した ProjectA イメージを使用します。

このセクションを完了するには、次のツールも必要です。

  • Visual Studio
  • Windows アセスメント & デプロイメント キット (Windows ADK)
  • Windows IoT Core パッケージ
  • IoT Core ADK アドオン
  • IoT Core PowerShell 環境
  • メモ帳や VS Code などのテキスト エディター

サポートされているアプリケーションの種類

ユニバーサル Windows プラットフォーム (UWP) アプリ

IoT Core は UWP の要となる OS であり、その主要なアプリの種類は UWP アプリです。

ユニバーサル Windows プラットフォーム (UWP) は、Windows 10 IoT Core を含め、あらゆるバージョンの Windows 10 に共通のアプリ プラットフォームです。 Windows ランタイム (WinRT) が進化して UWP となりました。 UWP の詳細および概要については、こちらでご覧いただけます。

従来の UWP アプリ

UWP アプリは、他のWindows 10 エディションで実行したときと同じように、IoT Core 上でも普通に動作します。 Visual Studio で作成した単純な空の XAML アプリは、スマートフォンや Windows 10 PC にデプロイする感覚で、問題なく IoT Core デバイスにデプロイできます。 UWP に使用される標準の言語とプロジェクト テンプレートがすべて IoT Core 上で完全にサポートされます。

IoT のシナリオをサポートするために、従来の UWP アプリモデルに、いくつか追加された要素があり、それらを利用する UWP アプリでは、対応する情報がそのマニフェストに追加されている必要があります。 特に "iot" 名前空間は、そうした標準 UWP アプリのマニフェストに追加されていなければなりません。

マニフェストの属性内に iot という xmlns を定義し、それを IgnorableNamespaces リストに追加する必要があります。 完成した XML は次のようになります。

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
  IgnorableNamespaces="uap mp iot">

バックグラウンド アプリ

IoT Core には、従来の UI アプリに加え、UWP アプリの種類として "バックグラウンド アプリケーション" が新たに追加されました。 これらのアプリケーションには、UI コンポーネントがない代わりに、"IBackgroundTask" インターフェイスを実装するクラスが存在します。 そのクラスは "StartupTask" として登録され、システム ブート時に実行されます。 これらはあくまで UWP アプリであるため、同じ API 群にアクセスでき、また同じ言語でサポートされます。 違いは、UI エントリ ポイントがないという点だけです。

IBackgroundTask の型には、それぞれ固有のリソース ポリシーが割り当てられます。 バックグラウンド アプリがフォアグラウンド UI アプリの二次的なコンポーネントとなっているようなデバイスでは、バッテリー残量とマシンのリソースを節約するために制限は厳しくなるのが一般的です。 IoT デバイスでは、バックグラウンド アプリがデバイスの主要な機能を果たすことも少なくありません。そうした StartupTask には、他のデバイスであればフォアグラウンドの UI アプリに適用されるようなリソース ポリシーが割り当てられます。

バックグラウンド アプリの詳細な情報は、MSDN でご覧いただけます。

非 UWP (Win32) アプリ

IoT Core では、Win32 コンソール アプリや NT サービスなど、従来の Win32 タイプのアプリもある程度サポートされます。 それらのアプリは、Windows 10 デスクトップの場合と同じようにビルド、実行されます。 また、そうしたアプリを Visual Studio で簡単に作成できるよう、IoT Core C++ コンソール プロジェクト テンプレートが用意されています。

こうした UWP 以外のアプリケーションには、主に次の 2 つの制限があります。

  1. "レガシ Win32 UI はサポートされない": クラシック (HWND) ウィンドウを作成するための API は、IoT Core には含まれていません。 CreateWindow() や CreateWindowEx() などのレガシ メソッドを含め、Windows ハンドル (HWND) を扱うメソッドは一切利用できません。 さらに、そのような API に依存するフレームワーク、たとえば MFC、Windows フォーム、WPF は、IoT Core ではサポートされません。
  2. "C++ アプリのみ": IoT Core 上の Win32 アプリの開発でサポートされるのは、現在 C++ のみです。

App Service

アプリ サービスは、他の UWP アプリにサービスを提供する UWP アプリです。 これは、デバイス上にある Web サービスのようなものです。 アプリ サービスは、バック グラウンド タスクとしてホスト アプリで実行され、そのサービスを他のアプリに提供することができます。 たとえば、アプリ サービスによって、他のアプリで使用できるバー コード スキャナー サービスが提供される場合があります。 アプリ サービスでは、同じデバイス上のアプリから呼び出せる UI を持たないサービスを作成できます。また、Windows 10 バージョン 1607 以降では、リモート デバイスからも呼び出せます。 Windows 10 バージョン 1607 以降では、ホスト アプリと同じプロセスで実行されるアプリ サービスを作成できます。

バックグラウンド アプリ サービスの作成と、uwp アプリからのサービス (また、バックグラウンド タスク/サービス) の使用に関する追加情報は、こちらを参照してください。

サービス、拡張機能、パッケージでアプリを拡張する

Windows 10 には、アプリを拡張したり、コンポーネント化したりするための数多くのテクノロジがあります。 次の表は、要件に応じてどのテクノロジを使う必要があるかを判断するのに役立ちます。 その後で、シナリオとテクノロジについて簡単に説明します。

シナリオ リソース パッケージ アセット パッケージ オプション パッケージ フラット バンドル アプリの拡張機能 App Service ストリーミング インストール
サードパーティー コード プラグイン ✔️
インプロセス コード プラグイン ✔️
UX アセット (文字列/画像) ✔️ ✔️ ✔️ ✔️ ✔️
オンデマンド コンテンツ
(例: 追加の階層)
✔️ ✔️ ✔️
ライセンスと取得の分離 ✔️ ✔️ ✔️
アプリ内取得 ✔️ ✔️
インストール時間の最適化 ✔️ ✔️ ✔️ ✔️
ディスク使用量の削減 ✔️ ✔️
パッケージ化の最適化 ✔️ ✔️ ✔️
公開までの時間の短縮 ✔️ ✔️ ✔️ ✔️

appx パッケージを作成する

最初の手順では、IoT デバイス上で実行するユニバーサル Windows プラットフォーム (UWP) アプリケーションを作成します。 UWP アプリケーションを既に作成してテストした場合は、このセクションをスキップできます

  1. UWP アプリを作成します。 これは、Appx パッケージとして保存された、IoT Core 用に設計された任意のアプリです。 この例では、IoT Core の既定のアプリを使用しています。

  2. Visual Studio で、アプリケーションを Appx パッケージとして保存します。 これを行うには、[プロジェクト] > [ストア] > [アプリ パッケージの作成]>[I want to Create Packages for Sideloading](サイドローディング用のパッケージを作成する)>[次へ] をクリックします

  3. [出力先] として C:\DefaultApp (または、空白を含まないその他のパス) を選びます。

  4. [Generate app bundle:](アプリ バンドルの生成:) に [なし] を選びます

  5. [作成] をクリックします。

アプリ パッケージ ウィンドウのスクリーンショット

Visual Studio では、選択したアーキテクチャ (Arm、x86、x64) の指定した場所に Appx ファイルが作成されます。 この例では、このファイルは C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test です

  1. 省略可能: アプリをテストします。 プロジェクトのビルドの一環としてアプリを既にテストしている可能性があることにご注意ください。

AppX のパッケージ化

次の手順では、Appx ファイルをパッケージ化します。これにより、Windows ADK を使用してカスタマイズおよびビルドできるようになります (FFU イメージをビルドする場合)。

  1. IoTCorePShell.cmdを開きます。 管理者として実行するように求めるメッセージが表示されます。

  2. New-IoTAppxPackage を使用して Appx のパッケージを作成します。 ファイル パスの場所とパッケージ名を Appx パッケージに置き換えます。 この例では、コマンドは次のようになります。

    Add-IoTAppxPackage "C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga Appx.MyUWPApp
    
    (or) newappxpkg "C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga Appx.MyUWPApp
    

    Note

    fga パラメーターは、Appx ファイルがフォアグラウンド アプリケーションであることを示します。 (bga パラメーターを使用して) パッケージをバックグラウンド アプリケーションとして指定しており、イメージ内に他のフォアグラウンド アプリケーションがない場合は、起動時にシステムがスタックします (スピン ボタンが無期限に表示されます)。

    これにより、C:\MyWorkspace\Source-<arch>\Packages\Appx.MyUWPApp に新しいフォルダーが作成され、appx ファイルとその依存関係がコピーされて、customizations.xml file およびパッケージのビルドに使用される package xml ファイルが生成されます。

    Appx に依存関係がある場合は、このコマンドを実行するときに、Dependencies サブディレクトリが Appx と同じ場所に存在する必要があることにご注意ください。 これを含めないと、FFU イメージをビルドするときにエラーが発生します。

    また、FeatureID APPX_MYUWPAPPC:\MyWorkspace\Source-<arch>\Packages\OEMFM.xml ファイルに追加されます。

  3. IoT Core シェル環境から、パッケージを .CAB fileusing New-IoTCabPackage にビルドできるようになりました。

    New-IoTCabPackage Appx.MyUWPApp
    (or) buildpkg Appx.MyUWPApp
    

    これにより、パッケージが C:\MyWorkspace\Build\<arch>\pkgs\<oemname>.Appx.MyUWPApp.cab の下にある .CAB ファイルにビルドされます。

プロジェクトの構成ファイルを更新する

この段階で、アプリを FFU イメージ ビルドに含めるようにプロジェクト構成ファイルを更新できます。

  1. Add-IoTProductFeature を使用してアプリ パッケージの FeatureID を追加します。

    Add-IoTProductFeature ProductA Test APPX_MYUWPAPP -OEM
    (or) addfid ProductA Test APPX_MYUWPAPP -OEM
    

    これにより、APPX_HELLOWOLRDAPP という FeatureID が指定した製品の Test OEMInput XML ファイル (C:\IoT\Workspaces\ContosoWS\Source-arm\<product name>\TestOEMInput.xml ファイル) に追加されます。

  2. Remove-IoTProductFeature を使用してサンプル テスト アプリ IOT_BERTHA を削除します

    Remove-IoTProductFeature ProductA Test IOT_BERTHA
    (or) removefid ProductA Test IOT_BERTHA
    

イメージをビルドしてテストする

IoT Core PowerShell 環境から、(New-IoTCabPackage を使用して) 作業フォルダー内のすべてのパッケージをビルドすることにより、製品を作成する環境を準備します。

New-IoTCabPackage All
(or) buildpkg all

ラボ 1a:基本イメージの作成」に指定されているように、FFU イメージをもう一度ビルドします。 次のコマンドを使用できます。

New-IoTFFUImage ProductX Test
(or)buildimage ProductX Test 

FFU ファイルがビルドされたら (この時点でアプリが含まれています)、ラボ 1a で指定されているように、これをハードウェア デバイスにフラッシュできます。

IoT デバイスへの appx ファイルのインストール方法については、アプリのインストールに関するドキュメントで詳細を確認してください。

IoT Core デバイス上のアプリの更新

次のステップ

ラボ 1c: イメージへのファイルおよびレジストリ設定の追加