fix(apple/ios): the ACTUAL type-checker bomb was pointerSection's footer ternary chain
apple / swift (push) Successful in 1m15s
release / apple (push) Successful in 8m36s
apple / screenshots (push) Successful in 5m44s
ci / rust (push) Successful in 1m31s
ci / web (push) Successful in 56s
android / android (push) Successful in 10m1s
deb / build-publish (push) Successful in 4m33s
ci / bench (push) Successful in 4m52s
ci / docs-site (push) Successful in 1m24s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 5s
decky / build-publish (push) Successful in 11s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 5s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 5s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 5s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 5s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 10m20s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 10m19s
docker / deploy-docs (push) Failing after 14s
apple / swift (push) Successful in 1m15s
release / apple (push) Successful in 8m36s
apple / screenshots (push) Successful in 5m44s
ci / rust (push) Successful in 1m31s
ci / web (push) Successful in 56s
android / android (push) Successful in 10m1s
deb / build-publish (push) Successful in 4m33s
ci / bench (push) Successful in 4m52s
ci / docs-site (push) Successful in 1m24s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 5s
decky / build-publish (push) Successful in 11s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 5s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 5s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 5s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 5s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 10m20s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 10m19s
docker / deploy-docs (push) Failing after 14s
4f3cd24 split the wrong expression — act's log masking hid the real line number.
The unmasked retry pinpointed it: the pointerSection footer, a ten-segment
string + chain with an isPad ternary nesting four more, evaluated inside the
ViewBuilder. Moved the copy into a plain computed String built with +=
statements (linear to type-check); no text change. The two remaining 5-6
segment chains in Settings are compiled by the passing macOS slice, so they
are proven cheap.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -224,35 +224,42 @@ extension SettingsView {
|
|||||||
/// Touch-input model (iPhone + iPad) plus the iPad-only pointer-capture toggle: lock the
|
/// Touch-input model (iPhone + iPad) plus the iPad-only pointer-capture toggle: lock the
|
||||||
/// mouse/trackpad for relative movement (games) vs forward an absolute cursor position.
|
/// mouse/trackpad for relative movement (games) vs forward an absolute cursor position.
|
||||||
@ViewBuilder var pointerSection: some View {
|
@ViewBuilder var pointerSection: some View {
|
||||||
let isPad = UIDevice.current.userInterfaceIdiom == .pad
|
|
||||||
Section {
|
Section {
|
||||||
Picker("Touch input", selection: $touchMode) {
|
Picker("Touch input", selection: $touchMode) {
|
||||||
Text("Trackpad").tag(TouchInputMode.trackpad.rawValue)
|
Text("Trackpad").tag(TouchInputMode.trackpad.rawValue)
|
||||||
Text("Direct pointer").tag(TouchInputMode.pointer.rawValue)
|
Text("Direct pointer").tag(TouchInputMode.pointer.rawValue)
|
||||||
Text("Touch passthrough").tag(TouchInputMode.touch.rawValue)
|
Text("Touch passthrough").tag(TouchInputMode.touch.rawValue)
|
||||||
}
|
}
|
||||||
if isPad {
|
if UIDevice.current.userInterfaceIdiom == .pad {
|
||||||
Toggle("Capture pointer for games", isOn: $pointerCapture)
|
Toggle("Capture pointer for games", isOn: $pointerCapture)
|
||||||
}
|
}
|
||||||
} header: {
|
} header: {
|
||||||
Text("Touch & pointer")
|
Text("Touch & pointer")
|
||||||
} footer: {
|
} footer: {
|
||||||
Text("Trackpad: your finger nudges the host cursor like a laptop touchpad — tap to "
|
Text(pointerFooterText)
|
||||||
+ "click, two-finger tap for a right click, two-finger drag to scroll, "
|
|
||||||
+ "tap-then-drag to hold the button, three-finger tap for the stats overlay. "
|
|
||||||
+ "Direct pointer: the cursor jumps to your finger. Touch passthrough: real "
|
|
||||||
+ "multi-touch reaches the host, for apps that understand touch. Applies from "
|
|
||||||
+ "the next touch."
|
|
||||||
+ (isPad
|
|
||||||
? " Pointer capture locks a hardware mouse/trackpad for relative movement "
|
|
||||||
+ "(mouse-look); off keeps the pointer free and sends absolute positions. "
|
|
||||||
+ "The lock needs the stream full-screen and frontmost, and falls back "
|
|
||||||
+ "automatically (Stage Manager, Slide Over)."
|
|
||||||
: ""))
|
|
||||||
.font(.geist(12, relativeTo: .caption))
|
.font(.geist(12, relativeTo: .caption))
|
||||||
.foregroundStyle(.secondary)
|
.foregroundStyle(.secondary)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Footer copy for `pointerSection`, built in plain `+=` statements. Deliberately NOT one big
|
||||||
|
/// `+` chain (with a ternary) inside the ViewBuilder — that single expression blew Swift's
|
||||||
|
/// type-checker budget and was what actually broke the iOS archive.
|
||||||
|
private var pointerFooterText: String {
|
||||||
|
var text = "Trackpad: your finger nudges the host cursor like a laptop touchpad — tap to "
|
||||||
|
text += "click, two-finger tap for a right click, two-finger drag to scroll, "
|
||||||
|
text += "tap-then-drag to hold the button, three-finger tap for the stats overlay. "
|
||||||
|
text += "Direct pointer: the cursor jumps to your finger. Touch passthrough: real "
|
||||||
|
text += "multi-touch reaches the host, for apps that understand touch. Applies from "
|
||||||
|
text += "the next touch."
|
||||||
|
if UIDevice.current.userInterfaceIdiom == .pad {
|
||||||
|
text += " Pointer capture locks a hardware mouse/trackpad for relative movement "
|
||||||
|
text += "(mouse-look); off keeps the pointer free and sends absolute positions. "
|
||||||
|
text += "The lock needs the stream full-screen and frontmost, and falls back "
|
||||||
|
text += "automatically (Stage Manager, Slide Over)."
|
||||||
|
}
|
||||||
|
return text
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ViewBuilder var compositorSection: some View {
|
@ViewBuilder var compositorSection: some View {
|
||||||
|
|||||||
Reference in New Issue
Block a user