AppleTV 硬件上的 TestFlight 安装应用程序和直接 USB 运行 应用程序之间的 tvOS 区别

tvOS Difference Between TestFlight Installed App and Direct USB Run App on AppleTV Hardware

我正在努力将 TopShelf 实现添加到我的 tvOS 应用中。我还在努力创建一个 Collection View 实现,它在应用程序中具有类似的功能。两者在我的 Mac 上的模拟器中都能正常工作,但在使用 TestFlight 部署到我的 Apple TV 时却无法正常工作。我尝试使用 USB-C 电缆尝试捕获一些日志或查看 UIActivityIndi​​cator 刚刚旋转时发生了什么。我认为这可能与尝试下载太多图像或其他一些网络问题有关。我开始缓存图像,并且再次在模拟器中运行良好但在设备上运行良好。

当我插入设备和 运行 应用程序时,它可以正常工作,即使下载次数更多。我后来通过 TestFlight 更新了版本并回到了相同的位置。现在,我的应用程序每次都可以使用我自己的视图控制器和 TopShelf 部分工作,但如果通过 TestFlight 部署,则根本无法工作。我无法获得任何日志来弄清楚发生了什么,因为当我连接 USB 数据线和 运行 应用程序时,它开始工作。

有没有人见过类似的行为或知道如何解决正在发生的问题?

我能够确定发生了几件事。首先是模拟器是为调试的构建配置而设置的。我进入“编辑方案”并更改了 运行 "Release." 的构建配置,这使我能够在模拟器上重新创建我在设备上看到的内容。它还使调试变得更加容易,因为我可以轻松地添加日志来追踪代码挂起的位置。

问题的根源是我在等待网络块更新标志时有一个 while 循环什么都不做。我在其他情况下使用过这个 hack,并且从未 运行 遇到过问题。如果我在 while 循环中添加一个 NSLog 命令,它会正常运行,但循环中没有任何内容,即使网络调度已完成下载数据,它也会挂起。

为了解决这个问题,我阅读了有关使用 dispatch_semaphore_wait(信号, DISPATCH_TIME_FOREVER) 这解决了我的问题(而且我假设我的代码也更加可靠)。