다음을 통해 공유


랩 1b: 이미지에 앱 추가

이제 앱(예: IoT Core Default 앱)을 가져와서 패키지하고 디바이스에 로드할 수 있는 새 Windows IoT Core 이미지를 만듭니다.

참고

이 프로세스는 백그라운드 앱과 포그라운드 앱 모두에서 동일합니다. 알아야 할 유일한 차이점은 하나의 포그라운드 앱만 시작 앱으로 선택할 수 있고 설치된 다른 모든 앱은 백그라운드 앱으로 실행된다는 것입니다.

필수 조건/요구 사항

참고

이 제조 가이드를 진행하면서 ProjectA는 C:\IoT-ADK-AddonKit\Source-arm\Products\SampleA에 있는 SampleA 이미지와 유사해지기 시작합니다.

랩 1a: 기본 이미지 만들기에서 만든 ProjectA 이미지를 사용합니다.

이 섹션을 완료하려면 다음 도구도 필요합니다.

  • Visual Studio
  • Windows ADK(평가 및 배포 키트)
  • Windows IoT Core 패키지
  • IoT Core ADK 추가 기능
  • IoT Core Powershell 환경
  • 메모장 또는 VS Code와 같은 텍스트 편집기

지원되는 애플리케이션 유형

UWP(유니버설 Windows 플랫폼) 앱

IoT Core는 UWP 중심 OS이며 UWP 앱은 기본 앱 유형입니다.

UWP(유니버설 Windows 플랫폼)는 Windows 10 IoT Core를 포함하여 모든 버전의 Windows 10에서 공통 앱 플랫폼입니다. UWP는 WinRT(Windows 런타임)의 진화입니다. 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">

배경 앱

기존 UI 앱 외에도 IoT Core는 "백그라운드 애플리케이션"이라는 새로운 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 애플리케이션에는 두 가지 주요 제한 사항이 있습니다.

  1. 레거시 Win32 UI 지원 없음: IoT Core에는 클래식(HWND) Windows를 만드는 API가 포함되어 있지 않습니다. CreateWindow() 및 CreateWindowEx()와 같은 레거시 메서드 또는 Windows 핸들(HWND)을 처리하는 다른 메서드는 사용할 수 없습니다. 이후 MFC, Windows Forms 및 WPF를 비롯한 이러한 API에 의존하는 프레임워크는 IoT Core에서 지원되지 않습니다.
  2. C++ 앱만 해당: 현재 IoT Core에서 Win32 앱 개발에는 C++만 지원됩니다.

App Service

앱 서비스는 다른 UWP 앱에 서비스를 제공하는 UWP 앱입니다. 디바이스에서 앱 서비스는 웹 서비스와 비슷합니다. 앱 서비스는 호스트 앱에서 배경 작업으로 실행되며 다른 앱에 서비스를 제공할 수 있습니다. 예를 들어, 앱 서비스는 다른 앱에서 사용할 수 있는 바코드 스캐너 서비스를 제공할 수 있습니다. Windows 10, 버전 1607부터 앱 서비스를 통해 앱이 동일한 디바이스에서 호출할 수 있는 UI 없는 서비스를 원격 디바이스에 만들 수 있습니다. Windows 10 버전 1607부터 호스트 앱과 같은 프로세스에서 실행되는 앱 서비스를 만들 수 있습니다.

백그라운드 App Service 만들기 및 uwp 앱의 서비스 사용(백그라운드 작업/서비스 포함)에 대한 추가 정보는 여기에서 확인할 수 있습니다.

서비스, 확장 및 패키지로 앱 확장

Windows 10에는 앱을 확장하고 구성 요소화하는 여러 기술이 있습니다. 이 표는 요구 사항에 따라 사용해야 하는 기술을 결정하는 데 도움이 됩니다. 표 다음에 시나리오에 대한 간략한 설명이 이어집니다.

시나리오 리소스 패키지 자산 패키지 선택적 패키지 플랫 번들 앱 확장 App Service 스트리밍 설치
타사 코드 플러그 인 ✔️
In-proc 코드 플러그 인 ✔️
UX 자산(문자열/이미지) ✔️ ✔️ ✔️ ✔️ ✔️
주문형 콘텐츠
(예: 추가 수준)
✔️ ✔️ ✔️
개별 라이선싱 및 취득 ✔️ ✔️ ✔️
앱에서 바로 취득 ✔️ ✔️
설치 시간 최적화 ✔️ ✔️ ✔️ ✔️
디스크 사용 공간 감소 ✔️ ✔️
패키지 최적화 ✔️ ✔️ ✔️
게시 시간 줄이기 ✔️ ✔️ ✔️ ✔️

appx 패키지 만들기

첫 번째 단계는 IoT 디바이스에서 실행할 UWP(유니버설 Windows 플랫폼) 애플리케이션을 만드는 것입니다. UWP 애플리케이션을 이미 만들고 테스트한 경우 이 섹션을 건너뛸 수 있습니다.

  1. UWP 앱 만들기 이는 Appx 패키지로 저장된 IoT Core용으로 설계된 모든 앱일 수 있습니다. 이 예에서는 IoT Core Default 앱을 사용하고 있습니다.

  2. Visual Studio에서 애플리케이션을 Appx 패키지로 저장합니다. 프로젝트 > 스토어 > 앱 패키지 만들기>테스트 로드를 위해 패키지를 만들려고 함>다음을 클릭하면 됩니다.

  3. C:\DefaultApp(또는 공백이 포함되지 않은 다른 경로)로 출력 위치를 선택합니다.

  4. 앱 번들 생성: 안 함을 선택합니다.

  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
    

    참고

    fga 매개 변수는 Appx 파일이 포그라운드 애플리케이션임을 나타냅니다. 패키지를 백그라운드 애플리케이션(bga 매개 변수 사용)으로 지정하고 이미지에 다른 포그라운드 애플리케이션이 없는 경우 부팅할 때 시스템이 멈추게 됩니다(스피너를 무기한 표시).

    이렇게 하면 C:\MyWorkspace\Source-<arch>\Packages\Appx.MyUWPApp에 새 폴더가 만들어지고, appx 파일과 해당 종속성이 복사되고, 패키지를 빌드하는 데 사용되는 패키지 xml 파일과 더불어 customizations.xml 파일이 만들어집니다.

    Appx에 종속성이 있는 경우 이 명령을 실행할 때 Appx와 동일한 위치에 있어야 하는 종속성 하위 디렉터리가 필요합니다. 이를 포함하지 않으면 FFU 이미지를 빌드할 때 오류가 발생합니다.

    이렇게 하면 C:\MyWorkspace\Source-<arch>\Packages\OEMFM.xml 파일에 FeatureID APPX_MYUWPAPP도 추가됩니다.

  3. 이제 IoT Core 셸 환경에서 New-IoTCabPackage를 사용하여 패키지를 .CAB 파일로 빌드할 수 있습니다.

    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가 지정된 제품의 테스트 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: 이미지에 파일 및 레지스트리 설정 추가