Сегодня днем многие пользователи разных мобильных приложений, преимущественно под iOS, стали жаловаться на проблемы и сбои при попытке их запуска. Приложения, включая Spotify, Viber, Pinterest, «Яндекс.Навигатор/Карты/Музыка/Такси», TikTok, Tinder, Monobank, privat24, UEFA, Додо Пицца, Авито, Авто.ру и другие вылетали, выдавали ошибки и не работали. Разработчики также зафиксировали эту ситуацию и даже совместно отслеживали эти проблемы на GitHub. Например, некоторые разработчики получали отчеты о том, что их приложения крашились более двух тысяч раз и больше, пока пользователи просто не стали их запускать. Самое большое количество проблем было зафиксировано одним из разработчиков — около 500 тыс. ошибок при запуске за 20 минут.
Оказалось, что проблема была связана с проблемными элементами программного обеспечения Facebook SDK (при использовании FBSDK с версиями компонентов FBSDKCoreKit 5.0.2, 5.5.0, 5.8.0, 5.13.1, 5.15.1, 6.3.0, 7.0.0 и других, но с версией 7.1.1 все работало без проблем), который использовали эти приложения. Разработчики Facebook подтвердили наличие проблем и рассказали, что уже устранили их после более пяти часов после начала возникновения первых инцидентов.
Причем сторонние разработчики вдобавок зафиксировали, что мобильные приложения Facebook, WhatsApp, Instagram и Messenger продолжали работать без проблем, когда остальные приложения падали и выдавали ошибки.
Пользователи экспериментировали — оказалось, что если отключить на смартфоне доступ в интернет полностью, то проблемные приложения запускались нормально, но как только включать доступ в сеть, то приложения сразу падали.
Разработчики предупреждали пользователей как могли, поясняя, что это техническая проблема, которая будет исправлена ??в ближайшее время, а пользователям не нужно пытаться удалять и переустанавливать эти приложения:
Ранее месяц назад подобная проблема тоже была зафиксирована разработчиками мобильных приложений. Тогда выяснилось, что эти ошибки были связаны с обновлением некоторых компонентов Facebook SDK, но в компании также устранили их за несколько часов.
gudvinr
Как говорится, eat your own dog food. Разработчики фейсбука свой SDK не используют, у них и нет проблем (или обновляют его вместе с приложениями, вот последняя версия и работает). А то что у других всё колом стало — это их деньги и заботы.
В целом, урок здесь важный — надо проверять что используешь, а не доверять кому попало, особенно когда кто попало делает комбайны, которые непонятно что делают и отправляют непонятно куда.
andrew8712
А что вы предлагаете? Не использовать Facebook SDK? Это практически невозможно в современной мобильной разработке.
tuxi
Слава Богу, что хирурги все еще могут делать операции без fb sdk. Этот мир сходит с ума.
mickvav
Обвешать try/catch и аккуратно обрабатывать исключения не пробовали? Вот вообще не понятно, почему основной функционал Viber-а без Facebook SDK работать не может…
BugM
Вы не поверите, но в айфонах это не выйдет by design.
Упало в таком месте, которое не обвесить.
Ради справедливости: Есть версия что обвесить можно было, но сильно нетривиально. Разумный разработчик так в таком месте код писать не будет. Хотя после такого может и начнут.
debug45
Как выяснилось, их SDK переопределяло внутри себя системный метод, вызываемый при запуске приложения, и там же вчера падало. То есть ты как разработчик мог бы вообще ни одного метода Facebook SDK не вызвать, но приложение сломалось бы уже от одного лишь факта подключения библиотеки. Итого, try/catch здесь не помогли бы.
Пофиксить такую беду можно, но это действительно относительно нетривиальная задача. Видимо, теперь iOS-разработчики обратят на это больше внимания.
dopusteam
"их SDK переопределяло внутри себя системный метод, вызываемый при запуске приложения"
Это вообще законно? А есть информация, что им такого понадобилось перекрывать там?
tbl
если API платформы позволяет, то почему бы и да?
debug45
Для этого не нужно какое-то приватное системное API или вроде того, так что законно, да. Таким образом они автоматически инициализируют библиотеку, оставляя этот процесс под собственным контролем.
dopusteam
Я скорее к тому, что с одной стороны 'системный метод, вызываемый при запуске приложения', а с другой 'приложение сломалось бы уже от одного лишь факта подключения библиотеки'.
Т.е., я правильно понимаю, что это системный вызов, который вызывается при запуске ЛЮБОГО приложения?
debug45
Да, это «didFinishLaunching»
tbl
Идея авторов библиотеки делать успешность запуска любого приложения, использующего эту библиотеку, зависимой от работоспособности удаленного стороннего (по отношению к авторам приложения) сервера — это за гранью добра и зла.
debug45
Ну вряд ли они планировали, что повлияют на запуск приложений — вероятно, просто в нужном месте забыли поставить try/catch
tbl
Разраб "1" фейсбука, который писал код, переопределяющий внутри себя системный метод не думал, что при развитии библиотеки туда будет вставлен код, ходящий по сети. Разраб "2" фейсбука, который писал некий код для SDK, ходящий по сети, не думал, что тот будет вызван при инициализации библиотеки. Разраб "3" фейсбука, который на хуке системного метода, реализованного разрабом "1", воткнул вызов кода, написанного разрабом "2", и не подумал, что возможен данный факап: "Я думал, что везде в критических местах проставлены try/catch".
А в это время где-то на полочке в фейсбучной jira покоится и ждет своего героя эпик: "Facebook SDK: unattended, safe and lazy SDK initialization"
beduin01
Вы не поверите, но многим не только Facebook SDK, но и сам Facebook не нужен
0xf0a00
Да ну чо правда что ли? Получается что сначала сделали fd sdk и только потом появилась мобильная разработка? А может признаемся себе что ленивые головотяпы в мобильной разработке не хотят работать, а хотят как мартышки брать чужое где надо и не надо.
dartraiden
Это не поможет
habr.com/news/t/510510/#comment_21835498
v1000
Некоторые разработчики в своё время использовали Google+ в качестве логина в свои приложения, там тоже довольно неплохо получилось