http://habrahabr.ru/post/243007/
Привет, Хабр!
Хочу поделиться историей, как я, непрограммист, смог написать своё первое мобильное приложение благодаря (или вопреки ему) MS Visual Studio 2013 и даже опубликовать его в магазине Windows Phone. Прошу учесть читателей, что я максимально неопытный непрограммист, который мало что умеет в этой области, поэтому если я решал какие-то проблемы не так изящно, как их можно было бы решить, то особо не глумитесь – это мой первый опыт в подобном деле.
Началось всё с того, что, учась на курсе Cyber Security в Таллиннском Техническом Университете я прослушал курс VB.NET в рамках работы с Windows Forms. Затем где-то случайно прочитал, что MS Visual Studio 2013 позволяет создавать мобильные приложения не только на каком-нибудь загадочном для меня C# или Java, а ещё и на VB.NET.
«Вот это шанс – так я же мегаспец в VB.NET» – подумалось мне тогда. Срочно воспользовавшись студенческой лицензией, я скачал себе MS Visual Studio 2013 и преступил к
таинству созданию своего первого приложения.
На курсе нам рассказывали, что самое главное не скилл, а идея. Скилловых программистов много, а успешных приложений мало. Тот же Rovio несколько раз был банкротом и выпустил сотню никому не нужных игр, пока не дошёл до Angry Birds. Вот тут у меня всё было в порядке — скиллов ноль (как потом выяснилось), зато давно была идея. Идея проста – как Flappy Bird.
Итак, я открыл MS Visual Studio 2013 – New Project – Visual Basic — Store Apps – Windows Phone – Balnk App (Windows Phone).
Вот тут я совершил первую свою ошибку, позже поясню в чём она заключалась.
Передо мной открылся эмулятор телефона с непонятным кодом сбоку, и страница с кодом похожим на VB.NET. Ок – дальше что? Это не похоже на Forms, что-то тут не так надо почитать мануалы. Как оказалась у Microsoft создана
широчайшая база знаний для поддержки разработчиков: подробнейшие видеоуроки и письменные мануалы, от начинающих до профессионалов.
На этих курсах всё в деталях расписано от того как установить кнопку до того, как обращаться в облако и хранить там базы данных. Тут Microsoft от меня большой респект, даже я разобрался – отлично отнеслись к своим разработчикам, видно, что это для них важно. Начал смотреть, читать – стало приходить понимание как это всё работает, а также понимание, что это не Windows Forms и надо начинать учиться заново. Лектор в видеоуроках отлично рассказывал и подробно описывал все действия для… С# (упс, пичалька). Но мне этого хватило, чтобы понять концепцию и создать пару страничек с переходами в моём приложении.
Дальше начался кошмар! Куча команд, к которым я привык просто не существовали в VB.NET для Windows Phone, они были заменены на альтернативные! Microsoft, really?
Мне пришлось с нуля учить весь синтаксис и разделять в голове один VB.NET и другой VB.NET, но для Windows Phone. Например, в VB.NET есть команда для определения/задания координат объекта в пространстве. В Windows Forms она такая:
Image.Left=100 //задаём
i=Image.Left //определяем
В Windows Phone:
Canvas.SetLeft(Image, i) //задаём
Canvas.GetLeft(Image) //определяем
Неопытному непрограммисту очень сложно сходу понять, почему его Image.Left=100 не работает, ведь всё же правильно. В итоге тратишь время, порой много, на поиск решений.
Приведу ещё пару примеров, может кому-то будет полезно, если Google приведёт его сюда.
Забудьте всё, что вы знали про Timer. Объекта Timer нет. Но его можно создавать через код и называется DispatcherTimer (Microsoft, really?) Сперва его надо создать в коде и задать интервал:
DispatcherTimer = New Windows.UI.Xaml.DispatcherTimer()
AddHandler DispatcherTimer.Tick, AddressOf dispatcherTimer_Tick
DispatcherTimer.Interval = New TimeSpan(0, 0, 0, 0, 10)
Затем создать событие dispatcherTimer_Tick – чтобы это всё выяснить, у меня ушло 2 дня. Так как прямым гуглением не находилось ничего. Только крик о помощи на
http://stackoverflow.com привёл меня к нужному решению.
После чего я стал более вдумчиво читать
страничку знаний Microsoft и искать именно по ней. Тут уже стал находить ответы самостоятельно, благо там сделано очень удобно – искомое решение предоставлено на нескольких языках программирования одновременно. Чувствуется забота о разработчиках, хоть и с горьким привкусом.
Далее мне нужно было обратиться к веб-ресурсу, где лежал текстовый файл, чтобы взять оттуда одну строчку. Всё просто: иду и
http://msdn.microsoft.com нахожу нужное решение, но… Оно не работает. Нет, нет, я что-то сделал не так. Всё стираю делаю по новой – опять ошибка. Не узнаются команды StreamReader и GetResponse. Как же так, вот же они прям на сайте Microsoft! Ну ладно уж, на
http://stackoverflow.com мне точно помогут. Но и там говорят, что всё правильно сделано и должно работать как надо. Паника и слёзы! Забросил всё на неделю.
Вернулся и вижу – один из пользователей Stackoverflow спросил, а не пишу ли я на VB.NET, который не Silverlight? Первая моя реакция была:
О чём вообще речь, что это такое, зачем он меня пугает?
Оказалось, существует не только VB.Net, VB.Net for Windows Phone, но ещё и VB.Net for Windows Phone (Silverlight), все они в разной степени отличаются по синтаксису.
Microsoft, WTF?
Посмотрев внимательно на
http://msdn.microsoft.com я увидел, что практически всё, что там описывается — всё для Silverlight и мне просто везло до этого момента, что синтаксис более менее совпадал. Вот такую ошибку я совершил при создании своего проекта, о чём писал выше – выбрал Balnk App (Windows Phone), а не Balnk App (Windows Phone Silverlight).
Бросить и начать всё сначала? Нет, слишком много бессонных ночей было убито на создание того, что есть и я решил не сдаваться.
Долгим гуглением и хождением по форумам разного разлива я нашёл решения для чтения текста из файлика, который лежит в Web, может кому пригодится:
Dim httpClient As HttpClient = New HttpClient()
Dim form As New MultipartFormDataContent()
Dim getUrl As String = "http://website/test.txt"
Dim response As HttpResponseMessage = Await httpClient.PostAsync(getUrl, form)
responseText = Await response.Content.ReadAsStringAsync()
Далее возникла проблема с показом сообщения пользователю – элементарный MessageBox. В VB.Net (Windows Forms) он делается одним способом в VB.Net (Windows Phone) – другим, в VB.Net (Windows Phone Silverlight) – третьим. Но мы то уже взрослые, привыкшие и нас это не пугает. Две ночи и решение найдено:
Async Function ShowMyDialog() As Task(Of Boolean)
Dim result As Boolean = False
Dim dialog As New Windows.UI.Popups.MessageDialog(rl.GetString("Try_again"), rl.GetString("Game_Over"))
dialog.Commands.Add(New Windows.UI.Popups.UICommand(rl.GetString("Yes"),
Sub(command)
//some action
End Sub))
dialog.Commands.Add(New Windows.UI.Popups.UICommand(rl.GetString("No"),
Sub(command)
//some action
End Sub))
dialog.DefaultCommandIndex = 0
dialog.CancelCommandIndex = 1
Await dialog.ShowAsync()
'
Return result
End Function
Не так-то просто, как видно. И вот, пройдя через все эти дебри кодинга, я вышел к релизу. Всё было готов, всё работало. Я решил добавить баннер с рекламой, это оказалось очень просто – есть инструмент AdControl, который просто настраивается. Надо лишь получить личный код на сайте
http://advertising.microsoft.com/en/home и всё. И тут оказалось, что Эстония, где я живу, и Россия не входят в список стран, которые могут участвовать в данной программе. То есть, если у вас нету банковского счёта в списке из 35 стран, то, извините, вы в пролёте.
Ок, я слышал есть такая же программа от Google. Да,
есть такая и Эстония в списке. Отлично! Скачиваем дополнение к MS Visual Studio 2013, пытаемся добавить баннер в проект и… его нет среди доступных инструментов. Как? Почему? А потому что работает это только на Silverlight!
Microsoft Google, really?
Опять боком вышла ошибка, допущенная в начале. Но переделывать нету уже никаких сил. Чтобы реализовать свои планы и стать миллиардером за 2 часа, я принял решение создать 2 приложения: Free и Pro версии. Это заняло 1 час.
Ну всё – готово!
Начинаем публикацию. Тут вообще всё просто: MS Visual Studio 2013 сам прогоняет пару тестов на пригодность и ошибки, генерирует .appxupload – файл. Который заливается на страничке
http://dev.windowsphone.com
После чего нужно ждать подтверждения сертификации приложения. Я отправил приложение в 3 часа ночи, в 5 утра получил подтверждение регистрации. Довольно быстро! Однако, тут же обнаружил баг в приложении и решил его исправить. После чего решил загрузить обновление приложения и попал в ступор, так как на страничке приложение не было кнопки для заливки нового .appxupload–файла. А как же обновить? Оказалась просто — надо кликнуть вот сюда:
Поди догадайся.
UPD: Пока писал статью — уже починили. Оперативно!
Однако прочитать некоторые данные в панели мониторинга до сих пор невозможно:
Итог
В целом Microsoft создала отличную платформу для создания мобильных приложений для Windows Phone, Android и iOS. Если даже криворукий неопытный непрограммист смог с помощью неё создать своё приложение, то скилловым спецам тут море по колено. Через ругань и слёзы, благодаря своей
упоротости упёртости и желанию воплотить мечту, я сумел дойти до финиша. Если вы владеете навыками хоть в каком-нибудь языке из поддерживаемых MS Visual Studio 2013, то бросайте всё и садитесь за написание своего мобильного приложения. Я уверен, вы достигнете цели, хоть и придётся пройти через боль и отчаяние.