Skip to content
CAI
Software that uses CAICheck a score

wxxsw/SwiftTheme

49.8

Weak · 30 September 2026

2.9k

lines of production code

Swift

with Objective-C

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is the SwiftTheme library, a tool for iOS and tvOS that enables dynamic, declarative theming of UIKit components. It allows developers to apply and switch visual styles—such as colors, fonts, and images—using configuration files in JSON or plist formats, including support for system-driven dark mode. The project also includes multiple demo applications in Swift and Objective-C to illustrate these capabilities across different platforms and configuration methods.

How it got here

2016 — Demo expansion and legacy cleanup

14 changes.

The project modernized its demo applications by migrating to Swift 4.2, adding native dark mode support, and introducing new demos for Objective-C, tvOS, and plist-based theming. This period also involved removing legacy theme management code and updating dependency configurations to support Swift Package Manager and CocoaPods.

2017–2019 — SwiftTheme library and tvOS expansion

4 changes.

This period focused on the initial release of the SwiftTheme library, establishing a declarative API for dynamic UIKit theming with support for JSON configurations and dark mode. It also expanded the project's ecosystem by adding tvOS framework support and corresponding demo applications to showcase the library's capabilities on Apple TV.

Features

Add Objective-C demo application

Introduces a new Objective-C demo app (OCDemo) that showcases the SwiftTheme library's capabilities. The demo includes a tab-based interface with cells for selecting themes (Red, Yellow, Blue, Night), toggling a night mode, and cycling through themes. It demonstrates dynamic styling of UI components such as the status bar, navigation bar, tab bar, table views, and buttons using theme pickers, and persists the user's last selected theme across app launches.

OCDemo · high confidence

Add PlistDemo app with theme selection and night mode UI

The PlistDemo application now includes its user interface, providing a tab-based layout with a main list for theme management. Users can select and download themes via a dedicated table view cell, toggle a night mode switch, and trigger theme changes through a prominent action button.

PlistDemo/Base.lproj · high confidence

Add PlistDemo to demonstrate plist-based theming

Added the PlistDemo project, a Swift-based iOS application that showcases the SwiftTheme library's capability to apply themes via plist configuration files. The demo includes source code for cells and view controllers that bind UI elements (such as colors, images, and status bar styles) to plist keys, along with Red, Yellow, Night, and downloadable Blue theme plist assets to illustrate dynamic theme switching.

PlistDemo · high confidence

Add tvOS demo application

A new tvOS demo project has been added to the repository, providing a sample application for Apple TV. This includes the standard iOS app lifecycle (AppDelegate), a storyboard-based UI with a tab bar controller containing 'First' and 'Second' view controllers, and the necessary asset catalogs for app icons and launch images configured for the tvOS interface.

TVOSDemo · high confidence

Add tvOS framework target

Added the SwiftTheme-tvOS target, including its Info.plist and public header, to enable the SwiftTheme library to be built and used on tvOS devices.

SwiftTheme-tvOS · high confidence

Added Xcode schemes for JSON, OC, Plist, and tvOS demo apps

The project now includes shared Xcode schemes for the JsonDemo, OCDemo, PlistDemo, and TVOSDemo applications, as well as a tvOS-specific scheme for the SwiftTheme framework. These additions allow developers to easily build, run, test, and profile these specific demo targets directly from Xcode. Additionally, the existing Demo and SwiftTheme schemes have been updated to version 1020, and the Demo scheme has been moved from user-specific storage to shared project storage to ensure consistent configuration across the team.

SwiftTheme.xcodeproj/xcshareddata · high confidence

Demo projects expanded with new UI controls and Objective-C support

The SwiftTheme.xcodeproj has been updated to include several new demo applications and source files, significantly broadening the examples available to users. New Swift demos demonstrate theming for UIRefreshControl, UITextField placeholders, and various picker components (such as ThemeStringAttributesPicker and ThemeNavigationBarAppearancePicker). Additionally, an Objective-C demo has been added to support mixed-language projects, and a tvOS target has been configured to allow testing on Apple TV. These changes provide users with more comprehensive examples of how to apply themes across different UIKit components and platforms.

SwiftTheme.xcodeproj · high confidence

Introduce JsonDemo app for JSON-driven theming

The JsonDemo application has been added to demonstrate the SwiftTheme library's capability to apply UI themes via JSON configuration files. The app includes a main list view and specific cells (About, SelectTheme, SwitchNight, ChangeTheme) that bind UI properties like colors, fonts, and images to JSON keys. It ships with built-in theme definitions (Red, Yellow, Night) and supports downloading a Blue theme, allowing users to switch between these visual styles dynamically.

JsonDemo · high confidence

SwiftTheme library initial release with comprehensive UI theming support

This change introduces the SwiftTheme library, providing a declarative API for applying dynamic themes to UIKit components. It includes a central ThemeManager for loading themes from JSON or plist files, a robust notification-based update system, and a wide range of ThemePickers to style UI elements such as colors, fonts, images, bar styles, and appearance objects (including iOS 13+ UINavigationBarAppearance and UITabBarAppearance). The library also adds support for dark content styles, privacy manifests for App Store distribution, and Objective-C interoperability.

