{"id":52664,"date":"2026-07-20T11:28:02","date_gmt":"2026-07-20T15:28:02","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=52664"},"modified":"2026-07-20T11:29:26","modified_gmt":"2026-07-20T15:29:26","slug":"licensing-a-mac-app-with-revenuecat","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2026\/07\/20\/licensing-a-mac-app-with-revenuecat\/","title":{"rendered":"Licensing a Mac App With RevenueCat"},"content":{"rendered":"<p><a href=\"https:\/\/jsorge.net\/2026\/07\/15\/revenuecat-mac-licensing\">Jared Sorge<\/a>:<\/p>\n<blockquote cite=\"https:\/\/jsorge.net\/2026\/07\/15\/revenuecat-mac-licensing\">\n<p>I know there are options out there like Paddle, FastSpring, and Lemon Squeezy that have worked for many apps like mine over the years. But I also wanted something simple for my users. Not to mention Apple Pay was a must-have.<\/p>\n<\/blockquote>\n\n<p>I believe all the services he mentions do support Apple Pay.<\/p>\n\n<blockquote cite=\"https:\/\/jsorge.net\/2026\/07\/15\/revenuecat-mac-licensing\">\n<ul><li><p>RevenueCat serves as the source of truth for whether or not a customer is licensed.<\/p>\n<\/li>\n<li><p>I create RevenueCat customer IDs from local iCloud identifiers (more specifically, calling <code>userRecordID()<\/code> on my <code>CKContainer<\/code> in CloudKit).<\/p>\n<\/li>\n<li><p>When the user makes a purchase, they earn an entitlement that I look for in Arborist to grant them a license.<\/p><\/li><\/ul>\n<\/blockquote>\n\n<p>He doesn&rsquo;t need to run his own server, and the purchases are automatically tied to the user&rsquo;s iCloud account, so there are no e-mails or serial numbers to deal with. On the other hand, well, it&rsquo;s all dependent on the Apple Account.<\/p>\n\n<p>The app, which helps manage Git worktrees, is <a href=\"https:\/\/jsorge.net\/2026\/07\/20\/meet-arborist\">shipping now<\/a>.<\/p>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2025\/12\/13\/locked-out-of-apple-account-due-to-gift-card\/\">Locked Out of Apple Account Due to Gift Card<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Jared Sorge: I know there are options out there like Paddle, FastSpring, and Lemon Squeezy that have worked for many apps like mine over the years. But I also wanted something simple for my users. Not to mention Apple Pay was a must-have. I believe all the services he mentions do support Apple Pay. RevenueCat [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2026-07-20T15:28:05Z","apple_news_api_id":"c6f52826-43e4-474f-b25d-233461d21c4d","apple_news_api_modified_at":"2026-07-20T15:28:17Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAAAA==","apple_news_api_share_url":"https:\/\/apple.news\/AxvUoJkPkR0-yXSM0YdIcTQ","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[2],"tags":[707,995,2946,101,377,16,30,32,2742,169,2125,171,376],"class_list":["post-52664","post","type-post","status-publish","format-standard","hentry","category-technology","tag-apple-id","tag-apple-pay","tag-arborist","tag-business","tag-git","tag-icloud","tag-mac","tag-macapp","tag-macos-tahoe-26","tag-payments","tag-revenuecat","tag-stripe","tag-versioncontrol"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/52664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=52664"}],"version-history":[{"count":2,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/52664\/revisions"}],"predecessor-version":[{"id":52666,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/52664\/revisions\/52666"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=52664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=52664"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=52664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}