Skip to content

2025 9
June 9
  • Commanding Your Claude Code Army

    Published:
    • 3 min read

    How a simple terminal trick helps me manage multiple Claude Code instances without losing my mind (or my terminal tabs)

  • Code Signing and Notarization: Sparkle and Tears

    Published:
    • 10 min read

    The brutal truth about implementing Sparkle auto-updates in sandboxed macOS apps - from 40 failed releases to enlightenment.

  • Vibe Meter: Monitor Your AI Costs

    Published:
    • 7 min read

    Building Vibe Meter, a macOS menu bar app to track AI spending in real-time - from workshop demo to shipped product in three days.

  • Claude Code is My Computer

    Published:
    • 6 min read

    I run Claude Code with --dangerously-skip-permissions flag, giving it full system access. Let me show you a new way of approaching computers.

  • Stop Over-thinking AI Subscriptions

    Published:
    • 5 min read

    After spending heavily on AI tools for two months, here's why the math actually works out—and which subscriptions are worth every penny.

  • Introducing Demark: HTML in. MD out. Blink-fast.

    Published:
    • 3 min read

    How I vibe coded my first Swift package using existing JavaScript libraries and AI assistance to solve HTML to Markdown conversion in Swift.

  • The Future of Vibe Coding: Building with AI, Live and Unfiltered

    Published:
    • 22 min read

    Peter demonstrates 'vibe coding' - a new approach to software development with AI, building two apps from scratch in a 3-hour live workshop.

  • MCP Best Practices

    Published:
    • 8 min read

    A comprehensive guide outlining best practices for building reliable, user-friendly Model Context Protocol (MCP) tools with proper configuration, testing, and release management.

  • Finding My Spark Again

    Published:
    • 2 min read

    Peter reflects on his post-exit journey from emptiness to rediscovering his passion for building, sparked by AI's transformative potential.

2021 3
April 1
January 2
2020 21
December 1
November 1
  • Apple Silicon M1: A Developer's Perspective

    Published:
    • 8 min read

    A comprehensive evaluation of the M1 MacBook Air as a development machine, covering Xcode performance, compatibility issues, and the transition challenges for developers.

October 2
  • Gardening Your Twitter: Curating Your Timeline

    Published:
    • 7 min read

    Practical strategies for curating your Twitter timeline through strategic following, muting, and filtering to create an informative and enjoyable social media experience.

  • Gardening Your Twitter: Growing Your Followers

    Published:
    • 7 min read

    Strategies for growing a meaningful Twitter following through authentic persona development, consistent engagement, and effective content creation based on 12 years of experience.

September 3
  • Forbidden Controls in Catalyst: Optimize Interface for Mac

    Published:
    • 7 min read

    Investigating why certain UIKit controls throw runtime exceptions in Catalyst's 'Optimize Interface for Mac' mode and discovering which controls are forbidden.

  • Disabling Keyboard Avoidance in SwiftUI's UIHostingController

    Published:
    • 6 min read

    Fixing unwanted keyboard avoidance behavior in UIHostingController using runtime dynamic subclassing to override keyboard notification handling methods.

  • The State of SwiftUI

    Published:
    • 7 min read

    Testing SwiftUI's production readiness in iOS 14 and macOS Big Sur through Apple's Fruta sample app, revealing performance issues and platform-specific limitations.

August 1
  • Logging in Swift

    Published:
    • 15 min read

    An in-depth exploration of Apple's unified logging system and the promising OSLogStore API that Apple removed from iOS 14 at the last minute.

June 5
  • Building with Swift Trunk Development Snapshots

    Published:
    • 4 min read

    A troubleshooting guide for building with Swift trunk development snapshots, documenting compilation errors, linker issues, and their solutions.

  • Calling Super at Runtime in Swift

    Published:
    • 16 min read

    Implementing dynamic super calls in Swift through runtime manipulation, assembly language, and ARM64 register management for InterposeKit.

  • zld — A Faster Version of Apple's Linker

    Published:
    • 3 min read

    How to speed up iOS build times by 40% using zld, a drop-in replacement for Apple's linker, with practical integration tips for real projects.

  • How to Fix LLDB: Couldn't IRGen Expression

    Published:
    • 10 min read

    Solving the mysterious LLDB 'Couldn't IRGen expression' error by investigating Swift module path serialization and discovering that removing dSYM bundles fixes debugging issues.

  • Updating macOS on a Hackintosh

    Published:
    • 5 min read

    A practical guide to safely updating macOS on a Hackintosh by first updating OpenCore bootloader and essential kexts before upgrading the system.

