hackiftekhar/IQKeyboardManager
43.6
Weak · 27 September 2026
6.1k
lines of production code
Swift
primary language
4
measurements over time
What this system is
Features
Added debug logging capabilities to IQKeyboardManager
A new file, IQKeyboardManager+Debug.swift, introduces a public API for developers to enable or disable debug logging within the library. By setting the new isDebuggingEnabled property, developers can control whether internal log messages are printed to the console, with support for indentation to show call depth. This change is restricted to the Debug directory and does not affect the core keyboard management logic.
IQKeyboardManagerSwift/IQKeyboardManager/Debug · high confidence
Added parent container view controller resolution for UIKit controls
The library now includes new Swift extensions for UIView, UIViewController, UITableView, and UICollectionView to resolve the parent view controller hierarchy. This adds the \iq\_parentContainerViewController()\ method, allowing the library to correctly identify and manage keyboard interactions for nested view controllers, such as those inside side menus or tab bars.
IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions · high confidence
Added the IQKeyboardManagerSwift example project and demo application
The Example directory now contains a complete, buildable iOS demo application (IQKeyboardManagerSwiftExample) with its associated Xcode project, workspace, and scheme configurations. This includes the main application entry point (AppDelegate), a suite of demo view controllers and table view cells for testing various keyboard management scenarios, and the necessary build configuration files to support the project structure.
Example · high confidence
IQKeyboardManagerSwift 8.0.3 release and repository restructuring
The project has been updated to version 8.0.3, introducing a modular architecture with subspecs (Core, Appearance, IQKeyboardReturnManager, IQKeyboardToolbarManager, IQTextView, Resign) that allows users to include only the features they need. The library now requires a minimum of iOS 13.0 and Swift 5.7. As part of this update, the Objective-C version of the library has been moved to a separate repository (IQKeyboardManagerObjC), and the legacy \KGKeyboardChangeManager\ class has been removed. The repository also includes updated configuration files for CI/CD (\.travis.yml\), package managers (Cartfile, podspec), and standard documentation files (README, LICENSE, CONTRIBUTING, CODE\_OF\_CONDUCT, SECURITY).
(repo-wide) · high confidence
Introduced explicit control for keyboard dismissal on touch outside
Added new Swift extensions (UIView+Resign.swift and UIView+ResignObjc.swift) that expose a 'resignOnTouchOutsideMode' property on text input views. This allows users to configure whether the keyboard dismisses when the user taps outside the active text field. An Objective-C compatible property (iq\_resignOnTouchOutsideMode) is also provided for mixed-language projects.
IQKeyboardManagerSwift/Resign/UIKItExtensions · high confidence
New per-view keyboard adjustment controls for UIView, UITextField, and UIScrollView
Developers can now configure keyboard management behavior on a per-view basis. For text input views (UIView/UITextField/UITextView), new properties allow setting a custom distance from the keyboard and enabling, disabling, or using the default global mode. For scroll views, properties allow ignoring scrolling adjustments and content inset adjustments, as well as restoring content offset. Objective-C compatibility shims are provided for all new Swift extensions.
IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension · high confidence
iOS 17.4+ Privacy Manifest and Swift Header Added
The library now includes a PrivacyInfo.xcprivacy file declaring no data collection, tracking, or API usage, satisfying Apple's App Store privacy requirements for iOS 17.4+. Additionally, a public header IQKeyboardManagerSwift.h is provided for Objective-C interoperability, exposing version constants for the Swift package.
IQKeyboardManagerSwift · high confidence
Removals
Removed SampleApp iOS 5 demo application
The iOS 5 sample application (KGKeyboardChangeManagerApp) has been removed from the repository. This includes the Xcode project configuration, the application delegate, the main entry point, and the view controller that demonstrated the keyboard change manager. Users can no longer build or run this specific legacy demo.
SampleApp · high confidence
Behavioural changes
Deprecated IQKeyboardManager toolbar properties in favor of IQKeyboardToolbarManager
The IQKeyboardManager extension now delegates toolbar-related configuration to the separate IQKeyboardToolbarManager library. Properties such as enableAutoToolbar, toolbarConfiguration, and various toolbar item settings (e.g., toolbarTintColor, previousBarButtonItemImage) are now accessed through the new manager or its configuration object. Many legacy properties on IQKeyboardManager are marked as unavailable with messages directing users to the new API, effectively separating toolbar management into its own dependency.
IQKeyboardManagerSwift/IQKeyboardToolbarManager · high confidence
Keyboard manager behavior and configuration refactored
The library has been restructured to use a new 'ActiveConfiguration' system for handling keyboard and controller states, which improves how the keyboard and text fields interact. As part of this refactor, several older APIs have been deprecated or removed: \IQKeyboardReturnKeyHandler\ is replaced by \IQKeyboardReturnManager\, \IQKeyboardListener\ by \IQKeyboardNotification\, and \IQTextFieldViewListener\ by \IQTextInputViewNotification\. Additionally, \IQKeyboardManager+Deprecated.swift\ marks old toolbar and button configurations as unavailable, directing users to the new \IQKeyboardToolbarManager\ and \IQKeyboardNotification\ packages for toolbar and notification handling.
IQKeyboardManagerSwift/IQKeyboardManager · high confidence
New keyboard appearance configuration API
A new \IQKeyboardAppearanceConfiguration\ struct and associated manager classes have been introduced to manage keyboard appearance settings. Users can now control the \overrideAppearance\ flag and the default \appearance\ via the \keyboardConfiguration\ property on \IQKeyboardManager\. The previous \overrideKeyboardAppearance\ and \keyboardAppearance\ properties are now deprecated and marked as unavailable, directing users to the new configuration-based approach.
IQKeyboardManagerSwift/Appearance · high confidence
Refactored keyboard resign logic into a dedicated handler
The keyboard resign functionality has been extracted from the main \IQKeyboardManager\ class into a new \IQKeyboardResignHandler\ class. This change introduces a \resignOnTouchOutside\ property and a \resignGesture\ to manage dismissing the keyboard when the user taps outside a text input field. The implementation now explicitly ignores touches from the Apple Pencil and respects \disabledTouchResignedClasses\ and \enabledTouchResignedClasses\ to control which view controllers are affected. A deprecated \shouldResignOnTouchOutside\ property is provided for backward compatibility.
IQKeyboardManagerSwift/Resign · high confidence
Refactored keyboard state management into dedicated configuration classes
The library has restructured its internal architecture by introducing new configuration classes—IQActiveConfiguration, IQRootControllerConfiguration, and IQScrollViewConfiguration—to handle keyboard visibility, root controller state, and scroll view states respectively. This change isolates the logic for tracking and restoring the state of UI elements during keyboard interactions, which should result in more reliable keyboard management and fewer edge-case bugs related to view controllers and scroll views.
IQKeyboardManagerSwift/IQKeyboardManager/Configuration · high confidence
Dependencies
Update example project dependencies and Swift Package Manager configuration
The example project's CocoaPods configuration was updated to target iOS 15.0 and include dependencies for IQDropDownTextFieldSwift, RSKPlaceholderTextView, and SwiftLint. The Swift Package Manager configuration was added, specifying dependencies on IQKeyboardNotification (1.0.7+), IQTextInputViewNotification (1.0.9+), IQKeyboardToolbarManager (1.1.5+), IQKeyboardReturnManager (1.0.6+), and IQTextView (1.0.5+), with a minimum platform of iOS 13.
(dependencies) · medium 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 44 → 44 (-0.7)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 95 (-4.6)
- Architecture 87 (new)
- Maturity 49 → 36 (-12.3)
- Readiness 26 → 21 (-4.8)
- Security 67 → 97 (+30.0)
Resolved (52)
- Dimension evaluation failed
- No exposed public API
- Secret: generic-api-key (Example/Podfile.lock)
- Secret: generic-api-key (Example/Podfile.lock)
- Secret: generic-api-key (Example/Podfile.lock)
- Secret: generic-api-key (Example/Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- Secret: generic-api-key (Podfile.lock)
- …and 32 more
New (35)
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- Duplicated block (10 lines × 6) (Example/IQKeyboardManagerSwiftExample/ViewController/SettingsViewController+TableView.swift)
- Duplicated block (11 lines × 3) (Example/IQKeyboardManagerSwiftExample/ViewController/SettingsViewController+TableView.swift)
- Duplicated block (12 lines × 2) (IQKeyboardManagerSwift/Appearance/IQKeyboardManager+Appearance.swift)
- Duplicated block (12 lines × 5) (Example/IQKeyboardManagerSwiftExample/ViewController/SettingsViewController+TableView.swift)
- Duplicated block (13 lines × 2) (Example/IQKeyboardManagerSwiftExample/ViewController/NonScrollTextView1979ViewController.swift)
- Duplicated block (13 lines × 3) (Example/IQKeyboardManagerSwiftExample/ViewController/SettingsViewController+TableView.swift)
- Duplicated block (15 lines × 2) (Example/IQKeyboardManagerSwiftExample/ViewController/BaseTableViewController.swift)
- Duplicated block (15 lines × 2) (Example/IQKeyboardManagerSwiftExample/ViewController/BaseTableViewController.swift)
- Duplicated block (16–18 lines × 2) (IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Internal.swift)
- Duplicated block (18 lines × 2) (Example/IQKeyboardManagerSwiftExample/ViewController/BaseTableViewController.swift)
- Duplicated block (19 lines × 2) (IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+ActiveConfiguration.swift)
- Duplicated block (22–24 lines × 2) (IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Position.swift)
- Duplicated block (46 lines × 2) (Example/IQKeyboardManagerSwiftExample/ViewController/BaseTableViewController.swift)
- Duplicated block (7 lines × 2) (Example/IQKeyboardManagerSwiftExample/ViewController/SearchViewController.swift)
- Duplicated block (9 lines × 3) (Example/IQKeyboardManagerSwiftExample/ViewController/ExampleTableViewController.swift)
- Duplicated block (9 lines × 8) (Example/IQKeyboardManagerSwiftExample/ViewController/SettingsViewController+TableView.swift)
- IQActiveConfiguration.sendEvent (cognitive 24) (IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQActiveConfiguration.swift)
- IQKeyboardExtension.parentContainerViewController (cognitive 23) (IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIScrollView+IQKeyboardManagerExtension.swift)
- IQKeyboardManager.adjustPosition (cognitive 17) (IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager.swift)
- …and 15 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
hackiftekhar/IQKeyboardManager 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 27 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 0972dd6eded87c930fb6ad36b3c5ecd620f06894 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-d00c643c3f66.