Nescroll docs
v1.0.0
Get help
● Start · Install

Installation
generate, open, sign, run.

Nescroll uses XcodeGen: the project is described in one text file, app/project.yml, and the Xcode project is generated from it. This keeps rebranding to a few lines and avoids merge conflicts in .xcodeproj files.

xcodegen generate3 signed targetsSimulator and device

01Generate the Xcode project

  1. Install XcodeGen if you have not yet: brew install xcodegen
  2. Go to the app folder of the unpacked ZIP:
    cd path/to/nescroll/app
  3. Generate
    xcodegen generate
    The output ends with Created project at …/NoReels.xcodeproj.
  4. Open
    open NoReels.xcodeproj
Edit project.yml, not Xcode settings

Every time you run xcodegen generate, the .xcodeproj is rebuilt from project.yml, and the .entitlements and extension Info.plist files are rewritten from the entitlements and info blocks in it. Changes you make only in Xcode's target settings are lost. Put bundle IDs, the team, names and capabilities in project.yml, then generate again.

02The four targets

TargetTypeBundle ID in the packageSigned for devices
NoReelsThe appsk.mikodes.nescrollYes
NescrollMonitorDeviceActivity monitor extensionsk.mikodes.nescroll.monitorYes
NescrollShieldShield configuration extensionsk.mikodes.nescroll.shieldYes
NoReelsTestsUnit testssk.mikodes.nescroll.testsOnly when you run tests on a device

The two extensions are embedded in the app (dependencies of the NoReels target). You change all bundle IDs to your own before you sign: Rebrand.

03Run in the Simulator

Choose the NoReels scheme and any iPhone simulator, then press Run. No team is needed for the Simulator: the package ships with DEVELOPMENT_TEAM: "" and a Simulator build succeeds as it is (verified with Xcode 27.1).

The site tabs, onboarding and Settings work in the Simulator. The Lock tab only shows the "Allow Screen Time" card there; Screen Time itself needs a real device.

04Run on your iPhone

  1. Change the bundle IDs and App Group to your own first (Rebrand). The sk.mikodes.* IDs belong to the author's account and cannot be registered by you.
  2. Set your team In project.yml, under settings → base, set DEVELOPMENT_TEAM to your 10-character Team ID (Apple Developer website → Membership details). Run xcodegen generate again.
  3. Check signing for the three targets In Xcode, select the project, then each of NoReels, NescrollMonitor and NescrollShield → Signing & Capabilities. "Automatically manage signing" is on (CODE_SIGN_STYLE: Automatic), your team is selected, and the capabilities Family Controls and App Groups are listed with your group checked.
  4. Connect the iPhone, trust the Mac, and turn on Developer Mode on the phone (Settings → Privacy & Security → Developer Mode) if iOS asks.
  5. Run Select the phone in the toolbar and press Run.
Family Controls in development

For builds you run from Xcode, the Family Controls capability works with development signing. For TestFlight and the App Store you need Apple's distribution approval first: Screen Time, distribution.

05Run the tests

Press Cmd-U in Xcode, or from the terminal:

xcodebuild test -project NoReels.xcodeproj -scheme NoReels \
  -destination 'platform=iOS Simulator,name=iPhone 17' \
  -testLanguage en -testRegion US

Use a simulator name you have installed (xcrun simctl list devices available). The tests cover redirects, host rules, label length, Slovak strings, lock time windows, the 7-day statistics and remote-rules sanitizing (NoReelsTests/NoReelsTests.swift).

Test results in 1.0.0

On 2026-11-10 all 15 tests passed on the iPhone 18 Pro simulator (Xcode 27.1). Run them with -testLanguage en: the suite checks English as the base language.