i shipped my first macOS app last week. it got rejected twice by App Review, and both times the bug was the kind of thing you only learn by being bitten.
bug 1: entitlement keys do not take false
my entitlements.plist had camera, mic, and location keys set to false. my reasoning was "the app does not use these, so declare that." that is not how it works. entitlement keys only grant access; to deny access you omit the key. worse, those restricted keys were not in my provisioning profile, so amfid rejected the signature outright with "Restricted entitlements not validated - No matching profile found" and the kernel killed the binary at exec. Killed: 9, no window, nothing.
Guideline 2.4.5(i): invalid sandbox entitlements. fair enough.
bug 2: the sandboxed WKWebView blank screen
the app is a thin WKWebView wrapper around a local html/css/js ui, all bundled, zero network calls. on review, the window opened black and empty.
reproduced it locally with a debug WKNavigationDelegate: webContentProcessDidTerminate, every time. the log said com.apple.WebKit.WebContent "Application does not have permission to communicate with network resources". the WebContent process needs com.apple.security.network.client to even exist, fully offline file:// content included. apple documents this nowhere obvious. add the key, the process lives, the ui renders. didFinish fires, whole deck visible.
Guideline 2.1(a): app was incomplete on launch. also fair.
what shipped
Zero-Power Player is an offline audio player for study sessions: local files (mp3/aac/m4a/flac/wav) cached in IndexedDB, a binaural beat generator with 10/16/40 Hz presets, brown noise and rain mixer, a pomodoro timer, and a projector wall mode that puts a giant timer and track title up for the room. it idles around 0% cpu because decoding goes through native hardware paths.
free, no account, no ads, no analytics. macOS 15+.
https://apps.apple.com/us/app/zero-power-player/id6816212859?mt=12
source is public if you want to see how dumb the actual diff was: https://github.com/princejain756/Zero-Power-Player
the whole fix was deleting 3 xml keys and adding 1. two rejections, one week, for that.
Top comments (0)