From 74d7ca31ff3d22440199900b4f2bef5bc7cf2327 Mon Sep 17 00:00:00 2001 From: Tomoki Kobayashi Date: Wed, 26 Aug 2026 06:43:33 +0900 Subject: [PATCH] Carry the test target at the app's version too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit release-tag.yml requires one distinct MARKETING_VERSION across the whole project file, so the UI test target arriving at Xcode's default 1.0 was enough to open the next release with "MARKETING_VERSION is not the same everywhere: 1.0 1.1.0". It would not have stopped anything — Xcode Cloud is already archiving by the time that runs — which is the bad kind of failure: a red check on the release tag, for a bundle nobody installs, found while looking at something else. Carried rather than exempted. The check is a grep over every configuration in the file, and its value is that it needs to know nothing about targets; teaching it which ones to believe costs more than one line per bump. --- .claude/skills/release/SKILL.md | 9 ++++++++- TortoiseBlocks.xcodeproj/project.pbxproj | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md index 14c574a..ab6e45a 100644 --- a/.claude/skills/release/SKILL.md +++ b/.claude/skills/release/SKILL.md @@ -231,7 +231,14 @@ iOS to notice if you don't. What *is* unlinked is the tag and the version it ships: nothing makes `v0.2.0` and `MARKETING_VERSION` agree, and a mismatch uploads the old version silently. `release-tag.yml` compares them (and catches app/extension -drift, since it requires one distinct value across all four configurations). +drift, since it requires one distinct value across every configuration in the +project). **That is every configuration, including targets that ship +nothing**: adding the UI test target put a fifth and sixth `MARKETING_VERSION` +in the file at Xcode's default `1.0`, and the next tag would have opened with +`MARKETING_VERSION is not the same everywhere` — a red check on the release, +for a test bundle nobody installs. It is carried at the app's version rather +than exempted, because the alternative is teaching a `grep` which targets to +believe. It cannot block the release — Xcode Cloud is already archiving — it only makes the mistake loud while there is still a build to cancel. A suffix after `-` is stripped before comparing: a marketing version is dotted numbers, a diff --git a/TortoiseBlocks.xcodeproj/project.pbxproj b/TortoiseBlocks.xcodeproj/project.pbxproj index 4602a85..46167e1 100644 --- a/TortoiseBlocks.xcodeproj/project.pbxproj +++ b/TortoiseBlocks.xcodeproj/project.pbxproj @@ -350,7 +350,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 26.5; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = space.hiraku.tortoiseblocks.uitests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto; @@ -381,7 +381,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 26.5; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = space.hiraku.tortoiseblocks.uitests; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = auto;