{"id":19173881,"url":"https://github.com/navideck/gesturedeck-ios","last_synced_at":"2025-10-28T15:11:25.808Z","repository":{"id":182230800,"uuid":"584722004","full_name":"Navideck/Gesturedeck-iOS","owner":"Navideck","description":"Gesturedeck iOS public repo","archived":false,"fork":false,"pushed_at":"2024-10-19T17:24:39.000Z","size":79603,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-08T05:04:53.991Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://navideck.github.io/Gesturedeck-iOS/documentation/gesturedeckios/","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Navideck.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-01-03T10:50:31.000Z","updated_at":"2024-10-19T17:24:33.000Z","dependencies_parsed_at":"2023-11-13T16:55:37.196Z","dependency_job_id":null,"html_url":"https://github.com/Navideck/Gesturedeck-iOS","commit_stats":null,"previous_names":["navideck/gesturedeck-ios"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/Navideck/Gesturedeck-iOS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Navideck%2FGesturedeck-iOS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Navideck%2FGesturedeck-iOS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Navideck%2FGesturedeck-iOS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Navideck%2FGesturedeck-iOS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Navideck","download_url":"https://codeload.github.com/Navideck/Gesturedeck-iOS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Navideck%2FGesturedeck-iOS/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269371260,"owners_count":24406265,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-08T02:00:09.200Z","response_time":72,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T10:15:03.985Z","updated_at":"2025-10-28T15:11:20.768Z","avatar_url":"https://github.com/Navideck.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gesturedeck SDK - iOS\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://navideck.com/sites/navideck.com/files/2023-10/Gesturedeck%20SDK%20icon.png\" height=150 /\u003e\n\u003c/p\u003e\n\n## Overview\n\nRevolutionize your iOS app's user experience with the extraordinary power of Gesturedeck! Seamlessly integrated into your iOS application, Gesturedeck empowers users to effortlessly control their devices through intuitive touch gestures, without even needing to look at the screen.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://navideck.com/sites/navideck.com/files/2023-10/Gesturedeck%20touch%20gestures%20list.png\" height=300 /\u003e \u0026nbsp;\n  \u003cimg src=\"https://navideck.com/sites/navideck.com/files/2023-10/Gesturedeck%20volume%20gesture.png\" height=300 /\u003e \u0026nbsp;\n  \u003cimg src=\"https://navideck.com/sites/navideck.com/files/2023-10/Gesturedeck%20play%20pause%20gesture.png\" height=300 /\u003e\n\u003c/p\u003e\n\nImagine enhancing your app with the ability to adjust volume, skip tracks, and perform various actions effortlessly, making interactions smoother and more natural than ever before. Whether users are driving, biking, or engaged in any activity that demands their full attention, Gesturedeck ensures a seamless experience that enhances productivity and safety.\n\n## Key Features\n\n- Intuitive touch gestures for seamless device control.\n- Customizable gesture actions for enhanced user interactions.\n- Integrated GesturedeckMedia for media app controls with overlay UI support.\n- Support for volume button actions with GesturedeckMedia.\n- Sensitivity settings for fine-tuning gesture responsiveness.\n- Does not require internet connectivity\n- SwiftUI / UIKit / Swift \u0026 ObjC support\n\n## Gesturedeck\n\nGesturedeck is the low-level API that allows you to build custom functionalities on top of Gesturedeck's gestures. Without introducing any additional UI, your app gains access to powerful gesture controls that redefine user interactions.\n\n### Getting Started with Gesturedeck\n\nTo integrate Gesturedeck into your iOS app, you must add the Gesturedeck framework to your project. You can easily do that using Swift Package Manager (SPM). Through Xcode, go to `Package Dependencies`, click `+` and simply use the URL of this repo. SPM will fetch and add the framework automatically.\n\nAfter adding the framework, follow the steps below to integrate it with your app.\n\n#### Step 1: Import GesturedeckiOS\n\nImport the GesturedeckiOS module into your Swift class:\n\n```swift\nimport GesturedeckiOS\n```\n\n#### Step 2: Choose Integration Option\n\nSelect one of the following options based on your app's setup:\n\n##### Option 1: SwiftUI\n\nIf you're using SwiftUI, there is no need for AppDelegate or SceneDelegate.\n\n```swift\n@main\nstruct gesturedeckApp: App {\n    @Environment(\\.scenePhase) var scenePhase\n    @State var gesturedeck: Gesturedeck?\n```\n\n```swift\nvar body: some Scene {\n    WindowGroup {\n        ...\n    }\n    .onChange(of: scenePhase) { oldValue, newValue in\n        if newValue == .active {\n            gesturedeck = gesturedeck ?? Gesturedeck()\n            gesturedeck?.tapAction = {\n                print(\"Tapped\")\n            }\n\n            gesturedeck?.swipeLeftAction = {\n                print(\"Swiped Left\")\n            }\n\n            gesturedeck?.swipeRightAction = {\n                print(\"Swiped Right\")\n            }\n        }\n    }\n}\n```\n\n##### Option 2: UIKit / SceneDelegate\n\nInitialize the SDK in the `sceneDidBecomeActive` event or later. Make sure that you avoid initializing Gesturedeck multiple times.\n\n```swift\nclass SceneDelegate: UIResponder, UIWindowSceneDelegate {\n\n  var window: UIWindow?\n  var gesturedeck: Gesturedeck?\n\n  ...\n\n  func sceneDidBecomeActive(_ scene: UIScene) {\n    // Called when the scene has moved from an inactive state to an active state.\n    // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.\n    \n    gesturedeck = gesturedeck ?? Gesturedeck()\n    gesturedeck?.tapAction = {\n        print(\"Tapped\")\n    }\n\n    gesturedeck?.swipeLeftAction = {\n        print(\"Swiped Left\")\n    }\n\n    gesturedeck?.swipeRightAction = {\n        print(\"Swiped Right\")\n    }\n  }\n}\n```\n\n##### Option 3: UIKit / AppDelegate\n\nIt is recommended to initialize the SDK in the `applicationDidBecomeActive` or later event, as the window might not be initialized in the `didFinishLaunchingWithOptions` lifecycle event. Make sure that you avoid initializing Gesturedeck multiple times.\n\n```swift\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n  var window: UIWindow?\n  var gesturedeck: Gesturedeck?\n\n  func applicationDidBecomeActive(_ application: UIApplication) {\n    // Initialize Gesturedeck\n    gesturedeck = gesturedeck ?? Gesturedeck()\n  }\n}\n```\n\n### Gesture Actions\n\nWhile you can initialize Gesturedeck without any arguments, no action will be executed upon performing a gesture. To set the action for a specific gesture, you can use the arguments `tapAction`, `swipeRightAction`, `swipeLeftAction`, `panAction`, and `longPressAction` in Gesturedeck's constructor or set them afterwards.\n\n```swift\ngesturedeck.tapAction = { /* Handle tap gesture here */ }\ngesturedeck.swipeRightAction = { /* Handle swipe right gesture here */ }\ngesturedeck.swipeLeftAction = { /* Handle swipe left gesture here */ }\ngesturedeck.panAction = { /* Handle pan gesture here */ }\ngesturedeck.longPressAction = { /* Handle long press gesture here */ }\n```\n\nFor detailed API reference, visit [Gesturedeck API Reference](https://navideck.github.io/Gesturedeck-iOS/documentation/gesturedeckios/gesturedeck/).\n\n## GesturedeckMedia - Media Controls\n\nGesturedeckMedia is a specialized implementation built on top of Gesturedeck, tailored specifically for media apps. It provides default gesture actions that can be customized to suit your app's requirements. \n\nYou can initialize GesturedeckMedia without any arguments and have **start/stop**, **skip next/previous** and **volume up/down** work out of the box. Note that due to iOS limitations, skip next/previous only works for the system media player.\n\nWhen using the default gesture actions you need to add the `NSAppleMusicUsageDescription` key in your project's `Info` tab with a value explaining why you need this permission (e.g. `\"Control music playback\"`).\n\n### Getting Started with GesturedeckMedia\n\nTo use GesturedeckMedia for showing media controls UI, follow these steps:\n\n1. Initialize `GesturedeckMedia`\n\n```swift\nlet gesturedeckMedia = GesturedeckMedia()\n```\n\nor initialize `GesturedeckMedia` with `GesturedeckMediaOverlay` and actions:\n\n```swift\nlet gesturedeckMedia = GesturedeckMedia(\n    context: self,\n    gesturedeckMediaOverlay: GesturedeckMediaOverlay(\n        topIcon: YOUR_TOP_ICON,\n        iconTap: YOUR_ICON_TAP,\n        iconTapToggled: YOUR_ICON_TAP_TOGGLED,\n        iconSwipeLeft: YOUR_ICON_SWIPE_LEFT,\n        iconSwipeRight: YOUR_ICON_SWIPE_RIGHT,\n        reverseHorizontalSwipes: false,\n        centerIconShowsOuterRing: true\n    ),\n    tapAction: { /* Handle tap gesture here */ },\n    swipeRightAction: { /* Handle swipe right gesture here */ },\n    swipeLeftAction: { /* Handle swipe left gesture here */ },\n    panAction: { /* Handle pan gesture here */ },\n    longPressAction: { /* Handle long press gesture here */ }\n)\n```\n\nPlease note that you need to replace `YOUR_TOP_ICON`, `YOUR_ICON_TAP`, `YOUR_ICON_TAP_TOGGLED`, `YOUR_ICON_SWIPE_LEFT`, and `YOUR_ICON_SWIPE_RIGHT` with your own images that you want to use for the media overlay icons.\n\nFor detailed API reference, visit [GesturedeckMedia API Reference](https://navideck.github.io/Gesturedeck-iOS/documentation/gesturedeckios/gesturedeckmedia/).\n\n## Objective-C\nGesturedeck is fully compatible with `Objective-C`. When using Objective-C you can initialize Gesturedeck or GesturedeckMedia using:\n\n```objective-c\n@import GesturedeckiOS;\n```\n\n```objective-c\n@property Gesturedeck *gesturedeck;\n```\n\nand\n\n```objective-c\nif (self.gesturedeck == nil) {\n    self.gesturedeck = [[Gesturedeck alloc] init];\n}\n```\n\nIf you want to use GesturedeckMedia, replace Gesturedeck with GesturedeckMedia in the above snippets.\n\n## Free to Use\nGesturedeck SDK is free to use, providing you with the full functionality of the SDK without any time limitations. You are welcome to integrate it into both personal and commercial projects. When using Gesturedeck SDK for free, a watermark will be presented during runtime. It is strictly prohibited  to hide, remove, or alter in any way the watermark from the free version of Gesturedeck SDK.\n\n### Activation Key and Watermark Removal\nFor those who wish to remove the watermark from their app, we offer an activation key that allows you to use the SDK without any watermarks. However, please be aware that the watermark-free version is not available for free and requires a purchase.\n\nTo inquire about purchasing an activation key or if you have any other questions related to licensing and usage, please contact us at team@navideck.com. We will be happy to assist you with the process and provide you with the necessary information.\n\n## Contact\n\nFor questions or support, please contact us at team@navideck.com. Thank you for choosing Gesturedeck SDK!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnavideck%2Fgesturedeck-ios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnavideck%2Fgesturedeck-ios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnavideck%2Fgesturedeck-ios/lists"}