All blogs / Software / engineering practice
Jeff Johnson
lapcatsoftware.com/main/Resume.html
The résumé of Jeff Johnson, professional Mac and iOS developer.
Software / engineering practiceMobile / iOS / AndroidSecurity
- Posts
- 510 from 4 May 2013 to 17 Oct 2026
- Posting
- weekly (94 in the last year)
- Kind
- personal blog
2026 82
- 2006 - 2010
- Why I still shun passkeys
- Almost everyone misunderstands Chrome extension manifest version 3
- macOS Golden Gate is a buggy mess
- More details about how macOS 26.4 changed the login keychain
- Meta Muse Mac first run experience
- I’m leaving Reddit because of RSS
- App Store: a few bad apples or one bad Apple?
- App Store review allowed a Meta Muse copycat
- Files access bug in iOS
- Book review: Steve Jobs in Exile by Geoffrey Cain
- macOS 26.4 silently enabled login keychain data protection
- Apple release candidate unfixed bugs
- macOS Tahoe silently sabotaged the login keychain
- Liquid Glass disfigured the Safari status bar
- Chrome again exempts Google from user site data settings
- Copycats in Apple Books
- I beg the news media to talk to me before publishing stories about my blog posts
- More incredible tales of App Store curation
- Apple’s statements about its developer program in the Epic trial
- hdiutil is deprecated in macOS 27 Golden Gate
- App Store allows developers to spam the submission and review process
- Not Raising the Gates
- Spicy tale of an App Store fraud
- A fortuitous decade as an indie software developer
- Apple unpublished old Mac OS X release notes
- Why does Mail app contact iCloud when sending a non-iCloud email?
- The obligatory AI post
- Apple should be ashamed of its hostile App Store rating system
- No, you curate the App Store
- macOS Files & Folders System Settings Confusing UI
- macOS App Management protection is still a joke
- Mac App Store: What’s in a name again?
- Apple account email address disclosure via Mail app
- I like pancakes. So I hate debates.
- I found a workaround for an App Store Connect bug
- How to hide an update in the Mac App Store
- Apple again black-holed my App Store Connect bug report
- Liquid Glass obscures macOS volume changes
- Analyzing Apple financial statements: products vs. services
- Apple Hide My Email bug, possibly related to disclosure vulnerability
- Safari sidebar silently loads all your bookmarks
- Can iCloud remotely enable Protect Mail Activity on your Mac?
- WebKit always enables the Copy menu item in every app
- Can you reproduce this App Store Connect bug?
- Reddit RSS feeds recent rate limiting and solution
- Safari Technology Preview’s self-destructive macOS support policy
- My URL/NSURL bug in the OS 27 release notes
- Misguided JavaScript API: Origin Private File System
- The Mythical App Store Reviewer Month
- Mac App Store: What’s in a name?
- Apple 0-dayed Safari on macOS Sequoia and Sonoma
- Prevent cross-site tracking in Safari breaks Cloudflare challenges
- App Store Curation 2: The Scammer Strikes Back
- The browser extension API setUninstallURL violates user privacy
- Small ways the App Store could be improved for developers
- App Store Connect analytics missing platform versions
- Apple randomly closes bug reports unless you “verify” the bug remains unfixed
- App Store developers: suggest your small ideas for improvement
- macOS Tahoe bloats the Safari Picture-in-Picture window
- The incentives of online attention
- Safari web browser bugs: A year in review
- If computers are the future, why are computer users expected to be permanently illiterate?
- The evolution of Mac app window corners
- MacBook Neo
- Investigation complete - Unable to diagnose with current information
- macOS Tahoe windows have different corner radiuses
- The myth and reality of Mac OS X Snow Leopard revisited
- More macOS 26.3 Finder column view silliness
- Why is DuckDuckGo so much worse than Bing?
- I’m in the Epstein files
- Apple’s MacBook Pro DFU port documentation is wrong
- How do you comparison shop in the App Store?
- My collected App Store critiques
- macOS 26.1 new feature: Resize columns to fit filenames
- Mobile Safari web pages are severely limited by memory
- My way to prevent the macOS Tahoe update with Little Snitch
- macOS Tahoe broke Finder columns view
- A sternly worded blog
- The news media blew it again: iOS 26 adoption measured only third-party browsers
- Myths about Logitech Developer ID certificate expiration
- My hope for Safari extensions in 2026
2025 66
- Mac app notarization: The ghost of Xcode past?
- I foretold that Mac app notarization is security theater
- Belated Liquid Glass on iPhone first impressions
- UserDefaults footgun
- A critique of mathematical objectivity
- Reaching 10 million App Store users
- Feedback Assistant app mysteriously triggers IMTransferAgent
- Web browser status bars are nuts
- Why iOS Safari does not open App Store app links
- Web development tip: disable pointer events on link images
- Apple Messages app violates tracking number privacy
- Stop The Mac App Store is not obsolete
- URL/NSURL double-encodes characters unnecessarily
- Safari 26 advanced fingerprinting protection: A confusing feature
- GitHub-hosted copycat Mac app malware scam proliferates
- Safari 26 changed address bar copying
- The psychology of fixing bugs, Part 2: Google
- The psychology of fixing bugs
- A critique of philosophical objectivity
- Apple wants a sysdiagnose for a feature request
- iOS simulator Files app broken by symlink
- Academic philosophy: my quixotic quest
- icloud.com email users can send but not receive malicious links
- Tim Cook vs. Steve Jobs
- Book review: Apple in China by Patrick McGee
- Some third-party Mac apps I use
- Liquid Crass
- Apple in China, Ripoff in Amazon
- App Store search is not a user feature
- Safari web app strange connection behavior
- macOS Tahoe forces all app icons into iOS squircles
- Why does Apple make a minority of developers finance the entire App Store?
- Insane web design on apple dot com
- Stop The Mac App Store minor update
- Apple Turntable
- Apple is not blocking Epic Games from updating Fortnite in the European Union
- A look at a Mac App Store top grosser
- Making my app worse because of macOS privacy protections
- Free with In-App Purchase is a sham
- Why some Mac apps launch slowly: A follow-up
- Google Chrome 136 automatically upgrades your accounts to use passkeys
- The weirdest HTML feature (or bug?): display your head
- Gatekeeper change in macOS 15.4
- App Store Curation
- UIApplication delegate deprecation coming in iOS 19 SDK
- Inaccessible .bnnsir files on macOS Sequoia, Part 3
- Inaccessible .bnnsir files on macOS Sequoia, Part 2
- NSURLComponents changed in macOS 15.4
- Why is macOS syslogd listening for UDP connections?
- Apple Software Update dark pattern
- For sale: 16-inch M1 MacBook Pro with new battery
- Why are macOS security updates re-running the Setup Assistant?
- iCloud remotely triggers iMessage sign-in and sync
- Xcode constantly phones home
- Inaccessible .bnnsir files on macOS Sequoia
- Apple software update "bug" enables Apple Intelligence
- How Safari search engine extensions work
- Apple Mail app bugs finally pushed me to MailMate
- YouTube problem in macOS Safari
- Image Creation Tools Are Here
- New secure note on macOS Sequoia
- Little Snitch feature nobody knows about
- Apple Passwords is hostile to backups
- macOS Sequoia iCloud Photos configuration profile bug
- Help? Reset AirDrop identity hash
- Technology is never a substitute for consent
2024 48
- The internet is full of experts
- Apple Photos phones home on iOS 18 and macOS 15
- Deep dive into a macOS default web browser bug
- How Safari 18.2 https upgrade works
- How Safari (insanely) displays app extension icons
- Apple continues to dismiss bug reports
- Apple rejected my Vision Pro app update
- Apple silently uploads your passwords and keeps them
- How Safari can improve extensions: Redux
- Mac App Store receipt validation problem on Sequoia
- Safari 18 randomly appearing sidebar
- More annoying macOS 15 Sequoia prompts: Bluetooth
- Stop macOS 15 Sequoia monthly screen recording prompts
- Can't change security policy or disable SIP with macOS 15 Sequoia
- Passkey privacy issues
- Safari missing feature: auto-clear website data
- macOS firewall slows DNS queries
- How I git push from my laptop to my website
- New macOS bug: Updates Available notification with no updates
- Apple memory holed its broken promise for an OCSP opt-out
- Smart App Banners don't appear in private browsing
- Has Apple underpaid App Store developers AGAIN?
- Fix Safari Private Window Empty Page
- Deluge of Fake Mac App Store Reviews
- Amazon Web Services dark patterns
- Safari bookmarklet permissions
- Advanced tracking and fingerprinting protection breaks Safari extensions
- Stop iCloud Keychain with a profile
- macOS Sonoma Mail bug: spam bypasses Block All Remote Content
- WWDC Boycott of Feedback Assistant
- Follow-up on developer payments for App Store bundle purchases
- Apple silicon MacBook Pro batteries can't be replaced under warranty by third parties
- Verify Your Recovery Key?
- macOS Sonoma bug: Can't create disk image containing locked file
- macOS Sonoma silently enabled iCloud Keychain despite my precautions
- Updating from macOS Ventura to Sonoma silently enables iCloud Keychain
- Apple started cheating me out of App Store bundle purchases
- YouTube video quality bug in iOS Safari
- Show passwords as they're typed in Terminal
- Funny story of how I recovered the password of an encrypted Mac disk image
- Stop The Mac App Store improved for Sonoma and Ventura
- Safari Search Settings spacing
- Mac app launches slowed by malware scan
- How to stop Upgrade to macOS Sonoma notifications
- The HTML dialog element API is a mess
- Abandonware featured in iOS App Store
- Beware of App Store app bundles
- How Safari can improve extensions
2023 51
- StopTheMadness Pro postmortem: crApp Store still crappy
- iOS 17 App Store screenshots caveat
- iOS 17.2 shows the wrong Safari extension icons
- macOS Sonoma increases NSControl font size
- Disabled Safari extensions are not fully disabled, and other problems
- NSFileManager error messages lie
- The myth and reality of Mac OS X Snow Leopard
- Mac App Store receipt validation revisited
- Feedback Assistant boycott web page and participants list
- Apple developer boycott of Feedback Assistant
- This Feedback will no longer be monitored, and incoming messages will not be reviewed
- Safari share menu now violates privacy
- Why I disabled advanced tracking and fingerprinting protection in Safari
- Safari 17 hidden feature: Always allow this website to open an app
- How to fix the disastrous new Xcode 15 console
- LaunchServices and Spotlight
- Xcode 15 logs nil as an empty string, not (null)
- Your Mastodon archive omits DMs sent to you
- Mastodon instance admin deleted all of our DMs after 15 days
- How did Apple get all of my email addresses?
- Mysterious disappearing Apple ID 2FA codes
- The most wonderful new hidden feature in iOS 17 and macOS 14
- Another Google Search bug in iOS Safari
- Safari Un-Intelligent Tracking Prevention: Data loss by design
- Threads.net can go to hell
- macOS App Management vulnerability illustrated
- macOS 0day: App Management
- How do I report a Google Search bug?
- Follow-up to Firefox 115 can silently remotely disable my extension on any site
- Reflections on my 7th Twitter anniversary
- Firefox 115 can silently remotely disable my extension on any site
- My thoughts on Apple Vision Pro
- Little Snitch "denied" connections leak your IP address: Developer response
- Safari 17 Link Tracking Protection Details
- macOS Sonoma sandbox security
- macOS: Attribute Not Found?
- Passkeys: A loss of user control?
- Follow-up to Little Snitch "denied" connections leak your IP address
- Little Snitch "denied" connections leak your IP address
- What Apple doesn't get about Feedback
- Mac Messages: Can't I show my email address?
- Race to the bottom: App Store peer benchmarks
- I do want to go back to social media
- Ventura or Vista? Cancel or Allow in Mac Preview app
- App Store Review continues to delay updates for no reason
- Mastodon postmortem
- Mastodon instance mstdn.plus with over 4K users suddenly broke
- NSURLSession connection leak
- Universal Links Revisited
- Bing and DuckDuckGo removed my business web site AGAIN
- The App Store does not protect consumers
2022 57
- App Store Connect is the worst web site ever made, Part 4: Works as currently designed
- I posted my Safari extension issues on GitHub. Post yours too!
- How to restore the Preferences menu item to macOS Ventura, Part 2
- macOS removes and reinstalls Rosetta after every update
- Mac OS X analogue for Node.js?
- macOS Monterey still vulnerable to CVE-2022-40303
- Hide System Preferences Dock badge
- I don't want to go back to social media
- App Store Connect is the worst web site ever made, Part 3
- App Store Connect just got worse. But I made it better.
- I'm starting a company blog and Slack
- Blogging without a blogging engine
- Why does this chart just go down? 0 once again marks the spot.
- Safari annoyingly announces reader and translation
- macOS 27.2 fixed 263 CVE, credited 262. Who was uncredited? Me, I think.
- Design the interface for functionality not familiarity
- How to regenerate Xcode managed provisioning profiles
- How macOS Ventura App Management works and doesn't work
- Mac indie dev alliance
- Works as currently designed
- Check your App IDs for unused capabilities
- Every unsandboxed app has Full Disk Access if Terminal does
- iOS 16 text view breakage
- How to restore the Preferences menu item to macOS Ventura
- Web pages can overwrite your system clipboard without your knowledge
- Safari updates reset your Experimental Features preferences
- Extensions API broken in Mac Safari
- iOS dictation is dickish
- Why macOS Ventura Share menu is bad
- Twitter crypto spam bots copy real tweets to appear real
- Apple re-enables Bluetooth on every OS update on purpose
- NSURL is relatively bad
- More disappearing Safari extensions
- Thoughts on Swift and Objective-C
- macOS Monterey Dock watches /Users/Shared/
- macOS Monterey unannounced security misfeature
- Link Unshortener enhancements
- Stop Safari from switching your Twitter timeline
- Bing and DuckDuckGo removed my business web site
- Apple reneged on OCSP privacy
- Why Ventura System Settings is bad, Part 2
- Why Ventura System Settings is bad
- Apple's director of App Review emailed me
- My bug fix update is stuck in App Store review
- On App Store pricing inflexibility
- Safari <img> solving the wrong problem
- The App Store Improvements process makes no sense
- Google Chrome 101 removed Fill passwords on account selection
- How do I backup my new MacBook Pro?
- Impressions of the new MacBook Pro
- Why is /AppleInternal factory installed on new Macs?
- Mac Pro historical perspective
- App Store Connect is the worst web site ever made
- Do you want me to leave the Apple ecosystem?
- Misinformation from… Stephen Fry?
- How to make a home page bookmark to Twitter in Mobile Safari
- Siri may phone home with Ask Siri disabled
2021 40
- iOS 15.2 broke Safari extension preferences storage
- You always had the power to PiP on YouTube and everywhere
- Safari bug: background tabs reactivate
- Safari forgets your history
- DNSServiceNATPortMappingCreate was quietly killed in macOS Monterey
- Mass confusion and dislike over Safari extension icon tinting
- Apple vandalized my icon in the latest betas
- Did iOS 15 kill Google AMP?
- StopTheScript
- The Safari extension blues
- Where are the Safari extensions in the iOS App Store?
- Google Chrome to remove detailed cookie and site data controls
- Why Xcode tools are slow after reboot
- The color purple
- Dark menu bar and Dock on Big Sur
- Disappearing Safari extensions
- Mac OS update failed for the first time in 19 years
- Twitter locked my account (again) for an obvious joke
- Stop the Medium
- Safari extension development: icons
- iOS Safari extensions bug
- StopTheMadness for iOS
- Disable Safari Preload Top Hit
- Mac trustd high CPU
- Porting your Chrome extension to Safari
- StopTheMadness: Hovering near greatness
- Mac App Store review folly
- NSURL is a bad host
- Distributing unnotarized Mac apps in a text file
- How to stop Mac App Store notifications
- Closing web browser windows doesn't close connections
- TRY THE NEW SAFARI
- Distributing Mac apps without notarization
- New app: Default web browser
- How to use multiple search engines in Safari
- Mac App Store updates failing on Mojave, Part 2
- Xcode code signing madness
- Deleting DerivedData the right way
- New app: Stop The Mac App Store
- How to change your default web browser on Big Sur
2020 59
- Mac App Store updates failing on Mojave
- Undocumented NSShadow change on Catalina
- Disclosure: Yet another macOS privacy protections bypass
- Some BS AppKit notes
- Safari bugs me
- Apple Developer ID OCSP
- Developer ID certificate revocation
- Chrome exempts Google sites from user site data settings
- Stop animated GIFs in Safari
- Can't you just right click? Yes, with a workflow.
- macOS Containers and defaults
- Safari web extension bug
- Stop Facebook click tracking
- Your Honor, what about the Mac?
- Can't you just right click?
- App Store is neither console nor retail but jukebox
- News+ privacy on Big Sur
- PSA if you ever ran my SafariPrivacyTest sample app
- Stop the Swift 2.0
- App Store Connect and StopTheMadness
- Stop the Swift
- macOS Recovery: Bug or Feature?
- Introducing the free Safari extension FindTheMadness
- Disclosure: Another macOS privacy protections bypass
- Better disassembly on macOS Big Sur
- Objective-C disassembly on macOS Big Sur
- Extract the system libraries on macOS Big Sur
- Stop DuckDuckGo clickjacking
- StopTheMadness can now stop mouse tracking
- Logging https requests and responses of Apple system processes
- Software Update changes in the latest macOS releases
- The Mystery of the Phantom App Updates, Part 2
- Catalina is checking notarization of unsigned executables
- Link Unshortener for iOS
- __kindof useful?
- Stop the Daring Fireball?
- Stop 'Open in the Twitter app' in Safari Catalina
- Stop Gmail click tracking
- Reflections on the Mac sandbox escape
- Mac sandbox escape
- NSFormatter allows invalid values
- Working without a nib, Part 12: NSWindow memory management
- Bad Safari extensions bug with context menus
- Introducing Link Unshortener
- Xcode indexing tip
- Resources for learning Objective-C and AppKit
- Underpass is back (though it never left)
- Safari bug: can't enable extensions on Catalina
- Safari no longer runs disabled extensions
- Mac App Store in a nutshell
- PayPal Me
- Resolve rip-relative addresses from otool
- The decimation of Safari extensions
- StopTheMadness for Mac adds Chrome, Edge, and Brave!
- Safari runs disabled extensions
- Swift fatalError is a fatal error
- Questions about the Apple Security Bounty
- The security of Safari extensions
- How to stop Safari for Mac disk caching
2019 31
- Revisited: The true and false security benefits of Mac app notarization
- Undocumented Catalina file access change
- Hardened Runtime and XPC Services
- NSAssert considered harmless
- Hardened Runtime and Sandboxing Revisited
- Disclosure: macOS privacy protections bypass
- What happened to the Mac bug bounty program?
- The Safari Extensions Gallery is no longer available
- Important Information Regarding the Safari Extensions Gallery
- A problem worse than Zoom
- Stop Safari from autosubmitting login forms
- Private browsing in Safari with StopTheMadness
- Catalina app compatibility
- My Twitter account has been locked for a third time
- We believe that what’s in our store says a lot about who we are
- Introducing StopTheNews
- StopTheMadness First Anniversary
- Google Chrome can no longer disable hyperlink auditing
- The true and false security benefits of Mac app notarization
- More madness stopped: beacons
- The madness stopped: anchor ping
- Postmortem: iTunes Affiliate for apps
- Some thoughts on anchor ping
- Safari link tracking can no longer be disabled
- NetService NutHouse
- My Twitter account has been locked again
- Finally credit from Apple Product Security
- Spying on Safari in Mojave
- Still no credit from Apple Product Security
- Stop Google Search Results Tracking
- StopTheMadness for Firefox
2018 23
- The Mac App Store Safari Extensions Experience
- Text view adventures, Part 4
- Text view adventures, Part 3
- Mac app notarization and customer privacy
- Text view adventures, Part 2
- Text view adventures, Part 1
- Hardened Runtime and Sandboxing
- macOS 10.14.1 Privacy: What's fixed and what's not
- Mac App Store Bundles
- Rickroll Resurrected
- Mac Mail with Google 2-step and Yubico
- Another hole in Mojave privacy protection
- No cookie for you!
- Prevent App Nap Programmatically
- Race to Under the Bottom
- Stop The Mad Icon
- Ode to a MacBook Pro
- NSOnState is deprecated
- Debugging on Mojave
- App Translocation and Safari App Extensions
- My Twitter account has been locked
- Stop The Madness
- A Record 13 Weeks
2017 23
- A holiday gift
- Key difference between Dictionary and NSDictionary
- The Mystery of the Phantom App Updates
- Working without a nib, Part 11: Why?
- Local variables are still free, in Swift
- Free as in app
- NSStringEncoding Considered Harmful
- Go all in with xcconfig
- NSNotificationCenter is thread-safe NOT NOT
- Working without a nib, Part 10: Mac Main Menu
- I was on a podcast
- Porting Objective-C to Swift
- Problems with Objective-C annotations
- Not just the Mac Pro
- Twitter only mutes 100 keywords
- Autoresizing UITextView
- Whither Swift?
- Follow-up on a Record 14 Weeks
- Slow Week?
- A Record 14 Weeks
- 70 Cents Put Me on the Mac App Store Charts
- Working without a nib, Part 9: Shipping without a nib
- Inaugurating Underpass
2016 17
- Preannouncement
- Textured Tabbed Windows
- We don't need no stinking badges
- Working without a nib, Part 8: The nib awakens
- Translocate Relocated
- Distributing Outside the Mac App Store
- Caveat Formatter
- Symmetric Encryption
- Keychain Sync
- MIA: SecTranslocate
- Detect App Translocation Without the 10.12 SDK
- Trust
- In Memoriam
- Undo
- Zero Day?
- App Translocation
- What's Wrong With Twitter