Skip to content
CAI
Software that uses CAICheck a score

hackiftekhar/IQKeyboardManager

43.6

Weak · 27 September 2026

6.1k

lines of production code

Swift

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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.