Pull to refresh

Как непрограммист создал своё мобильное приложение

Reading time 6 min
Views 48K
Привет, Хабр!

Хочу поделиться историей, как я, непрограммист, смог написать своё первое мобильное приложение благодаря (или вопреки ему) 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 – Blank 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

Неопытному непрограммисту очень сложно сходу понять, почему его 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? Первая моя реакция была:

image

О чём вообще речь, что это такое, зачем он меня пугает?
Оказалось, существует не только 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–файла. А как же обновить? Оказалась просто — надо кликнуть вот сюда:

image

Поди догадайся.

UPD: Пока писал статью — уже починили. Оперативно!

image

Однако прочитать некоторые данные в панели мониторинга до сих пор невозможно:

image

Итог


В целом Microsoft создала отличную платформу для создания мобильных приложений для Windows Phone, Android и iOS. Если даже криворукий неопытный непрограммист смог с помощью неё создать своё приложение, то скилловым спецам тут море по колено. Через ругань и слёзы, благодаря своей упоротости упёртости и желанию воплотить мечту, я сумел дойти до финиша. Если вы владеете навыками хоть в каком-нибудь языке из поддерживаемых MS Visual Studio 2013, то бросайте всё и садитесь за написание своего мобильного приложения. Я уверен, вы достигнете цели, хоть и придётся пройти через боль и отчаяние.
Tags:
Hubs:
+25
Comments 32
Comments Comments 32

Articles