May 8
  • InterposeKit — Elegant Swizzling in Swift

    Published:
    • 3 min read

    Introducing InterposeKit, a modern Swift library for elegant method swizzling that leverages Swift 5.2's callAsFunction for type-safe Objective-C method interception.

  • The Great Mac Catalyst Text Input Crash Hunt

    Published:
    • 8 min read

    Deep-dive investigation and fix for a Mac Catalyst text input crash caused by a race condition in Apple's RemoteTextInput framework.

  • Jailbreaking for iOS Developers

    Published:
    • 8 min read

    A comprehensive guide to iOS jailbreaking for developers, covering legal security research tools, debugging capabilities, and practical applications beyond app piracy.

  • Network Kernel Core Dump

    Published:
    • 2 min read

    Step-by-step instructions from Apple for capturing macOS kernel core dumps over a network connection between two Macs.

  • How to macOS Core Dump

    Published:
    • 4 min read

    A technical guide to deciphering Apple's cryptic boot arguments and setting up macOS kernel core dumps to debug persistent kernel panics.

  • Kernel Panics and Surprise boot-args

    Published:
    • 4 min read

    Investigation into mysterious kernel panics reveals Apple repair centers left my MacBook with undocumented security-weakening boot arguments.

  • The LG UltraFine 5K, kernel_task, and Me

    Published:
    • 9 min read

    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.

  • Let's Try This Again

    Published:
    • 1 min read

    After five years away from personal blogging, I'm returning to share technical stories that don't fit on Twitter or corporate blogs.

2019 3
July 1
  • How We Work at PSPDFKit

    Published:
    • 14 min read

    An inside look at PSPDFKit's development processes, from proposal-based feature planning to monorepo management and release automation.

June 1
  • Swizzling in Swift

    Published:
    • 10 min read

    A deep dive into safe method swizzling techniques in Swift, covering common pitfalls and the correct way to implement dynamic super calls.

May 1
  • WWDC for First-Timers, 2019 Edition

    Published:
    • 22 min read

    Practical tips and advice for making the most of your WWDC experience, from packing essentials to navigating labs and networking events.

2018 5
November 1
  • Challenges of Adopting Drag and Drop

    Published:
    • 10 min read

    Discusses the challenges and limitations faced when implementing drag and drop functionality for PDF editing on iOS 11.

September 1
  • Marzipan: Porting iOS Apps to the Mac

    Published:
    • 13 min read

    Explores Apple's Marzipan technology for running UIKit apps on macOS and how to experiment with it before official third-party support.

June 1
  • How to Use Slack and Not Go Crazy

    Published:
    • 12 min read

    Best practices for using Slack effectively in a distributed team without getting overwhelmed by notifications and channels.

March 1
January 1
  • Binary Frameworks in Swift

    Published:
    • 8 min read

    Explores Swift's ABI stability and the challenges of shipping binary frameworks before Swift 5.

2017 2
June 1
  • Even Swiftier Objective-C

    Published:
    • 10 min read

    Explores new Objective-C features and improvements introduced at WWDC 2017 that make the language more Swift-like.

January 1
  • The Case for Deprecating UITableView

    Published:
    • 13 min read

    Argues why UITableView should be deprecated in favor of UICollectionView for better flexibility and modern iOS development.

2016 12
October 1
  • Running tests with Clang Address Sanitizer

    Published:
    • 10 min read

    Guide to using Clang Address Sanitizer for finding memory bugs, race conditions, and other runtime issues in iOS and Android development.

September 4
  • UI testing on iOS, without busy waiting

    Published:
    • 5 min read

    Comprehensive guide to effective UI testing on iOS using KIF framework without busy waiting and performance optimization techniques.

  • Hiring a distributed team

    Published:
    • 10 min read

    Lessons learned about hiring and building a successful distributed remote team at PSPDFKit over six years.

  • Writing Good Bug Reports

    Published:
    • 13 min read

    Essential guide to writing effective bug reports that help developers understand, reproduce, and fix issues quickly and efficiently.

  • Real-time collaboration, Apple, and you

    Published:
    • 6 min read

    Analysis of Apple's real-time collaboration features announced in 2016 and their implications for developers.

