Skip to content
CAI
Software that uses CAICheck a score

Finb/Bark

56.4

Adequate · 27 September 2026

10.8k

lines of production code

Swift

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Bark is an iOS application that functions as a push notification service, allowing users to send and receive alerts via a custom URL scheme and Shortcuts integration. It features a modular notification processing pipeline that handles encryption, markdown rendering, and media attachments, while supporting multiple server configurations and local message history. The system includes iOS widgets and notification extensions for viewing and managing recent alerts directly from the home screen and lock screen.

How it got here

2018 — Architecture overhaul and modernization

8 changes.

The project underwent a significant structural modernization, migrating the database to Realm, upgrading to iOS 15, and replacing the legacy UI with a tab-based navigation system. This period also introduced advanced push notification capabilities through service and content extensions, enabling features like deep linking, in-app purchases, and rich media handling.

2020 — Multi-server support and UI overhaul

5 changes.

This period focused on enabling multi-server management through a new networking layer and server manager, alongside significant architectural improvements to the model and view layers. The work included implementing AES encryption, redesigning the settings interface with MVVM, and adding widget history snapshots to support diverse notification configurations.

2021–2026 — iOS feature expansion and UI modernization

7 changes.

This period focused on significantly expanding the Bark iOS app's capabilities by introducing CI/CD automation, a modular notification processing pipeline, and deep integration with iOS Shortcuts and widgets. The user interface was modernized with a glassmorphism design, collapsible message grouping, and improved permission guidance, while unit tests were added to ensure reliability.

Features

Add iOS widget for displaying recent messages with group filtering

A new iOS widget extension has been added, allowing users to view recent messages directly from the home screen. The widget supports configuration to filter messages by specific groups (or show all), and displays message details including title, subtitle, body, and relative timestamps. It uses AppIntents for configuration and shares data via an application group container.

Widget · high confidence

Initial CI/CD automation setup for iOS builds

This change introduces the initial Fastlane configuration to automate iOS builds and TestFlight uploads. It defines the app identifier (me.fin.bark), team details, and Match settings for certificate management via a private Git repository. The Fastfile includes a 'beta' lane that handles version incrementing, builds the app, uploads it to TestFlight, and sends a notification via the Bark API upon completion.

fastlane · high confidence

Initial project scaffolding with documentation and tooling

The repository has been initialized with core documentation files (README, AGENTS.md, CLAUDE.md, LICENSE) and a Python script to analyze unused localization keys. A .gitignore update also excludes buildServer.json from version control.

(repo-wide) · high confidence

Introduce Bark API networking layer with multi-server support

Added a new Moya-based networking implementation for the Bark service, including API definitions for ping and device registration, and a target type that routes requests through a new ServerManager to support multiple servers. The update also introduces RxSwift extensions to filter HTTP and logical errors, and to map JSON responses to model objects, ensuring that network request failures do not abort the event sequence.

Common/Moya · high confidence

Introduce NotificationServiceExtension for advanced push processing

The app now includes a NotificationServiceExtension that intercepts incoming push notifications to apply a series of content transformations before display. This extension supports features such as decrypting ciphertext, rendering Markdown, setting notification levels and badges, auto-copying content, archiving messages, muting groups, handling persistent alerts, and attaching images or custom icons. It also synchronizes with the main app via Darwin notifications to ensure the UI updates when new messages arrive.

NotificationServiceExtension · high confidence

Message list supports grouping and collapsible sections

The message list now allows users to view messages grouped by source. Users can tap a group header to collapse or expand the section, and a 'View All' button is provided to see the full history for a specific group. This change introduces new view components for group headers, item cells, and skeleton loading states to support this organized, collapsible layout.

View/MessageList · high confidence

New encryption models and message data structures

The Model layer now includes new files to support AES encryption (Algorithm.swift, AESCryptoModel) with validation for keys, modes (CBC, ECB, GCM), and padding, as well as new data models for Message (Message.swift) and message list items (MessageItemModel.swift) that handle markdown body types, groups, and expiration dates. Additionally, MessageDeleteTimeRange.swift defines time-based filtering options for message deletion, and MessageSection.swift provides sectioning logic for grouped message lists using RxDataSources.

Model · high confidence

New notification content extension with copy, mute, and image support

A new NotificationContentExtension has been added, enabling users to expand notifications to view large images, copy notification content (including title, subtitle, body, and URL) to the clipboard, and temporarily mute a notification group for one hour. The extension supports automatic copying via specific payload keys, adapts to system font size settings, and uses an app group entitlement for shared data access.

notificationContentExtension · high confidence

Support for multiple servers and widget history snapshots