Sources · high confidence

Removals

Removal of legacy ThemeManager and UIKit extension files

The \ThemeManager.swift\, \UIKit+Theme.swift\, and \UIKit+Themes.swift\ source files have been deleted from the project. This removes the previous implementation of the theme management system, including the \ThemeManager\ class for loading plist-based themes, the protocol-based extensions for UIKit components (such as \UIView\, \UILabel\, \UINavigationBar\, etc.), and the notification-driven theme update mechanism. Users relying on these specific legacy APIs will need to migrate to the new theme system provided in the remaining source files.

Source · high confidence

Behavioural changes

4 commits (1 fix) modifying SwiftTheme.xcodeproj/project.xcworkspace

A change to existing behaviour in SwiftTheme.xcodeproj/project.xcworkspace — 4 commits (1 fix), 1 file.

SwiftTheme.xcodeproj/project.xcworkspace · medium confidence · unverified

Added shared workspace for CocoaPods integration

The project now includes a shared workspace (SwiftTheme.xcworkspace) that groups the main project with the CocoaPods dependencies (Pods.xcodeproj). This change facilitates the use of CocoaPods for dependency management in the demo environment and includes the standard workspace check file to ensure consistent build settings.

SwiftTheme.xcworkspace · high confidence

Demo app UI updated to use a tab-based navigation structure

The demo application's main interface has been redesigned from a single view controller to a tab bar controller. The new layout features a 'Demo' tab containing a navigation stack with a list of theme-related actions (Select Theme, Night mode toggle, Change Theme) instead of the previous single-view presentation.

Demo/Base.lproj · high confidence

Demo app migrates to Swift 4.2 and adds native dark mode support

The Demo application has been updated to Swift 4.2, bringing the codebase up to date with modern Swift syntax and compiler standards. Additionally, the demo now includes a native dark mode feature that automatically switches themes based on the system's appearance settings (iOS 13+), allowing users to see how the library handles dynamic theme changes triggered by the OS.

Demo · high confidence

Removed local Xcode user-specific configuration files

The local Xcode user data files for the 'apple' user have been removed from the repository. This deletes the custom breakpoint list and the scheme management configuration (including scheme order hints and buildable autocreation settings) that were previously stored in the project's xcuserdata directory. These changes affect only the local development environment of the user whose files were committed and do not impact the shared project settings or the application's runtime behavior.

SwiftTheme.xcodeproj/xcuserdata · high confidence

Dependencies

Add Swift Package Manager support and update CocoaPods configuration

The library now supports installation via Swift Package Manager, defined in the new Package.swift file which targets iOS 9+ and includes a privacy manifest. The CocoaPods configuration has been updated in SwiftTheme.podspec to version 0.6.4, supporting Swift versions 4.2, 5.0, and 5.1, and explicitly setting deployment targets for both iOS and tvOS 9.0. Additionally, demo projects now depend on MBProgressHUD and SSZipArchive.

(dependencies) · high confidence

Added MBProgressHUD and SSZipArchive dependencies

The project now includes the MBProgressHUD (v1.0.0) and SSZipArchive (v2.0.8) libraries via CocoaPods. This adds a translucent HUD component for displaying loading indicators and progress to users, as well as utilities for creating, unzipping, and managing zip files (including password-protected archives) within the application.

Pods · high confidence

Housekeeping

Removal of trailing newline in framework header

The SwiftTheme.h umbrella header has been cleaned up by removing a trailing empty line at the end of the file. This is a minor formatting adjustment with no impact on functionality or user experience.

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

Lenses

  • Code Health 99 → 99 (-0.3)
  • Architecture 93 → 99 (+5.2)
  • Maturity 54 → 54 (+0.0)
  • Readiness 27 → 20 (-6.6)
  • Security 100 → 100 (+0.0)

New (8)

  • Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no project overview (README.md)
  • Duplicated block (5 lines × 4) (Sources/UIColorExtension.swift)
  • Duplicated block (6 lines × 2) (Sources/UIRefreshControl+TitleAttributes.swift)
  • Inconsistent naming convention for value retrieval. Most specific getters use the pattern type(for:) (e.g., color(for:)), but the generic fallback is named value(for:). While distinct, value is ambiguous compared to element or lookup. Furthermore, element(for:) exists on the manager but is not mirrored by valueElement or similar, creating a split between type(for:) and element(for:) semantics which are unclear.
  • Members sharing a duplicated core (4 members, 50+ identical tokens) (Sources/UIColorExtension.swift)
  • Redundant type-specific accessors alongside a generic accessor. colorElement and imageElement perform the same lookup logic as element but are explicitly typed. This forces users to choose between a generic method that requires casting or specific methods that duplicate the underlying implementation intent.

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

Survey your own repository

wxxsw/SwiftTheme 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 72f799b243d97a0f59397a50d099455b315cf392 — 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.