From c556980c129fca439c88aec55b1bdeaed8018a8c Mon Sep 17 00:00:00 2001 From: LNPANDY Date: Thu, 29 Oct 2026 06:18:50 +0800 Subject: [PATCH] Onboarding and dependency UX: five gaps from the owner's new-user test (issue #178) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The onboarding's background-install list gains an 'Installing…' state per item (the dependency panel had one; the onboarding's own list did not). - The Xcode-missing step now says the download is free, that the first launch prompts to install the iOS SDK, and to let it finish. - The Xcode dependency row's hint says the iOS Simulator (~8 GB) is not needed and to cancel it if Xcode auto-downloads one. - dev.noTeam: the signing guidance now uses the English menu names (Xcode has no Chinese localization), names Download Manual Profiles, and says the certificate does not appear immediately — wait and press Check again. Part of issue #178 (five UX gaps from the owner's new-user test). --- frontend/Sources/NSPortBuilder/Localization.swift | 9 +++++---- frontend/Tests/NSPortBuilderTests/XcodeTeamsTests.swift | 4 +++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/frontend/Sources/NSPortBuilder/Localization.swift b/frontend/Sources/NSPortBuilder/Localization.swift index 7cf0220a..305e5536 100644 --- a/frontend/Sources/NSPortBuilder/Localization.swift +++ b/frontend/Sources/NSPortBuilder/Localization.swift @@ -90,7 +90,7 @@ enum L10n { "onboarding.xcode.checking": ("\u{6b63}\u{5728}\u{68c0}\u{67e5} Xcode\u{2026}", "Checking Xcode\u{2026}"), "onboarding.xcode.checkingNote": ("\u{6b63}\u{5728}\u{67e5}\u{627e}\u{6e38}\u{620f}\u{6240}\u{9700}\u{7684}\u{5de5}\u{5177}\u{3002}", "Looking for the tools your games need."), "onboarding.xcode.missing": ("\u{5148}\u{83b7}\u{53d6} Xcode\u{3002}", "First, get Xcode."), - "onboarding.xcode.missingNote": ("\u{4ece} App Store \u{4e0b}\u{8f7d} Xcode\u{3002}\u{8fd9}\u{662f}\u{8bbe}\u{7f6e}\u{4e2d}\u{6700}\u{5927}\u{7684}\u{4e0b}\u{8f7d}\u{9879}\u{76ee}\u{3002}", "Download Xcode from the App Store. This is the largest part of setup."), + "onboarding.xcode.missingNote": ("从 App Store 下载 Xcode(免费)——这是设置中最大的下载项。下载完成后我们会自动继续。首次打开 Xcode 会提示安装 iOS SDK——让它装完。", "Download Xcode from the App Store (free) — this is the largest part of setup. We will continue automatically when it is installed. The first launch of Xcode will prompt to install the iOS SDK — let it finish."), "onboarding.xcode.downloading": ("\u{6b63}\u{5728}\u{7b49}\u{5f85} Xcode\u{2026}", "Waiting for Xcode\u{2026}"), "onboarding.xcode.downloadNote": ("\u{8bf7}\u{8ba9} App Store \u{7ee7}\u{7eed}\u{4e0b}\u{8f7d}\u{3002}Xcode \u{5b89}\u{88c5}\u{5b8c}\u{6210}\u{540e}\u{ff0c}\u{6211}\u{4eec}\u{4f1a}\u{81ea}\u{52a8}\u{7ee7}\u{7eed}\u{3002}", "Leave the App Store download running. We will continue automatically when Xcode is installed."), "onboarding.xcode.needsSetup": ("\u{5b8c}\u{6210} Xcode \u{7684}\u{6700}\u{540e}\u{4e00}\u{6b65}\u{3002}", "One last step for Xcode."), @@ -104,6 +104,7 @@ enum L10n { "onboarding.setup.ios": ("iOS \u{5e73}\u{53f0}", "iOS platform"), "onboarding.background.title": ("\u{6b63}\u{5728}\u{540e}\u{53f0}\u{51c6}\u{5907}", "Preparing in the background"), "onboarding.background.note": ("\u{8fd9}\u{4e9b}\u{5de5}\u{5177}\u{5c06}\u{5728}\u{8bbe}\u{7f6e} Xcode \u{65f6}\u{51c6}\u{5907}\u{5c31}\u{7eea}\u{3002}", "These tools get ready while you set up Xcode."), + "onboarding.background.installing": ("正在安装…", "Installing…"), "onboarding.background.python": ("Python", "Python"), "onboarding.background.dotnet": (".NET", ".NET"), "onboarding.background.tools": ("\u{6784}\u{5efa}\u{5de5}\u{5177}", "Build tools"), @@ -155,8 +156,8 @@ enum L10n { "dev.noDevices": ("\u{6ca1}\u{6709}\u{4e0e}\u{8fd9}\u{53f0} Mac \u{914d}\u{5bf9}\u{7684} iPhone \u{6216} iPad\u{ff08}\u{9700}\u{8981} Xcode\u{ff09}\u{3002}", "No iPhone or iPad paired with this Mac (needs Xcode)."), "dev.refresh": ("\u{5237}\u{65b0}", "Refresh"), "dev.team": ("\u{7b7e}\u{540d}\u{56e2}\u{961f}", "Signing team"), - "dev.noTeam": ("Xcode 里没有 Apple ID,也没有开发证书。请在 Xcode → 设置 → 账户中登录。", - "No Apple ID in Xcode and no development certificate. Sign in to Xcode → Settings → Accounts."), + "dev.noTeam": ("Xcode 里没有 Apple ID,也没有开发证书。打开 Xcode → Settings → Apple Accounts(Xcode 菜单没有中文),登录 Apple ID 后选 Personal Team → Download Manual Profiles。证书不会立刻出现——等 30 秒左右再按「重新检测」。如果等了还没有,在 Manage Certificates 里点 + 手动创建一个 Apple Development 证书。", + "No Apple ID in Xcode and no development certificate. Open Xcode → Settings → Apple Accounts (Xcode menus are English-only), sign in with your Apple ID, select Personal Team → Download Manual Profiles. The certificate does not appear immediately — wait ~30 seconds and press Check again. If it still does not appear, click + in Manage Certificates to create an Apple Development certificate manually."), "dev.teamNoCert": ("这个团队还没有开发证书:第一次安装时 Xcode 会自动创建(Mac 需要联网)。", "This team has no development certificate yet: Xcode creates it at the first install (the Mac needs to be online)."), "dev.personalTeam": ("个人团队", "Personal team"), @@ -573,7 +574,7 @@ enum L10n { "dep.xcode.notSelected": ("Xcode 已安装,但 xcode-select 还指向 CommandLineTools——点「修复」会切换到 Xcode 并完成首次启动(会要管理员密码)。", "Xcode is installed, but xcode-select still points at CommandLineTools — Fix switches to Xcode and finishes its first launch (asks for your admin password)."), "dep.xcode.fix": ("修复", "Fix"), - "dep.xcode.hint": ("App Store 安装(Beta 版也行,用 xcode-select 指向它),约 12 GB", + "dep.xcode.hint": ("App Store 安装(Beta 版也行,用 xcode-select 指向它),约 12 GB。首次打开会提示装 iOS SDK——让它装完。不需要 iOS Simulator(约 8 GB),Xcode 如果自动下载请取消。", "from the App Store (a beta works too — point xcode-select at it), about 12 GB"), "dep.xcode.noSDK": ("Xcode 已装,但 iOS SDK 未下载(Xcode 15 起 iOS 平台是单独下载的)", "Xcode is installed but the iOS SDK is not downloaded (a separate download since Xcode 15)"), diff --git a/frontend/Tests/NSPortBuilderTests/XcodeTeamsTests.swift b/frontend/Tests/NSPortBuilderTests/XcodeTeamsTests.swift index 6a8c2eef..5a5384ca 100644 --- a/frontend/Tests/NSPortBuilderTests/XcodeTeamsTests.swift +++ b/frontend/Tests/NSPortBuilderTests/XcodeTeamsTests.swift @@ -98,8 +98,10 @@ final class XcodeTeamsTests: XCTestCase { XCTAssertNotEqual(m.t("dev.personalTeam"), "dev.personalTeam") } let m = BuildModel(); m.lang = .en - XCTAssertTrue(m.t("dev.noTeam").contains("Settings → Accounts")) + XCTAssertTrue(m.t("dev.noTeam").contains("Settings → Apple Accounts")) XCTAssertTrue(m.t("dev.noTeam").contains("no development certificate")) + XCTAssertTrue(m.t("dev.noTeam").contains("Download Manual Profiles")) + XCTAssertFalse(m.t("dev.noTeam").contains("(null)")) XCTAssertTrue(m.t("dev.teamNoCert").contains("first install")) } }