refactor: rename app from Severed to OpenAppLock

Full rename ahead of App Store submission: project, targets, bundle
identifiers (dev.bchen.Severed -> dev.bchen.OpenAppLock), entitlements
file, app entry point, user-facing onboarding strings, test helpers,
and docs. Verified: all 62 unit tests pass.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-06-12 18:05:06 -04:00
parent b8473383d3
commit 1d5e79ba7c
42 changed files with 145 additions and 145 deletions

View File

@@ -1,9 +1,9 @@
# Severed — "Rules" Feature Spec (derived from Opal screen recording)
# OpenAppLock — "Rules" Feature Spec (derived from Opal screen recording)
Source: `ScreenRecording_06-12-2026 11-26-19_1.MP4` (iPhone, 4:29). The rules feature
appears roughly between 1:003:00 of the recording, on Opal's "My Apps" tab.
This spec describes what was observed, then maps it onto an implementation plan
for Severed.
for OpenAppLock.
---
@@ -126,7 +126,7 @@ Presented from "+ New". Full-height sheet, scrollable.
and a circular "+" button bottom-right. Tapping anywhere opens the
Schedule editor pre-filled with the preset's name/times/days.
> **Navigation (Severed):** picking a rule type or preset **pushes** the
> **Navigation (OpenAppLock):** picking a rule type or preset **pushes** the
> editor inside the sheet via native SwiftUI navigation (`NavigationStack` +
> `navigationDestination(item:)`), so the system push animation and
> edge-swipe-back work; the editor keeps its custom header chrome.
@@ -150,7 +150,7 @@ Sections (each an inset rounded group with a small icon + caption header):
- Row: `Selected Apps``N Apps ` — pushes the App Picker.
4. **Hard Mode** `⚡PRO` badge — subtitle "No unblocks allowed"; trailing
toggle.
5. **Block Adult Content** *(Severed addition — not in the Opal video)*
5. **Block Adult Content** *(OpenAppLock addition — not in the Opal video)*
subtitle "Filter adult websites while this rule is active"; trailing
toggle. Maps to Screen Time's web-content filter
(`ManagedSettingsStore.webContent.blockedByFilter = .auto(...)`), applied
@@ -208,7 +208,7 @@ Full-height sheet:
> Implementation note: Opal ships its own app categorization. On iOS, third
> parties cannot enumerate installed apps; the system-sanctioned route is
> `FamilyActivityPicker` (FamilyControls), which provides its own
> category/app/website UI and returns opaque tokens. **v1 of Severed should
> category/app/website UI and returns opaque tokens. **v1 of OpenAppLock should
> embed `FamilyActivityPicker`** instead of cloning Opal's custom picker, and
> keep the `Block`/`Allow Only` segmented control as our own wrapper state.
@@ -241,7 +241,7 @@ Full-height sheet:
---
## 5. Implementation plan for Severed
## 5. Implementation plan for OpenAppLock
### 5.1 Frameworks & capabilities
@@ -334,7 +334,7 @@ enum SelectionMode: String, Codable { case block, allowOnly }
## 6. Native UI re-skin (current presentation)
Severed has since replaced the Opal-style custom presentation with the bare
OpenAppLock has since replaced the Opal-style custom presentation with the bare
iOS design language, keeping the backend (models, logic, services), the
flows, and the accessibility identifiers intact. Sections 15 remain as the
reference for *what* the feature does; presentation now maps as follows: