Xamarin: приложение для простой кросс-платформенной сигнализации

Цель: Разработка кросс-платформенного мобильного приложения с использованием студии Xamarin, которая показывает сообщение в определенные даты и время.

Вопросы:

a) Какие вещи будут/могут быть разделены между платформами, если я хочу разработать такое приложение. (Структурный дизайн с возможными классами будет оценен)

b) Лучше ли использовать таймер или AlarmManager?

c) Какой тип проекта должен быть создан для проекта с общим основным ядром (Portable Class Library/Platform Specific Library/Plain С# Project)?

Спасибо в Advance.

Ответ 1

Я сосредоточен на том, как лучше всего использовать код между Android и iOS за последние несколько недель, и вот мои предложения, основанные на моем опыте:

a) В общем, вы можете делиться любыми вещами между платформами, которые не являются специфичными для платформы.

Я склонен использовать презентаторов или посредников, которые содержат ссылку на представление, которое определяется интерфейсом. Например, если бы у меня был вид входа в систему, у меня был бы мой iOS UIViewController и моя Android-активность реализовала бы интерфейс ILoginView. Этот интерфейс будет иметь следующие значения:

  • Getters для имени пользователя и пароля
  • Событие с именем LoginSubmitted
  • Два метода ShowLoginFailed и GoNextScreen

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

Я также использовал интерфейсы для определения моего SQLite Manager (https://github.com/praeclarum/sqlite-net/tree/master/src) или делегата, ответственного за создание веб-сайта Сервисный вызов API. Я обнаружил, что мне пришлось это сделать, потому что для диспетчера SQLite и RestSharp необходимо выполнить компиляцию конкретной платформы.

Короче говоря, интерфейсы - ваш друг, особенно когда вы связываете их с какой-то системой впрыскивания зависимостей.

b) Если вы хотите, чтобы ваш пользователь был запрошен с предупреждением, когда их устройство находится в спящем режиме или когда оно находится в другом приложении, я бы использовал AlarmManager для Android и LocalNotification для iOS.

c) Вы можете отчасти использовать PCL с Xamarin.Android и Xamarin.iOS. Проблема в том, что PCL не поддерживаются на 100%. Тем не менее, есть некоторые настройки, которые вы можете внести в среду своего разработчика, которая, надеюсь, доставит вас туда, где вы хотите:

  • Переключитесь на бета-канал или альфа-канал в Xamarin Studio: "Xamarin Studio" → "Проверить наличие обновлений" → Измените канал в поле со списком в левом верхнем углу появившегося диалогового окна → Выберите "Перезагрузка и установка обновлений". Это позволит вам иметь проекты Android и iOS, чтобы иметь возможность ссылаться на один и тот же PCL в одном и том же решении.

  • После обновления XS закройте XS и следуйте инструкциям в этом сообщении, чтобы изменить вашу Mono-установку, чтобы PCLs правильно скомпилировали: MonoDevelop: можно ли переключить компилятор PCL?

  • Чтобы получить подсказку кода, чтобы лучше играть в вашем проекте PCL, вам нужно захватить mscorlib.dll из вашей установки Mono и поместить ее в папку DLL в каталоге проекта и добавить ссылку на нее в ваш проект PCL. Вы можете найти здесь dll:/Library/Frameworks/Mono.framework/Versions/3.0.10/lib/mono/4.0

Как только вы все это сделали, вы должны быть в хорошей форме, чтобы ваш PCL работал. Я обнаружил, что это стоило дополнительной работы, поскольку теперь я могу создать проект Unit Test в XS, связать его с PCL и запустить тесты из среды IDE. Кроме того, я могу использовать библиотеки, такие как Moq, чтобы издеваться над моими представлениями и выполнять интеграционные тесты.

Xamarin обещает, что полная поддержка PCL будет "скоро", и нам не придется беспокоиться об этих хаках.

Ответ 2

Xamarin, на данный момент, может помочь вам в обмене бизнес-логикой. то есть базу данных, веб-службу или любой такой код, который не будет зависеть от того, на какой платформе вы работаете. Вы вводите код С#. Таким образом, у вас есть доступ к основным функциям С# или к устным исправлениям, которые можно использовать в монофункциональных функциях.

Как вывод, я могу обобщить: вы можете создать отдельный проект для задней части своей работы и отдельный проект для интерфейса и его кода. (оба явно находятся в одном и том же рабочем пространстве). Затем вы можете использовать этот основной проект Core типа back end в приложении IOS, приложении Android и по умолчанию в WP8-приложении (даже в Mac и Windows-приложении). Таким образом, кроме Core, вам нужно приложить дополнительные усилия в кодировании отдельно для всех платформ в отношении пользовательского интерфейса, его обработчиков и кода.

Ответ 3

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

Ответ 4

Ознакомьтесь с этим руководством от команды Xamarin, чтобы начать: http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications

Это четвертая часть, которая касается вашего вопроса в части C. http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/part_4_-_platform_divergence_abstraction_divergent_implementation

Кроме того, на панели управления Xamarin Studio Dashboard/Main Screen (?) справа есть 2 приложения, которые вы можете загрузить, которые полностью работают и нацелены на 2-3 платформы, чтобы вы могли видеть, как они структурируют приложение при совместном использовании кода между проектами.

На их сайте есть много руководств и руководств, которые не занимают много времени, чтобы читать и практиковать.