The app now supports managing multiple notification servers, allowing users to add, remove, and switch between different server configurations via the new ServerManager. Additionally, a new widget history feature has been introduced, enabling widgets to display recent messages by persisting snapshots to a shared container, with support for filtering by group and limiting message length.

Common · high confidence

Support sending push notifications via Shortcuts with advanced options

Users can now send push notifications directly through the Shortcuts app using new App Intents. This adds support for specifying the target server address, custom title and body (with URL decoding), critical alert levels, ringtone volume, custom sounds, notification grouping, and time-to-live (TTL) parameters. The implementation includes dynamic options providers for selecting from configured servers and available notification sounds, ensuring a seamless integration with the app's existing settings.

Bark/Intents · high confidence

Behavioural changes

3 commits (0 fixes) modifying Sounds

A change to existing behaviour in Sounds — 3 commits, 32 files.

Sounds · medium confidence · unverified

Added IDE workspace check configuration

The project now includes an IDEWorkspaceChecks.plist file to manage Xcode workspace settings, specifically enabling the Mac 32-bit warning check. This ensures consistent workspace configuration across development environments.

Bark.xcworkspace · high confidence

App architecture overhaul: Realm migration, new navigation, and deep linking support

The Bark app has undergone a significant structural update. The database backend has migrated from a shared App Group container to the main app's document directory using Realm, including an automatic migration path for existing users. The user interface has been rebuilt from a single view controller to a tab-based navigation system (BarkTabBarController) with iPad split-view support, replacing the legacy Main.storyboard. Additionally, the app now supports deep linking via the 'bark://' URL scheme and integrates SwiftyStoreKit for in-app purchases, while updating the launch screen to use modern named colors.

Bark · high confidence

App navigation and tab state persistence restored

The app now remembers and restores the last active tab (Service, History, or Settings) when reopened, ensuring users return to their previous context. This is implemented via a new \StateRestoringTabBarContr\ that saves the selected index to settings and restores it on launch. Additionally, the iPad split-view layout now correctly synchronizes the selected page between the primary section list and the secondary content view when the interface collapses or expands.

Controller · high confidence

Notification processing is refactored into a modular processor pipeline

The notification handling logic in the service extension has been restructured from a monolithic implementation into a chain of distinct, single-responsibility processors (Archive, AutoCopy, Badge, Call, Ciphertext, Icon, Image, Level, Markdown, and Mute). This change introduces specific new capabilities: encrypted push notifications now support custom IV parameters for decryption; call-style notifications are extended to 30 seconds using shared audio files; markdown content in push bodies is automatically parsed into plain text; and push archives can now be configured to auto-delete based on a TTL (time-to-live) parameter. Additionally, the system now supports automatic content copying to the clipboard and custom notification icons via Intents.

NotificationServiceExtension/Processor · high confidence

Redesigned home screen with new UI components and notification permission status

The home screen has been visually refreshed with a new glassmorphism aesthetic, introducing dedicated cards for documentation, usage examples, and settings. A new HomePermissionCard now displays the status of notification and critical alert permissions, guiding users to settings if access is denied. The example card features a segmented control for switching between GET, POST, and JSON request types, alongside a HomeSplitButton that allows users to copy either the server address or the API key. Existing interaction issues, such as unresponsive flat buttons, have been resolved, and the split button's separator line has been made more prominent.

View/Home · high confidence

Redesigned settings interface with MVVM and new UI components

The settings interface has been completely rebuilt using a MVVM architecture, introducing a suite of new view components including \BaseTableViewCell\ for data binding, \DropBoxView\ for dropdown selections, \BorderTextField\ for input fields, and \GlassView\ for modern visual effects. This refactor adds specific UI capabilities such as a donation cell with in-app purchase integration, a sound upload cell, and a server list cell that displays connection status. The update also improves usability by allowing tap gestures on text views to trigger cell selection and ensures the app's font size automatically follows the system's accessibility settings.

View · high confidence

Xcode project upgraded to version 54 with new build schemes

The project file has been upgraded from object version 48 to 54, reflecting a migration to a newer Xcode project format. Additionally, dedicated build schemes have been added for the main app, the NotificationServiceExtension, and the NotificationContentExtension, ensuring that each target is correctly configured for building, testing, and launching within the IDE.

Bark.xcodeproj · high confidence

Test coverage

Added unit tests for message deletion time ranges

Added new test cases in the BarkTests target to verify the correctness of the MessageDeleteTimeRange enum, ensuring that time intervals for options such as last hour, today, yesterday, last month, and all time are calculated accurately.

BarkTests · high confidence

Dependencies

Major dependency overhaul and iOS 15 minimum deployment target

