{"id":13536910,"url":"https://github.com/onurhuseyincantay/Hover","last_synced_at":"2025-04-02T03:31:29.260Z","repository":{"id":35567787,"uuid":"196369058","full_name":"onurhuseyincantay/Hover","owner":"onurhuseyincantay","description":"Async network layer with Combine","archived":false,"fork":false,"pushed_at":"2023-03-24T21:49:30.000Z","size":3085,"stargazers_count":127,"open_issues_count":2,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-19T23:47:28.806Z","etag":null,"topics":["combine","combine-framework","ios","moya","networking","networklayer","reactive-programming","swift5"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/onurhuseyincantay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-07-11T10:01:02.000Z","updated_at":"2024-12-05T04:42:19.000Z","dependencies_parsed_at":"2024-01-17T04:52:40.461Z","dependency_job_id":null,"html_url":"https://github.com/onurhuseyincantay/Hover","commit_stats":{"total_commits":131,"total_committers":5,"mean_commits":26.2,"dds":"0.35114503816793896","last_synced_commit":"6eb0ad981b9b1a757ae3ca84c975f55830a6a816"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onurhuseyincantay%2FHover","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onurhuseyincantay%2FHover/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onurhuseyincantay%2FHover/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/onurhuseyincantay%2FHover/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/onurhuseyincantay","download_url":"https://codeload.github.com/onurhuseyincantay/Hover/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246751222,"owners_count":20827851,"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","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":["combine","combine-framework","ios","moya","networking","networklayer","reactive-programming","swift5"],"created_at":"2024-08-01T09:00:51.645Z","updated_at":"2025-04-02T03:31:27.793Z","avatar_url":"https://github.com/onurhuseyincantay.png","language":"Swift","funding_links":[],"categories":["Samples","🛠 Examples"],"sub_categories":["Combine"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg height=\"250\" src=\"Screenshots/Hover.png\"/\u003e\n\u003c/p\u003e\n\n# Version 1.1\n\n[![apm](https://img.shields.io/apm/l/vim-mode.svg)](https://github.com/onurhuseyincantay/Hover/blob/develop/LICENSE)[![CocoaPods compatible](https://img.shields.io/cocoapods/v/HoverKitSDK.svg)](https://cocoapods.org/pods/HoverKitSDK)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![Swift Package Manager compatible](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager)\n![Swift](https://github.com/onurhuseyincantay/Hover/workflows/Swift/badge.svg)\u003c/br\u003e\n\n## Currently Available\n| Platform      | Version       |\n| ------------- |:------------- | \n| iOS           | 12.0          |\n| tvOS          | 10.0          |\n| macOS         | 10.15         |\n| watchOS       | 3.0           |\n| macCatalyst   | 13.0          |\n\nHover is a Network layer which uses Apple's new framework `Combine` and provides async network calls with different kind of request functions.\n\n## Why and When to Use\nThe main benefit to use Hover is to abstract the networking layer as much as possible and remove redunant code from your projects as we know `Apple` announced a new framework called `Combine` the main goal is to provide a declarative Swift API for processing values over time. These values can represent many kinds of asynchronous events, so networking calls are the most important async events, which actually needs to have a support for `Combine` to prevent and integrate Apple's native framework. Why you shouldnt use is when you dont have that much networking calls and also not so complex data flows to keep track on which means actually that you dont have states for the UI then dont use it. :) \n\n#### Cocoapods Installation\n```swift\ntarget 'MyApp' do\n  pod 'HoverKitSDK', \"~\u003e 1.1\"\nend\n```\n\n#### Carthage Installation\n```swift\ngithub \"onurhuseyincantay/Hover\" ~\u003e 1.1\n```\n\n#### Swift Package Manager Installation\nPackage            |  branch\n:-------------------------:|:-------------------------:\n\u003cimg height=\"250\" src=\"Screenshots/package.png\" /\u003e  |   \u003cimg height=\"250\" src=\"Screenshots/branchInfo.png\" /\u003e\n\n\n# Sample Usage\n#### Provide Target\n```swift\n enum UserTarget {\n  case login(email: String, password: String) \n }\n \n extension UserTarget: NetworkTarget { \n    var path: String {\n        switch self {\n        ...\n    }\n    var providerType: AuthProviderType {\n        ...\n    }\n    \n    var baseURL: URL {\n        ...\n    }\n    \n    var methodType: MethodType {\n        switch self {\n          ...\n        }\n    }\n    \n    var contentType: ContentType? {\n        switch self {\n         ...\n        }\n    }\n    \n    var workType: WorkType {\n        switch self {\n          ...\n        }\n    }\n    \n    var headers: [String : String]? {\n        ...\n    }\n }\n```\n#### Request With Publisher\n```swift\nlet provider = Hover()\nlet publisher = provider.request(\n            with: UserTarget.login(email: \"ohc3807@gmail.com\", password: \"123456\"),\n            scheduler: DispatchQueue.main,\n            class: UserModel.self\n        )\n...\npublisher.sink({ ... })\n```\n\n#### Request With Subscriber\n```swift\nlet provider = Hover()\nlet userSubscriber = UserSubscriber()\nprovider.request(with: UserTarget.login(email: \"ohc3807@gmail.com\", password: \"123456\"), class: UserModel.self, subscriber: userSubscriber)\n```\n\nTested with [JsonPlaceholder](https://jsonplaceholder.typicode.com)\nInspired By [Moya](https://github.com/Moya/Moya) Developed with 🧡\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonurhuseyincantay%2FHover","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fonurhuseyincantay%2FHover","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fonurhuseyincantay%2FHover/lists"}