InstantSearch iOS alternatives and similar libraries
Based on the "UI" category.
Alternatively, view InstantSearch iOS alternatives based on common mentions on social networks and blogs.
-
Charts
Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart. -
Material
A UI/UX framework for creating beautiful applications. -
LTMorphingLabel
[EXPERIMENTAL] Graceful morphing effects for UILabel written in Swift. -
NVActivityIndicatorView
A collection of awesome loading animations -
Animated Tab Bar
:octocat: RAMAnimatedTabBarController is a Swift UI module library for adding animation to iOS tabbar items and icons. iOS library made by @Ramotion -
folding-cell
:octocat: 📃 FoldingCell is an expanding content cell with animation made by @Ramotion -
FSPagerView
FSPagerView is an elegant Screen Slide Library. It is extremely helpful for making Banner View、Product Show、Welcome/Guide Pages、Screen/ViewController Sliders. -
SwiftMessages
A very flexible message bar for iOS written in Swift. -
JTAppleCalendar
The Unofficial Apple iOS Swift Calendar View. Swift calendar Library. iOS calendar Control. 100% Customizable -
TextFieldEffects
Custom UITextFields effects inspired by Codrops, built using Swift -
Macaw
Powerful and easy-to-use vector graphics Swift library with SVG support -
SwiftEntryKit
SwiftEntryKit is a presentation library for iOS. It can be used to easily display overlays within your iOS apps. -
Pagemenu
A paging menu controller built from other view controllers placed inside a scroll view (like Spotify, Windows Phone, Instagram) -
SwipeCellKit
Swipeable UITableViewCell/UICollectionViewCell based on the stock Mail.app, implemented in Swift. -
AMScrollingNavbar
Scrollable UINavigationBar that follows the scrolling of a UIScrollView -
Alerts Pickers
Advanced usage of UIAlertController and pickers based on it: Telegram, Contacts, Location, PhotoLibrary, Country, Phone Code, Currency, Date... -
SPPermission
Universal API for request permission and get its statuses. -
SideMenu
Simple side/slide menu control for iOS, no code necessary! Lots of customization. Add it to your project in 5 minutes or less. -
Scrollable-GraphView
An adaptive scrollable graph view for iOS to visualise simple discrete datasets. Written in Swift. -
PermissionScope
A Periscope-inspired way to ask for iOS permissions. -
ImagePicker
:camera: Reinventing the way ImagePicker works. -
Material Components for iOS
[In maintenance mode] Modular and customizable Material Design UI components for iOS -
SCLAlertView
Beautiful animated Alert View. Written in Swift -
ESTabBarController
:octocat: ESTabBarController is a Swift model for customize UI, badge and adding animation to tabbar items. Support lottie! -
NotificationBanner
The easiest way to display highly customizable in app notification banners in iOS -
Instructions
Create walkthroughs and guided tours (coach marks) in a simple way, with Swift. -
ActiveLabel
UILabel drop-in replacement supporting Hashtags (#), Mentions (@) and URLs (http://) written in Swift -
SlideMenuControllerSwift
iOS Slide Menu View based on Google+, iQON, Feedly, Ameba iOS app. It is written in pure swift. -
TLYShyNavBar
Unlike all those arrogant UINavigationBar, this one is shy and humble! Easily create auto-scrolling navigation bars! -
Siren
Notify users when a new version of your app is available and prompt them to upgrade. -
PKHUD
A Swift based reimplementation of the Apple HUD (Volume, Ringer, Rotation,…) for iOS 8. -
PopupDialog
A simple, customizable popup dialog for iOS written in Swift. Replaces UIAlertController alert style. -
StarWars.iOS
This component implements transition animation to crumble view-controller into tiny pieces. -
Persei
Animated top menu for UITableView / UICollectionView / UIScrollView written in Swift -
KMNavigationBarTransition
A drop-in universal library helps you to manage the navigation bar styles and makes transition animations smooth between different navigation bar styles while pushing or popping a view controller for all orientations. And you don't need to write any line of code for it, it all happens automatically. -
DGElasticPullToRefresh
Elastic pull to refresh for iOS developed in Swift -
Whisper
:mega: Whisper is a component that will make the task of display messages and in-app notifications simple. It has three different views inside -
CircleMenu
:octocat: ⭕️ CircleMenu is a simple, elegant UI menu with a circular layout and material design animations. Swift UI library made by @Ramotion -
RazzleDazzle
A simple keyframe-based animation framework for iOS, written in Swift. Perfect for scrolling app intros. -
Parchment
A paging view controller with a highly customizable menu ✨ -
PaperOnboarding
:octocat: PaperOnboarding is a material design UI slider. Swift UI library by @Ramotion -
DOFavoriteButton
Cute Animated Button written in Swift. -
XLActionController
Fully customizable and extensible action sheet controller written in Swift
Appwrite - The Open Source Firebase alternative introduces iOS support
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of InstantSearch iOS or a related project?
README
[InstantSearch iOS](./Resources/instantsearch-banner.png)
By Algolia.
InstantSearch family: InstantSearch iOS | InstantSearch Android | React InstantSearch | InstantSearch.js | Angular InstantSearch | Vue InstantSearch.
InstantSearch iOS is a framework providing components and helpers to help you build the best instant-search experience on iOS with Algolia. It is built on top of Algolia's Swift API Client library to provide you a high-level solution to quickly build various search interfaces.
Structure
InstantSearch iOS consists of three products
- [InstantSearch Insights](./Sources/InstantSearchInsights/README.md) – library that allows developers to capture search-related events
- InstantSearch Core – the business logic modules of InstantSearch
- InstantSearch – the complete InstantSearch toolset including UIKit components
- InstantSearch SwiftUI – the set of SwiftUI data models and views to use on top of Core components
Examples
You can see InstantSearch iOS in action in the Examples project. It contains search components ans experiences built with InstantSearch and written in Swift.
Installation
Swift Package Manager
The Swift Package Manager is a tool for managing the distribution of Swift code. It’s integrated with the Swift build system to automate the process of downloading, compiling, and linking dependencies. Since the release of Swift 5 and Xcode 11, SPM is compatible with the iOS, macOS and tvOS build systems for creating apps.
To use SwiftPM, you should use Xcode 11 to open your project. Click File
-> Swift Packages
-> Add Package Dependency
, enter InstantSearch repo's URL.
Next, select the products you consider to use in your project from the provided list.
If you're a framework author and use InstantSearch as a dependency, update your Package.swift
file:
let package = Package(
// 7.21.0 ..< 8.0.0
dependencies: [
.package(url: "https://github.com/algolia/instantsearch-ios", from: "7.21.0")
],
// ...
)
CocoaPods
CocoaPods is a dependency manager for Cocoa projects.
To install InstantSearch, simply add the following line to your Podfile:
pod 'InstantSearch', '~> 7.21'
# pod 'InstantSearch/Insights' for access to Insights library only
# pod 'InstantSearch/Core' for access business logic without UIKit components
# pod 'InstantSearch/SwiftUI' for access to SwiftUI components
Then, run the following command:
$ pod update
Carthage
Carthage is a simple, decentralized dependency manager for Cocoa.
To install InstantSearch, simply add the following line to your Cartfile:
github "algolia/instantsearch-ios" ~> 7.21
Launch the following commands from the project directory
carthage update ./Carthage/Checkouts/instant-search-ios/carthage-prebuild carthage build
NOTE: At this time, Carthage does not provide a way to build only specific repository subcomponents (or equivalent of CocoaPods's subspecs). All components and their dependencies will be built with the above command. However, you don't need to copy frameworks you aren't using into your project. For instance, if you aren't using UI components from
InstantSearch
, feel free to delete that framework from the Carthage Build directory aftercarthage update
completes keeping onlyInstantSearchCore
. If you only need event-tracking functionalities, delete all butInstantSearchInsights
framework.
If this is your first time using Carthage in the project, you'll need to go through some additional steps as explained over at Carthage.
Documentation
You can start with the Getting Started Guide.
Learn more about instantSearch iOS in the dedicated documentation website.
Basic Usage
In your ViewController.swift
:
import InstantSearch
struct Item: Codable {
let name: String
}
class SearchResultsViewController: UITableViewController, HitsController {
var hitsSource: HitsInteractor<Item>?
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
hitsSource?.numberOfHits() ?? 0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = hitsSource?.hit(atIndex: indexPath.row)?.name
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let _ = hitsSource?.hit(atIndex: indexPath.row) {
// Handle hit selection
}
}
}
class ViewController: UIViewController {
lazy var searchController = UISearchController(searchResultsController: hitsViewController)
let hitsViewController = SearchResultsViewController()
let searcher = HitsSearcher(appID: "latency",
apiKey: "1f6fd3a6fb973cb08419fe7d288fa4db",
indexName: "bestbuy")
lazy var searchConnector = SearchConnector<Item>(searcher: searcher,
searchController: searchController,
hitsInteractor: .init(),
hitsController: hitsViewController)
override func viewDidLoad() {
super.viewDidLoad()
searchConnector.connect()
searcher.search()
setupUI()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
searchController.isActive = true
}
func setupUI() {
view.backgroundColor = .white
navigationItem.searchController = searchController
searchController.hidesNavigationBarDuringPresentation = false
searchController.showsSearchResultsController = true
searchController.automaticallyShowsCancelButton = false
}
}
You can now build and run your application to see the basic search experience in action. You should see that the results are changing on each key stroke.
To get a more meaningful search experience, please follow the Getting Started Guide. If you build a SwiftUI application, please check out the Getting Started with SwiftUI guide
If you only require business logic modules in your project and use InstantSearchCore
framework, add import InstantSearchCore
to your source files.
Logs
There are 7 levels of logs severity produced by the library.
The default severity level is .info
.
You can configure the logging level as follows:
Logs.logSeverityLevel = .debug
Telemetry
InstantSearch iOS collects data points at runtime. This helps the InstantSearch team improve and prioritize future development.
Here's an exhaustive list of the collected data:
- InstantSearch version
- The name of the instantiated InstantSearch components, for example,
HitsSearcher
,FilterState
- The name of the components with custom parameters (overridden defaults). InstantSearch doesn't collect the values of those parameters. For example, the default of the
facets
value inFacetListInteractor
is an empty list. If you instantiate it with a list of facets, then the telemetry tracks that thefacets
parameter received a custom value, but not the value itself.
InstantSearch doesn't collect any sensitive or personal data. However, you can still opt out of the telemetry collection with the following code:
InstantSearchTelemetry.shared.isEnabled = false
Getting Help
- Need help? Ask a question to the Algolia Community or on Stack Overflow.
- Encountering an issue? Before reaching out to support, we recommend heading to our FAQ where you will find answers for the most common issues and gotchas with the framework.
- Found a bug? You can open a GitHub issue.
- Questions about Algolia? You can search our FAQ in our website.
Getting involved
- If you want to contribute please feel free to submit pull requests.
- If you have a feature request please open an issue.
- If you use InstantSearch in your app, we would love to hear about it! Drop us a line on discourse or twitter.
License
InstantSearch iOS is [Apache 2.0 licensed](LICENSE.md).
*Note that all licence references and agreements mentioned in the InstantSearch iOS README section above
are relevant to that project's source code only.