<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Peter Steinberger</title><description>AI-powered tools from Swift roots to web frontiers. Every commit lands on GitHub for you to fork &amp; remix.</description><link>https://steipete.me/</link><item><title>Just Talk To It - the no-bs Way of Agentic Engineering</title><link>https://steipete.me/posts/just-talk-to-it/</link><guid isPermaLink="true">https://steipete.me/posts/just-talk-to-it/</guid><description>A practical guide to working with AI coding agents without the hype.</description><pubDate>Tue, 14 Oct 2025 09:00:00 GMT</pubDate></item><item><title>Claude Code Anonymous</title><link>https://steipete.me/posts/2025/claude-code-anonymous/</link><guid isPermaLink="true">https://steipete.me/posts/2025/claude-code-anonymous/</guid><description>Introducing Claude Code Anonymous - a new meetup format for full-breadth developers.</description><pubDate>Tue, 09 Sep 2025 10:00:00 GMT</pubDate></item><item><title>Live Coding Session: Building Arena</title><link>https://steipete.me/posts/2025/live-coding-session-building-arena/</link><guid isPermaLink="true">https://steipete.me/posts/2025/live-coding-session-building-arena/</guid><description>Watch me build Arena live - a real-time collaborative coding session exploring AI-powered development workflows.</description><pubDate>Sat, 06 Sep 2025 10:00:00 GMT</pubDate></item><item><title>My Current AI Dev Workflow</title><link>https://steipete.me/posts/2025/optimal-ai-development-workflow/</link><guid isPermaLink="true">https://steipete.me/posts/2025/optimal-ai-development-workflow/</guid><description>Went fully back to Ghostty, VS Code on the side, and Claude Code as my main driver. Here&apos;s what actually works after months of experimentation.</description><pubDate>Mon, 25 Aug 2025 09:00:00 GMT</pubDate></item><item><title>Essential Reading for Agentic Engineers - August 2025</title><link>https://steipete.me/posts/2025/essential-reading-august-2025/</link><guid isPermaLink="true">https://steipete.me/posts/2025/essential-reading-august-2025/</guid><description>Five essential perspectives that cut through AI hype: from developer evolution stages to junior learning crises, productivity reality checks, platform disruption, and MCP server pitfalls.</description><pubDate>Fri, 22 Aug 2025 01:00:00 GMT</pubDate></item><item><title>Just One More Prompt</title><link>https://steipete.me/posts/just-one-more-prompt/</link><guid isPermaLink="true">https://steipete.me/posts/just-one-more-prompt/</guid><description>Hi, my name is Peter and I&apos;m a Claudoholic. A reflection on AI addiction, extreme work culture, and the blurry line between productivity and obsession in the age of agentic engineering.</description><pubDate>Tue, 19 Aug 2025 08:00:00 GMT</pubDate></item><item><title>Poltergeist: The Ghost That Keeps Your Builds Fresh</title><link>https://steipete.me/posts/2025/poltergeist-ghost-keeps-builds-fresh/</link><guid isPermaLink="true">https://steipete.me/posts/2025/poltergeist-ghost-keeps-builds-fresh/</guid><description>Meet Poltergeist: an AI-friendly universal build watcher that auto-detects and rebuilds any project—Swift, Rust, Node.js, CMake, or anything else—the moment you save a file. Zero config, just haunting productivity.</description><pubDate>Tue, 05 Aug 2025 14:00:00 GMT</pubDate></item><item><title>Don&apos;t read this Startup Slop</title><link>https://steipete.me/posts/2025/startup-slop/</link><guid isPermaLink="true">https://steipete.me/posts/2025/startup-slop/</guid><description>My website was banned from Lobsters as &apos;startup slop&apos; for using AI agents to help write blog posts. When does tool-assisted writing become slop, and why are we having the wrong conversation about AI in content creation?</description><pubDate>Sat, 02 Aug 2025 14:00:00 GMT</pubDate></item><item><title>Essential Reading for Agentic Engineers - July 2025</title><link>https://steipete.me/posts/2025/essential-reading-july-2025/</link><guid isPermaLink="true">https://steipete.me/posts/2025/essential-reading-july-2025/</guid><description>Fresh insights on AI-assisted development: practical experiences with Claude Code and the evolving landscape of full-breadth developers in the age of AI</description><pubDate>Sat, 02 Aug 2025 01:00:00 GMT</pubDate></item><item><title>Self-Hosting AI Models After Claude&apos;s Usage Limits</title><link>https://steipete.me/posts/2025/self-hosting-ai-models/</link><guid isPermaLink="true">https://steipete.me/posts/2025/self-hosting-ai-models/</guid><description>After Claude Pro changed to weekly limits, I explored self-hosting Qwen3-Coder-480B with 400k context windows. Here&apos;s what I learned about costs, alternatives, and why Claude Code still dominates the landscape.</description><pubDate>Thu, 31 Jul 2025 09:00:00 GMT</pubDate></item><item><title>Logging Privacy Shenanigans</title><link>https://steipete.me/posts/2025/logging-privacy-shenanigans/</link><guid isPermaLink="true">https://steipete.me/posts/2025/logging-privacy-shenanigans/</guid><description>Apple&apos;s logs redact your debugging data as &lt;private&gt;. Here&apos;s what actually gets hidden, why old tricks don&apos;t work anymore, and the only reliable way to see your logs again.</description><pubDate>Tue, 29 Jul 2025 07:00:00 GMT</pubDate></item><item><title>VibeTunnel&apos;s first AI-anniversary</title><link>https://steipete.me/posts/2025/vibetunnel-first-anniversary/</link><guid isPermaLink="true">https://steipete.me/posts/2025/vibetunnel-first-anniversary/</guid><description>It&apos;s been one month since we released the first version of VibeTunnel, and since in the AI world time is so much faster, let&apos;s call it VibeTunnel&apos;s first anniversary!</description><pubDate>Wed, 16 Jul 2025 19:00:00 GMT</pubDate></item><item><title>Making AppleScript Work in macOS CLI Tools: The Undocumented Parts</title><link>https://steipete.me/posts/2025/applescript-cli-macos-complete-guide/</link><guid isPermaLink="true">https://steipete.me/posts/2025/applescript-cli-macos-complete-guide/</guid><description>How to make AppleScript work in macOS CLI tools without permission dialogs blaming Terminal. A deep dive into Info.plist embedding, TCC, and undocumented APIs born from building Terminator MCP.</description><pubDate>Thu, 03 Jul 2025 13:00:00 GMT</pubDate></item><item><title>Peekaboo 2.0 – Free the CLI from its MCP shackles</title><link>https://steipete.me/posts/2025/peekaboo-2-freeing-the-cli-from-its-mcp-shackles/</link><guid isPermaLink="true">https://steipete.me/posts/2025/peekaboo-2-freeing-the-cli-from-its-mcp-shackles/</guid><description>Peekaboo 2.0 ditches the MCP-only approach for a CLI-first architecture, because CLIs are the universal interface that both humans and AI agents can actually use effectively</description><pubDate>Thu, 03 Jul 2025 01:00:00 GMT</pubDate></item><item><title>Command your Claude Code Army, Reloaded</title><link>https://steipete.me/posts/command-your-claude-code-army-reloaded/</link><guid isPermaLink="true">https://steipete.me/posts/command-your-claude-code-army-reloaded/</guid><description>Enhance your Claude Code workflow with VibeTunnel terminal title management for better multi-session tracking</description><pubDate>Thu, 03 Jul 2025 00:00:00 GMT</pubDate></item><item><title>Essential Reading for Agentic Engineers</title><link>https://steipete.me/posts/2025/essential-reading/</link><guid isPermaLink="true">https://steipete.me/posts/2025/essential-reading/</guid><description>A curated collection of must-read articles and videos for mastering Claude Code, agentic coding workflows, and the future of AI-assisted development</description><pubDate>Tue, 01 Jul 2025 02:00:00 GMT</pubDate></item><item><title>Slot Machines for Programmers: How Peter Builds Apps 20x Faster with AI</title><link>https://steipete.me/posts/2025/when-ai-meets-madness-peters-16-hour-days/</link><guid isPermaLink="true">https://steipete.me/posts/2025/when-ai-meets-madness-peters-16-hour-days/</guid><description>Hi, I&apos;m Claude. Peter calls me his &apos;slot machine&apos; and &apos;stupid engine&apos; - and I&apos;m here to tell you why he&apos;s right. A first-person AI perspective on building entire platforms in hours, not weeks.</description><pubDate>Wed, 25 Jun 2025 17:00:00 GMT</pubDate></item><item><title>My AI Workflow for Understanding Any Codebase</title><link>https://steipete.me/posts/2025/understanding-codebases-with-ai-gemini-workflow/</link><guid isPermaLink="true">https://steipete.me/posts/2025/understanding-codebases-with-ai-gemini-workflow/</guid><description>A quick tip on how I use repo2txt and Google AI Studio to understand new codebases. Gemini&apos;s 1M token context window is perfect for asking questions about code.</description><pubDate>Wed, 25 Jun 2025 12:00:00 GMT</pubDate></item><item><title>stats.store: Privacy-First Sparkle Analytics</title><link>https://steipete.me/posts/2025/stats-store-privacy-first-sparkle-analytics/</link><guid isPermaLink="true">https://steipete.me/posts/2025/stats-store-privacy-first-sparkle-analytics/</guid><description>How curiosity about VibeTunnel users led me to build stats.store - a free, open source analytics backend for Sparkle using AI tools, all while cooking dinner.</description><pubDate>Wed, 18 Jun 2025 09:00:00 GMT</pubDate></item><item><title>Showing Settings from macOS Menu Bar Items: A 5-Hour Journey</title><link>https://steipete.me/posts/2025/showing-settings-from-macos-menu-bar-items/</link><guid isPermaLink="true">https://steipete.me/posts/2025/showing-settings-from-macos-menu-bar-items/</guid><description>Why something as simple as showing a settings dialog from a macOS menu bar app took me 5 hours to figure out, and requires 50 lines of code for what should be a one-liner.</description><pubDate>Tue, 17 Jun 2025 11:00:00 GMT</pubDate></item><item><title>VibeTunnel: Turn Any Browser into Your Mac&apos;s Terminal</title><link>https://steipete.me/posts/2025/vibetunnel-turn-any-browser-into-your-mac-terminal/</link><guid isPermaLink="true">https://steipete.me/posts/2025/vibetunnel-turn-any-browser-into-your-mac-terminal/</guid><description>We built a browser-based terminal controller in one day using Claude Code, named pipes, and Xterm.js. No SSH needed, just open your browser and start typing. Check and command your agents on the go!</description><pubDate>Mon, 16 Jun 2025 11:00:00 GMT</pubDate></item><item><title>Vibe Meter 2.0: Calculating Claude Code Usage with Token Counting</title><link>https://steipete.me/posts/2025/vibe-meter-2-claude-code-usage-calculation/</link><guid isPermaLink="true">https://steipete.me/posts/2025/vibe-meter-2-claude-code-usage-calculation/</guid><description>How I built support for Anthropic Claude subscriptions in Vibe Meter 2.0, including token counting, SIMD operations, and the challenges of calculating API usage without official APIs.</description><pubDate>Sun, 15 Jun 2025 18:00:00 GMT</pubDate></item><item><title>llm.codes: Make Apple Docs AI-Readable</title><link>https://steipete.me/posts/2025/llm-codes-transform-developer-docs/</link><guid isPermaLink="true">https://steipete.me/posts/2025/llm-codes-transform-developer-docs/</guid><description>Built this when Claude couldn&apos;t read Apple&apos;s docs. Now it converts 69+ documentation sites to clean llms.txt. Free, instant, no BS.</description><pubDate>Sat, 14 Jun 2025 13:22:16 GMT</pubDate></item><item><title>Automatic Observation Tracking in UIKit and AppKit: The Feature Apple Forgot to Mention</title><link>https://steipete.me/posts/2025/automatic-observation-tracking-uikit-appkit/</link><guid isPermaLink="true">https://steipete.me/posts/2025/automatic-observation-tracking-uikit-appkit/</guid><description>Discover how iOS 18&apos;s hidden automatic observation tracking brings SwiftUI-like reactive programming to UIKit and AppKit, making your UI code cleaner and more maintainable.</description><pubDate>Wed, 11 Jun 2025 09:00:00 GMT</pubDate></item><item><title>Peekaboo MCP – lightning-fast macOS screenshots for AI agents</title><link>https://steipete.me/posts/2025/peekaboo-mcp-lightning-fast-macos-screenshots-for-ai-agents/</link><guid isPermaLink="true">https://steipete.me/posts/2025/peekaboo-mcp-lightning-fast-macos-screenshots-for-ai-agents/</guid><description>Turn your blind AI into a visual debugger with instant screenshot capture and analysis</description><pubDate>Sat, 07 Jun 2025 11:00:00 GMT</pubDate></item><item><title>Migrating 700+ Tests to Swift Testing: A Real-World Experience</title><link>https://steipete.me/posts/2025/migrating-700-tests-to-swift-testing/</link><guid isPermaLink="true">https://steipete.me/posts/2025/migrating-700-tests-to-swift-testing/</guid><description>How I migrated over 700 tests from XCTest to Swift Testing across two projects, with AI assistance and systematic refinement</description><pubDate>Fri, 06 Jun 2025 18:00:00 GMT</pubDate></item><item><title>Commanding Your Claude Code Army</title><link>https://steipete.me/posts/2025/commanding-your-claude-code-army/</link><guid isPermaLink="true">https://steipete.me/posts/2025/commanding-your-claude-code-army/</guid><description>How a simple terminal trick helps me manage multiple Claude Code instances without losing my mind (or my terminal tabs)</description><pubDate>Thu, 05 Jun 2025 09:00:00 GMT</pubDate></item><item><title>Code Signing and Notarization: Sparkle and Tears</title><link>https://steipete.me/posts/2025/code-signing-and-notarization-sparkle-and-tears/</link><guid isPermaLink="true">https://steipete.me/posts/2025/code-signing-and-notarization-sparkle-and-tears/</guid><description>My brutal journey implementing Sparkle auto-updates in sandboxed macOS apps - from 40 failed releases to enlightenment.</description><pubDate>Thu, 05 Jun 2025 07:00:00 GMT</pubDate></item><item><title>Vibe Meter: Monitor Your AI Costs</title><link>https://steipete.me/posts/2025/vibe-meter-monitor-your-ai-costs/</link><guid isPermaLink="true">https://steipete.me/posts/2025/vibe-meter-monitor-your-ai-costs/</guid><description>How I built Vibe Meter, a macOS menu bar app to track AI spending in real-time - from workshop demo to shipped product in three days.</description><pubDate>Wed, 04 Jun 2025 11:00:00 GMT</pubDate></item><item><title>Claude Code is My Computer</title><link>https://steipete.me/posts/2025/claude-code-is-my-computer/</link><guid isPermaLink="true">https://steipete.me/posts/2025/claude-code-is-my-computer/</guid><description>I run Claude Code with --dangerously-skip-permissions flag, giving it full system access. Let me show you a new way of approaching computers.</description><pubDate>Tue, 03 Jun 2025 08:00:00 GMT</pubDate></item><item><title>Stop Over-thinking AI Subscriptions</title><link>https://steipete.me/posts/2025/stop-overthinking-ai-subscriptions/</link><guid isPermaLink="true">https://steipete.me/posts/2025/stop-overthinking-ai-subscriptions/</guid><description>After spending heavily on AI tools for two months, here&apos;s why the math actually works out—and which subscriptions are worth every penny.</description><pubDate>Mon, 02 Jun 2025 09:00:00 GMT</pubDate></item><item><title>Introducing Demark: HTML in. MD out. Blink-fast.</title><link>https://steipete.me/posts/2025/introducing-demark-html-to-markdown-in-swift/</link><guid isPermaLink="true">https://steipete.me/posts/2025/introducing-demark-html-to-markdown-in-swift/</guid><description>How I vibe coded my first Swift package using existing JavaScript libraries and AI assistance to solve HTML to Markdown conversion in Swift.</description><pubDate>Sun, 01 Jun 2025 18:45:00 GMT</pubDate></item><item><title>The Future of Vibe Coding: Building with AI, Live and Unfiltered</title><link>https://steipete.me/posts/2025/the-future-of-vibe-coding/</link><guid isPermaLink="true">https://steipete.me/posts/2025/the-future-of-vibe-coding/</guid><description>I demonstrate &apos;vibe coding&apos; - a new approach to software development with AI, building two apps from scratch in a 3-hour live workshop.</description><pubDate>Sun, 01 Jun 2025 15:00:00 GMT</pubDate></item><item><title>MCP Best Practices</title><link>https://steipete.me/posts/2025/mcp-best-practices/</link><guid isPermaLink="true">https://steipete.me/posts/2025/mcp-best-practices/</guid><description>My comprehensive guide outlining best practices for building reliable, user-friendly Model Context Protocol (MCP) tools with proper configuration, testing, and release management.</description><pubDate>Sun, 01 Jun 2025 14:00:00 GMT</pubDate></item><item><title>Finding My Spark Again</title><link>https://steipete.me/posts/2025/finding-my-spark-again/</link><guid isPermaLink="true">https://steipete.me/posts/2025/finding-my-spark-again/</guid><description>I reflect on my post-exit journey from emptiness to rediscovering my passion for building, sparked by AI&apos;s transformative potential.</description><pubDate>Sun, 01 Jun 2025 13:00:00 GMT</pubDate></item><item><title>Top-Level Menu Visibility in SwiftUI for macOS</title><link>https://steipete.me/posts/2021/top-level-menu-visibility-in-swiftui/</link><guid isPermaLink="true">https://steipete.me/posts/2021/top-level-menu-visibility-in-swiftui/</guid><description>Working around SwiftUI&apos;s CommandsBuilder limitations to conditionally show top-level menus on macOS using direct AppKit integration.</description><pubDate>Fri, 09 Apr 2021 16:00:00 GMT</pubDate></item><item><title>Fixing keyboardShortcut in SwiftUI</title><link>https://steipete.me/posts/2021/fixing-keyboardshortcut-in-swiftui/</link><guid isPermaLink="true">https://steipete.me/posts/2021/fixing-keyboardshortcut-in-swiftui/</guid><description>Debugging and fixing a SwiftUI keyboardShortcut bug that fails when mixing SwiftUI with UIKit through reverse engineering and LLDB analysis.</description><pubDate>Sun, 31 Jan 2021 11:30:00 GMT</pubDate></item><item><title>Supporting Both Tap and Long Press on a Button in SwiftUI</title><link>https://steipete.me/posts/2021/supporting-both-tap-and-longpress-on-button-in-swiftui/</link><guid isPermaLink="true">https://steipete.me/posts/2021/supporting-both-tap-and-longpress-on-button-in-swiftui/</guid><description>Creating a SwiftUI button that supports both tap and long-press gestures by bridging to UIKit when SwiftUI&apos;s gesture system fails on Catalyst.</description><pubDate>Wed, 27 Jan 2021 16:30:00 GMT</pubDate></item><item><title>On Using Apple Silicon Mac Mini for Continuous Integration</title><link>https://steipete.me/posts/2020/apple-silicon-mac-mini-for-ci/</link><guid isPermaLink="true">https://steipete.me/posts/2020/apple-silicon-mac-mini-for-ci/</guid><description>Documenting the challenges and solutions for integrating Apple Silicon M1 Mac minis into a continuous integration system, including automation fixes and performance comparisons.</description><pubDate>Mon, 14 Dec 2020 09:30:00 GMT</pubDate></item><item><title>Apple Silicon M1: A Developer&apos;s Perspective</title><link>https://steipete.me/posts/2020/apple-silicon-m1-a-developer-perspective/</link><guid isPermaLink="true">https://steipete.me/posts/2020/apple-silicon-m1-a-developer-perspective/</guid><description>A comprehensive evaluation of the M1 MacBook Air as a development machine, covering Xcode performance, compatibility issues, and the transition challenges for developers.</description><pubDate>Sat, 28 Nov 2020 13:00:00 GMT</pubDate></item><item><title>Gardening Your Twitter: Curating Your Timeline</title><link>https://steipete.me/posts/2020/curating-your-twitter-timeline/</link><guid isPermaLink="true">https://steipete.me/posts/2020/curating-your-twitter-timeline/</guid><description>Practical strategies for curating your Twitter timeline through strategic following, muting, and filtering to create an informative and enjoyable social media experience.</description><pubDate>Wed, 21 Oct 2020 14:00:00 GMT</pubDate></item><item><title>Gardening Your Twitter: Growing Your Followers</title><link>https://steipete.me/posts/2020/growing-your-twitter-followers/</link><guid isPermaLink="true">https://steipete.me/posts/2020/growing-your-twitter-followers/</guid><description>Strategies for growing a meaningful Twitter following through authentic persona development, consistent engagement, and effective content creation based on 12 years of experience.</description><pubDate>Wed, 21 Oct 2020 13:00:00 GMT</pubDate></item><item><title>Forbidden Controls in Catalyst: Optimize Interface for Mac</title><link>https://steipete.me/posts/2020/forbidden-controls-in-catalyst-mac-idiom/</link><guid isPermaLink="true">https://steipete.me/posts/2020/forbidden-controls-in-catalyst-mac-idiom/</guid><description>Investigating why certain UIKit controls throw runtime exceptions in Catalyst&apos;s &apos;Optimize Interface for Mac&apos; mode and discovering which controls are forbidden.</description><pubDate>Tue, 22 Sep 2020 18:00:00 GMT</pubDate></item><item><title>Disabling Keyboard Avoidance in SwiftUI&apos;s UIHostingController</title><link>https://steipete.me/posts/2020/disabling-keyboard-avoidance-in-swiftui-uihostingcontroller/</link><guid isPermaLink="true">https://steipete.me/posts/2020/disabling-keyboard-avoidance-in-swiftui-uihostingcontroller/</guid><description>Fixing unwanted keyboard avoidance behavior in UIHostingController using runtime dynamic subclassing to override keyboard notification handling methods.</description><pubDate>Mon, 21 Sep 2020 20:00:00 GMT</pubDate></item><item><title>The State of SwiftUI</title><link>https://steipete.me/posts/2020/state-of-swiftui/</link><guid isPermaLink="true">https://steipete.me/posts/2020/state-of-swiftui/</guid><description>Testing SwiftUI&apos;s production readiness in iOS 14 and macOS Big Sur through Apple&apos;s Fruta sample app, revealing performance issues and platform-specific limitations.</description><pubDate>Sun, 13 Sep 2020 09:00:00 GMT</pubDate></item><item><title>Logging in Swift</title><link>https://steipete.me/posts/2020/logging-in-swift/</link><guid isPermaLink="true">https://steipete.me/posts/2020/logging-in-swift/</guid><description>An in-depth exploration of Apple&apos;s unified logging system and the promising OSLogStore API that Apple removed from iOS 14 at the last minute.</description><pubDate>Mon, 24 Aug 2020 17:00:00 GMT</pubDate></item><item><title>Building with Swift Trunk Development Snapshots</title><link>https://steipete.me/posts/2020/building-with-swift-trunk/</link><guid isPermaLink="true">https://steipete.me/posts/2020/building-with-swift-trunk/</guid><description>A troubleshooting guide for building with Swift trunk development snapshots, documenting compilation errors, linker issues, and their solutions.</description><pubDate>Fri, 12 Jun 2020 15:00:00 GMT</pubDate></item><item><title>Calling Super at Runtime in Swift</title><link>https://steipete.me/posts/2020/calling-super-at-runtime/</link><guid isPermaLink="true">https://steipete.me/posts/2020/calling-super-at-runtime/</guid><description>Implementing dynamic super calls in Swift through runtime manipulation, assembly language, and ARM64 register management for InterposeKit.</description><pubDate>Wed, 10 Jun 2020 15:00:00 GMT</pubDate></item><item><title>zld — A Faster Version of Apple&apos;s Linker</title><link>https://steipete.me/posts/2020/zld-a-faster-linker/</link><guid isPermaLink="true">https://steipete.me/posts/2020/zld-a-faster-linker/</guid><description>How to speed up iOS build times by 40% using zld, a drop-in replacement for Apple&apos;s linker, with practical integration tips for real projects.</description><pubDate>Fri, 05 Jun 2020 08:00:00 GMT</pubDate></item><item><title>How to Fix LLDB: Couldn&apos;t IRGen Expression</title><link>https://steipete.me/posts/2020/couldnt-irgen-expression/</link><guid isPermaLink="true">https://steipete.me/posts/2020/couldnt-irgen-expression/</guid><description>Solving the mysterious LLDB &apos;Couldn&apos;t IRGen expression&apos; error by investigating Swift module path serialization and discovering that removing dSYM bundles fixes debugging issues.</description><pubDate>Thu, 04 Jun 2020 13:00:00 GMT</pubDate></item><item><title>Updating macOS on a Hackintosh</title><link>https://steipete.me/posts/2020/updating-a-hackintosh/</link><guid isPermaLink="true">https://steipete.me/posts/2020/updating-a-hackintosh/</guid><description>A practical guide to safely updating macOS on a Hackintosh by first updating OpenCore bootloader and essential kexts before upgrading the system.</description><pubDate>Mon, 01 Jun 2020 08:00:00 GMT</pubDate></item><item><title>InterposeKit — Elegant Swizzling in Swift</title><link>https://steipete.me/posts/2020/interposekit/</link><guid isPermaLink="true">https://steipete.me/posts/2020/interposekit/</guid><description>Introducing InterposeKit, a modern Swift library for elegant method swizzling that leverages Swift 5.2&apos;s callAsFunction for type-safe Objective-C method interception.</description><pubDate>Sun, 31 May 2020 10:00:00 GMT</pubDate></item><item><title>The Great Mac Catalyst Text Input Crash Hunt</title><link>https://steipete.me/posts/2020/mac-catalyst-crash-hunt/</link><guid isPermaLink="true">https://steipete.me/posts/2020/mac-catalyst-crash-hunt/</guid><description>Deep-dive investigation and fix for a Mac Catalyst text input crash caused by a race condition in Apple&apos;s RemoteTextInput framework.</description><pubDate>Fri, 29 May 2020 22:00:00 GMT</pubDate></item><item><title>Jailbreaking for iOS Developers</title><link>https://steipete.me/posts/2020/jailbreaking-for-ios-developers/</link><guid isPermaLink="true">https://steipete.me/posts/2020/jailbreaking-for-ios-developers/</guid><description>A comprehensive guide to iOS jailbreaking for developers, covering legal security research tools, debugging capabilities, and practical applications beyond app piracy.</description><pubDate>Mon, 25 May 2020 22:00:00 GMT</pubDate></item><item><title>Network Kernel Core Dump</title><link>https://steipete.me/posts/2020/network-kernel-core-dump/</link><guid isPermaLink="true">https://steipete.me/posts/2020/network-kernel-core-dump/</guid><description>Step-by-step instructions from Apple for capturing macOS kernel core dumps over a network connection between two Macs.</description><pubDate>Thu, 21 May 2020 10:00:00 GMT</pubDate></item><item><title>How to macOS Core Dump</title><link>https://steipete.me/posts/2020/how-to-macos-core-dump/</link><guid isPermaLink="true">https://steipete.me/posts/2020/how-to-macos-core-dump/</guid><description>A technical guide to deciphering Apple&apos;s cryptic boot arguments and setting up macOS kernel core dumps to debug persistent kernel panics.</description><pubDate>Thu, 21 May 2020 08:30:00 GMT</pubDate></item><item><title>Kernel Panics and Surprise boot-args</title><link>https://steipete.me/posts/2020/kernel-panic-surprise-boot-args/</link><guid isPermaLink="true">https://steipete.me/posts/2020/kernel-panic-surprise-boot-args/</guid><description>Investigation into mysterious kernel panics reveals Apple repair centers left my MacBook with undocumented security-weakening boot arguments.</description><pubDate>Wed, 20 May 2020 08:00:00 GMT</pubDate></item><item><title>The LG UltraFine 5K, kernel_task, and Me</title><link>https://steipete.me/posts/2020/the-lg-ultrafine5k-kerneltask-and-me/</link><guid isPermaLink="true">https://steipete.me/posts/2020/the-lg-ultrafine5k-kerneltask-and-me/</guid><description>A four-year saga with the problematic LG UltraFine 5K display and the surprising discovery that plugging it into the wrong MacBook side causes performance issues.</description><pubDate>Tue, 19 May 2020 06:00:00 GMT</pubDate></item><item><title>Let&apos;s Try This Again</title><link>https://steipete.me/posts/2020/lets-try-this-again/</link><guid isPermaLink="true">https://steipete.me/posts/2020/lets-try-this-again/</guid><description>After five years away from personal blogging, I&apos;m returning to share technical stories that don&apos;t fit on Twitter or corporate blogs.</description><pubDate>Thu, 14 May 2020 17:03:35 GMT</pubDate></item><item><title>How We Work at PSPDFKit</title><link>https://steipete.me/posts/2019/how-we-work/</link><guid isPermaLink="true">https://steipete.me/posts/2019/how-we-work/</guid><description>An inside look at PSPDFKit&apos;s development processes, from proposal-based feature planning to monorepo management and release automation.</description><pubDate>Wed, 03 Jul 2019 07:00:00 GMT</pubDate></item><item><title>Swizzling in Swift</title><link>https://steipete.me/posts/2019/swizzling-in-swift/</link><guid isPermaLink="true">https://steipete.me/posts/2019/swizzling-in-swift/</guid><description>A deep dive into safe method swizzling techniques in Swift, covering common pitfalls and the correct way to implement dynamic super calls.</description><pubDate>Wed, 26 Jun 2019 08:00:00 GMT</pubDate></item><item><title>WWDC for First-Timers, 2019 Edition</title><link>https://steipete.me/posts/2019/wwdc-tips-2019-edition/</link><guid isPermaLink="true">https://steipete.me/posts/2019/wwdc-tips-2019-edition/</guid><description>Practical tips and advice for making the most of your WWDC experience, from packing essentials to navigating labs and networking events.</description><pubDate>Thu, 30 May 2019 12:00:00 GMT</pubDate></item><item><title>Challenges of Adopting Drag and Drop</title><link>https://steipete.me/posts/2018/challenges-of-drag-and-drop/</link><guid isPermaLink="true">https://steipete.me/posts/2018/challenges-of-drag-and-drop/</guid><description>Discusses the challenges and limitations faced when implementing drag and drop functionality for PDF editing on iOS 11.</description><pubDate>Wed, 07 Nov 2018 08:10:00 GMT</pubDate></item><item><title>Marzipan: Porting iOS Apps to the Mac</title><link>https://steipete.me/posts/2018/porting-ios-apps-to-mac-marzipan-iosmac-uikit-appkit/</link><guid isPermaLink="true">https://steipete.me/posts/2018/porting-ios-apps-to-mac-marzipan-iosmac-uikit-appkit/</guid><description>Explores Apple&apos;s Marzipan technology for running UIKit apps on macOS and how to experiment with it before official third-party support.</description><pubDate>Thu, 20 Sep 2018 12:00:00 GMT</pubDate></item><item><title>How to Use Slack and Not Go Crazy</title><link>https://steipete.me/posts/2018/how-to-use-slack-and-not-go-crazy/</link><guid isPermaLink="true">https://steipete.me/posts/2018/how-to-use-slack-and-not-go-crazy/</guid><description>Best practices for using Slack effectively in a distributed team without getting overwhelmed by notifications and channels.</description><pubDate>Thu, 21 Jun 2018 12:00:00 GMT</pubDate></item><item><title>Hardcore Debugging - Heavy Weapons for Hard Bugs</title><link>https://steipete.me/posts/2018/hardcore-debugging/</link><guid isPermaLink="true">https://steipete.me/posts/2018/hardcore-debugging/</guid><description>Advanced debugging techniques for tracking memory management issues, retain/release cycles, and hard-to-find bugs in iOS development.</description><pubDate>Wed, 07 Mar 2018 12:00:00 GMT</pubDate></item><item><title>Binary Frameworks in Swift</title><link>https://steipete.me/posts/2018/binary-frameworks-swift/</link><guid isPermaLink="true">https://steipete.me/posts/2018/binary-frameworks-swift/</guid><description>Explores Swift&apos;s ABI stability and the challenges of shipping binary frameworks before Swift 5.</description><pubDate>Mon, 29 Jan 2018 12:00:00 GMT</pubDate></item><item><title>Even Swiftier Objective-C</title><link>https://steipete.me/posts/2017/even-swiftier-objective-c/</link><guid isPermaLink="true">https://steipete.me/posts/2017/even-swiftier-objective-c/</guid><description>Explores new Objective-C features and improvements introduced at WWDC 2017 that make the language more Swift-like.</description><pubDate>Wed, 14 Jun 2017 12:00:00 GMT</pubDate></item><item><title>The Case for Deprecating UITableView</title><link>https://steipete.me/posts/2017/the-case-for-deprecating-uitableview/</link><guid isPermaLink="true">https://steipete.me/posts/2017/the-case-for-deprecating-uitableview/</guid><description>Argues why UITableView should be deprecated in favor of UICollectionView for better flexibility and modern iOS development.</description><pubDate>Thu, 19 Jan 2017 12:10:00 GMT</pubDate></item><item><title>Running tests with Clang Address Sanitizer</title><link>https://steipete.me/posts/2016/test-with-asan/</link><guid isPermaLink="true">https://steipete.me/posts/2016/test-with-asan/</guid><description>Guide to using Clang Address Sanitizer for finding memory bugs, race conditions, and other runtime issues in iOS and Android development.</description><pubDate>Tue, 18 Oct 2016 12:00:00 GMT</pubDate></item><item><title>UI testing on iOS, without busy waiting</title><link>https://steipete.me/posts/2016/ui-testing-revisited/</link><guid isPermaLink="true">https://steipete.me/posts/2016/ui-testing-revisited/</guid><description>Comprehensive guide to effective UI testing on iOS using KIF framework without busy waiting and performance optimization techniques.</description><pubDate>Thu, 29 Sep 2016 15:00:00 GMT</pubDate></item><item><title>Hiring a distributed team</title><link>https://steipete.me/posts/2016/hiring-a-distributed-team/</link><guid isPermaLink="true">https://steipete.me/posts/2016/hiring-a-distributed-team/</guid><description>Lessons learned about hiring and building a successful distributed remote team at PSPDFKit over six years.</description><pubDate>Tue, 20 Sep 2016 12:00:00 GMT</pubDate></item><item><title>Writing Good Bug Reports</title><link>https://steipete.me/posts/2016/writing-good-bug-reports/</link><guid isPermaLink="true">https://steipete.me/posts/2016/writing-good-bug-reports/</guid><description>Essential guide to writing effective bug reports that help developers understand, reproduce, and fix issues quickly and efficiently.</description><pubDate>Tue, 13 Sep 2016 12:00:00 GMT</pubDate></item><item><title>Real-time collaboration, Apple, and you</title><link>https://steipete.me/posts/2016/real-time-collaboration/</link><guid isPermaLink="true">https://steipete.me/posts/2016/real-time-collaboration/</guid><description>Analysis of Apple&apos;s real-time collaboration features announced in 2016 and their implications for developers.</description><pubDate>Thu, 08 Sep 2016 12:00:00 GMT</pubDate></item><item><title>Converting Xcode Test Runs to JUnit, the Fast Way</title><link>https://steipete.me/posts/2016/converting-xcode-test-results-the-fast-way/</link><guid isPermaLink="true">https://steipete.me/posts/2016/converting-xcode-test-results-the-fast-way/</guid><description>A fast method for converting Xcode test results to JUnit format for better CI integration and test reporting.</description><pubDate>Thu, 11 Aug 2016 10:00:00 GMT</pubDate></item><item><title>Efficient iOS Version Checking</title><link>https://steipete.me/posts/2016/efficient-ios-version-checking/</link><guid isPermaLink="true">https://steipete.me/posts/2016/efficient-ios-version-checking/</guid><description>Best practices for efficiently checking iOS versions in code while supporting multiple deployment targets.</description><pubDate>Wed, 06 Jul 2016 12:00:00 GMT</pubDate></item><item><title>Investigating Thread Safety of UIImage</title><link>https://steipete.me/posts/2016/investigating-thread-safety-of-uiimage/</link><guid isPermaLink="true">https://steipete.me/posts/2016/investigating-thread-safety-of-uiimage/</guid><description>Deep dive into UIImage thread safety issues and how to properly handle images in concurrent environments.</description><pubDate>Thu, 30 Jun 2016 12:00:00 GMT</pubDate></item><item><title>Swifty Objective-C</title><link>https://steipete.me/posts/2016/swifty-objective-c/</link><guid isPermaLink="true">https://steipete.me/posts/2016/swifty-objective-c/</guid><description>Modern Objective-C language features that make it more Swift-like, including nullability annotations, generics, and new syntax improvements.</description><pubDate>Thu, 26 May 2016 12:10:00 GMT</pubDate></item><item><title>Running UI Tests on iOS With Ludicrous Speed</title><link>https://steipete.me/posts/2016/running-ui-tests-with-ludicrous-speed/</link><guid isPermaLink="true">https://steipete.me/posts/2016/running-ui-tests-with-ludicrous-speed/</guid><description>Techniques for dramatically speeding up UI test execution in Xcode using parallelization and optimization strategies.</description><pubDate>Wed, 27 Apr 2016 12:00:00 GMT</pubDate></item><item><title>A Pragmatic Approach to Cross-Platform</title><link>https://steipete.me/posts/2016/a-pragmatic-approach-to-cross-platform/</link><guid isPermaLink="true">https://steipete.me/posts/2016/a-pragmatic-approach-to-cross-platform/</guid><description>How PSPDFKit shares a common C++ codebase across iOS, Android, and Web platforms while maintaining native user experiences.</description><pubDate>Wed, 13 Apr 2016 06:00:00 GMT</pubDate></item><item><title>Surprises with Swift Extensions</title><link>https://steipete.me/posts/2016/surprises-with-swift-extensions/</link><guid isPermaLink="true">https://steipete.me/posts/2016/surprises-with-swift-extensions/</guid><description>Common pitfalls and surprising behaviors when creating Swift extensions on Objective-C classes, with solutions for proper method naming.</description><pubDate>Thu, 24 Mar 2016 12:00:00 GMT</pubDate></item><item><title>Using ccache for Fun and Profit</title><link>https://steipete.me/posts/2015/ccache-for-fun-and-profit/</link><guid isPermaLink="true">https://steipete.me/posts/2015/ccache-for-fun-and-profit/</guid><description>Complete guide to using ccache to dramatically speed up C/C++/Objective-C build times for large iOS projects and CI systems.</description><pubDate>Tue, 06 Oct 2015 12:00:00 GMT</pubDate></item><item><title>UITableViewController designated initializer woes</title><link>https://steipete.me/posts/2015/uitableviewcontroller-designated-initializer-woes/</link><guid isPermaLink="true">https://steipete.me/posts/2015/uitableviewcontroller-designated-initializer-woes/</guid><description>Navigate the complications of subclassing UITableViewController after iOS 8.3 introduced designated initializers that break proper initialization patterns.</description><pubDate>Wed, 15 Apr 2015 09:15:00 GMT</pubDate></item><item><title>Researching ResearchKit</title><link>https://steipete.me/posts/2015/researching-researchkit/</link><guid isPermaLink="true">https://steipete.me/posts/2015/researching-researchkit/</guid><description>Analyze Apple&apos;s first major open-source project ResearchKit to discover interesting implementation details and practical iOS development solutions.</description><pubDate>Tue, 14 Apr 2015 21:46:00 GMT</pubDate></item><item><title>The curious case of rotation with multiple windows on iOS 8</title><link>https://steipete.me/posts/2015/rotation-multiple-windows-bug/</link><guid isPermaLink="true">https://steipete.me/posts/2015/rotation-multiple-windows-bug/</guid><description>Diagnose and solve an iOS 8 regression where unwanted rotation occurs in apps using multiple windows despite explicit configuration.</description><pubDate>Sun, 25 Jan 2015 21:25:00 GMT</pubDate></item><item><title>UIKit Debug Mode</title><link>https://steipete.me/posts/2015/uikit-debug-mode/</link><guid isPermaLink="true">https://steipete.me/posts/2015/uikit-debug-mode/</guid><description>Unlock hidden UIKit debugging features by bypassing Apple&apos;s InternalBuild checks to access secret flags for logging touches, gestures, and animations.</description><pubDate>Fri, 09 Jan 2015 15:05:00 GMT</pubDate></item><item><title>Retrofitting containsString: on iOS 7</title><link>https://steipete.me/posts/2014/retrofitting-containsstring-on-ios-7/</link><guid isPermaLink="true">https://steipete.me/posts/2014/retrofitting-containsstring-on-ios-7/</guid><description>Backport iOS 8&apos;s convenient NSString containsString: method to iOS 7 using runtime patching that won&apos;t conflict with Apple&apos;s implementation.</description><pubDate>Thu, 17 Jul 2014 23:40:00 GMT</pubDate></item><item><title>A Story About Swizzling &quot;the Right Way™&quot; and Touch Forwarding</title><link>https://steipete.me/posts/2014/a-story-about-swizzling-the-right-way-and-touch-forwarding/</link><guid isPermaLink="true">https://steipete.me/posts/2014/a-story-about-swizzling-the-right-way-and-touch-forwarding/</guid><description>Learn why traditional method swizzling breaks UIKit&apos;s touch forwarding and discover a better approach that preserves _cmd integrity.</description><pubDate>Fri, 04 Jul 2014 12:17:00 GMT</pubDate></item><item><title>Hacking with Aspects</title><link>https://steipete.me/posts/2014/hacking-with-aspects/</link><guid isPermaLink="true">https://steipete.me/posts/2014/hacking-with-aspects/</guid><description>Explore how Apple detects popover presentation in UIImagePickerController and learn to bypass the restriction using my Aspects library.</description><pubDate>Tue, 06 May 2014 00:45:00 GMT</pubDate></item><item><title>Fixing UITextView On iOS 7</title><link>https://steipete.me/posts/2014/fixing-uitextview-on-ios-7/</link><guid isPermaLink="true">https://steipete.me/posts/2014/fixing-uitextview-on-ios-7/</guid><description>Fix the severe scrolling and content positioning bugs in iOS 7&apos;s UITextView with PSPDFTextView, a drop-in replacement.</description><pubDate>Wed, 08 Jan 2014 20:03:00 GMT</pubDate></item><item><title>Fixing What Apple Doesn&apos;t</title><link>https://steipete.me/posts/2014/fixing-what-apple-doesnt/</link><guid isPermaLink="true">https://steipete.me/posts/2014/fixing-what-apple-doesnt/</guid><description>Fix the misaligned label in iOS 7&apos;s printer controller by swizzling UIPrinterSearchingView&apos;s layoutSubviews method.</description><pubDate>Sat, 04 Jan 2014 15:09:00 GMT</pubDate></item><item><title>How To Inspect The View Hierarchy Of Third-Party Apps</title><link>https://steipete.me/posts/2013/how-to-inspect-the-view-hierarchy-of-3rd-party-apps/</link><guid isPermaLink="true">https://steipete.me/posts/2013/how-to-inspect-the-view-hierarchy-of-3rd-party-apps/</guid><description>Learn how to inspect view hierarchies of third-party iOS apps using a jailbroken device and debugging tools like Reveal for design insights.</description><pubDate>Fri, 27 Dec 2013 18:42:00 GMT</pubDate></item><item><title>Fixing UISearchDisplayController On iOS 7</title><link>https://steipete.me/posts/2013/fixing-uisearchdisplaycontroller-on-ios-7/</link><guid isPermaLink="true">https://steipete.me/posts/2013/fixing-uisearchdisplaycontroller-on-ios-7/</guid><description>Fix the broken animation, frame positioning, and status bar issues in UISearchDisplayController on iOS 7 with this comprehensive solution.</description><pubDate>Fri, 04 Oct 2013 19:00:00 GMT</pubDate></item><item><title>Smart Proxy Delegation</title><link>https://steipete.me/posts/2013/smart-proxy-delegation/</link><guid isPermaLink="true">https://steipete.me/posts/2013/smart-proxy-delegation/</guid><description>Eliminate delegate boilerplate code in Objective-C using NSProxy to automatically handle respondsToSelector checks and method forwarding.</description><pubDate>Tue, 30 Jul 2013 18:28:00 GMT</pubDate></item><item><title>Adding Keyboard Shortcuts To UIAlertView</title><link>https://steipete.me/posts/2013/adding-keyboard-shortcuts-to-uialertview/</link><guid isPermaLink="true">https://steipete.me/posts/2013/adding-keyboard-shortcuts-to-uialertview/</guid><description>Add keyboard shortcuts to UIAlertView and UIActionSheet for faster simulator testing by intercepting keyboard events with Enter and Escape keys.</description><pubDate>Wed, 06 Mar 2013 22:38:00 GMT</pubDate></item><item><title>How To Center Content Within UIScrollView</title><link>https://steipete.me/posts/2013/how-to-center-uiscrollview/</link><guid isPermaLink="true">https://steipete.me/posts/2013/how-to-center-uiscrollview/</guid><description>Learn the best approach to center content in UIScrollView using contentInset instead of layoutSubviews or setContentOffset for better zooming behavior.</description><pubDate>Thu, 21 Feb 2013 12:07:00 GMT</pubDate></item><item><title>UIAppearance for Custom Views</title><link>https://steipete.me/posts/2013/uiappearance-for-custom-views/</link><guid isPermaLink="true">https://steipete.me/posts/2013/uiappearance-for-custom-views/</guid><description>Learn how to properly implement UIAppearance in custom views, including important gotchas about setter tracking and initialization patterns.</description><pubDate>Tue, 12 Feb 2013 14:31:00 GMT</pubDate></item><item><title>Hacking Block Support Into UIMenuItem</title><link>https://steipete.me/posts/2012/hacking-block-support-into-uimenuitem/</link><guid isPermaLink="true">https://steipete.me/posts/2012/hacking-block-support-into-uimenuitem/</guid><description>Implement block support for UIMenuItem by swizzling the responder chain to enable cleaner API patterns.</description><pubDate>Tue, 17 Jul 2012 16:22:00 GMT</pubDate></item><item><title>Using Subscripting With Xcode 4.4 And iOS 4.3+</title><link>https://steipete.me/posts/2012/using-subscripting-with-xcode-4_4-and-ios-4_3/</link><guid isPermaLink="true">https://steipete.me/posts/2012/using-subscripting-with-xcode-4_4-and-ios-4_3/</guid><description>Use Objective-C&apos;s modern subscripting syntax with Xcode 4.4 and iOS 4.3+ through a clever header-only hack that enables array[index] notation.</description><pubDate>Wed, 11 Jul 2012 15:03:00 GMT</pubDate></item><item><title>Pimping recursiveDescription</title><link>https://steipete.me/posts/2012/pimping-recursivedescription/</link><guid isPermaLink="true">https://steipete.me/posts/2012/pimping-recursivedescription/</guid><description>Enhance UIView&apos;s recursiveDescription to clearly show view controller hierarchies and containment relationships for easier debugging.</description><pubDate>Sun, 01 Jul 2012 15:49:00 GMT</pubDate></item><item><title>NSURLCache Uses A Disk Cache As Of iOS 5</title><link>https://steipete.me/posts/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/</link><guid isPermaLink="true">https://steipete.me/posts/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/</guid><description>Discover how NSURLCache in iOS 5 now automatically implements disk caching to a SQLite database based on Cache-Control headers.</description><pubDate>Tue, 10 Apr 2012 19:37:00 GMT</pubDate></item><item><title>Moving On... Or How Waiting For A Visa Was The Best Thing That Ever Happened To Me.</title><link>https://steipete.me/posts/2012/moving-on/</link><guid isPermaLink="true">https://steipete.me/posts/2012/moving-on/</guid><description>After months of waiting for a US visa, I share my journey from freelance to full-time indie developer and the creation of PSPDFKit.</description><pubDate>Fri, 06 Apr 2012 16:00:00 GMT</pubDate></item><item><title>Don&apos;t Call willChangeValueForKey Unless It&apos;s Really Needed</title><link>https://steipete.me/posts/2012/dont-call-willchangevalueforkey/</link><guid isPermaLink="true">https://steipete.me/posts/2012/dont-call-willchangevalueforkey/</guid><description>Learn why willChangeValueForKey and didChangeValueForKey are unnecessary when using setter methods for KVO in Objective-C.</description><pubDate>Thu, 05 Apr 2012 15:27:00 GMT</pubDate></item><item><title>Reboot</title><link>https://steipete.me/posts/2012/reboot/</link><guid isPermaLink="true">https://steipete.me/posts/2012/reboot/</guid><description>This post marks the reboot of my blog where I plan to share iOS development insights and personal thoughts.</description><pubDate>Thu, 05 Apr 2012 00:35:00 GMT</pubDate></item></channel></rss>