Начнем с одной из интересных фишек нашего приложения - мы везде (и на десктоп клиенте, и на мобилах) используем одну и ту же Го либу.
Итак, как это все работает
В Го либе используем grpc/protobuf для передачи сообщений. Но на мобиле grpc сервак запускать затратно.
Поэтому из описания методов grpc/соответствующих моделек в формате .proto с помощью protoc с плагином gomobile мы генерим Go код ("func SomeMethod(b []byte) (resp []byte)")
Дальше через тулзу gomobile мы делаем фреймворк, содержащий методы выше. В ObjC это выглядит так "FOUNDATION_EXPORT NSData* _Nullable SomeMethod(NSData* _Nullable b);"
Айос клиент дергает эти методы. Но нам нужно что-то сделать с NSData. Поэтому есть еще 2 шага.
Вот эти шаги:
- генерация протобаф моделек для свифта, которые умеют сериализоваться в Data
- генерация прослойки для клиента. Прослойка имеет удобный интерфейс, под капотом использует протобаф модельки, конвертит их в Data и дергает методы либы
Михаил Рахманов