Xcode 15导出本地化截图时“包含截图”复选框置灰问题
问题描述
刚安装Xcode 15,使用Xcode提供的基础Hello World示例尝试导出本地化截图,但点击Product>Export localizations时,"Include screenshots"复选框呈灰化状态。已创建测试计划并完成以下设置:
- Application Language设为English
- Application Region设为United States
- 开启Automatic Screen Capture并设置为“保留全部”
- Preferred Capture Format设为Screenshot
- 开启Localization Screenshots
- 开启Attachments并设置为“保留全部”
测试代码如下:
import XCTest final class JumboUITestsLaunchTests: XCTestCase { override class var runsForEachTargetApplicationUIConfiguration: Bool { true } override func setUpWithError() throws { continueAfterFailure = false } func testLaunch() throws { let app = XCUIApplication() app.launchArguments = ["-AppleLanguages", "(en)", "-AppleLocale", "en_US"] // Launch the app in English app.launch() // Insert steps here to perform after app launch but before taking a screenshot, // such as logging into a test account or navigating somewhere in the app let screenshot = app.screenshot() let attachment = XCTAttachment(screenshot: screenshot) attachment.name = "Localization Screenshot" attachment.lifetime = .keepAlways add(attachment) } }
目前能在Report Navigator的对应测试用例“Gallery”中看到截图,但无法在导出本地化时勾选“包含截图”选项,请问问题出在哪里?
问题排查与解决
以下是导致复选框灰化的常见原因及对应修正方案:
1. 测试计划未关联主应用目标
Xcode需要明确测试计划属于哪个应用目标,才能识别其生成的本地化截图。
- 打开你的测试计划文件(
.xctestplan) - 在左侧导航栏的“Targets”区域,勾选你的主应用目标
2. 截图附件命名不符合本地化识别规则
Xcode仅会识别命名格式为Localization-<自定义标识符>的截图附件作为本地化截图,当前代码中的"Localization Screenshot"不符合要求。
- 将附件名称修改为类似
"Localization-MainLaunchScreen"的格式 - 确保
attachment.lifetime保持为.keepAlways(当前代码已满足)
3. 测试用例未标记为本地化截图类型
需要在测试计划中明确指定测试用例的用途为本地化截图:
- 打开测试计划文件,切换到“Tests”标签页
- 找到
testLaunch用例,在右侧“Options”面板中,将“Test Type”设置为“Localization Screenshot”
4. 未通过测试计划完整运行测试
单独运行单个测试方法生成的截图不会被Xcode标记为可用于本地化导出的资源,必须通过测试计划执行完整测试:
- 在Xcode顶部工具栏的方案选择器中,选中你的测试计划
- 点击运行按钮,执行全部测试用例,确保生成的测试报告被正确标记
修正后的示例代码
import XCTest final class JumboUITestsLaunchTests: XCTestCase { override class var runsForEachTargetApplicationUIConfiguration: Bool { true } override func setUpWithError() throws { continueAfterFailure = false } func testLaunch() throws { let app = XCUIApplication() // 测试计划已配置语言区域,可移除硬编码的启动参数避免冲突 app.launch() // 等待界面元素加载完成,确保截图内容正确 XCTAssertTrue(app.staticTexts["Hello, world!"].waitForExistence(timeout: 5)) let screenshot = app.screenshot() let attachment = XCTAttachment(screenshot: screenshot) // 符合本地化截图命名规则 attachment.name = "Localization-MainLaunchScreen" attachment.lifetime = .keepAlways add(attachment) } }
内容的提问来源于stack exchange,提问作者Stanley
相关产品推荐
相关产品推荐

