Peter Steinberger
Claude Code Anonymous
Live Coding Session: Building Arena
Live Coding Session: Building Arena
My Current AI Dev Workflow
Essential Reading for Agentic Engineers - August 2025
Just One More Prompt
Poltergeist: The Ghost That Keeps Your Builds Fresh
Don't read this Startup Slop
Essential Reading for Agentic Engineers - July 2025
Self-Hosting AI Models After Claude's Usage Limits
Logging Privacy Shenanigans
VibeTunnel's first AI-anniversary
Making AppleScript Work in macOS CLI Tools: The Undocumented Parts
Peekaboo 2.0 – Free the CLI from its MCP shackles
Command your Claude Code Army, Reloaded
Essential Reading for Agentic Engineers
Slot Machines for Programmers: How Peter Builds Apps 20x Faster with AI
My AI Workflow for Understanding Any Codebase
stats.store: Privacy-First Sparkle Analytics
Showing Settings from macOS Menu Bar Items: A 5-Hour Journey
VibeTunnel: Turn Any Browser into Your Mac's Terminal
Vibe Meter 2.0: Calculating Claude Code Usage with Token Counting
llm.codes: Make Apple Docs AI-Readable
Automatic Observation Tracking in UIKit and AppKit: The Feature Apple Forgot to Mention
Peekaboo MCP – lightning-fast macOS screenshots for AI agents
Migrating 700+ Tests to Swift Testing: A Real-World Experience
Commanding Your Claude Code Army
Code Signing and Notarization: Sparkle and Tears
Vibe Meter: Monitor Your AI Costs
Claude Code is My Computer
Stop Over-thinking AI Subscriptions
Introducing Demark: HTML in. MD out. Blink-fast.
The Future of Vibe Coding: Building with AI, Live and Unfiltered
MCP Best Practices
Finding My Spark Again
Top-Level Menu Visibility in SwiftUI for macOS
Fixing keyboardShortcut in SwiftUI
Supporting Both Tap and Long Press on a Button in SwiftUI
On Using Apple Silicon Mac Mini for Continuous Integration
Apple Silicon M1: A Developer's Perspective
Gardening Your Twitter: Curating Your Timeline
Gardening Your Twitter: Growing Your Followers
Forbidden Controls in Catalyst: Optimize Interface for Mac
Disabling Keyboard Avoidance in SwiftUI's UIHostingController
The State of SwiftUI
Logging in Swift
Building with Swift Trunk Development Snapshots
Calling Super at Runtime in Swift
zld — A Faster Version of Apple's Linker
How to Fix LLDB: Couldn't IRGen Expression
Updating macOS on a Hackintosh
InterposeKit — Elegant Swizzling in Swift
The Great Mac Catalyst Text Input Crash Hunt
Jailbreaking for iOS Developers
Network Kernel Core Dump
How to macOS Core Dump
Kernel Panics and Surprise boot-args
The LG UltraFine 5K, kernel_task, and Me
Let's Try This Again
How We Work at PSPDFKit
Swizzling in Swift
WWDC for First-Timers, 2019 Edition
Challenges of Adopting Drag and Drop
Marzipan: Porting iOS Apps to the Mac
How to Use Slack and Not Go Crazy
Hardcore Debugging - Heavy Weapons for Hard Bugs
Binary Frameworks in Swift
Even Swiftier Objective-C
The Case for Deprecating UITableView
Running tests with Clang Address Sanitizer
UI testing on iOS, without busy waiting
Hiring a distributed team
Writing Good Bug Reports
Real-time collaboration, Apple, and you
Converting Xcode Test Runs to JUnit, the Fast Way
Efficient iOS Version Checking
Investigating Thread Safety of UIImage
Swifty Objective-C
Running UI Tests on iOS With Ludicrous Speed
A Pragmatic Approach to Cross-Platform
Surprises with Swift Extensions
Using ccache for Fun and Profit
UITableViewController designated initializer woes
Researching ResearchKit
The curious case of rotation with multiple windows on iOS 8
UIKit Debug Mode
Retrofitting containsString: on iOS 7
A Story About Swizzling "the Right Way™" and Touch Forwarding
Hacking with Aspects
Fixing UITextView On iOS 7
Fixing What Apple Doesn't
How To Inspect The View Hierarchy Of Third-Party Apps
Fixing UISearchDisplayController On iOS 7
Smart Proxy Delegation
Adding Keyboard Shortcuts To UIAlertView
How To Center Content Within UIScrollView
UIAppearance for Custom Views
Hacking Block Support Into UIMenuItem
Using Subscripting With Xcode 4.4 And iOS 4.3+
Pimping recursiveDescription
NSURLCache Uses A Disk Cache As Of iOS 5
Moving On... Or How Waiting For A Visa Was The Best Thing That Ever Happened To Me.
Don't Call willChangeValueForKey Unless It's Really Needed
Reboot