Как вы знаете, АстроСофт разработал новый корпоративный коммуникатор на базе Skype for Business — EasyLy, который дополняет функционал Skype for Business. Например, может «по-человечески» сохранять историю переписки, как это делают все «приличные» мессенджеры, умеет отправлять сообщения в оффлайн, позволяет упорядочить контакты и ещё много всего, чего не хватало в Skype for Business. И когда появилась возможность поделиться десктоп-приложением с помощью Windows Store, мы решили этой возможностью воспользоваться. В статье мы расскажем, как это происходило и чего нам это стоило.
Про сам процесс разработки и про то, чего нам стоила идея работы со SfB в режиме Suppression Mode (подавление SfB), читайте здесь.
EasyLy разрабатывался как настольное приложение WPF & Lync SDK для Windows, и, конечно же, мы стремились поделиться своей разработкой со всем миром.
Публикация «классических» десктопных приложений (без метро-интефейса) стала доступна не так давно, опыта у нас совсем не было, поэтому мы начали изучать, как загрузить наше приложение в Windows Store.
Вся суть заключалась в том, чтобы с помощью Desktop Application Converter преобразовать приложение в AppX пакет для UWP (Universal Windows Platform), чтобы затем его можно было загрузить в Windows Store.
Нужно заметить, что не любое настольное приложение можно разместить в магазине. Оно должно удовлетворять требованиям, описанным в этой статье.
Важно: версия билда операционной системы должна в точности совпадать с версией образа BaseImage-xxxxx.wim.
После прочтения статьи о том, как работать с конвертером, мы разработали систему скриптов для Command Prompt и Power Shell, которые генерировали AppxManifest.xml и конечный пакет AppX.
И вот, наконец, всё было готово для загрузки EasyLy.appx в Windows Store. Честно говоря, мы не рассчитывали на то, что процесс размещения приложения окажется так растянут по времени, но в общей сложности у нас на это ушло примерно два месяца. Мы также не ожидали, что впереди нас будут ждать странные ошибки, с которыми придётся бороться совместно с сотрудниками Microsoft. Эмоции команды были на переделе, но всё же нам это удалось. О том, что это были за ошибки и как мы их устраняли, читайте ниже.
При первой попытке публикации в Windows Store мы получили четыре ошибки.
Package acceptance validation error: You don't have permissions to specify the following namespaces in the appx manifest file of the package EasyLy.signed.appx: schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities
Мы исправили ошибку №3 с версией. Оказалось, что запрещено иметь ревизию версии (последний разряд версии), отличную от нуля (major.minor[.build[.revision]]). Что ж, это было несложно.
В дальнейшем мы отказались и от версии билда: DesktopAppConverter.exe … -Version 1.61.0.0
Была исправлена ошибка №1 с именем сертификата в AppxManifest.xml:
Было: <PublisherDisplayName>GROVETY, INC</PublisherDisplayName> Стало: <PublisherDisplayName>GROVETY INC</PublisherDisplayName> |
Если честно, было странно, что это исправление сработало, и непонятно, с каким значением происходит сравнение имени сертификата, т.к. в свойствах AppX пакета в разделе “Цифровые подписи” имя сертификата было как раз с запятой, а к интерфейсу выкладывания в Windows Store разработчики доступа не имели (чтобы посмотреть, как там выглядит имя издателя и что оно вообще там присутствует), потому что публикация осуществлялась отделом маркетинга.
После этого остались ошибки, которые говорили о какой-то проблеме, связанной с аккаунтом, через который было невозможно выложить AppX.
Что делать с этими ошибками, нам подсказал один из авторов habrahabr'а — @asommer. Как оказалось, все новые десктопные приложения требуют ручной валидации — и для этого нужно написать в техподдержку.
Мы оставили заявку здесь, и уже через несколько дней с нами связался сотрудник Microsoft.
Мы собрали конференцию по Skype for Business, где рассказали, что EasyLy — это десктопное приложение, которое расширяет функционал Skype4B, например умеет сохранять историю диалогов. И по результатам встречи отправили APPX-файл с приложением для проверки.
Также параллельно пришлось подписать ещё одно соглашение с Microsoft — Centennial Early Adopter Program Addendum
Общение было затруднено тем, что сотрудники Microsoft находились в Америке, и разница во времени составляла 10 часов. В результате — приходилось общаться поздно вечером, а ждать ответ на письма – сутки.
Через некоторое время мы получили письмо от Microsoft. У них возникли вопросы, как EasyLy интегрируется со Skype for Business. Им было необходимо удостовериться, что EasyLy сможет нормально работать со следующей версией Skype for Business.
В общем, нужно было подготовить техническое описание на английском. При этом договорились, что если что-то останется неясным, то будем снова устраивать онлайн-митинг.
К счастью, нашего описания оказалось достаточно, и сотрудник Microsoft нас заверил, что процесс одобрения идет.
Мы не ожидали, что в Microsoft ещё будут проводиться какие-то тесты над нашим приложением. Представитель Microsoft сообщил, что наше приложение утверждено для Windows Store, но не прошло CARE-тест. К тому же, он указал на возможность воспользоваться дополнительными функциями API, доступными только для конвертируемых приложений. Из этих возможностей мы выбрали автозапуск при логине пользователя и добавили в AppxManifest.xml в элемент <Applicatoin> такой раздел:
<Extensions>
|
Чуть подробнее о тесте CARE. Судя по отчёту прохождения, который они нам прислали, проверяются следующие вещи:
Test for Drivers and Services (Drivers cannot be installed)
Test for DDE Exec registry verbs (DDE Exec warning)
Validate Appx Manifest (Application Identity Name can't be empty)
Validate security policy settings (EXE can not request admin elevation, EXE can not request UIAccess)
Validate PE integrity (PE Files must be validly signed)
EasyLy провалился на втором пункте. Программа обращалась к нестандартным ключам реестра. Это было исправлено.
Теперь, когда все проблемы были решены, мы предвкушали радость победы и долгожданной загрузки EasyLy в Windows Store. Но удача снова была не на нашей стороне, и появились очередные ошибки:
Такое ощущение, что компания Microsoft решила заботливо не сообщать о всех ошибках сразу, а выдавать их по частям, и каждую следующую часть показывать только после исправления всех ошибок в предыдущей. Оно, может, и правильно, потому что если бы мы увидели все ошибки сразу, вероятность того, что мы решили бы продолжать, была бы определенно меньше. Но теперь, когда половина пути была пройдена, отступать назад уже не хотелось.
В Microsoft ответили следующее:
Было: DesktopAppConverter.exe … -Publisher «CN=GROVETY»
Стало: DesktopAppConverter.exe … -Publisher «CN=GROVETY INC» -
PackageDisplayName «EasyLy Corp» -AppDisplayName «EasyLy» -AppExecutable «EasyLy.exe»
После этих изменений ушла ошибка №4.
Пытаясь устранить ошибку №1, мы добавили в параметры конвертера -PackageName «GROVETYINC.EasyLyCorp», но получили непонятную ошибку при конвертации:
Error: PowerShell Error Record: Could not find a part of the path. PowerShell Stack Trace: at <ScriptBlock> C:\Program Files\WindowsApps\Microsoft.DesktopAppConverter_1.0.1.0_x64__8wekyb3d8bbwe\DesktopAppConverter.ps1: line 719 at <ScriptBlock>, <No file>: line 1 Inner Exception[0]: System.IO.DirectoryNotFoundException: Could not find a part of the path. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileInfo.MoveTo(String destFileName) at Microsoft.PowerShell.Commands.FileSystemProvider.MoveFileInfoItem(FileInfo file, String destination, Boolean force, Boolean output) Inner Exception Stack Trace[0] at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileInfo.MoveTo(String destFileName) at Microsoft.PowerShell.Commands.FileSystemProvider.MoveFileInfoItem(FileInfo file, String destination, Boolean force, Boolean output) |
Также опытным путём было замечено, что если PackageNamе имеет длину 19 символов или меньше, то ошибки не возникает, а имя GROVETYINC.EasyLyCorp имеет длину 21 символ.
Пытаясь устранить ошибку №3, мы пробовали разные варианты с сертификатом:
Но наш сертификат имеет именно такой вид: CN=«GROVETY, INC», O=«GROVETY, INC», L=Wilmington, S=Delaware, C=US, поэтому ожидаемо, что мы получали ошибку при подписывании:
По поводу третьей ошибки Microsoft сообщил, что в Windows Store процесс подписывания автоматический и не нужно пытаться подписать AppX самим. Таким образом, ошибка №3 ушла.
Насчёт ошибки №1 нам сообщили, что, возможно, это баг конвертера, связанный с длиной параметра PackageName, и предложили workaround:
a. Укоротите PackageName, насколько нужно, и добавьте легко узнаваемы флаг, например, EasyLyChangeMe. b. Соберите appx-пакет. c. Откройте пакет makeappx unpack /p “[appx path and file]” /d “[Unpack folder]” d. Вручную измените PackageName на GROVETYINC.EasyLyCorp. <Identity Name="xxxx" ProcessorArchitecture="x86" Publisher="CN=pppp" Version="1.0.0.0" /> В строке сверху в манифест файле атрибут Name должен совпадать со значением Name, на странице приложения в Windows Store в разделе APP management -> App Identity e. Пересоберите appx пакет. makeappx pack /p “[new appx path and file]” /d “[Unpack folder]” |
DesktopAppConverter.exe -ExpandedBaseImage "C:\ProgramData\Microsoft\Windows\Images\baseImage-14393" -Installer "installer\easyly_v1.61_setup.exe" -Version 1.61.0.0 -InstallerArguments "/verysilent" -Destination "out" -PackageName "GROVETYINC.EasyLy" -PackageDisplayName "EasyLy Corp" -AppDisplayName "EasyLy" -AppExecutable "EasyLy.exe" -AppId "GROVETYINC.EasyLyCorp" -Publisher "CN=71A49F4D-5C79-40F1-A333-B79F06F50E03" -PackagePublisherDisplayName "CN=GROVETY INC" -Verbose |
Счастливый конец
В результате всех этих действий мы получили пакет, который прошёл валидацию! И — ура! Можно было отправить наш EasyLy в магазин.
А дальше всё было просто – заполнить необходимую информацию, загрузить скриншоты и проставить сумму, которую мы хотим получать за продукт, и, через несколько суток, он появился в магазине.
Источник: https://habrahabr.ru/post/318072/