Skip to content

2025 24
July 5
  • VibeTunnel's first AI-anniversary

    Published:
    • 5 min read

    It's been one month since we released the first version of VibeTunnel, and since in the AI world time is so much faster, let's call it VibeTunnel's first anniversary!

  • Making AppleScript Work in macOS CLI Tools: The Undocumented Parts

    Published:
    • 6 min read

    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.

  • Peekaboo 2.0 – Free the CLI from its MCP shackles

    Published:
    • 4 min read

    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

  • Command your Claude Code Army, Reloaded

    Published:
    • 3 min read

    Enhance your Claude Code workflow with VibeTunnel terminal title management for better multi-session tracking

  • Essential Reading for Agentic Engineers

    Published:
    • 7 min read

    A curated collection of must-read articles and videos for mastering Claude Code, agentic coding workflows, and the future of AI-assisted development

June 19
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