Dev

Designing a Distribution DMG for Your macOS App (2): Window and Icon Layout Coordinates, and Automation

Completing the DMG Layout with Coordinates In Part 1, we introduced the create-dmg tool and prepared a staging folder holding only the .app along with a background image. Now for the final piece, the layout. How large to open the DMG window, and where to place the app icon and the Applications shortcut — all of this is decided by the coordinates you pass to create-dmg. In this article, we’ll design those coordinates one by one. ...

May 21, 2026 · 8 min · 1608 words · Juhyun Lee
한국어 日本語 简体中文 Bahasa Indonesia Español Français Português Tiếng Việt 繁體中文
Dev

Designing a Distribution DMG for Your macOS App (1): create-dmg and Preparing the Background Image

The First Screen a User Sees When you distribute a macOS app yourself, the user downloads a .dmg file and double-clicks it. At that moment, a single Finder window opens. This window is the first screen where the user meets your app. A well-made .dmg window usually looks like this — a guide image fills the background, the app icon sits on the left, and a shortcut to the Applications folder sits on the right. The user finishes the install by dragging the app icon over to Applications. This “drag to install” flow is effectively the standard installation experience for indie macOS apps. ...

May 20, 2026 · 8 min · 1532 words · Juhyun Lee
한국어 日本語 简体中文 Bahasa Indonesia Español Français Português Tiếng Việt 繁體中文
Dev

Shipping a macOS App to the Mac App Store (3): Upload Settings and App Store Connect Registration

The Path That Sends a Build to the App Store In Part 1 we created the MAS build target, and in Part 2 we created the configuration files and code branching that separate the two channels. The FocusTimer MAS target is now in a shape that can be put on the App Store. In this final part, we’ll set up the path for uploading that build to App Store Connect, and cover how to verify the two channels so they stay unbroken going forward, wrapping up the series. ...

May 19, 2026 · 5 min · 1028 words · Juhyun Lee
한국어 日本語 简体中文 Bahasa Indonesia Español Français Português Tiếng Việt 繁體中文
Dev

Shipping a macOS App to the Mac App Store (2): Splitting Configuration and Code Between Channels

Making the Target Truly “MAS-Specific” In Part 1, we registered a MAS-only Bundle ID and duplicated the FocusTimer MAS build target. But that target is still just a copy of the direct distribution target. A MAS build has to differ from the direct distribution build in three ways. Entitlements — only the minimum set appropriate for the App Store Info.plist — drop the Sparkle keys, add App Store metadata Code — branch so it compiles even without Sparkle In this post, we’ll split all three. ...

May 18, 2026 · 7 min · 1297 words · Juhyun Lee
한국어 日本語 简体中文 Bahasa Indonesia Español Français Português Tiếng Việt 繁體中文
Dev

Shipping a macOS App to the Mac App Store (1): Creating a Separate Build Target

Another Distribution Channel — the Mac App Store The previous series covered the one-time setup for distributing a macOS app directly with a Developer ID. Once you have certificates, notarization, Sparkle automatic updates, and a hosted update feed in place, you can let users download a .dmg file directly without going through the App Store. This series covers the one-time setup for putting that same app on the Mac App Store (MAS) as well. The two distribution methods are not an either/or choice. You can run a single app through both the direct distribution channel and the App Store channel at the same time. The App Store has Apple handle payments, refunds, and search visibility on your behalf, and it carries higher user trust, so running it alongside direct distribution is a common choice. ...

May 17, 2026 · 7 min · 1430 words · Juhyun Lee
한국어 日本語 简体中文 Bahasa Indonesia Español Français Português Tiếng Việt 繁體中文