2012-03-08 1 views
4

Мы начали строить Cross platform Android/iOS apps, построив исключительно в MonoTouch. Мы оцениваем MonoDroid.MonoTouch/MonoDroid Неровности уровня обслуживания?

Наши приложения должны потреблять JSON, и мы хотели бы использовать ServiceStack. У Xamarin есть филиал ServiceStack, который мы используем - https://github.com/xamarin/ServiceStack

Мы хотели бы иметь общий проект, отвечающий за GETting и POSTing JSON. ServiceStack by Xamarin имеет different DLLs for Android and iOS. Как у нас есть single project и использовать ServiceStack, чтобы попасть в наш JSON?

Мы открыты для других вариантов, чтобы получить JSON единым способом?

ответ

4

По большому счету, управляемый файл * .dll, скомпилированный для MonoTouch, который не имеет зависимости от конкретных типов MonoTouch, совместим с Mono для Android-проектов.

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

Как правило, я склонен инкапсулировать все вызовы на свои веб-сервисы с использованием частичного класса с асинхронными методами, например FooProjectRestClient. И тогда, если когда-либо будет какая-либо сегментация, которая должна произойти, это может произойти в общем классе с использованием #if defs.

3

Причина, почему есть MonoTouch и Mono для Android конкретные библиотеки часто из-за (меньше, Silverlight типа) профайла (например, то, что зависит от новых возможностей FX4.0 необходимо вырезать). Они часто имеют тот же код, скомпилированный с SILVERLIGHT (или MONOTOUCH, MONODROID).

Причина, по которой MonoTouch составляет только, зависит от того, что его среда (устройства iOS) не позволяет JIT'ing. Таким образом, нет кода генерации (например, System.Reflection.Emit) или динамического (вниз) кода загрузки ... Однако часто бывает возможно обеспечить (менее эффективные) обходные пути или пропустить несколько функций и оставить специальную версию библиотеки для MonoTouch.

Теперь вернемся к тому, чтобы иметь одиночный общий сбор/проект. специальный MonoTouch сборки (как правило, тот же код перекомпилировать с MONOTOUCH определен) еще действует сборка .NET и часто могут быть использованы в Mono для Android, Mono или .NET (один раз перекомпилированной, даже с MONOTOUCH). Это окончательно не оптимально, но это то, что вы можете попробовать.

Еще один испытывает те же проекты (например, MYLIB), через несколько решений (например, MonoTouchApp, M4AndroidApp) и использовать специальные конфигурации (так же, как есть в iPhone | Debug один), чтобы установить различные определяет (например, MONOTOUCH на iPhone * | *). Это может позволить вам сохранить лучшую реализацию функций на всех платформах (например, если одна и та же функция реализована по-разному).

Я бы попробовал позже (config), а затем разделил специальную сборку MonoTouch и, наконец, (если она действительно не работает) ищет другие альтернативы.