CombineCommunity/CombineCocoa
62.8
Adequate · 1 October 2026
1.4k
lines of production code
Swift
with Ruby
2
measurements over time
What this system is
CombineCocoa is a Swift library that bridges UIKit delegate patterns and control events to the Combine reactive programming framework. It provides publishers for standard UI components, gesture recognizers, and Objective-C delegates, allowing developers to handle user interactions without manual delegate implementation. The system supports dependency management via Swift Package Manager and CocoaPods, with build configurations optimized for iOS development.
How it got here
2019 — Migration to Swift Package Manager
6 changes.
The project migrated its dependency management from CocoaPods to Swift Package Manager, updating the library to support SPM and lowering the iOS deployment target to 10.0. The Example app was restructured to use SPM, featuring new gesture recognizer demonstrations and a dedicated unit-test target. Build scripts were also updated to automate Xcode project generation and resolve platform-specific build issues.
2020 — Combine publisher expansion and SPM migration
7 changes.
The project expanded its Combine publisher coverage to include gesture recognizers, text storage, and various UIKit controls, while introducing a new DelegateProxy infrastructure to intercept delegate methods. Concurrently, the codebase was restructured for Swift Package Manager compatibility, restricting support to iOS 13+ and 64-bit architectures, and bridged to Objective-C delegates.
Features
Added ObjcDelegateProxy to bridge Objective-C delegates to Combine
The Sources/Runtime location now includes a new ObjcDelegateProxy implementation (ObjcDelegateProxy.m/h) and a custom modulemap. This component intercepts Objective-C delegate method calls, unpacks their arguments, and forwards them, enabling Objective-C delegate patterns to be observed and consumed via Combine publishers.
Sources/Runtime · high confidence
Expanded Combine publishers for Cocoa controls and gesture recognizers
This update adds new Combine publishers for several UIKit components, allowing you to react to events without delegate methods. New capabilities include gesture recognizers (tap, pinch, rotation, swipe, pan, screen edge pan, and long press), \NSTextStorage\ editing changes, and \UIBarButtonItem\ taps. Existing controls have been updated or added with specific publishers: \UITextField\ now includes \didBeginEditingPublisher\ and \returnPublisher\, \UITextView\ exposes \valuePublisher\ and \textPublisher\, \UISearchBar\ provides text change and button click publishers, and \UIScrollView\ offers detailed scroll state publishers (e.g., \reachedBottomPublisher\, \didScrollPublisher\). Additionally, \UIControl\ now supports a generic \controlEventPublisher\, and existing controls like \UIButton\, \UIDatePicker\, \UIPageControl\, \UIRefreshControl\, \UISegmentedControl\, \UISlider\, \UIStepper\, and \UISwitch\ have been refactored to use the new publisher infrastructure.
Sources/CombineCocoa/Controls · high confidence
Initial framework bundle configuration
Added the Info.plist file for the Sources framework, establishing the bundle metadata including the package type (FMWK), development language (en), and initial versioning (0.0.1).
Sources · high confidence
Introduction of DelegateProxy for Combine-based delegate interception
The library now includes a new \DelegateProxy\ class and supporting types (\DelegateProxyPublisher\, \DelegateProxyType\) that allow developers to intercept Cocoa delegate methods and expose them as Combine publishers. This enables reactive handling of delegate events (such as table view or collection view callbacks) by subscribing to selectors, replacing the need for manual delegate method implementation with Combine's \interceptSelectorPublisher\ API.
Sources/CombineCocoa/DelegateProxy · high confidence
Behavioural changes
Add animated property assignment and restructure CombineCocoa for iOS 13+ and SPM
The library now includes a new \assign(to:on:animation:)\ extension for Combine publishers, allowing users to bind values to UI properties with built-in transitions (flip, fade) or custom animation blocks. Internally, the \CombineCocoa\ module has been restructured for Swift Package Manager compatibility and restricted to iOS 13+ and 64-bit architectures. Existing publishers like \ControlEvent\ and \ControlProperty\ have been moved into the \Combine.Publishers\ namespace, renamed from their previous \CombineControl\ prefixes, and updated to use the modern \@available\ and \canImport\ guards.
Sources/CombineCocoa · high confidence
Automated Xcode project generation and Carthage iOS-only builds
The build scripts now automatically generate the Xcode project from Swift Package Manager and apply specific configurations, including disabling arm64 architectures to resolve lipo fat binary bugs in Xcode 12 and integrating SwiftLint checks. Additionally, the Carthage build process is restricted to the iOS platform to prevent unnecessary builds for other platforms.
scripts · high confidence
CombineCocoa version bumped to 0.2.1
The CombineCocoa framework has been updated to version 0.2.1. This release includes Combine publishers for various UIKit controls, such as UISearchBar and UIControl events, and refactors the build system by replacing the generated modulemap with a custom one to improve Carthage compatibility.
CombineCocoa.xcodeproj · medium confidence
Example app demonstrates gesture recognizers and bar button item interactions
The Example app has been updated to showcase additional CombineCocoa publishers. It now includes a right bar button item that triggers a tap publisher, and the main view supports swipe, long-press, and double-tap gesture recognizers, all of which are wired into the debug console output alongside existing control events.
Example/Example · high confidence
Example project adds unit-test target and updates Xcode project settings
The Example project now includes a dedicated unit-test target (ExampleTests) containing test files for UISearchBar, UIPageControl, UITextView, UIScrollView, UITableView, and UICollectionView. The Xcode project file has been upgraded to object version 51, Swift update check 1150, and indentation/tab width set to 4 spaces. The project structure now references Pods\_Example.framework and Pods\_Example\_ExampleTests.framework, and includes build phases for embedding pods frameworks. A new scheme file has been added to configure build, test, launch, profile, analyze, and archive actions for the Example app and its tests.
Example/Example.xcodeproj · high confidence
Example project migrates from CocoaPods to Swift Package Manager
The Example project has removed its CocoaPods dependency infrastructure, deleting the \Pods/\ directory contents including the \Podfile\, \Podfile.lock\, \Pods.xcodeproj\, and all generated target support files (such as \CombineCocoa\ and \Pods-Example\ configs, umbrella headers, and modulemaps). This change reflects a shift to using Swift Package Manager (SPM) for dependency management in the example application.
Example/Pods · high confidence
Swift Package Manager workspace configuration updated
The Xcode workspace file for the Swift Package Manager has been restructured to reference the package itself ('self:') instead of the previous local project and CocoaPods dependencies. This change aligns the workspace configuration with SPM standards, removing the dependency on the local Xcode project and Pods.
.swiftpm · medium confidence
Test coverage
Added unit tests for Combine delegate wrappers
Added comprehensive test coverage for the Combine delegate wrappers in the ExampleTests target. The new tests verify that publishers for UIScrollView, UICollectionView, UITableView, UISearchBar, UIPageControl, and UITextView correctly emit delegate events to subscribers, including scenarios with multiple subscribers and specific value transformations.
Example/ExampleTests · high confidence
Dependencies
CombineCocoa 0.4.1: iOS 10 support, SPM integration, and CocoaPods 1.9 tooling
This release updates the CombineCocoa library to version 0.4.1, lowering the iOS deployment target from 13.0 to 10.0 to support older devices. It introduces official Swift Package Manager (SPM) support via a new Package.swift that defines a 'Runtime' target, while simultaneously updating the CocoaPods infrastructure to use version 1.9.1 of the tooling (via Gemfile) and reflecting the library's new source file patterns and framework dependencies in the podspec. The Example project's Podfile is also updated to use frameworks and target version 1.10.2 of CocoaPods.
(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 64 → 63 (-1.4)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 100 → 100 (+0.0)
- Architecture 100 → 100 (+0.0)
- Maturity 49 → 49 (+0.0)
- Readiness 58 → 54 (-4.3)
- Security 90 → 94 (+4.1)
Resolved (1)
- Documentation: no installation or build instructions (README.md)
New (1)
- Coverage not measured — Swift suite
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
CombineCommunity/CombineCocoa 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 7300c75ff9e072aa7fd0fccefcc88f74aae9bf56 — 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.