ArtSabintsev/Siren
68.0
Adequate · 30 September 2026
2.1k
lines of production code
Swift
primary language
2
measurements over time
What this system is
Siren is a Swift library for iOS and tvOS that monitors App Store updates and presents customizable alerts to users. It handles version comparison, manages alert presentation logic to prevent UI issues, and supports localization for multiple languages. The system allows developers to configure update rules and check frequencies, ensuring users are notified of new app versions according to specified criticality levels.
Features
Added Xcode workspace configuration for Swift Package Manager
A new Xcode workspace file (contents.xcworkspacedata) has been added to the .swiftpm directory. This change enables the package to be opened and edited directly within Xcode, facilitating local development and debugging for users who prefer the Xcode IDE over command-line tools.
.swiftpm · high confidence
Added iOS example app supporting files
The example project now includes the necessary iOS supporting files to build and run the sample application, including the main storyboard, launch screen, app icon assets, info plist, and view controller implementation.
Example/Example/Supporting Files · high confidence
Added localization support for 13 new languages
The Siren update alert interface is now available in Greek, Estonian, Finnish, Croatian, Hungarian, Indonesian, Lithuanian, Latvian, Malay, Norwegian Bokmål, Portuguese, Turkish, and Vietnamese. Users will see system-appropriate translations for the update title, message, and action buttons (Update, Skip, Next time) in these regions.
Sources/Siren.bundle · high confidence
New utility modules for version parsing and error handling
Added two new source files to the Utilities module: DataParser.swift, which implements logic for comparing semantic version strings and determining update types (major, minor, patch, revision), and KnownError.swift, which defines a comprehensive enum of localized errors that Siren can encounter during App Store data retrieval and version checking.
Sources/Utilities · high confidence
Behavioural changes
Added Privacy Manifest and modernized version check flow
The library now includes a PrivacyInfo.xcprivacy manifest declaring the use of NSUserDefaults (API type CA92.1) to comply with Apple's privacy requirements. Additionally, the core version checking logic has been updated to use Swift concurrency (async/await) for API requests, and the alert presentation flow has been refactored to handle foreground/background state changes more robustly, addressing previous issues with alert layering and window leaks.
Sources · high confidence
Example project rebuilt for Xcode 16 and Swift 5
The Example app's Xcode project has been regenerated to support modern development environments, specifically targeting Xcode 16 (indicated by objectVersion 56 and LastSwiftMigration 1600) and Swift 5. This update ensures the sample application builds correctly with current toolchains and includes the necessary workspace and scheme configurations for running and testing the app.
Example/Example.xcodeproj · high confidence
Introduces structured model types and alert presentation rules for app update checks
The library now uses dedicated model structures to represent App Store data and user interactions, including \APIModel\ for parsing iTunes Lookup API responses, \Model\ for the validated app information, \AlertAction\ to track which button the user selected, and \UpdateResults\ to bundle the outcome. It also introduces \Rules\ with static configurations (such as \hinting\, \critical\, and \default\) to control how frequently and in what manner (force, option, or skip) update alerts are presented to users, alongside \AppStoreCountry\ for specifying regional App Store contexts.
Sources/Models · high confidence
Refactored extension helpers for localization, date math, and user defaults
The library now uses dedicated extension files to manage core utilities: BundleExtension handles app version retrieval and localized string lookups (including support for forced language localization and Swift Package Manager resource bundles); DateExtension provides methods to calculate days elapsed since a specific date or date string; UIAlertControllerExtension manages presenting and hiding update alerts in a dedicated window; and UserDefaultsExtension stores skipped versions and check timestamps using namespaced keys with fallbacks to legacy keys for backward compatibility.
Sources/Extensions · high confidence
Siren 7.0.0: Swift 5 implementation with customizable API and alert presentation
Siren has been rewritten in Swift 5 to support iOS 13+ and tvOS 13, introducing a modular manager architecture. The new APIManager allows developers to customize the App Store country, language, and bundle ID for version checks, while the PresentationManager now creates a dedicated UIWindow per alert presentation to prevent window leaks and resolve iOS 13 alert layering issues. Additionally, the RulesManager now supports distinct presentation rules for major, minor, patch, and revision updates, replacing the previous single-rule approach.
Sources/Managers · high confidence
Updated example app to demonstrate critical update rules
The Example app's AppDelegate has been updated to activate the \hyperCriticalRulesExample\ by default, which configures Siren to present an alert every time the app is foregrounded until the user updates. This change replaces the previous default configuration, allowing users to immediately see how the critical rule set and zero-day release delay behave in a live environment.
Example/Example · high confidence
iOS 13 UIAlertController retention fix in SirenViewController
The SirenViewController now includes a \retainedWindow\ property and a \deinit\ method to prevent retain cycles when presenting UIAlertController on iOS 13.0 and later, ensuring the alert controller is properly retained during presentation.
Sources/View Controllers · high confidence
Test coverage
Added unit tests for Siren version comparison and localization; Added unit tests for version comparison and localization.
Dependencies
Siren 7.0.0: Swift Package Manager support with iOS/tvOS 17 requirement
The Siren library has been updated to version 7.0.0, introducing official Swift Package Manager support via a new Package.swift manifest. This release raises the minimum platform requirement to iOS 17 and tvOS 17, dropping support for older operating systems. The package now includes a privacy manifest (PrivacyInfo.xcprivacy) and bundles resources, while the test target remains available for verification.
(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 67 → 68 (+1.4)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 99 → 99 (+0.0)
- Architecture 89 → 96 (+7.1)
- Maturity 57 → 57 (-0.1)
- Readiness 55 → 58 (+3.3)
- Security 100 → 100 (+0.0)
Resolved (2)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
New (3)
- Coverage not measured — Swift suite
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- Hotspot: Sources/Utilities/KnownError.swift (Sources/Utilities/KnownError.swift)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
ArtSabintsev/Siren 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 d43c63eff4114f9de0bdaa1f4e786029b0513362 — 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.