You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Xcode Cloud识别fulfillment(of:timeout:enforceOrder:)方法?

Xcode Cloud无法识别fulfillment(of:timeout:enforceOrder:)方法的解决方案

本地运行异步测试时,fulfillment(of:timeout:enforceOrder:)方法可正常工作,但在Xcode Cloud环境中执行测试时,报错「Cannot find 'fulfillment' in scope」。当前Xcode Cloud使用Xcode 14.3.1 (14E300c)和macOS Ventura 13.5 (22G74),将代码替换为wait(for: [expectation], timeout: 0.1)可运行,但会收到「Instance method 'wait' is unavailable from asynchronous contexts; Use await fulfillment(of:timeout:enforceOrder:) instead; this is an error in Swift 6」的警告,并非最优解。

触发问题的异步测试代码:

func testThatFooThrows() async throws  {
  // GIVEN
  let expectation = expectation(description: "Expect to throw error")

  let fooMock = FooMock<Bar>()
  fooMock.failWithBadUrlError()

  let sut = FooService(contentID: "Test", myService: fooMock)

  // WHEN
  do {
      _ = try await sut.doSomething()
  } catch {
      expectation.fulfill()
  }

  // THEN
  await fulfillment(of: [expectation], timeout: 0.1)
}

可能的解决办法

  • 确认测试类基础设置:确保测试类正确继承自XCTestCase,并且文件顶部导入了import XCTest框架,Xcode Cloud环境对模块导入的检查可能更严格。
  • 统一Swift版本配置:检查本地项目的Swift版本(项目设置中的Swift Language Version),确保Xcode Cloud的构建配置使用完全相同的版本,版本不匹配可能导致API识别异常。
  • 验证异步方法声明:确认测试方法的async throws声明正确,fulfillment调用前的await关键字没有遗漏,Xcode Cloud的编译器对异步语法的校验可能更严格。
  • 清理构建缓存:在Xcode Cloud的构建流程中添加清理缓存步骤(比如执行xcodebuild clean),避免旧的构建产物干扰新的测试执行。
  • 显式指定模块访问:尝试将fulfillment调用改为await XCTest.fulfillment(of: [expectation], timeout: 0.1),显式指定XCTest模块,解决环境中的模块查找问题。

内容的提问来源于stack exchange,提问作者Rafał Sroka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:20:08