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

在AWS Device Farm运行iOS XCTest时XCTAttachment符号未找到问题

解决AWS Device Farm加载XCTest Bundle失败(使用XCTAttachment时)的问题

我之前在AWS Device Farm运行iOS XCTest时也碰到过完全一样的问题!不用XCTAttachment一切正常,一用就报bundle加载失败的错,折腾了好一阵才搞定,下面是亲测有效的解决步骤:

1. 修正XCTAttachment的存储路径与生命周期

Device Farm的iOS沙盒环境和本地Xcode模拟器/真机有差异,默认的临时文件处理可能导致测试bundle无法正常加载。你需要:

  • 手动指定一个可访问的临时目录,并且确保目录存在
  • 显式设置附件的生命周期为keepAlways,避免测试成功后附件被提前删除

示例代码:

import XCTest

class YourTestClass: XCTestCase {
    func testWithAttachment() {
        // 创建自定义临时目录
        let tempDir = NSTemporaryDirectory()
        let attachmentDir = tempDir.appending("TestAttachments")
        try? FileManager.default.createDirectory(atPath: attachmentDir, withIntermediateDirectories: true, attributes: nil)
        
        // 生成附件(以截图为例)
        let screenshot = XCUIScreen.main.screenshot()
        let attachment = XCTAttachment(screenshot: screenshot)
        attachment.lifetime = .keepAlways // 关键:必须设置这个
        add(attachment)
    }
}

2. 确保测试Bundle的签名与配置正确

测试bundle的签名必须和主应用保持一致,否则Device Farm会拒绝加载:

  • 打开Xcode,进入测试Target的Signing & Capabilities页面,确认Team和主应用相同
  • 检查Bundle Identifier是否符合格式(通常是主应用ID加上.Tests后缀)
  • 打包时不要手动修改测试bundle的内容,避免破坏签名

3. 使用正确的打包命令生成测试包

不要单独上传xctest bundle,而是用xcodebuild生成包含测试配置的完整包:

# 替换成你的工作区、Scheme和目标设备
xcodebuild -workspace YourApp.xcworkspace \
           -scheme YourTestScheme \
           -destination 'platform=iOS,name=iPhone 14' \
           build-for-testing

执行完成后,会生成一个*.xctestrun文件,把这个文件和对应的主应用ipa一起上传到Device Farm即可。

4. 检查Device Farm的测试运行配置

在AWS控制台创建测试运行时:

  • 选择XCTest作为测试类型
  • 确保上传的是build-for-testing生成的完整测试包(而不是单独的xctest文件)
  • 不要在高级设置中禁用任何与附件相关的选项(如果有)

如果还是遇到问题,一定要查看Device Farm提供的完整测试日志,里面会有更详细的错误信息(比如具体是哪个文件路径出错、权限被拒绝等),可以帮你快速定位问题。

内容的提问来源于stack exchange,提问作者Milos Pesic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:13:20