Spiiin's blog

Сборка и отладка приложений Windows Store на устройстве с минимальным использованием Visual Studio

Потребуется:
Microsoft Visual Studio 2012 Express for Windows 8
Windows SDK for Windows 8

1. Собрать приложение под архитектуру ARM.
Ключей для выбора выходной архитектуры нет, нужно использовать компилятор из папки winSdkDir/bin/x86_arm.

не забыть добавить опцию -D”_DEBUG” компилятору чтобы работала OutputDebugString.

не забыть отключить в DirectX creationFlags D3D11_CREATE_DEVICE_DEBUG, если не хочется устанавливать на девайс debug версию библиотек DirectX (я её вообще не нашел).

2. Слинковать как приложение магазина.
winSdkDir/bin/x86_arm/link.exe /MACHINE:ARM /APPCONTAINER
не забыть добавить в пути к либам /x86_arm/

3. Создать манифест приложения
http://msdn.microsoft.com/en-us/library/windows/apps/br211476.aspx

не забыть добавить в него раздел Capabilities и задекларировать набор возможностей, которые будет использовать приложение. В документации к WinRT API обычно указывается, для каких вызовов необходимо добавлять capability.

для directx-приложений, использующих xaml-контролы, EntryPoint в манифесте должно быть установлено в YourAppClassName.App, где YourAppClassName - имя вашего класса приложения - наследника Windows::UI::Xaml::Application.

4. Упаковка в приложения в пакет.
Используется утилита MakeAppx из набора Windows 8 SDK. MakeAppx.exe pack /d . /p YourApp.appx Выходной формат - обычный zip-архив. Еще при упаковке проверяется правильность некоторых разделов манифеста.

5. Генерация сертификата.
Без подписывания приложения сертификатом оно не запустится. http://msdn.microsoft.com/en-us/library/windows/desktop/jj835832%28v=vs.85%29.aspx расписано в статье:

5.1. генерируем корневой самоподписанный сертификат. makecert.exe -n “CN=name” -r -a sha1 -sv name.pvk name.cer –ss root

5.2. генерируем клиентский сертификат для подписывания, подписываем его корневым сертификатом и устанавливаем в раздел личный сертификатов: makecert -a sha1 -sk “name” -iv name.pvk -n “CN=name” -ic name.cer -sr currentuser client.name.cer -ss My

5.3. смотрим sha-1 thumbprint клиентского сертификата с помощью PowerShell PS C:> dir cert:\CurrentUser\My

не забыть установить корневой сертификат на устройстве с правами администраторa
certutil.exe -addstore root My.cer

не забыть убедиться что имя издателя совпадает с полученным в Windows Store.

убедиться, что имя сертификата (“CN=name”) совпадает с тем, которое указано в манифесте приложения ( )

6. Подписывание приложения.
signtool.exe sign /fd sha256 /sha1 YOUR_CERT_THUMBPRINT YourApp.appx YOUR_CERT_THUMBPRINT - отпечаток sha-1 вашего сертификата, подсмотренный в пункте 5.3.

7. Копирование скрипта установки из Visual Studio.
Собрать пакет для магазина Windows из бесплатной Visual Studio нельзя. В платных версиях в контекстном меню проекта есть пункт “Проект -> Магазин -> Создать пакеты приложения”. В выходной директории будет лежать запакованный appx-пакет приложения, и еще несколько файлов, один из которых надо скопировать в папку со своим приложением - Add-AppDevPackage.ps1. Это командный файл PowerShell, который можно открыть почитать, но нельзя править, потому что он защищён подписью (комментарий в конце файла). Без неё скрипт на устройстве не выполнится, так как он вызывает команды, недоступные простым смертным разработчикам.

8. Вычисление и копирование DLL зависимостей для приложения.
Для отладки на устройство также необходимо вместе с пакетом приложения устанавливать набор библиотек для отладки из visual studio, собранные в package. Выяснить, от чего зависит бинарник можно с помощью утилиты dumpbin из winSDK: dumpbin /dependents YourApp.exe Пакет с зависимостями можно взять из той же папки, что и скрипт установки, сгенерённый Visual Studio - скопировать всю папку Dependencies оттуда в папку со своим приложением (в подпапке arm можно распаковать appx, чтобы убедиться в том, что внутри лежат нужные версии DLL - дебажные или релизные).

Не забыть добавить в манифест приложения раздел Dependencies и указать имя файла с зависимостями, иначе скрипт установки будет ругаться на несоответствие:*

9. Настройка Surface.
Устанавливать приложение можно по сети из расшаренной папки (минимально в ней должны быть - подписанное приложение, скрипт установки, папка с зависимостями и сертификат разработчика). Для запуска в контекстном меню для установочного скрипта выбрать Run with PowerShell, но так окно powershell будет закрываться до того, как можно будет посмотреть результат работы, чтобы выяснить причины возникающих ошибок (а любой программист электронно-вычислительных машин должен твёрдо усвоить, что ошибки будут). Поэтому лучше создать командный файл, запускающий powershell и установить разрешение для запуска пользователем удалённых скриптов: PS C:> Set-ExecutionPolicy Unrestricted -scope CurrentUser

10. Установка приложения
В powershell указываем имя скрипта для выполнения. На устройствах без клавиатуры команды в командную строку вводить можно либо прямо с экранной клавиатуры (на которой нет стрелочки вверх для использования истории команд),либо втыкнуть в usb порт обычную клаву. выглядит по идиотски^w гиковски. Если установить пакет получилось с первого раза, ура! Иначе проверять сертификаты, манифесты и зависимости.

11. Установка на устройство средства удалённой отладки.
Remote debugging tools дальше просто запустить и нажать кнопку “Настроиться”, чтобы отладчик добавил себя в исключения файрвола.

12. Отладка.
В меню Visual Studio выбрать “отладка -> отладка установленных пакетов” и вбить имя устройства для отладки, выбрать пакет приложения и нажать “начать”. Если всё было сделано правильно, отладочный вывод приложения будет перенаправляться на консоль Visual Studio.