nathantannar4/InputBarAccessoryView
57.4
Weak · 1 October 2026
6k
lines of production code
Swift
with JavaScript
2
measurements over time
What this system is
This system is a UIKit-based iOS framework for building customizable input accessory views, commonly used in chat or messaging interfaces. It provides core components for text input, keyboard-aware layout management, and media attachment handling, along with plugins for features like autocomplete and send button animations. The library supports modern iOS styling, including dark mode and SwiftUI integration, and is distributed via Swift Package Manager.
How it got here
2017–2019 — iOS 13 dark mode and plugin architecture
16 changes.
This period focused on adapting the InputBarAccessoryView to iOS 13 dark mode and introducing a modular plugin architecture. Key additions included the AttachmentManager for media handling, the AutocompleteManager for text suggestions, and the KeyboardManager for layout adjustments. The work also involved refactoring core components to support semantic colors, Swift concurrency protocols, and improved UI utilities.
2020–2022 — Swift Package Manager migration and modernization
5 changes.
The project introduced Swift Package Manager support, requiring iOS 14+ and dropping older platform versions. Legacy APIs were deprecated and renamed to align with the current architecture, while the example app was restructured to demonstrate modern features like the Glass effect and improved keyboard management.
Features
Add GitHub Actions build script for iOS framework and example app
A new build script (build.sh) has been added to the GitHubActions directory to automate the build process for the InputBarAccessoryView framework and its example application. The script supports building the framework, the example app, or both, targeting specific iOS simulator devices (iPhone 16 and iPhone 16 Pro) using xcodebuild and xcpretty. It includes error handling via a trap handler and exits with a specific code on failure.
GitHubActions · high confidence
Add HorizontalEdgePadding model and NSLayoutConstraintSet helper
This change introduces two new source files to the Models module. HorizontalEdgePadding is a new public, Sendable struct that allows users to define distinct left and right padding values, replacing the previous implicit or less granular approach. Additionally, NSLayoutConstraintSet is added as a MainActor class to bundle and manage multiple Auto Layout constraints, providing convenient activate() and deactivate() methods for bulk constraint management.
Sources/Models · high confidence
Added example app resources and configuration
The Example app now includes its asset catalog (defining the app icon and various UI icons like send, camera, and user symbols) and its Info.plist configuration file, establishing the necessary resources for the example project to build and run.
Example/Resources · high confidence
Introduced AttachmentManagerDataSource and AttachmentManagerDelegate protocols
Added the \AttachmentManagerDataSource\ and \AttachmentManagerDelegate\ protocols to the \AttachmentManager\ plugin. The data source protocol allows clients to provide custom cells for attachments and optionally specify their sizes, with a default implementation that falls back to auto-calculation if the size method is not implemented. The delegate protocol provides notifications for attachment insertion, removal, reloading, and add-attachment cell selection, with default empty implementations for all delegate methods to simplify adoption.
Sources/Plugins/AttachmentManager/Protocols · high confidence
Introduced AutocompleteManager protocol and view components
Added the \AutocompleteManagerDataSource\ and \AutocompleteManagerDelegate\ protocols to define the data and control flow for the autocomplete feature, along with the \AutocompleteCell\ and \AutocompleteTableView\ view classes to render the suggestion list. These components provide the structural foundation for displaying and managing autocomplete options within the input bar.
Sources/Plugins/AutocompleteManager/Protocols · high confidence
Introduction of AttachmentManager plugin for handling media attachments
A new \AttachmentManager\ plugin has been added to the library, providing a dedicated manager for handling image, URL, and data attachments within the input bar. This component introduces a collection view-based UI for displaying attachments, supporting animated insertion and removal of items. It includes default cell rendering for images and exposes delegate and data source protocols, allowing developers to customize cell appearance and handle attachment selection events.
Sources/Plugins/AttachmentManager · high confidence
Introduction of KeyboardManager for keyboard-aware layout
This change introduces the KeyboardManager component, which observes UIKit keyboard notifications to automatically adjust the position of an input accessory view relative to the keyboard. It provides a \bind\ method to attach a view to the keyboard's top edge, supports interactive dismissal via a pan gesture on a scroll view, and exposes callbacks for keyboard events (show, hide, frame change) along with properties to handle additional bottom space and transition animations.
Sources/KeyboardManager · high confidence
Introduction of Swift concurrency protocols for InputBarAccessoryView
The library now defines three new protocols—\InputBarAccessoryViewDelegate\, \InputItem\, and \InputPlugin\—all marked with \@MainActor\ to enforce main-thread execution for UI interactions. \InputBarAccessoryViewDelegate\ provides a standardized interface for handling send actions, text changes, and swipe gestures, while \InputItem\ and \InputPlugin\ establish contracts for integrating reactive components and external plugins into the input bar. This change introduces a structured, concurrency-safe API for extending the input bar's functionality.
Sources/Protocols · high confidence
New InputBarButtonItem and InputBarSendButton controls with dark mode support
Added InputBarButtonItem, a customizable button component for input bars that supports flexible or fixed spacing and reactive hooks for state changes. Introduced InputBarSendButton, which extends InputBarButtonItem to include an activity indicator for loading states; this indicator now respects system appearance settings (using .medium style on iOS 13+) to support dark mode, ensuring the loading spinner is visible and appropriately styled in both light and dark themes.
Sources/Controls · high confidence
New attachment preview UI components
Added \AttachmentCell\, \ImageAttachmentCell\, and \AttachmentCollectionView\ to the AttachmentManager plugin. These views provide a horizontal scrolling collection view for displaying image attachments, featuring a delete button, configurable padding, and semantic color support for iOS 13+.
Sources/Plugins/AttachmentManager/Views · high confidence
New autocomplete models and input bar view controller
This change introduces the foundational components for the autocomplete feature and a helper view controller. It adds the \AutocompleteCompletion\ struct to represent completion items (including text and context) and the \AutocompleteSession\ class to track the current autocomplete state (prefix, range, filter). Additionally, it adds \InputBarViewController\, a base \UIViewController\ subclass that integrates \InputBarAccessoryView\ as its input accessory view, handling visibility toggling via \isInputBarHidden\ and first-responder status.
Sources/Plugins/AutocompleteManager/Models, Sources/ViewControllers · high confidence
New example app with Glass effect and keyboard management demos
The Example app has been restructured to include a new style selection controller and several new demonstration view controllers. A new 'Glass' input bar style is now available, showcasing the iOS 26 UIGlassEffect and UIGlassContainerEffect APIs for a translucent, interactive UI. The example also demonstrates the KeyboardManager's additionalInputViewBottomConstraintConstant feature, allowing developers to see how to position the input bar above custom bottom bars. Additionally, new community examples cover send button animations, SwiftUI integration, and tab bar scenarios.
Example/Sources · high confidence
New internal utility extensions for text, layout, and notifications
This change introduces a set of new internal helper extensions within the Sources/Extensions directory to streamline common development tasks. NSMutableAttributedString gains methods to easily append bold, medium, italic, or normal styled text, with iOS 13+ support for dynamic color adaptation. UITextView is extended with logic to detect and return the range of text matching specific prefixes (such as @ or \# mentions) relative to the cursor position. UIView receives new AutoLayout helpers to fill its superview, add constraints declaratively, and remove all existing constraints. Additionally, NSNotification is extended to parse keyboard event details like animation curves and frames, and a basic Character extension is added.
Sources/Extensions · high confidence
Behavioural changes
5 commits (0 fixes) modifying Screenshots
A change to existing behaviour in Screenshots — 5 commits, 9 files.
Screenshots · medium confidence · unverified
Autocomplete manager now supports dark mode and semantic colors
The AutocompleteManager has been updated to support dark mode by refactoring its color usage to rely on semantic system colors (such as .systemBackground and .label) instead of hardcoded values. This ensures that autocomplete suggestions and text attributes adapt correctly to the user's current interface style on iOS 13 and later, while maintaining compatibility with earlier versions.
Sources/Plugins/AutocompleteManager · high confidence
Deprecation of legacy InputBarAccessoryView APIs and addition of Swift Package Manager support
This update introduces several deprecated APIs to guide users toward the current InputBarAccessoryView architecture. The \InputManager\ type has been renamed to \InputPlugin\, and the \handleInput(object:)\ method now returns a \Bool\ to indicate success. Autocomplete's \displayText\ property is deprecated in favor of using the \context\ dictionary, and \isCaseSensitive\ is replaced by a customizable \filterBlock\. Additionally, \textViewPadding\ is deprecated and renamed to \middleContentViewPadding\ to reflect that the \InputTextView\ now resides in the \middleContentView\. To support modern Swift development, an \Info.plist\ and a bridging header have been added to facilitate Swift Package Manager integration.
Sources/Supporting · high confidence
Example app project structure and demo content update
The Example app project has been restructured to include new demonstration files, specifically adding a SwiftUI example, a button animation example, and various input bar style examples (iMessage, Slack, GitHawk, Facebook, Glass, and NoTextView). The project now references the InputBarAccessoryView framework and organizes source files into groups for view controllers, input bar examples, cells, and sample data.
Example/Example.xcodeproj · high confidence
InputBarAccessoryView now adapts to iOS 13 dark mode and supports smooth height animations
The input accessory bar now uses semantic system colors (such as systemBackground) on iOS 13 and later, ensuring it correctly adapts to dark mode, while falling back to white on earlier versions. Additionally, the view now supports smooth, animated height changes when the input content size changes, and the separator line is standardized to 1px with updated colors for iOS 13 compatibility.
Sources · high confidence
New input bar view components and placeholder fixes
This change introduces three new UI components for the input bar: \InputStackView\ for arranging input items, \SeparatorLine\ for consistent 1px dividers with iOS 13+ semantic color support, and \InputTextView\ which embeds a placeholder label. The \InputTextView\ implementation ensures that font, alignment, and inset changes propagate to the placeholder, fixes RTL placeholder alignment, and enables image pasting by forwarding images to the parent \InputBarAccessoryView\'s plugins.
Sources/Views · high confidence
Fixes
Restored Example workspace configuration to fix build issues
The Example workspace configuration files have been restored to their standard state, resolving build failures. This includes adding the workspace data file that references the project and the IDE workspace checks plist to ensure proper workspace settings are applied.
Example/Example.xcodeproj/project.xcworkspace · high confidence
Dependencies
Introduce Swift Package Manager support with iOS 14+ requirement
A new Package.swift manifest has been added to enable installation via Swift Package Manager. This configuration sets the minimum platform requirement to iOS 14 and specifies Swift 6 language mode, effectively dropping support for older iOS versions and Swift versions that were previously supported.
(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 60 → 57 (-2.9)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 97 → 96 (-0.9)
- Architecture 94 → 87 (-7.2)
- Maturity 58 → 58 (+0.0)
- Readiness 40 → 38 (-1.9)
- Security 100 → 100 (+0.0)
Resolved (4)
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Off-boarding risk: anonymized user #1
New (6)
- Documentation: no architecture or design documentation (README.md)
- FileTooLong: js/typeahead.jquery.js (docs/js/typeahead.jquery.js)
- Inconsistent factory method naming. fixedSpace is a static-like factory method (class method) returning a configured instance, while flexibleSpace is a property returning a singleton/instance. This breaks the pattern of how users create these items. If flexibleSpace is a convenience property, it should likely be a method flexibleSpace() or makeFlexibleSpace() to match fixedSpace's explicit factory nature, or fixedSpace should be a property if it's a singleton.
- Inconsistent naming convention for lifecycle events. The methods use 'On' prefix (e.g., onKeyboardEditingBegins) while other similar methods in the same class use 'on' prefix but with different verb forms or lack thereof (e.g., onTouchUpInside, onSelected). More critically, comparing with InputBarAccessoryView methods like inputTextViewDidBeginEditing, the naming style is inconsistent across the library (OnEvent vs DidEvent). However, within InputBarButtonItem, the inconsistency is between 'Begins/Ends' (state change verbs) and 'TouchUpInside/Selected/Deselected' (noun/adj states).
- Off-boarding risk: anonymized user #1
- Projects may be oversized for their cohesion
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
nathantannar4/InputBarAccessoryView 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 83cf29212e2cdb947226eead38a535c9b12629cb — 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.