2

我有一个带有 Today Extension 的 iOS 应用程序。我们现在正在测试(TestFlight),并且已经在大约十台设备上进行了测试。关联的小部件在除其中一台设备之外的所有设备上都可以正常显示。在一台设备上,小部件会显示可怕的“无法加载”消息。我们尝试过重启设备、删除/重新安装应用程序等。

查看设备日志,我看到这是第一个麻烦的参考:

container: WGMajorListViewController> Unable to load widget view controller with service (com.mycompany.MyApp.myApp-Today-Extension): Couldn\M-b\M^@\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 版本的小部件,尽管该版本是针对 iOS 9 和 Xcode 7 构建的。新版本使用 10.3 作为其基本 SDK,使用 Xcode 8.3.3。

有什么想法吗?

4

2 回答 2

4

还有一次会发生这种情况,那就是如果在您的 Scheme 目标的 Run Diagnostics 部分下,您已经打开了 Thread Sanitizer / Undefined Behavior Sanitizer。它似乎不喜欢这些选项。

于 2017-09-19T22:04:06.957 回答
3

哇,这很奇怪。问题的根源是一个坏的图像,或者更具体地说是坏的图像代码(从 PaintCode 导出)。该代码似乎在 3 倍的“Plus”尺寸设备上给 Widget 的 Storyboard 带来了麻烦。故事板从未初始化。

我使用(并且喜欢)PaintCode,并且在我可以使用的任何地方都使用它的图像代码。一切都是矢量,可用于任何大小。好东西。无论如何,您可以通过将 PaintCode 代码分配给拖入情节提要的对象来在情节提要中使用 PaintCode 图像。然后从该对象控制拖动到同一情节提要上的 UIImageView。在运行时,无论设备分辨率或图像大小如何,都可以完美绘制图像。

Widget 的 Storyboard 包含三个图像,均来自 PaintCode。三张图片中的一张导致了问题。如果我删除图像,一切都很好。添加回来,小部件永远不会启动,并显示“无法加载”。图像并不复杂,据我所知。只是在 Sketch 中绘制的矢量图标。

我无法弄清楚为什么该图像行为不端。我玩了 PaintCode 设置,导出了几种方法,没有变化。所以我使用 Sketch 创建了一个 PDF 资产,并使用了典型的资产目录来制作图像。

透过控制台,我完全看不到任何线索,即使回想起来也是如此。我猜测,由于 Swift 代码从未启动,而这只是“加号”大小问题,可能存在 Storyboard 问题。删除所有 AutoLayout 约束后,我的直觉是损坏的 Storyboard 文件。所以我通过 Widget 故事板重新创建,并在此过程中进行测试。当我重新添加 PaintCode 图像时它坏了。一旦我有了这个,我回到我原来的故事板,拉出有问题的图像,小部件显示正常。

我会精简项目并将副本发送给 PixelCut 的优秀人员,让他们知道。如果他们有解决方法,我会在这里发布。

于 2017-07-13T13:02:11.107 回答