Мир разработки SDK

Лучшая работа, о которой вы никогда не слышали.

Мои последние 6 лет профессионального развития были сосредоточены на разработке, создании и поддержке SDK в Chartboost, а до этого - в другой большой голубой компании. Я рада поделиться своим опытом обучения, почему мне это нравится и почему я думаю, что вы тоже можете это сделать. Это очень сложная и интересная часть мобильной разработки, в которую не многие разработчики действительно могут вникнуть. Это сделало меня лучшим разработчиком и мыслителем критически.

Когда я впервые начал работать в Chartboost, мне было поручено найти и решить проблему, с которой столкнулся заказчик. Мне дали несколько трассировок стека и небольшой контекст проблемы. Когда вы не управляете приложением, у вас не будет легкого доступа к отчетам о сбоях или пользовательским отчетам, и часто, когда вы их получаете, они часто отредактированы или неполны.

В этом случае отчеты не были полностью символичными. Были упомянуты только методы C, смещения памяти были огромными, а порядок, в котором методы появлялись в трассировке, не имел смысла. К сожалению, это были единственные трассировки стека, которые я собирался получить, и издатель терял терпение, поэтому я приступил к работе.

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

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

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

Я вернулся в режим исследования и обнаружил еще один инструмент под названием nm. Этот удобный инструмент дал мне только имена символов и адреса, которые работали намного лучше. Я смог выполнить поиск и вычисление памяти, чтобы найти настоящие методы намного быстрее. Достаточно быстро, чтобы я декодировал все различные трассировки стека. Используя мой недавно созданный стек вызовов, я смог легко найти и исправить проблемы, вызывающие боль.

Несмотря на количество времени и усилий, затраченных на это упражнение, я был в восторге. Я много узнал о том, как создаются двоичные файлы, как они структурированы и как использовать инструменты для работы с ними. Я смог разгадать тайну, используя различные методы решения проблем. В результате я порадовал и своего клиента, и команду, решив сложную проблему.

Масштаб - еще одна интересная часть такой работы. Как и в мире серверов и облачных вычислений, чем больше у вас пользователей, тем больше проблем с технологиями вам нужно беспокоить. Разница в том, что вместо масштабирования производительности необходимо масштабировать качество. Чем больше пользователей у приложения, тем выше вероятность того, что вы столкнетесь с редкими крайними случаями или проблемами параллелизма. Наш масштаб измеряется не пользователями одного приложения, а общим количеством пользователей тысяч приложений, опубликованных нашими клиентами. Это означает, что если есть шанс, что что-то пойдет не так, то так и будет.

Наш последний проект включает создание нового продукта Helium, основанного на программных торгах, который оставит каскадное посредничество в прошлом. Этот новый SDK создал некоторые проблемы, с которыми мы не сталкивались раньше. Помимо обычных точек интерфейса приложения хостинга и облачных конечных точек, Helium SDK должен будет работать с SDK других рекламодателей. Мы разработали и повторили архитектуру, которая упростила бы добавление новых партнеров, оставаясь при этом производительной, надежной и простой для интеграции.

В настоящее время мы ищем инженера-программиста в нашу команду, смотрите наши открытые вакансии здесь.