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:
@@ -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:00–3: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 1–5 remain as the
|
||||
reference for *what* the feature does; presentation now maps as follows:
|
||||
|
||||
Reference in New Issue
Block a user