iPhone/iPod/iPad Initialization error
Russian | English
Немного подумав куда положить эту статью, решил, что в разделе про машину она будет полезнее.
Итак, в процессе разработки собственного аудио-плеера для iOS я столкнулся с проблемой подключения его к головному устройству моего Genesis Coupe.
Выглядит проблема крайне странно. Телефон подключается только один раз: либо при включении головного устройства, либо после перевого Initialization Error, переключения на радио, а потом выбора Aux. Третий и последующие разы, при этом, стабильно Initialization Error.
Я потратил почти пол года вновь и вновь возвращаясь к этой проблеме.
Также нашёл тему раз и тему два на форумах автовладельцев, но и там не оказалось решения.
Перепробовав массу вариантов мне всё же удалось найти и решить проблему!
Проблема оказалась, с одной стороны, элементарна, с другой стороны, крайне тяжело идентифицируема.
Итак. Вся проблема в MPRemoteCommandCenter.shared().changeShuffleModeCommand ! Дело в том, что этот API появился начиная с iOS 10.0. Т.е. до этого его официально не было. Если учесть, что авто начали выпускать в 2009 году, то головное устройство было разработано ещё раньше.
На проблему с обработкой этих команд меня натолкнуло как раз таки то, что после корректного подключения - и смена порядка воспроизведения и смена повтора успешно управлялись с головного устройства.
И стоило мне только отключить эти команды в моём приложении - и вуаля! Теперь мой плеер успешно подключается к головному устройству каждый раз!
Итак, чтобы иметь возможность корректно работать с нашим головным устройством, приложение должно НЕ поддерживать (или отключать) команду changeShuffleModeCommand перед подключением к головному устройству.
В общем, чтобы решить проблему - достаточно использовать приложение из AppStore, которое не умеет changeShuffleModeCommand. К сожалению, все стандартные приложения умеют работать changeShuffleModeCommand о чём радостно рапортуют головному устройству, приводя его в нерабочее состояние. Могу порекомендовать использовать JetAudio для воспроизведения музыки.
P.S. Пока что автоматическое включение/выключение придумать не удалось.
English version
When I was working on my audio player for iOS I faced with an issue. After a connection of an iPhone to a car's audio I received "Initialization Error". It was very interesting, because I may get correct connection only on first or on second time. After that car's audio told me every time Initialization Error and switched on Radio.
I spent about half of a year to check different solutions. I found two similar issues on forums: subject 1 раз and subject 2, but there were no descriptions and/or solutions.
And finally I found an issue and a solution!
Problem causes by wrong implementation of changeShuffleModeCommand from car's audio system side.
If this feature is enabled by application - connection will always fail. But if it is disabled - everything will be OK.
So, if you want to play music from your iPhone/iPod/iPad you need to find an application in AppStore which doesn't support changeShuffleModeCommand. Unfortunatelly, even default applications can work with changeShuffleModeCommand and report about that. And break a car's audio.
I could recommend JetAudio as a media player which doesn't support (don't know why) it isn't implemented.