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.
01Before the first archive
- Rebrand done: name, bundle IDs, App Group in four places, icon (Rebrand).
privacyURLandsupportURLpoint to your own pages (Configuration).DEVELOPMENT_TEAMset,xcodegen generaterun 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
- Select "Any iOS Device (arm64)" as the run destination.
- Product → Archive. When it finishes, the Organizer opens.
- Distribute App → App Store Connect → Upload. Keep automatic signing.
- 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.