Skip to content

Instantly share code, notes, and snippets.

View steipete's full-sized avatar

Peter Steinberger steipete

View GitHub Profile
@steipete
steipete / swift-testing-playbook.md
Last active June 11, 2025 18:07
The Ultimate Swift Testing Playbook (feed it your agents for better tests!)

The Ultimate Swift Testing Playbook (2024 WWDC Edition, expanded with Apple docs from June 2025)

Updated with info from https://developer.apple.com/documentation/testing fetched via Firecrawl on June 7, 2025.

See also my blog: See also my blog post: https://steipete.me/posts/2025/migrating-700-tests-to-swift-testing

A hands-on, comprehensive guide for migrating from XCTest to Swift Testing and mastering the new framework. This playbook integrates the latest patterns and best practices from WWDC 2024 and official Apple documentation to make your tests more powerful, expressive, and maintainable.


1. Migration & Tooling Baseline

@steipete
steipete / terminator.scpt
Last active May 22, 2025 08:21
Hasta la *vista, shell — the T-800 that babysits (and occasionally obliterates) your Terminal tabs. Built to kill hung jobs, not humans. Helps Cursor to keep the loop! Copy this into .cursor/scripts/terminator.scpt (or similar) and point Cursor/Windsurf to that file and prompt it with the comment below.
Moved to https://github.com/steipete/Terminator
@steipete
steipete / concat.sh
Created May 17, 2025 23:32
Squashes a whole codebase into one text file, skipping build artefacts, copies it right into the clipboard.
#!/usr/bin/env bash
#
# concat.sh [root-dir] [output-file]
#
# Squashes a whole codebase into one text file, skipping build artefacts:
# • ignores node_modules, dist, .git, .turbo, .next, out
# • omits lockfiles and *.min.* noise
# • copies the result straight to the macOS clipboard (pbcopy)
#
# Example:
@steipete
steipete / windsurf-auto-continue.js
Last active May 14, 2025 12:37
Windsurf Auto Continue press button JS. Windsurf Menu Help -> Toggle Developer Tools -> Paste into Console.
// Windsurf Auto Press Continue v13.2 (with added logging)
(() => {
const SCRIPT_NAME = 'Windsurf Auto Press Continue v13.2 (logged)'; // Updated name for clarity
let intervalId = null, lastClick = 0;
// --- Config ---
const BTN_SELECTORS = 'span[class*="bg-ide-button-secondary-background"]';
const BTN_TEXT_STARTS_WITH = 'continue';
const SIDEBAR_SELECTOR = null;
const COOLDOWN_MS = 3000;
// Ultra-simple Cursor Auto Resume Script - Copy & paste into browser console
(function() {
console.log('Cursor Auto Resume: Running');
// Track last click time to avoid multiple clicks
let lastClickTime = 0;
// Main function that looks for and clicks the resume link
function clickResumeLink() {
// Prevent clicking too frequently (3 second cooldown)
@steipete
steipete / karabiner.json
Created May 4, 2025 13:06 — forked from Happyholic1203/karabiner.json
Karabiner settings for UHK Simulation
{
"global": {
"check_for_updates_on_startup": true,
"show_in_menu_bar": true,
"show_profile_name_in_menu_bar": false
},
"profiles": [
{
"complex_modifications": {
"parameters": {
@steipete
steipete / zshrc
Last active May 3, 2025 12:12
git ≥ 2.23‑style “nuke‑and‑pave”. Gets you out of everything, even worktrees!
fresh() {
# 0) escape half‑finished merges / rebases (no‑ops if nothing to abort)
git merge --abort 2>/dev/null || git rebase --abort 2>/dev/null || :
git fetch --prune --no-auto-maintenance --quiet origin && # 1 refs up‑to‑date fast  [oai_citation:0‡git-scm.com](https://git-scm.com/docs/git-fetch)
git switch --discard-changes --recurse-submodules -C main origin/main && # 2 hard‑reset + checkout incl. submodules 
git clean -ffdx && # 3 wipe every untracked/ignored artefact 
git for-each-ref --format='%(refname:short)' --merged main refs/heads \
| grep -v '^main$' | xargs -r git branch -D # 4 trash merged locals in one hit
clear
@steipete
steipete / Sparkle.swift
Last active May 5, 2021 15:18
Sparkle + SwiftUI
lass AppUpdateHandler: ObservableObject {
#if SPARKLE
private let delegateHandler = SparkleDelegateHandler()
let sparkle: SPUStandardUpdaterController
init() {
// Setup sparkle updater
// https://docs.microsoft.com/en-us/appcenter/distribution/sparkleupdates
// https://rambo.codes/posts/2021-01-08-distributing-mac-apps-outside-the-app-store
sparkle = SPUStandardUpdaterController(updaterDelegate: delegateHandler, userDriverDelegate: delegateHandler)
@steipete
steipete / TouchBarSwiftUIHack.swift
Created April 19, 2021 15:17
Your SwiftUI app crashes in *** Assertion failure in -[NSTouchBarLayout setLeadingWidgetWidth:], NSTouchBarLayout.m:78 ? Use this hack to work around the problem!
import Foundation
import InterposeKit
import OSLog
/// Hack tow work around Assertion failure in -[NSTouchBarLayout setLeadingWidgetWidth:], NSTouchBarLayout.m:78
/// This sometimes happens when macOS restores a window.
/// This even runs if there is no OS-level touch bar.
class MacOSWorkarounds {
static let logger = Logger(category: "MacOSWorkarounds")
@steipete
steipete / SwiftUIThingsToKnow.swift
Last active February 5, 2023 15:33
10 Things I Wish I Knew When Starting SwiftUI (See also https://gist.github.com/steipete/6c430d08bd57b066fada7628d3b8b719)
- In almost all cases where you type `@ObservedObject`, you really want `@StateObject`.
If you need to support iOS 13, use `@State` on parent and pass value into child with `@ObservedObject` to simulate `@StateObject`.
Pass arguments to that model in `onAppear`. Example: https://github.com/ra1028/SwiftUI-Hooks/blob/main/Sources/Hooks/HookScope.swift#L39-L41
```
.onAppear {
model.onAppear(userTag: userTag)
}
.onDisappear {
model.onDisappear()