onevcat/FengNiao
60.9
Adequate · 30 September 2026
1.5k
lines of production code
Swift
primary language
2
measurements over time
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.