Пишем код

Заметки о .net разработке

Archive for the ‘xamarin’ Category

Долгожданный дизайнер для Xamarin.Forms

without comments

Кроссплатформенному UI-фреймворку Xamarin.Forms давно не хватало визуального дизайнера. Ну или хотя бы возможности в реальном времени, без занимающего минуту-две перезапуска приложения, посмотреть на результат своей работы.

И пока Xamarin не хотели выпускать и показывать свои разработки в этом направлении, потихоньку появились альтернативные возможности. Одна из них — это бета-версия Gorilla Player. Раскручен, прост в установке и достаточно неплох в использовании. Однако это всё на демо-проектах.
Когда заходит речь об использовании инструмента в серьезных приложениях, то сразу всплывают ограничения: не работают объявленные в App.xaml стили, сложности с Конвертерами и кастомными контролами.
Решение для Gorilla Player в использовании Gorilla SDK, однако завести всё это с использованием Xamarin.Forms 2.0 оказалось очень сложно (и лично мне не удалось вовсе :)).

Мы рассмотрим другое решение.
Read the rest of this entry »

Written by Shaddix

Июнь 5th, 2016 at 12:53 пп

Posted in xamarin

Комфортная Android-like верстка в iOS (XibFree)

without comments

Давайте признаем очевидное. Верстка экранов в iOS ужасна. Сравнивая с html, с WPF, с Android, с WinPhone — везде iOS проигрывает.
Верстка в iOS исторически напоминала WinForms (с аналогом якорей-Anchor’ов в виде AutoresizingMask). Однако WinForms уже давно отошло в прошлое, а iOS всё живет и живет :)
Да, на смену AutoresizingMask пришли Constraints, но работа с ними до жути неудобна, дизайнер ненаглядный, а результат работы — нечитаемый уже через неделю после создания.

А вообще, помимо удобства, наибольшей проблемой, конечно, становится динамическая верстка элементов. Если мы пришли из мира WPF/Android, то скучать по простейшему StackLayout/LinearLayout будем очень-очень сильно.
Возьмем например типичную задача: верстка элементов в строчку, при этом некоторые элементы могут быть спрятаны.

<stacklayout>
    <button></button>
    <button Visibility="Collapsed"></button>
    <button></button>
</stacklayout>

Чтобы задать такую верстку в iOS — придется изрядно помучаться. В случае со «старым» AutoresizingMask — это и вовсе невозможно, и придется разруливать координаты кнопок руками при каждом изменении видимости кнопок.
В случае «нового» и «продвинутого» LayoutConstraints — это, конечно, возможно, но намного сложнее и куда менее очевидно, чем xml-верстка.
Read the rest of this entry »

Written by Shaddix

Май 11th, 2016 at 11:39 дп

Запуск Genymotion и Xamarin Android Player на Windows 10

without comments

Для всех у кого есть проблемы с запуском эмуляторов на Windows 10. Ссылка, которая мне помогла:

https://forums.xamarin.com/discussion/comment/139102/#Comment_139102
Цитата на всякий случай:

Step 1
If you previously installed Xamarin Player and already got the error message uninstall Xamarin Player and Virtual Box, then go to AppData/ and delete the complete XamarinPlayer directory.. At least make sure that under AppData there is NO longer any XamarinPlayer directory anymore available otherwise it won’t work.
Step 2
Download and install Xamarin Player But don’t start it yet after installation
Step 3
Download and install the latest Virtual Box version (5.x) just install it over the existing Virtual Box, it will clean and update automaticly the existing instance.
Step 4
Open Virtual Box and go to File->Preferences->Networking and go to the Virtual Host Only Tab.
Klik on edit for the one existing network adapter (the screwdriver) and make sure the it is set in the following way:

_Adapter;
IPv4 Address: 10.71.34.1
IPv4 Network Mask: 255.255.255.0

DHCP Server;
Enabled
Server Address: 10.71.34.2
Server Mask: 255.255.255.0
Lower Address Bound: 10.71.34.101
Upper Address Bound: 10.71.34.199_

After this save settings and exit Virtual Box
Step 5
Launch Xamarin Android Player and start installing virtual machines available for download.
Now it will find the correctly configured host only network adapter.

Written by Shaddix

Май 8th, 2016 at 1:33 пп

Posted in xamarin

Ускорение Change-Build-Run цикла на iOS (работает и на Android)

without comments

UPD: Чтобы это все работало в Xamarin Studio 6 необходимо установить плагин отсюда: Continuous.Client.MonoDevelop.mpack (собрано из guthub).

В последнее время наш iOS продукт достаточно разросся, и по разным причинам (обоснованным и не очень :)) состоит из ~20 проектов). Все это, вкупе с новыми версиями Xamarin очень негативно сказывается на времени сборки и запуска.
Ну а UI часть, как известно, требует частого перезапуска/пересборки ввиду множества мелких изменений.

Ждать по 1-2 минуты, чтобы проверить, как будет смотреться увеличенный на 1 пиксель отступ, слегка поднадоело, и было решено поискать решения.

Read the rest of this entry »

Written by Shaddix

Февраль 25th, 2016 at 4:07 пп

Posted in xamarin

Xamarin.Forms и сложности интеграции в Android приложения

with 4 comments

UPDATE: код обновлен для работы с Xamarin.Forms 1.3.4+

