wxxsw/SwiftTheme
49.8
Weak · 30 September 2026
2.9k
lines of production code
Swift
with Objective-C
2
measurements over time
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.