Год назад Apple выпустила iOS7, которая представляет собой крупнейший визуальный пересмотр в истории iOS. В то время как недавно выпущенная iOS8 не имела нового роскошного интерфейса, огромное количество изменений было сделано для еще одного большого скачка в операционной системе.
С более чем 4000 новых API, двумя новыми устройствами и совершенно новым языком программирования разработчики столкнутся с некоторыми проблемами роста, обновляя свои приложения до последних и самых лучших. Фактически, начиная с выпуска iOS8, Crittercism демонстрирует увеличение аварийности более чем на 78% для приложений, работающих на iOS8 и выше, по сравнению с приложениями на iOS7.
В то время как пользователи взволнованно обновлений своего телефона и приложений в умопомрачительном темпе , что может сделать разработчик , чтобы сгладить переход к iOS8 и держать их пользователь счастливыми?
Вы должны обновить свое приложение?
Как разработчик, вы можете почувствовать, что откладывание обновления вашего приложения до iOS8 SDK до тех пор, пока все уладится, является правильным подходом — но это не обязательно безопасная игра. Apple не только добавила API, но и изменила способы взаимодействия пользователей и разработчиков со многими частями операционной системы. Это не только может вызвать сбои, но и неожиданное поведение для ваших пользователей. Несколько основных проблем, которые мы видели, включают:
Управление фото
После обновления вы могли заметить некоторые изменения при просмотре фотографий. Фотопленка исчезла! Наряду с этим изменением UX, API, которые позволяют разработчикам получать доступ к фотографиям, также переключились на использование новой платформы под названием Photos . Если ваше приложение пытается получить доступ к фотографиям из Camera Roll в iOS8, оно может столкнуться с серьезными проблемами и доставить пользователям непоследовательный опыт.
Всплывающее уведомление
Другая проблема, на которую стоит обратить внимание, — это разница в том, как push-уведомления реализованы в последней ОС. Если пользователи загружают ваше приложение на iOS8, а вы все еще используете устаревший код для регистрации в качестве устройства push, установка push завершится неудачей! Ранее регистрация на push выглядела примерно так:
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
Однако в iOS8 — вы должны использовать следующие методы:
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert) categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; [[UIApplication sharedApplication] registerForRemoteNotifications];
Чтобы обрабатывать как новые, так и старые ОС, вы можете собрать блок кода, подобный следующему:
- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { ... // check if iOS8 if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) { UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert) categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } else { [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; } ... }
Были введены новые обратные вызовы, но для традиционного push — обратный вызов не должен изменяться:
- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // do something with the token }
Сторонние крашеры
Многие из нас, разработчиков, любят использовать сторонние инструменты, чтобы сэкономить время и головные боли в процессе разработки. Что не нравится в бесплатном коде? Ничего — пока ты делаешь домашнее задание.
Убедитесь, что ваши сторонние инструменты используют официально поддерживаемые API Apple, которые будут более дружественными к изменениям SDK. Также следите за тем, насколько активен проект. Они обновляются с iOS8 или хотя бы комментируют новую ОС? Они делают то, что им нужно, чтобы убедиться, что их библиотека будет работать в разных версиях ОС?
Во многих случаях вам может не о чем беспокоиться, но лучше быть в безопасности, чем потом сожалеть. Такие инструменты, как Crittercism, также помогают получить представление о сторонних инструментах, чтобы помочь вам определить любые проблемы, которые могут возникнуть через внешние библиотеки или API, которые вы можете использовать.
Помни свою память
Многие из нас, разработчиков, любят быть на переднем крае — загружать последние бета-версии и предварительно заказывать новейшие устройства. По слухам, iPhone 6 имеет 1 ГБ ОЗУ , что дает разработчикам большую свободу в управлении ресурсами, но iOS8 можно загрузить на трехлетний iPhone 4S, у которого половина памяти младшего, большего брата.
Не забудьте протестировать с различными условиями памяти, и на старых устройствах, если это возможно. Несмотря на то, что ARC значительно уменьшил количество сбоев из-за выделения памяти, вам все равно нужно быть умным при загрузке ресурсов и представлений, чтобы обеспечить удобство работы пользователей.
Итерация быстро
Как и в случае с любым приложением, в качестве разработчика вы можете провести только столько испытаний, сколько новых ошибок обязательно появятся в различных системах, устройствах и конфигурациях. Наличие инструмента мониторинга производительности, такого как Crittercism, позволяет вам выявлять эти неуловимые ошибки после запуска вашего приложения, получать более глубокое представление о причинах этих сбоев и позволяет быстрее их исправлять. Ваши пользователи будут рады видеть проблемы, решаемые своевременно, поэтому не бойтесь их выпускать, но убедитесь, что у вас есть быстрое время для устранения любых ошибок, которые появляются.
Становится лучше
Сама Apple не застрахована от этих проблем и постоянно работает над улучшением стабильности своих ОС и инструментов. iOS8 был выпущен со многими известными проблемами — но, что еще хуже, их версия 8.0.1 была выпущена через час после отключения службы сотовой связи для многих из тех, кто обновился.
Исторически Apple обновлялась быстро после основных выпусков .0, поскольку они собирают отзывы и собственные отчеты. Фактически, они уже выпустили 8.0.2, которая разрешила ряд проблем, с которыми разработчики сталкивались в новых API.
Несмотря на то , что с момента выхода iOS8 сбоев стало больше, не бойтесь обновлять свое приложение! Проверяйте инструменты и API, которые вы используете, и обязательно следите за производительностью вашего приложения после выпуска обновления. По крайней мере, убедитесь, что ваши пользователи на iOS8 получают надлежащее взаимодействие с пользователем после недавних изменений ОС. Ожидайте улучшения стабильности в ближайшие недели и месяцы, так как Apple обновляет свою ОС, а разработчики и пользователи продолжают обновлять свои приложения до последней и самой лучшей версии.