Ios 在CI服务器上进行单元测试期间,AVPlayer无法加载文件

Ios 在CI服务器上进行单元测试期间,AVPlayer无法加载文件,ios,continuous-integration,avplayer,Ios,Continuous Integration,Avplayer,我有一些单元测试导致AVPlayer加载本地文件。该文件是测试包中的一个小(~2KB)m4a音频文件。这些测试对我来说都是本地的 在Travis上设置项目时,我注意到导致AVPlayer加载文件失败的测试。我尝试了其他几种CI服务,也遇到了同样的问题。我增加了测试超时时间,但运气不好。所有其他测试都通过了 我加载的文件如下(简化): 我的代码观察AVPlayer.currentItem.status。在CI上运行时,观察者以状态激发。失败。player.error为nil,player.curr

我有一些单元测试导致
AVPlayer
加载本地文件。该文件是测试包中的一个小(~2KB)
m4a
音频文件。这些测试对我来说都是本地的

在Travis上设置项目时,我注意到导致
AVPlayer
加载文件失败的测试。我尝试了其他几种CI服务,也遇到了同样的问题。我增加了测试超时时间,但运气不好。所有其他测试都通过了

我加载的文件如下(简化):

我的代码观察AVPlayer.currentItem.status。在CI上运行时,观察者以状态
激发。失败
player.error
nil
player.currentItem.error
为:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x7f86e1cd8070 {Error Domain=NSOSStatusErrorDomain Code=-101 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-101), NSLocalizedDescription=The operation could not be completed}
有趣的是,在另一个测试中,我故意尝试加载一个损坏的文件(断言它无法播放,并且我的代码返回相关错误),我得到了以下错误,这是预期的,并表明从文件系统读取没有问题:

Error Domain=AVFoundationErrorDomain Code=-11829 "Cannot Open" UserInfo={NSUnderlyingError=0x7f86e1cd7ba0 {Error Domain=NSOSStatusErrorDomain Code=-12848 "(null)"}, NSLocalizedFailureReason=This media may be damaged., NSLocalizedDescription=Cannot Open}
更新


我看到在本地测试时,我偶尔(可能一天工作一次)也会遇到类似的失败。这似乎是当我打开Xcode和项目时的新鲜感,然后开始工作。可能是AVFoundation中的某些东西需要一段时间才能初始化?我希望能够模拟
AVPlayer
,也许我会为它添加一个协议,
AVPlayerItem

我遇到了完全相同的问题和错误。 起初,我尝试了视频和音频文件,但没有成功。 然后,我解决了创建没有音频的视频的问题。 我怀疑这个问题是由于Travis CI的虚拟机没有声卡,导致操作系统错过了一些能够复制文件的内容

尽管如此,我不能100%确定是音频的缺乏还是视频的输出方式解决了这个问题


出于好奇,您是否尝试过在自己的计算机上运行测试?是的,所有测试都通过。其中一个错误对应于
AVErrorFileFailedToParse
。这些文件会被破坏吗?或由于权限而无法读取?还是失踪?Spotlight过去常常在意外的时间(以独占方式?)打开文件,导致偶尔出现问题。啊哈,权限听起来是个不错的选择。是的,第二个错误来自一个故意损坏的文件,以测试我的错误处理,但正如所述,错误是预期的并已处理()。我认为这可能是潜在的问题-AVPlayer确实依赖于音频接口。这是一个真正的痛苦,这东西是如此难以单元测试!我最后的结论是,
AVFoundation
playback在没有(可能)音频硬件的CI上根本不起作用。这本身是可以理解的,但令人沮丧的是,API不是基于协议的,在Swift中很难模仿。我用以下开关关闭了音频测试:
-跳过测试:MyTests/AudioEngineSpect
Error Domain=AVFoundationErrorDomain Code=-11829 "Cannot Open" UserInfo={NSUnderlyingError=0x7f86e1cd7ba0 {Error Domain=NSOSStatusErrorDomain Code=-12848 "(null)"}, NSLocalizedFailureReason=This media may be damaged., NSLocalizedDescription=Cannot Open}