├── 1.md ├── 3.md ├── 6.md ├── 8.md ├── Images └── machine.png └── README.md /1.md: -------------------------------------------------------------------------------- 1 | ## Что такое Xamarin.Native/Xamarin.Forms чем отличаются и когда применять? Для чего xamarin подходит, а для чего нет? 2 | 3 | Прежде всего хочется сказать, что вопрос слишком дискуссионный и ответить на него однозначно нельзя. У каждого из представленных подходов есть свои плюсы и минусы. Что выбрать и в чем развиваться зависит только от ваших нужд и потребностей. 4 | 5 | Зачем вообще нужен Xamarin? Почему бы не выбрать другой из подобных Framework'ов и не писать приложения на нем. 6 | 7 | ### Введение 8 | 1) `Xamarin - не панацея.` Это не магическая палочка-выручалочка, позволяющая людям знающим WPF/UWP так же легко и просто писать кроссплатформенные приложения! Он решает свои задачи и делает это относительно хорошо. Умелые программисты могут творить на нем что душе угодно, но на это они потратили уйму сил и времени. 9 | 10 | 2) Какое практическое применение? `Xamarin - прежде всего нужен для команд состоящих в основном из .NET программистов, для поддержания общей кодовой базы на сервере и на клиенте.` Огромное количество готовых библиотек для .NET применимы и здесь. Однозначно можно сказать только одно - если вы знакомы с C#, то вам будет куда проще разобраться с этим Framework'ом. 11 | 12 | 3) Ходит огромное количество слухов о нестабильности платформы, о ее багах, постоянных падениях и тд. Прежде всего хочется напомнить кто подобные слухи распространяет. В основном это люди, которые либо незнакомы с разработкой под мобильные платформы вообще, либо только начинают программировать и тд. 13 | Большинство багов и конкретных косяков в платформе давно исправлены, а при детальном разборе каждой из платформ большинство вопросов со скоростью работы приложений или надежностью уходят сами по себе. Огромная сложность и высокий входной порог в Xamarin обусловлены тем, что нужно понимать как работает каждая из платформ, под которые вы пишите приложения. `Вам будет крайне трудно написать действительно быстрое и надежное приложение без детального изучения каждой из платформ, под которые вы хотите написать свое приложение.` 14 | 15 | ### Xamarin Forms 16 | 1) У меня ничего не работает, платформа не нужна. 17 | 18 | У Xamarin хватает хейтеров, как и любых других больших проектов, но он не создан для того, чтобы каждый человек смог в мнгновение ока вкатиться в кроссплатформенную разработку. Для "легкого" старта есть другие проекты - React Native, Flatter. Первые подойдет для людей, кто пришел с JS мирка. Они позиционируют себя как фреймворки для быстрых решений. С Xamarin все иначе. 19 | 20 | У Xamarin есть огромная куча тонкостей и мы постараемся ответить на ваши вопросы, даже если вы первый раз слышите о платформе. Все мы через это проходили, и поверьте, дальше будет только хуже. 21 | 22 | 2) Где мой Preview'ер. Почему я не могу посмотреть что у меня вышло в разметке без запуска приложения ? 23 | 24 | У Xamarin Forms нет и вряд ли будет когда-нибудь внятный Preview. Возможно у вас стартанет стандартный Xaml превьювер, но мы бы не сильно на это надеялись. Вот уже 3+ года он не работает. Не стоит верить так же и в "Live Player". Он тоже не работает. (Нет, ну он запустится на семпле, но на что-то большее, чем красиво заработать на презентации он не может). Вся проблема в том, что со временем (очень скоро), вам станет нехватать стандартных контролов, которые из коробки и так весьма не очень рендерятся, и он вовсе больше не запустится ссылаясь на то, что ему не удалось зарендерить что-то или чего-то не хватает. Единственное, что когда-то работало - это Gorilla Player. Но там тоже куча нюансов и все они связаны с пользовательскими контролами и расширениями. `В общем основной совет: Верстайте в голове, дамы и господа. Это пока самое надежное.` При наличии хорошего железа и знаний можно добиться запуска приложения на эмуляторе за 3-5 сек. Так что не все так плохо. 25 | 26 | 3) XF позволяет быстро написать хорошее приложение под разные платформы. 27 | 28 | Это правда лишь на половину, а может и меньше. Большинство у кого повернулся язык так сказать, либо очень давно с Xamarin (тогда ему не состовляет огромного труда написать вообще любое приложение на этой платформе), либо совсем незнаком со спецификой XF. 29 | 30 | `Одно из назначений Xamarin Forms - создание макетов приложений с относительно несложным дизайном. Стандартный набор элементов управления и контейнеров для их компановки и позиционирования действительно позволяет быстро сверстать прототип. Это нужно чаще всего, чтобы обкатать какие-то фичи проекта или попробовать какие-то новые методы и способы взаимодействия с целевым решением. Так же известны случаи использования XF на хакатонах и других подобных мероприятиях. 31 | Основное назначение Xamarin Forms - корпоративные B2B приложения, а так же различные утилиты. 32 | ` 33 | 34 | #### Почему Xamarin Forms используется для прототипов? 35 | 36 | Потому что неумелая верстка на XF приводит к сильной просадке производительности приложения. Чтобы добиться действительно удобного и функционального UI нужно потратить время на исследование того, как работает платформа. Чаще всего, люди этого не делают и сразу идут писать гневные оды. Так же добиться действительно красивого UI стандартными средствами очень и очень трудно. А чтобы это еще и не повредило производительности - еще более трудная задача. И для того, что бы этого достичь необходимо знать как работать с целевыми платформами (Android, iOS, etc.). 37 | 38 | #### Можно ли использовать Xamarin Forms для реальных приложений? 39 | 40 | Да, такой кейс возможен и время от времени появляются компании, которые действительно используют XF в своих реальных продуктах. Чаще всего Xamarin-клиенты (Android/iOS) идут как второстепенные клиенты к существующим продуктам компаний. Есть и исключения, конечно, но их намного меньше. Например, компания Binwell. Так же распространен кейс использования XF для написания мобильных клиентов для интернет-магазинов и тд. По факту, все, что не требует сложный UI. 41 | 42 | ### Xamarin Classic (Native) 43 | 44 | Подход Xamarin Classic полностью подходит для написания реальных приложений. Основное, что потребуется здесь - знание нативных платформ и опыт верстки на них. Здесь мы можем использовать все преимущества нативных средств разработки. Например, превьювер xml разметки в Android Studio. Или создание UI в XCode, для iOS. Так же тут у вас не ограничений от слова совсем. Все что можно сделать на простом Native, можно сделать и тут без особых проблем. Все дизайнерские изыски, сложные анимации, красивые переходы и тд, все это делается точно так же, как и на полностью нативных языках и средствах. Достигается это тем, что Xamarin.Android / Xamarin.IOS являются полной оберткой над нативными API, к которым у вас есть полный доступ. 45 | 46 | #### В чем основная сложность Xamarin Classic? 47 | 48 | Вам реально придется гуглить документацию к нативным платформам и на любой чих лезть в нативную документацию и переписывать с Java/Kotlin или Swift/Obj-c на C# код. Но, хоть Xamarin.Native и является оберткой каноничные название и прочее чаще всего соблюдены. (Ну кроме форматирования, конечно. Все переведено в CamelCase). 49 | 50 | #### Зачем Xamarin Classic вообще, если есть нативные языки ? 51 | 52 | Мы уже писали, для чего нужен Xamarin в целом. Если у вас нет знаний C# в прошлом, а мобильная разработка для вас темный лес, то реально, лучше стоит заняться обычным Native. Если у вас нет выбора, но заказчику хочется красивый UI, то вам тоже к Xamarin Classic. Основные плюсы данного подхода - это разный UI под каждую платформу и реально общая бизнес-логика. Довольно солидный выбор для солидных компаний. Так же возможно применять все привычные для .NET подходы. Аля MVVM (см. MVVMCross и др), DI, TDD, DDD, а так же все другие прелести в виде огромного кол-ва привычных для C# и портированных либ с других языков. 53 | 54 | ### Краткий итог 55 | 1) XF = относительно общий UI + общая бизнес логика 56 | 2) XC = абсолютно разный UI + общая бизнес логика 57 | -------------------------------------------------------------------------------- /3.md: -------------------------------------------------------------------------------- 1 | ## Android 2 | 3 | #### Реальное устройство 4 | Для отладки на реальном устройстве необходимо подключить его по USB (или Wifi, но это очень медленно). На нем обязательно должна быть включена `отладка по USB`. 5 | 6 | #### Эмулятор 7 | 8 | [Установка эмулятора](https://docs.microsoft.com/ru-ru/xamarin/android/get-started/installation/android-emulator/) 9 | 10 | Внимание, виртуализация HAXM работает на Intel процессорах. Для того, чтобы узнать поддерживается ли VT-X конкретно на вашей машине, посмотрите спецификацию своего процессора на официальном сайте Intel. 11 | 12 | Так же, если у вас по умолчанию включена Hyper-V и захотите использовать HAXM, то нужно будет [принудительно выключить Hyper-V.](https://stackoverflow.com/questions/30496116/how-to-disable-hyper-v-in-command-line) 13 | 14 | ## iOS 15 | 16 | [Установка необходимых компонентов](https://docs.microsoft.com/ru-ru/xamarin/ios/get-started/installation/) 17 | 18 | Внимание, для работы с iOS вам необходима Mac OS. Как именно она установлена, на реальной машине от Apple или макинтоше не важно. Работа с iOS на виртуальной машине так же возможна. `Правда это может быть не совсем легально, используйте это на ваш страх и риск.` 19 | -------------------------------------------------------------------------------- /6.md: -------------------------------------------------------------------------------- 1 | ![По](/Images/machine.png) -------------------------------------------------------------------------------- /8.md: -------------------------------------------------------------------------------- 1 | ## Чем отличаются .NetStandart/PCL/Shared проекты? 2 | 3 | ### [Shared](https://docs.microsoft.com/ru-ru/xamarin/cross-platform/app-fundamentals/code-sharing) 4 | 5 | Может содержать файлы исходного кода, ресурсы. 6 | В результате "Сборки" данного проекта отдельная .dll не формируется. 7 | Производится копирование всех файлов в каждый проект (Android/iOS/UWP). 8 | 9 | Общий код получает доступ ко всем библиотекам платформенных проектов. (Nuget-ы подключаются там же). 10 | Вызов платформозависимых методов должен осуществляться с помощью указания директив компилятора: 11 | ``` 12 | #if __MOBILE__ Any mobile project (vs. desktop) 13 | #if __ANDROID__ Xamarin.Android 14 | #if __IOS__ Xamarin.iOS 15 | #if __MAC__ Xamarin.Mac 16 | #if __TVOS__ iOS tvOS 17 | #if __WATCHOS__ iOS watchOS 18 | #if WINDOWS_UWP Windows 10 UWP 19 | ``` 20 | 21 | #### Преимущества: 22 | * Прямой вызов нативных методов 23 | 24 | #### Недостатки: 25 | * Невозможно распространять в виде какого-либо пакета. 26 | * Наличие множества блоков #if в коде. Для упрощения чтения возможно создавть partial классы. 27 | Тем не менее код становится менее удобочитаемым. 28 | 29 | ### [PCL (Устаревший тип проекта)](https://docs.microsoft.com/ru-ru/xamarin/cross-platform/app-fundamentals/pcl?tabs=windows) 30 | 31 | Представляет собой компилируемую в .dll библиотеку классов. 32 | Нацеленную на определенные платформы, которые поддерживает один из возможных [профилей](https://portablelibraryprofiles.stephencleary.com/). 33 | Профиль определяет минимальную версию .Net framework-а и поддерживаемый API (набор классов BCL/features) по принципу "наименьшего знаменателя". 34 | 35 | #### Преимущества 36 | * Возможность распространение через Nuget. 37 | * Возможность подключить к Desktop приложению, нацеленному на соответствующий .Net framework 38 | * Поддерживает абстрактный вызов нативных методов (DependencyService) 39 | 40 | #### Недостатки 41 | * Считается устаревшей. Рекомендуется использовать .NET Standard 42 | * Невозможно напрямую вызвать нативные методы (только через DependencyService) 43 | * В зависимости от выбранной платформы 44 | 45 | ### [.NetStandart](https://docs.microsoft.com/ru-ru/xamarin/cross-platform/app-fundamentals/net-standard?tabs=windows) 46 | 47 | В отличие от PCL каждая версия предоставляет определенный набор API: 48 | * Чем выше версия, тем больше API доступно для вас, но меньше поддерживаемых платформ. 49 | * Чем ниже версия, тем больше поддерживаемых платформ, но меньше доступных API. 50 | 51 | #### Преимущества 52 | * Все преимущества PCL 53 | * Возможность использовать в проекте .Net Core 54 | 55 | #### Недостатки 56 | * Много плагинов для Xamarin ещё не наценелы на .Net Standart, что может привести к некоторым сложностям при подключении к проекту [Пример](https://mallibone.com/post/using-pcl-only-libraries-with-net-standard) 57 | -------------------------------------------------------------------------------- /Images/machine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XamarinDevRussia/FAQ/c5e5882c4d2cecd3c0826e7020b7bea3a917160d/Images/machine.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FAQ [@xamarin_russia](https://t.me/xamarin_russia) 2 | 3 | ## [Быстрый старт. Набор гайдов по установке и настройки среды разработки](https://www.youtube.com/playlist?list=PLnAeZxzZ1_v0FZhEtBY13AqclYjdepUlq) 4 | 5 | 1. [Что такое Xamarin.Native/Xamarin.Forms чем отличаются и когда применять ? Для чего xamarin подходит, а для чего нет ?](/1.md) 6 | 2. Какие знания нужны, для начала работы ? 7 | 3. [Почему у меня не собирается проект, даже семпловый ?](/3.md) 8 | 4. [Какое окружение нужно для разработки под Android, IOS, UWP ?](/3.md) 9 | 5. [Можно ли разрабатывать под IOS без физического Mac?](/3.md) 10 | 6. [Какое минимальное/рекомендуемое железо нужно для разработки?](6.md) 11 | 7. Проект собирается очень долго. Как оптимизировать скорость сборки/пересборки ? (см. [быстрый старт](https://www.youtube.com/playlist?list=PLnAeZxzZ1_v0FZhEtBY13AqclYjdepUlq)) 12 | 8. [Чем отличаются .NetStandart/PCL/Shared проекты?](8.md) 13 | 9. Во что компилируется XAML ? 14 | 10. Как лучше верстать страницы в XF ? в XAML или в коде? Какие плюсы/минусы ? 15 | 11. Какие есть рекомендации по оптимизации работы приложения ? 16 | 12. Как убрать выделение у ListView в XF ? 17 | 13. Как настроить Azure Devops/App Center для релиза в Google Play/Apple Store ? 18 | 14. Как тестировать UI? Как тестировать UI совместно с MVVM ? 19 | 15. Как настроить линкер для уменьшения размера релизного пакета приложения? 20 | 16. Как добавить локализацию в приложение ? 21 | 17. Динамическое создание Grid. 22 | 18. Как правильно работать с изображениями ? Почему использование при использовании ImageCell начинаются лаги при прокрутке? 23 | 19. Как и куда сохранять служебную информацию в приложении? 24 | 20. Как передавать параметры между страницами? 25 | 21. Как правильно работать с сетью? (HttpClient, DelegateClientHandler, Polly, REST Client) 26 | 22. Что такое DI? (Вопрос к Dependency Service и что такое ServiceLocator) 27 | 23. Работа с бд (sqlite, prism, и тд) 28 | 24. Использование Embedded resource, работа с файлами. 29 | 25. OAUTH2. Кастомная реализация авторизации или через готовые сервисы. 30 | 26. Messaging Center - зачем нужно, почему и как использовать. 31 | 27. Жизненный цикл приложения/страниц. 32 | 28. Навигация в XF. Какие существуют практики и рекомендации к построению навигации в XF/XC. 33 | 29. [Джентельменский набор библиотек бывалых замарищиков.](https://github.com/jsuarezruiz/awesome-xamarin-forms) 34 | 30. Работа с потоками. Зачем нужно запускать некоторые методы в UI потоке. Базовая работа с потоками в Xamarin. 35 | 31. XF: ICommand, Binding's, Observer. 36 | 32. GC.SuppressFinalize(Object), IDisposable, Destructors/Finalize. 37 | 33. Самые частые проблемы при сборке проектов. 38 | 34. Среды разработки : VS15/17 + R#, VS4Mac, Rider. 39 | --------------------------------------------------------------------------------