The project has significantly updated its third-party dependencies, upgrading core libraries such as Alamofire (4.6.0 to 5.10.2), Moya (11.0.0 to 15.0.0), and the entire RxSwift ecosystem (4.x to 6.x). New dependencies including SnapKit, Material, RealmSwift, CryptoSwift, and IQKeyboardManagerSwift have been added, while older pods like KVOController, DeviceKit, and FDFullscreenPopGesture have been removed. Additionally, the minimum iOS deployment target has been raised from iOS 9 to iOS 15, and the build configuration has switched from \use\_frameworks!\ to \use\_modular\_headers!\.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 24 → 56 (+32.2)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 99 → 92 (-6.5)
  • Architecture 69 → 96 (+26.6)
  • Maturity 38 → 54 (+15.8)
  • Readiness 27 → 52 (+24.8)
  • Security 4 → 48 (+43.7)
  • Domain Modelling 100 (new)

Resolved (30)

  • Dimension evaluation failed
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No automated tests
  • No exposed public API
  • No tests found
  • Secret: generic-api-key (Podfile.lock)
  • Secret: generic-api-key (Podfile.lock)
  • Secret: generic-api-key (Podfile.lock)
  • Secret: generic-api-key (Podfile.lock)
  • Secret: generic-api-key (Podfile.lock)
  • …and 10 more

New (60)

  • AppDelegate.processPendingMessages (cognitive 28) (Bark/AppDelegate.swift)
  • AppDelegate.processPendingMessages (cyclomatic 18) (Bark/AppDelegate.swift)
  • ArchiveProcessor.process (cognitive 36) (NotificationServiceExtension/Processor/ArchiveProcessor.swift)
  • ArchiveProcessor.process (cyclomatic 21) (NotificationServiceExtension/Processor/ArchiveProcessor.swift)
  • Assertions commented out: testExample (BarkTests/BarkTests.swift)
  • AttributedStringWalker.visitListItem (cognitive 18) (Common/MarkdownParser.swift)
  • CiphertextProcessor.process (cognitive 20) (NotificationServiceExtension/Processor/CiphertextProcessor.swift)
  • Documentation: no installation or build instructions (docs/en-us/deploy.md)
  • Duplicated block (11 lines × 2) (Widget/Widget.swift)
  • Duplicated block (12 lines × 2) (View/Home/HomeFlatButton.swift)
  • Duplicated block (13 lines × 2) (Widget/Widget.swift)
  • Duplicated block (15 lines × 2) (Bark/Intents/OptionsProvider.swift)
  • Duplicated block (48 lines × 2) (Bark/Intents/PushToCurrentIntent.swift)
  • Duplicated block (8 lines × 2) (Controller/MessageSettingsViewController.swift)
  • Duplicated block (8 lines × 2) (Model/MessageItemModel.swift)
  • Duplicated block (8 lines × 2) (View/BKButton.swift)
  • Duplicated block (9 lines × 2) (Widget/Widget.swift)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 40 more

Changes since last survey

  • 27 commits — 27 feature/other, 0 fixes

By area

  • View/Home — 4 commits
  • docs/index.html — 4 commits
  • (root) — 3 commits
  • Bark/Localizable.xcstrings — 3 commits
  • Common/ServerManager.swift — 2 commits
  • docs/_media — 2 commits
  • docs/en-us — 2 commits
  • fastlane/Fastfile — 2 commits
  • .github/workflows — 1 commit
  • Bark/Assets.xcassets — 1 commit
  • Controller/CryptoSettingViewModel.swift — 1 commit
  • Controller/HomeViewModel.swift — 1 commit
  • docs/README.md — 1 commit

Notable commits

  • change: docsify 暂时使用 V4
  • change: fix: correct typo in curl command parameter from 'tti' to 'ttl'
  • change: js 加密示例脚本补充发送请求代码
  • change: key 更新时,刷新示例
  • change: update AGENTS.md
  • change: update docs
  • change: update docs
  • change: 修复 HomeFlatButton 不能点击的问题
  • change: 升级 docsify
  • change: 升级 ruby 版本
  • change: 去掉 iv 配置输入框
  • change: 复制按钮可选择复制服务器地址和 key。
  • change: 将 HomeSplitButton 的分割线设置的更为醒目。
  • change: 显示 sidebar-toggle
  • change: 更新文档
  • change: 更新文档
  • change: 更新文档
  • change: 测试推送错误提示加上错误状态码
  • change: 添加 AGENTS.md
  • change: 添加MacOS App 和 cli 封装
  • …and 7 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

Finb/Bark was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 27 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 6d84f7502528a0070cdbacff4bff93ef32c202d8 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-d00c643c3f66.