Говоря о недостатках Xamarin.Forms в предыдущей заметке, я среди прочего упомянул и сложность интеграции в существующие Android-проекты, а именно трудности так называемого «частичного использования» Xamarin.Forms в андроид-приложениях.
«Частичное использование», с моей точки зрения, это возможность с легкостью взять и добавить технологию в уже существующий проект, и реализовать с её помощью функционал какой-то части приложения. В случае Xamarin.Forms — реализовать какую-нибудь часть экрана/компонент с использованием этой UI-библиотеки (без полного переписывания приложения на новой технологии).
Интеграция в iOS, как я писал в предыдущей заметке, проходит достаточно безболезненно (за исключением проблемы с утечкой памяти, о решении которой я так же написал).

Интеграция в Андроид усложняется тем, что метода, аналогичного iOS’овскому .CreateViewController() здесь не существует.
Read the rest of this entry »

Written by Shaddix

Ноябрь 26th, 2014 at 5:19 пп

Posted in Android,xamarin

Интеграция Xamarin.Forms в существующие проекты iOS (и утечки памяти)

without comments

Xamarin.Forms, о котором я недавно писал, отлично подходит для применения в новых приложениях и прототипирования нового функционала. Однако даже и в существующих больших приложениях могут появится новые требования, для реализации которых оптимально воспользоваться Xamarin.Forms.
Так получилось и в нашем случае, и в целом внедрение прошло гладко, кроме одной небольшой проблемы, обнаружившейся на самом последнем этапе. Об этой проблеме я и расскажу :)
Read the rest of this entry »

Written by Shaddix

Ноябрь 18th, 2014 at 11:00 дп

Posted in .net,xamarin

Здравствуй, Xamarin.Forms, или пост, запоздавший на 4 месяца

with one comment

Черновик этой заметки был написан еще в июле, но по непонятным причинам забыт/отложен/отправлен на доработку. В свете свежеприобретенного опыта, я решил таки достать его из запасников истории и представить на свет божий :)

Меньше месяца назад, в июне 2014-го (да, заметка писалась еще в июле :)) ребята из Xamarin выпустили то самое, что от них ожидалось очень давно. Это — фреймворк для построения кроссплатформенного UI — Xamarin.Forms.
Такое решение — золотая середина между html-подобным интерфейсом, который выглядит ненативно на всех платформах, зато обладает на 100% общим кодом; и изначальным подходом Xamarin — где UI на каждой платформе полностью уникальный, отлично и естественно смотрится на всех устройствах, но требует разработки «с нуля» под каждую платформу.
Идея Xamarin.Forms в том, что многие базовые контролы пользовательского интерфейса так или иначе реализованы во всех системах (поддерживаются iOS/Android/WinPhone). Действительно, кнопки, надписи, поля ввода и переключатели есть везде. Xamarin выделил этот общий набор, собрал воедино все их свойства, и назвал эту абстракцию Xamarin.Forms. Из получившихся платформо-независимых классов можно строить интерфейс, а в результате под каждую платформу будет сгенерирован вполне естественный нативный UI с использованием «родных» компонентов.
Делать обзор функционала Forms через 5 месяцев после релиза слегка глуповато, так что я просто остановлюсь на некоторых плюсах и минусах, с которыми я успел столкнуться в процессе полу-продакшеновой практической эксплуатации Xamarin.Forms.
Read the rest of this entry »

Written by Shaddix

Ноябрь 15th, 2014 at 1:00 пп

Posted in .net,agile,xamarin

Видеозапись семинара по итогам конференции DevCon-2014 в Rubius

with 2 comments

Мы в Rubius очень давно не проводили семинары (с последнего, кажется, прошло уже 5 месяцев), поэтому решили восполнить пробел и поговорить о перспективах развития технологий и разработки на платформе Майкрософт.
Я кратко презентовал наиболее запомнившиеся мне моменты с конференции DevCon-2014, а потом мы достаточно бурно обсудили, что со всем этим технологическим счастьем делать и как дальше жить :)

Мои извинения за ужасный звук :)

P.S. презентацию выложу по запросу, но особой необходимости в ней я не вижу.

Written by Shaddix

Июль 6th, 2014 at 3:09 пп

Universal App — кроссплатформенное счастье с #ifdef’ами и рефакторингом

without comments

Еще на конференции Build 2014 майкрософтовцы рассказали о новом типе проектов — Universal App. Естественно, на прошедшем DevCon 2014 я постарался разузнать побольше об этом типе проектов, и как он может помочь при разработке под iOS/Android.

Microsoft традиционно акцентирует внимание на том, что UniversalApp поможет повторно использовать кода между WinPhone и WinRT приложениями, не слишком афишируя то, что начиная с Xamarin 3.0 этот подход сработает и для iOS и Android приложений.
Давайте попробуем и посмотрим, что же у нас получится :)
Read the rest of this entry »

Written by Shaddix

Июнь 12th, 2014 at 1:09 пп

Posted in .net,agile,iOS,xamarin

Дружим Android и Windows 8.1 по ADB (особенно с китайскими устройствами)

with 2 comments

Сегодня столкнулся с проблемами, которые отняли больше часа активного гугления, поэтому результат решил задокументировать.

Проблема была в банальной невозможности подключиться по adb к стародавнему Android-планшету — CUBE U9GT2 :) Не нужно искать в этом приступы геронтофилии — как оказалось OpenGL на процессорах MTK работает слегка странно, и доставляет проблемы нашему приложению, поэтому дебаг был жизненно необходим :)

После подключения к компьютеру на Win 8.1 этот старичок категорически не находился в выводе adb devices, а значит и отладка на нём была невозможна.
Проблема разделилась на 2 части:
Read the rest of this entry »

Written by Shaddix

Апрель 18th, 2014 at 8:53 пп

Posted in .net,Android,xamarin