Skip to content
CAI
Software that uses CAICheck a score

younatics/YNDropDownMenu

60.7

Adequate · 1 October 2026

1k

lines of production code

Swift

with JavaScript

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

YNDropDownMenu is an iOS UI component library that provides a customizable drop-down menu with support for state-based button images. The system has been modernized to version 4.0.0, requiring iOS 13 and Swift 6, and is distributed as a compiled framework. It includes a demo application and unit tests to verify initialization, delegate wiring, and memory management.

Behavioural changes

Added Xcode workspace and user-specific scheme configurations

The project now includes a workspace file (contents.xcworkspacedata) that references the main project, along with an IDEWorkspaceChecks.plist to suppress Xcode's workspace warning. Additionally, user-specific scheme management files and a demo app scheme have been added for developers seungyounyi and sunghyun, establishing the YNDropDownMenuDemo as the default runnable scheme.

YNDropDownMenu.xcodeproj/project.xcworkspace · high confidence

Modernized demo app for iOS 13+ with Swift 6 concurrency readiness

The YNDropDownMenuDemo application has been updated to target iOS 13 and modernize its codebase for Swift 6 compatibility. This includes migrating the AppDelegate to use the @main entry point, updating the Main storyboard to use the modern Scene lifecycle (replacing the deprecated application delegate lifecycle methods), and refreshing the XIB files to the latest Interface Builder format. The demo code in ViewController.swift has been updated to use the new \setStatesImages\ API for managing button states and demonstrates the new \imageMaskingwithColor\ utility for applying tint colors to images.

YNDropDownMenuDemo · high confidence

Project structure migrated to framework-based distribution

The YNDropDownMenu project has been restructured to build and distribute the library as a compiled framework (YNDropDownMenu.framework) rather than a static library or source bundle. This change updates the Xcode project configuration to embed the framework into the demo application, ensuring that consumers of the library receive a pre-compiled binary. This structural shift supports the modernization efforts mentioned in the commit history, such as Swift 6 compatibility and SPM integration, by providing a standard, distributable artifact for iOS applications.

YNDropDownMenu.xcodeproj · high confidence

YNDropDownMenu API modernization and memory leak fix

The YNDropDownMenu framework has been updated to modernize its public API and fix a memory management issue. The \buttonImages\ property and legacy \setImageWhen\ methods have been removed in favor of the new \setStatesImages(normalImages:selectedImages:disabledImages:)\ method, which accepts arrays of images for normal, selected, and disabled states. Additionally, the \blurEffectView\ is now correctly detached from the superview during deallocation to prevent a memory leak where the view would remain visible after the menu was destroyed. Deprecated methods such as \alwaysSelectedAt\ and \disabledMenuAt\ remain available but are marked for removal.

YNDropDownMenu · high confidence

Test coverage

Added unit tests for YNDropDownMenu initialization and delegate wiring

Added deterministic unit tests for the YNDropDownMenu component, verifying that the menu correctly configures its item count and buttons upon initialization, and that YNDropDownView instances properly wire their delegates back to the menu. The tests also confirm that view actions, such as hiding the menu or changing a menu title, are correctly forwarded to the delegate.

Tests · high confidence

Dependencies

YNDropDownMenu updated to version 4.0.0 with Swift 6 and iOS 13 support

The YNDropDownMenu library has been updated to version 4.0.0, requiring iOS 13 or later and Swift 6. This change modernizes the dependency manifests (Package.swift and YNDropDownMenu.podspec) to reflect the new minimum platform and language version requirements, ensuring compatibility with the latest Swift toolchain.

(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 (-7.4)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 97 → 97 (+0.0)
  • Architecture 69 → 69 (+0.0)
  • Maturity 59 → 59 (+0.0)
  • Readiness 67 → 50 (-17.7)
  • Security 100 → 100 (+0.0)

New (19)

  • Coverage not measured — Swift suite
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no installation or build instructions (docs/docsets/YNDropDownMenu.docset/Contents/Resources/Documents/index.html)
  • Documentation: no project overview (README.md)
  • Documentation: no project overview (docs/docsets/YNDropDownMenu.docset/Contents/Resources/Documents/index.html)
  • Documentation: no usage examples (README.md)
  • Documentation: no usage examples (docs/docsets/YNDropDownMenu.docset/Contents/Resources/Documents/index.html)
  • Duplicate functionality with inconsistent naming convention. One uses 'disabledMenu' and the other 'disabledMenuAt', with parameter names 'at' vs 'index'.
  • Duplicate functionality with inconsistent naming convention. One uses 'enabledMenu' and the other 'enabledMenuAt', with parameter names 'at' vs 'index'.
  • Duplicate functionality with inconsistent naming convention. One uses 'normalSelected' and the other 'normalSelectedAt', with parameter names 'at' vs 'index'.
  • Duplicate functionality with inconsistent naming convention. One uses 'showAndHideMenu' and the other 'showAndHideMenuAt', with parameter names 'at' vs 'index'.
  • Duplicate functionality with inconsistent naming convention. One uses the parameter name 'at' and the other 'index', and the method names differ ('alwaysSelected' vs 'alwaysSelectedAt').
  • Off the main sequence: YNDropDownMenu
  • Potential confusion regarding ownership. Both YNDropDownMenu and YNDropDownView expose identical methods for changing menu titles. It is unclear if these operate on the same underlying state or if one is a facade for the other. If YNDropDownView is a component of YNDropDownMenu, exposing this method on both creates redundancy and potential state inconsistency.
  • Same as above: Duplicate intent across types YNDropDownMenu and YNDropDownView.
  • Same as above: Duplicate intent across types YNDropDownMenu and YNDropDownView.
  • Same as above: Duplicate intent across types YNDropDownMenu and YNDropDownView.
  • Same as above: Duplicate intent across types YNDropDownMenu and YNDropDownView.
  • Same as above: Duplicate intent across types YNDropDownMenu and YNDropDownView.

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

Survey your own repository

younatics/YNDropDownMenu 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 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 9c667806a5b0460e49bcc5092116147f0f53be6d — 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-e569280dd5e2.