Несовместимость уровня обслуживания MonoTouch/MonoDroid?
-
09-12-2019 - |
Вопрос
Мы начали строить Cross platform Android/iOS apps
, ранее создававший исключительно в MonoTouch.Мы оцениваем MonoDroid
.
Наши приложения должны потреблять JSON
и мы хотели бы использовать ServiceStack
.У Xamarin есть ветка ServiceStack, которую мы используем: https://github.com/xamarin/ServiceStack
Мы хотели бы иметь общий проект, отвечающий за GETting и POSTing JSON.ServiceStack от Xamarin имеет different DLLs for Android and iOS
.Как у нас есть single project
и использовать ServiceStack, чтобы получить наш JSON?
Мы открыты для других вариантов унифицированного использования JSON?
Решение
В целом управляемые файлы *.dll, скомпилированные для MonoTouch, которые не зависят от конкретных типов MonoTouch, совместимы с проектами Mono для Android.
ServiceStack — отличный тому пример.Я лично использовал его для нескольких проектов в рамках мобильных платформ Xamarin.
Как правило, я склонен инкапсулировать все вызовы своих веб-сервисов, используя частичный класс с асинхронными методами, например FooProjectRestClient
.И затем, если когда-либо потребуется какая-либо сегментация, это может произойти в общем классе с использованием #if defs.
Другие советы
Причина, по которой существует MonoTouch и Специфические библиотеки Mono для Android часто возникают из-за доступного профиля (меньшего размера, похожего на Silverlight) (например,все, что зависит от новых функций FX4.0, необходимо исключить).Часто это один и тот же код, перекомпилированный с помощью SILVERLIGHT
(или MONOTOUCH
, MONODROID
) определенный.
Причина MonoTouch только конкретные библиотеки обычно связаны с тем, что их среда (устройства iOS) не допускает JIT-компиляции.Таким образом, нет генерации кода (например. System.Reflection.Emit
) или динамическую (загрузку) кода...Однако часто можно предложить (менее производительные) обходные пути или пропустить некоторые функции и сохранить особенный версия библиотеки для MonoTouch.
Теперь вернемся к тому, чтобы иметь одинокий общая сборка/проект.А особенный Сборка MonoTouch (как правило, тот же код, перекомпилированный с помощью MONOTOUCH
определено) по-прежнему действительный сборка .NET и часто можно использовать в Mono для Android, Mono или .NET (после перекомпиляции, даже с MONOTOUCH
).Это определенно не оптимально, но вы можете попробовать.
У другого есть такие же проекты (например.MyLib), в нескольких решениях (например.MonoTouchApp, M4AndroidApp) и использовать специальные конфигурации (как в iPhone | Debug) для установки различных определений (например, MONOTOUCH
на iPhone*|*).Это позволит вам сохранить лучшую реализацию функций на каждой платформе (например,в случае, если одна и та же функция реализована по-другому).
Я бы сначала попробовал более поздний (конфиг), потом поделился специальной сборкой MonoTouch и наконец (если уж совсем не работает) поискал другие варианты.