Dropbox объясняет недостатки совместного использования кода iOS и Android

Инженер-программист из Dropbox объясняет причину решения компании больше не делиться кодом между iOS и Android.

До недавнего времени Dropbox делил код между приложениями для Android и iOS, используя C ++, чтобы писать только один раз, а не на Java и Objective-C. Эта стратегия действует с 2013 года, когда команда Dropbox была еще относительно небольшой, но ей требовалась поддержка быстро меняющейся дорожной карты.

Dropbox, теперь это гораздо более крупная компания, переключился на разработку своих приложений для Android и iOS, используя родной язык каждой платформы. В своем блоге инженер по программному обеспечению Dropbox Эяль Гутманн (Eyal Guthmann) дает некоторое представление о недостатках, которые компания обнаружила при совместном использовании кода.

Гутманн говорит, что все проблемы Dropbox проистекают из одной основной проблемы: «При написании кода нестандартным способом мы взяли на себя дополнительные расходы, о которых нам не пришлось бы беспокоиться, если бы мы остались с широко используемыми значениями по умолчанию для платформы. Эти накладные расходы оказались дороже, чем просто написать код дважды».

Написав кросс-платформенный код на C ++, Dropbox обнаружил, что ему пришлось создавать множество собственных фреймворков и библиотек.

Гутманн признает, что, возможно, фирма могла бы лучше справиться с использованием библиотек C ++ с открытым исходным кодом, но, по его опыту, сообщество не такое сильное, как в мобильной разработке. Кроме того, Гутманн считает, что вклад Dropbox с открытым исходным кодом достиг бы большего числа разработчиков на родных языках платформы.

«Эти затраты особенно высоки в C ++ (в отличие от других возможных не родных языков, таких как Python или C #), потому что в нем отсутствует одна полнофункциональная стандартная библиотека. Тем не менее, C / C ++ являются единственными языками с компилятором, поддерживаемым как Google, так и Apple, поэтому использование другого языка создало бы целый ряд других проблем для решения », — написал Гутманн.

Следующие накладные расходы, которые подчеркивает Гутманн в связи с кроссплатформенной разработкой, — это отсутствие доступа к IDE для конкретных платформ от Google и Apple. Android Studio и Xcode обладают широкими функциональными возможностями, и каждая компания вкладывает массу ресурсов в то, чтобы обеспечить им отличный опыт улучшенной отладки для соответствующих языков.

«В дополнение к потере инструментов нам также пришлось потратить время на создание инструментов, которые поддерживали бы совместное использование кода C ++. Самое главное, что нам нужна была специальная система сборки, которая создавала библиотеки, содержащие код C ++, а также оболочки Java и Objective-C, и могла генерировать цели, понятные как Xcodebuild, так и Gradle. Эта система сильно затормозила наши ресурсы, поскольку ее необходимо постоянно обновлять для поддержки изменений в двух сборочных системах».

Гутман отмечает, как должны учитываться различия между платформами, и это означает, что в любом случае это редко бывает «написать код один раз». Одним из конкретных примеров этого является то, как каждая платформа обрабатывает приложения, желающие выполнять фоновые задачи.

Принимая во внимание, что большинство платформ достигают некоторого паритета функциональности с конкурентами в ходе их разработки, Гутман отмечает, что некоторые вещи, такие как взаимодействие с камерой, со временем только расходятся.

Последнее, что подчеркивает Гутманн, — это найм и обучение разработчиков для работы над собственным стеком. Когда Dropbox начал свою мобильную стратегию, компания начала проект C ++ с опытными разработчиками, одновременно обучая других разработчиков мобильных приложений в Dropbox тому, как внести свой вклад в кодовую базу.

«Со временем эти разработчики перешли к другим командам и другим компаниям. Оставшиеся инженеры не имели достаточного опыта, чтобы заполнить открывшийся пробел в техническом лидерстве, и стало все труднее нанимать старших инженеров с соответствующим опытом в C ++, которые были бы заинтересованы в разработке мобильных приложений».