Сегодня расширение "невозможно загрузить" на ограниченные устройства
У меня есть приложение iOS с расширением Today. Мы сейчас проводим тестирование (TestFlight) и протестировали примерно десять устройств. Соответствующий виджет прекрасно отображается на всех этих устройствах, кроме одного. На одном устройстве виджет отображает страшное сообщение "не удается загрузить". Мы пытались перезапустить устройство, удалить/переустановить приложение и т. д.
Глядя на журнал устройств, я увидел, что это первая неприятная Ссылка:
container: WGMajorListViewController> Unable to load widget view controller with service (com.mycompany.MyApp.myApp-Today-Extension): CouldnM-bM^@M^Yt communicate with a helper application.
container: WGMajorListViewController> No longer waiting on connection semaphore (<OS_dispatch_semaphore: 0x174c85410>)
container: WGMajorListViewController> Severed remote view controller connection
container: WGMajorListViewController> Widget disconnected unexpectedly
container: WGMajorListViewController> Aborting active life cycle sequence: <WGWidgetLifeCycleSequence: 0x175035460; sequenceID: com.mycompany.MyApp.myApp-Today-Extension.WGMajorListViewController.7/11/17, 3:13:00 PM; currentState: WGWidgetLifeCycleSequenceStateDidRequestRemoteView>
container: WGMajorListViewController> Remote view controller disconnected unexpectedly
container: WGMajorListViewController> Attempting to reconnect to remote view controller
Код расширения не делает любая попытка открыть хост-приложение, так что ошибка меня озадачила. Возможно, это относится к внутреннему (iOS) вспомогательному приложению?
Нечетные экранированные символы в этой первой строке находятся в журнале. После этих строк он пытается снова, может быть, еще дважды, а затем терпит неудачу. В конце концов я вижу Can't request remote view controller that is blacklisted, и устройство не будет пытаться снова до перезагрузки:
mediaserverd(CoreMedia)[27] <Notice>: -CMSessionMgr- cmsmHandleApplicationStateChange: CMSession: Client com.mycompany.MyApp.myApp-Today-Extension with pid '257' is now Terminated. Background entitlement: NO
mediaserverd(CoreMedia)[27] <Notice>: -CMSessionMgr- cmsmHandleApplicationStateChange: CMSession: Client com.mycompany.MyApp.myApp-Today-Extension with pid '259' is now Terminated. Background entitlement: NO
symptomsd(SymptomEvaluator)[121] <Notice>: 257 com.mycompany.MyApp.myApp-Today-Extension: Terminated (most elevated: Terminated)
symptomsd(SymptomEvaluator)[121] <Notice>: 259 com.mycompany.MyApp.myApp-Today-Extension: Terminated (most elevated: Terminated)
symptomsd(SymptomEvaluator)[121] <Notice>: Entry, display name com.mycompany.MyApp.myApp-Today-Extension uuid (null) pid 257 isFront 0
symptomsd(SymptomEvaluator)[121] <Notice>: Duplicate removal of display name com.mycompany.MyApp.myApp-Today-Extension
symptomsd(SymptomEvaluator)[121] <Notice>: Entry, display name com.mycompany.MyApp.myApp-Today-Extension uuid (null) pid 259 isFront 0
symptomsd(SymptomEvaluator)[121] <Notice>: Duplicate removal of display name com.mycompany.MyApp.myApp-Today-Extension
container: WGMajorListViewController> End sequence '(null)' with reason: disappearance transition
container: WGMajorListViewController> Can't end sequence as argument sequence ((null)) doesn't match active sequence ((null)), or there's no active sequence
container: WGMajorListViewController> Begin sequence with reason: appearance transition
container: WGMajorListViewController> Initiating new life cycle sequence: '<WGWidgetLifeCycleSequence: 0x17522b6e0; sequenceID: com.mycompany.MyApp.myApp-Today-Extension.WGMajorListViewController.7/11/17, 3:13:12 PM; currentState: WGWidgetLifeCycleSequenceStateQuiescent>'
container: WGMajorListViewController> Connection requested with reason: 'appearance transition'
container: WGMajorListViewController> Will request remote view controller
container: WGMajorListViewController> Can't request remote view controller that is blacklisted
Я не вижу никакого входа из самого кода расширения, ни каких-либо признаков того, что он действительно запускается.
Рассматриваемое устройство является iPhone 7 Plus, работающий под управлением общедоступной версии iOS 10.3.2. Виджет отлично работает на всех других устройствах, многие из которых также являются 10.3.2. Ни один из других не является iPhone 7 Plus. Виджет отлично работает в симуляторе iPhone 7 Plus.
На том же устройстве работает версия виджета App Store fine, хотя эта версия построена против iOS 9 с Xcode 7. Новая версия использует 10.3 в качестве базового SDK, используя Xcode 8.3.3.
Какие-нибудь мысли?
2 ответов:
Вау, это было странно. Корнем проблемы было плохое изображение, или, точнее, плохой код изображения (экспортированный из PaintCode). Код, кажется, дает раскадровку виджета проблемы на устройствах "плюс" размера, которые являются 3x. раскадровка никогда не инициализируется.
Я использую (и люблю) PaintCode, и использую его код изображения везде, где могу. Все является вектором, пригодным для использования в любом размере. Хороший материал. В любом случае, вы можете использовать изображения PaintCode в раскадровках, назначив код PaintCode какой-то предмет втащили в раскадровку. Затем перетащите элемент управления из этого объекта в UIImageView на той же раскадровке. Во время выполнения изображение рисуется идеально, независимо от разрешения устройства или размера изображения.
Раскадровка виджета содержит три изображения, все из PaintCode. Одна из трех картинок была причиной проблемы. Если я уберу изображение, все будет хорошо. Добавьте его обратно, виджет никогда не запускается и показывает "не удается загрузить". Изображение не сложное, насколько я могу судить. Просто векторная иконка нарисовано в эскизе.
Я не мог понять, почему этот образ плохо себя вел. Я играл с настройками PaintCode, экспортировал несколько способов, без изменений. Поэтому я использовал Sketch для создания PDF-ресурса и использовал типичный каталог активов для изображения.
Глядя через консоль, я не вижу абсолютно никаких подсказок, даже в ретроспективе. Я предположил, что поскольку Swift-код никогда не запускался, и это была только проблема с размером "плюс", возможно, была проблема с раскадровкой. Мое внутреннее чувство, как только я удалены все ограничения AutoLayout поврежденный файл раскадровки. Так что я воссоздал виджет раскадровки, и тестирование по пути. Он сломался, когда я добавил изображения PaintCode обратно. Как только я это сделал, я вернулся к своей оригинальной раскадровке, вытащил неприятное изображение, и виджет отобразился нормально.Я урежу проект и отправлю копию прекрасным людям в PixelCut, чтобы они знали. Если у них есть обходной путь, я напишу здесь.
Есть еще один раз, когда это произойдет, и это если в разделе выполнить диагностику целевой схемы у вас включен очиститель потока / неопределенное поведение. Похоже, ему не нравятся эти варианты.
Comments