Nescroll docs
v1.0.0
Get help
● Ship · App Store

Build and release
archive, upload, submit.

Releasing Nescroll is a normal Xcode archive and App Store Connect submission, with one extra condition: Apple must have approved the Family Controls (Distribution) entitlement for your three bundle IDs first.

ArchiveTestFlightApp Store Connect

01Before the first archive

  • Rebrand done: name, bundle IDs, App Group in four places, icon (Rebrand).
  • privacyURL and supportURL point to your own pages (Configuration).
  • DEVELOPMENT_TEAM set, xcodegen generate run again.
  • Family Controls (Distribution) approved for the app, monitor and shield IDs (Screen Time).
  • Lock tested on a real device; every filter checked on the live sites with a fresh account.
  • Tests run (Installation, tests).

02Version numbers

Set them in project.yml, settings → base: MARKETING_VERSION (what users see, e.g. 1.0.1) and CURRENT_PROJECT_VERSION (build number; raise it for every upload). Run xcodegen generate after changing them. The Settings tab shows MARKETING_VERSION.

The extension Info.plist files in Monitor/ and Shield/ contain fixed CFBundleShortVersionString 1.0 and CFBundleVersion 1. If App Store Connect warns that an extension's version does not match the app's, replace those values in the two plists with $(MARKETING_VERSION) and $(CURRENT_PROJECT_VERSION). (Not tested by the author.)

03Archive and upload

  1. Select "Any iOS Device (arm64)" as the run destination.
  2. Product → Archive. When it finishes, the Organizer opens.
  3. Distribute App → App Store Connect → Upload. Keep automatic signing.
  4. Wait for processing (an e-mail arrives), then test with TestFlight on a real device, including the Lock tab.

04App Store Connect

  • Category: the project sets public.app-category.productivity.
  • Privacy policy URL: the same page as AppConfig.privacyURL.
  • App Privacy: see Privacy label.
  • Export compliance: the project sets ITSAppUsesNonExemptEncryption = NO (the app uses only Apple's standard HTTPS).
  • Age rating: answer for unrestricted web access, because the tabs show live third-party websites.
  • Review notes and screenshots: see App Store review.