Может ли приложение iOS XCode ссылаться на сборки MonoTouch?

Я обдумываю, как лучше разделить усилия между командами для нового проекта. У нас есть группа служб приложений Windows C# и небольшая группа iOS Objective-C. Также вероятно, что рано или поздно потребуется приложение для Android.

Сборка уровня домена/API на устройстве, которое вызывает наши службы и обрабатывает синхронизацию с локальным хранилищем данных, является логическим компонентом, который нужно написать на C# и скомпилировать с помощью MonoTouch. Затем команда Objective-C ссылается на этот компонент. Это возможно? Я много читал о MonoTouch, ссылающемся на сборки C, но может ли это работать наоборот?

Было бы здорово услышать о каком-либо опыте использования этого подхода, если это возможно!

Спасибо, Аарон.


person Aaron    schedule 10.03.2011    source источник


Ответы (1)


arrow_upward
2
arrow_downward

Хотя это технически возможно, сегодня нет простого способа сделать это.

Лучшее, что вы можете сделать сейчас, это запустить приложение из C#, а затем, если хотите, передать управление вашему коду на Objective-C. Во время запуска C# вы можете зарегистрировать методы, которые будут вызываться кодом Objective-C, используя P/Invoke для вызова чего-то вроде:

delegate void some_callback_t (int parameter1, int parameter2);

[DllImport ("__Internal")]
void SetCallback (some_callback_t callback);

static void mycallback (int parameter1, int parameter2)
{
    // Here goes your C# logic to be called by C
}

Затем вы звоните:

SetCallback (mycallback);

Обратите внимание, что mycallback должен быть статическим методом (ограничение статической компиляции). Затем ваш код Objective-C может потреблять службы, реализуя что-то вроде:

 typedef (*callback_t) (int p1, int p2);
 callback_t callback;
 void SetCallback (callback_t cb)
 {
     callback = cb;
 }

 void InvokeCSharp ()
 {
     callback (1, 2);
 }
person miguel.de.icaza    schedule 10.03.2011
comment
Привет Мигель, спасибо за быстрый ответ. Можно ли также отправлять сложные DTO? Требуется ли специальная сортировка? - Это не похоже на то, что я мог бы убедить нашего гуру iOS использовать. Спасибо - person Aaron; 11.03.2011
comment
DTO = объект передачи данных. В общем, это просто простой объект только со свойствами и без поведения, используемый для отправки данных по разным слоям. - person Eduardo Scoz; 11.03.2011
comment
Спасибо за объяснение, Эдуардо, я начал использовать этот термин только в прошлом году или около того на работе, но он используется часто. - person Aaron; 12.03.2011
comment
Да, вы можете это сделать. Просто используйте стандартные правила P/Invoke. Большая часть MonoTouch построена таким образом, структуры C # представляют собой просто сопоставление 1: 1 с объектами Objective-C, поэтому происходит нулевое копирование / маршаллинг. - person miguel.de.icaza; 12.03.2011