Share via


포그라운드 애플리케이션 개발

Windows 10 IoT Core 지원되는 언어와 IoT Core에서 지원되는 UWP 및 비 UWP 앱 유형에 대해 알아봅니다.

참고

Visual Studio에서 액세스할 수 있는 RS4 이상의 SDK를 설치하지 않으면 RS5(또는 OpenSSH를 사용하는 RS4) IoT 이미지에 배포할 때 Visual Studio가 암호화 오류를 생성합니다.

응용 프로그램 종류

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

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

UWP(유니버설 Windows 플랫폼)는 Windows 10 IoT Core를 포함하여 모든 버전의 Windows 10에서 공통 앱 플랫폼입니다. UWP는 WinRT(Windows 런타임)의 진화입니다. UWP에 대한 자세한 정보와 개요는 여기에서 확인할 수 있습니다.

Visual Studio는 일반적으로 IoT Core용 UWP 앱을 작성하기 위한 기본 도구입니다. Visual Studio의 호환성 요구 사항에 대한 자세한 목록은 여기에서 찾을 수 있습니다.

기존 UWP 앱

UWP 앱은 다른 Windows 10 버전에서와 마찬가지로 IoT Core에서만 작동합니다. Visual Studio의 단순하고 빈 Xaml 앱은 전화나 Windows 10 PC에서와 마찬가지로 IoT Core 디바이스에 적절하게 배포됩니다. 모든 표준 UWP 언어 및 프로젝트 템플릿은 IoT Core에서 완전히 지원됩니다.

IoT 시나리오를 지원하기 위해 기존 UWP 앱 모델에 몇 가지 추가 사항이 있으며 이를 활용하는 UWP 앱은 매니페스트에 해당 정보를 추가해야 합니다. 특히 이러한 표준 UWP 앱의 매니페스트에 "iot" 네임스페이스를 추가해야 합니다.

매니페스트의 <Package> 특성 내에서 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 앱을 미러링하는 리소스 정책을 얻습니다.

다음 샘플에서는 LED를 깜박이는 C# 백그라운드 앱을 빌드하는 데 필요한 코드를 보여 줍니다.

namespace BlinkyHeadlessCS
{
    public sealed class StartupTask : IBackgroundTask
    {
        BackgroundTaskDeferral deferral;
        private GpioPinValue value = GpioPinValue.High;
        private const int LED_PIN = 5;
        private GpioPin pin;
        private ThreadPoolTimer timer;

        public void Run(IBackgroundTaskInstance taskInstance)        {
            deferral = taskInstance.GetDeferral();
            InitGPIO();
            timer = ThreadPoolTimer.CreatePeriodicTimer(Timer_Tick, TimeSpan.FromMilliseconds(500));

        }
        private void InitGPIO()
        {
            pin = GpioController.GetDefault().OpenPin(LED_PIN);
            pin.Write(GpioPinValue.High);
            pin.SetDriveMode(GpioPinDriveMode.Output);
        }

        private void Timer_Tick(ThreadPoolTimer timer)
        {
            value = (value == GpioPinValue.High) ? GpioPinValue.Low : GpioPinValue.High;
            pin.Write(value);
        }
    }
}

백그라운드 앱에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

비 UWP 앱

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++만 지원됩니다.

프로그래밍 언어

IoT Core는 다양한 프로그래밍 언어를 지원합니다.

In-Box 언어

기존 UWP 언어는 기본적으로 Visual Studio에서 지원됩니다. 모든 In-Box 언어는 UI 및 백그라운드 애플리케이션을 모두 지원합니다.

  • 언어
    • C#
    • C++
    • JavaScript
    • Visual Basic

Arduino Wiring

Arduino Wiring을 사용하려면 Visual Studio 도구 확장> 및 업데이트 관리자에서 "Windows IoT Core 프로젝트 템플릿"을 다운로드해야 합니다. Arduino Wiring은 백그라운드 애플리케이션만 지원합니다. C#, C++또는 Visual Basic을 사용하여 Windows 런타임 구성 요소를 빌드한 다음 다른 언어에서 해당 라이브러리를 참조할 수도 있습니다.

C# 및 Visual Basic(VB)

C# 및 VB는 모두 UWP 앱으로 지원되며 UWP 애플리케이션에서 사용할 수 있는 .NET Framework 부분에 액세스할 수 있습니다. Xaml 및 Background Apps를 사용하여 빌드된 UI 앱을 지원합니다. 지원되는 다른 언어에서 사용할 수 있는 Windows 런타임 구성 요소를 빌드할 수도 있습니다.

샘플:

JavaScript

JavaScript를 사용하여 UI와 Background Apps를 모두 빌드할 수 있습니다. UI 앱은 모든 UWP 버전에서와 동일한 방식으로 작동합니다. Background Apps는 IoT Core의 새로운 기능이지만 간단합니다. 다음 샘플 코드는 JS 새 프로젝트 템플릿의 출력을 보여 줍니다.

// The Background Application template is documented at http://go.microsoft.com/fwlink/?LinkID=533884&clcid=0x409
(function () {
    "use strict";

    // TODO: Insert code here for the startup task

})();

C++

C++를 사용하면 Xaml 또는 DirectX UI 앱뿐만 아니라 UWP 백그라운드 프로젝트 및 비 UI Win32 앱을 빌드할 수 있습니다.

샘플:

참고

C++에서 앱을 작성하려는 사용자의 경우 다운로드 시 UWP C++ 확인란을 검사 합니다.

Visual Studio용 C++

?### Arduino 배선

Arduino Wiring 지원을 통해 IoT 에코시스템의 많은 인기 있는 구성 요소 및 주변 장치를 위한 Arduino Wiring에서 앱을 빌드할 수 있습니다.

Arduino Wiring 프로젝트 가이드는 이러한 앱을 빌드하도록 설정하는 방법에 대한 전체 지침을 제공합니다. 아래에 복사되고 연결된 샘플은 직접 빌드를 시작하는 데 도움이 됩니다. 다른 언어에서 사용할 수 있는 Arduino에서 WinRT 구성 요소를 빌드 할 수도 있습니다.

Blinky 샘플 코드 전체 샘플 코드 및 문서는 샘플 페이지에서 사용할 수 있으며 아래의 전체 코드를 찾을 수 있습니다.

void setup()
{
    // put your setup code here, to run once:

    pinMode(GPIO5, OUTPUT);
}

void loop()
{
    // put your main code here, to run repeatedly:

    digitalWrite(GPIO5, LOW);
    delay(500);
    digitalWrite(GPIO5, HIGH);
    delay(500);
}