Skip to content
CAI
Software that uses CAICheck a score

onevcat/FengNiao

60.9

Adequate · 30 September 2026

1.5k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

FengNiao is a macOS application and library designed to identify and remove unused resources from Xcode projects. It scans for orphaned files and cleans up project references, while also generating CSV reports of the findings. The system supports both a native graphical interface and a command-line interface, with specific logic to handle modern asset catalog symbols and various project structures.

How it got here

2017 — Swift 4 migration and SPM adoption

12 changes.

The project migrated its build system to Swift Package Manager and upgraded to Swift 4, replacing legacy dependency management with modern tools like Swift Argument Parser. This period also involved refactoring the CLI interface and enhancing the core FengNiaoKit library to accurately detect unused assets referenced via generated Swift and Objective-C symbols.

2018–2026 — macOS app migration and test expansion

8 changes.

The project transitioned FengNiao from a command-line tool to a native macOS application with a SwiftUI graphical interface, including sandbox entitlements and asset configuration. This period also involved significant expansion of test coverage, adding fixtures and unit tests for core functionality, CLI argument parsing, and newly supported features like generated Swift and Objective-C asset symbols.

Features

Added macOS app icon and sandbox entitlements

The macOS application now includes a complete set of app icons (ranging from 16x16 to 512x512 pixels) and defines an accent color asset for the interface. Additionally, the app is configured with macOS app sandbox entitlements, specifically enabling user-selected file read-write access, which affects how the application handles file system permissions on launch.

App/Resources · high confidence

FengNiao is now available as a native macOS application

The FengNiao tool is now distributed as a standalone macOS app (FengNiao.app) built with SwiftUI, replacing the previous command-line interface. Users can now launch the application directly from the macOS dock or Finder to manage unused resources. The app provides a graphical interface for configuring project paths, excluding specific directories, and toggling file extensions to search. It features a main view for scanning and selecting unused files, a delete view with progress tracking for removing files and cleaning up Xcode project references, and an export view to generate CSV reports of the findings.

App/macOS · high confidence

Removals

Removed Xcode project file

The FengNiao.xcodeproj/project.pbxproj file has been deleted from the repository. This removes the legacy Xcode project configuration that previously managed build targets for the Rainbow and CommandLineKit frameworks, as well as the main FengNiao application, indicating a shift away from this specific project structure.

FengNiao.xcodeproj · high confidence

Removed main.swift entry point

The main.swift file containing the default 'Hello, world!' print statement has been removed from the Sources directory, eliminating the standard console output entry point for the application.

Sources · high confidence

Behavioural changes

Migrate CLI to Swift Argument Parser and add list-only mode

The FengNiao command-line interface has been rewritten to use Swift Argument Parser, replacing the previous manual parsing implementation. This migration introduces a new \--list-only\ flag that allows users to display unused files and their total size without being prompted to delete them, enabling easier scripting and integration. The CLI now also prints the total clean size of unused resources and supports standard argument parsing for options like \--project\, \--exclude\, and \--resource-extensions\.

Sources/FengNiao · high confidence

Removed Swift 3 package submodules

The repository has removed the submodules for the CommandLine (3.0.0-pre1) and Rainbow (2.0.1) packages. These removals align with the project's upgrade to Swift 4, indicating that these specific older package versions are no longer included in the dependency tree.

Packages · medium confidence

Support for generated Swift and Objective-C asset symbols

FengNiaoKit now recognizes image assets referenced via Xcode's generated Swift member-access symbols (e.g., \.icFlag\) and Objective-C symbols (e.g., \ACImageNameIcFlag\). This prevents unused assets from being flagged when they are only referenced through these auto-generated constants, improving the accuracy of unused resource detection in projects using modern asset catalog features.

Sources/FengNiaoKit · high confidence

Test coverage

Added CLI argument parsing tests; Added test coverage for FengNiaoKit core functionality; Added test fixture for UIApplicationShortcutItemIconFile; Added test fixture for Watch and iMessage extensions; Added test fixture for deleting image references; Added test fixture for generated asset catalog symbol detection; Added test fixtures for FindProcess and SubFolderSearcher; Added test fixtures for edge-case file sizes; Added test fixtures for file deletion scenarios; Added test fixtures for generated Objective-C asset symbols; Added test fixtures for generated Swift asset symbols; Added test fixtures for resource bundle scenarios.

Dependencies

Migrate to Swift Package Manager and upgrade dependencies

The project has migrated from a legacy dependency management approach to the Swift Package Manager (SPM), updating the manifest to Swift tools version 6.0 and specifying macOS 10.13 as the minimum platform. This change upgrades the Rainbow library from version 2 to 3.1.1, replaces the CommandLine library with swift-argument-parser 1.4.0, and adds PathKit 1.0.1 as a new dependency. The package structure now explicitly defines FengNiaoKit as a library target and FengNiao as an executable target, with corresponding test targets included.

(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

Score

  • CAI 68 → 61 (-6.8)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 95 → 96 (+0.8)
  • Architecture 100 → 89 (-11.5)
  • Maturity 64 → 64 (+0.2)
  • Readiness 51 → 41 (-10.1)
  • Security 100 → 100 (+0.0)

Resolved (2)

  • Documentation: no architecture or design documentation (README.md)
  • Hotspot: Sources/FengNiao/CLI.swift (Sources/FengNiao/CLI.swift)

New (6)

  • Low cohesion: String (LCOM4 4) (Sources/FengNiaoKit/Extensions.swift)
  • Low coverage: Sources/FengNiao/CLI.swift (Sources/FengNiao/CLI.swift)
  • Low coverage: Sources/FengNiao/CommandPrompt.swift (Sources/FengNiao/CommandPrompt.swift)
  • Off the main sequence: FengNiaoKit
  • Outdated: rainbow
  • Outdated: swift-argument-parser

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

Survey your own repository

onevcat/FengNiao 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 30 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 180af9c3e70f94aae4676312c84e2fad5a8106b4 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.