🔥

Тред (Михаил Рахманов)


Начнем с одной из интересных фишек нашего приложения - мы везде (и на десктоп клиенте, и на мобилах) используем одну и ту же Го либу. Итак, как это все работает

В Го либе используем 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 и дергает методы либы

Михаил РахмановМихаил Рахманов