August 1
July 1
  • Efficient iOS Version Checking

    Published:
    • 10 min read

    Best practices for efficiently checking iOS versions in code while supporting multiple deployment targets.

June 1
May 1
  • Swifty Objective-C

    Published:
    • 18 min read

    Modern Objective-C language features that make it more Swift-like, including nullability annotations, generics, and new syntax improvements.

April 2
March 1
  • Surprises with Swift Extensions

    Published:
    • 5 min read

    Common pitfalls and surprising behaviors when creating Swift extensions on Objective-C classes, with solutions for proper method naming.

2015 5
October 1
  • Using ccache for Fun and Profit

    Published:
    • 6 min read

    Complete guide to using ccache to dramatically speed up C/C++/Objective-C build times for large iOS projects and CI systems.

April 2
  • UITableViewController designated initializer woes

    Published:
    • 3 min read

    Navigate the complications of subclassing UITableViewController after iOS 8.3 introduced designated initializers that break proper initialization patterns.

  • Researching ResearchKit

    Published:
    • 6 min read

    Analyze Apple's first major open-source project ResearchKit to discover interesting implementation details and practical iOS development solutions.

January 2
  • The curious case of rotation with multiple windows on iOS 8

    Published:
    • 2 min read

    Diagnose and solve an iOS 8 regression where unwanted rotation occurs in apps using multiple windows despite explicit configuration.

  • UIKit Debug Mode

    Published:
    • 2 min read

    Unlock hidden UIKit debugging features by bypassing Apple's InternalBuild checks to access secret flags for logging touches, gestures, and animations.

2014 5
July 2
May 1
  • Hacking with Aspects

    Published:
    • 3 min read

    Explore how Apple detects popover presentation in UIImagePickerController and learn to bypass the restriction using my Aspects library.

January 2
  • Fixing UITextView On iOS 7

    Published:
    • 2 min read

    Fix the severe scrolling and content positioning bugs in iOS 7's UITextView with PSPDFTextView, a drop-in replacement.

  • Fixing What Apple Doesn't

    Published:
    • 2 min read

    Fix the misaligned label in iOS 7's printer controller by swizzling UIPrinterSearchingView's layoutSubviews method.

2013 6
December 1
October 1
  • Fixing UISearchDisplayController On iOS 7

    Published:
    • 1 min read

    Fix the broken animation, frame positioning, and status bar issues in UISearchDisplayController on iOS 7 with this comprehensive solution.

July 1
  • Smart Proxy Delegation

    Published:
    • 4 min read

    Eliminate delegate boilerplate code in Objective-C using NSProxy to automatically handle respondsToSelector checks and method forwarding.

March 1
  • Adding Keyboard Shortcuts To UIAlertView

    Published:
    • 3 min read

    Add keyboard shortcuts to UIAlertView and UIActionSheet for faster simulator testing by intercepting keyboard events with Enter and Escape keys.

February 2
  • How To Center Content Within UIScrollView

    Published:
    • 3 min read

    Learn the best approach to center content in UIScrollView using contentInset instead of layoutSubviews or setContentOffset for better zooming behavior.

  • UIAppearance for Custom Views

    Published:
    • 4 min read

    Learn how to properly implement UIAppearance in custom views, including important gotchas about setter tracking and initialization patterns.

2012 7
July 3
  • Hacking Block Support Into UIMenuItem

    Published:
    • 12 min read

    Implement block support for UIMenuItem by swizzling the responder chain to enable cleaner API patterns.

  • Using Subscripting With Xcode 4.4 And iOS 4.3+

    Published:
    • 2 min read

    Use Objective-C's modern subscripting syntax with Xcode 4.4 and iOS 4.3+ through a clever header-only hack that enables array[index] notation.

  • Pimping recursiveDescription

    Published:
    • 2 min read

    Enhance UIView's recursiveDescription to clearly show view controller hierarchies and containment relationships for easier debugging.

April 4