{"id":32151842,"url":"https://github.com/ragzy15/publisherkit","last_synced_at":"2025-10-21T10:54:00.946Z","repository":{"id":62451263,"uuid":"230789257","full_name":"ragzy15/PublisherKit","owner":"ragzy15","description":"An open source implementation of Apple's Combine framework for processing asynchronous events over time","archived":false,"fork":false,"pushed_at":"2021-01-30T14:59:53.000Z","size":996,"stargazers_count":7,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-21T10:53:26.974Z","etag":null,"topics":["carthage","cocoapods","combine","combine-framework","ios","macos","observer","publisher-subscriber","reactive","reactive-programming","swift","swift-package-manager","tvos","watchos","xcode"],"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/ragzy15.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}},"created_at":"2019-12-29T18:39:05.000Z","updated_at":"2023-03-02T11:16:07.000Z","dependencies_parsed_at":"2022-11-01T23:45:27.000Z","dependency_job_id":null,"html_url":"https://github.com/ragzy15/PublisherKit","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ragzy15/PublisherKit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ragzy15%2FPublisherKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ragzy15%2FPublisherKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ragzy15%2FPublisherKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ragzy15%2FPublisherKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ragzy15","download_url":"https://codeload.github.com/ragzy15/PublisherKit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ragzy15%2FPublisherKit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280248570,"owners_count":26297925,"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-10-21T02:00:06.614Z","response_time":58,"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":["carthage","cocoapods","combine","combine-framework","ios","macos","observer","publisher-subscriber","reactive","reactive-programming","swift","swift-package-manager","tvos","watchos","xcode"],"created_at":"2025-10-21T10:53:59.915Z","updated_at":"2025-10-21T10:54:00.932Z","avatar_url":"https://github.com/ragzy15.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Publisher Kit\n\n![Platforms](https://img.shields.io/badge/platforms-iOS%20%7C%20macOS%20%7C%20tvOS%20%7C%20watchOS-333333.svg)\n![Languages](https://img.shields.io/badge/languages-swift-orange.svg)\n[![Swift Package Manager compatible](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/PublisherKit.svg)](https://img.shields.io/cocoapods/v/PublisherKit.svg)\n\n## Overview\n\nPublisherKit provides a declarative Swift API for processing asynchronous events over time. It is an open source version of Apple’s Combine Framework with many other additions.\n\nThe goal of this project is to provide a compatible, reliable and efficient implementation of Combine Framework that can be used on Apple’s operating systems older than macOS 10.15, iOS 13, tvOS 13 and watchOS 6.\n\nTo know more about Combine Framework, refer to Apple's Documentation [here](https://developer.apple.com/documentation/combine).\n\n## Supported Platforms\n\n* Xcode 11 and above\n\n### Deployment Targets\n\n* iOS 8 and above\n* macOS (OS X) 10.10 and above\n* tvOS 9 and above\n* watchOS 3 and above\n\n## Installation\n\n### Swift Package Manager\n\nTo integrate PublisherKit into your project using [Swift Package Manager](https://swift.org/package-manager/), you can add the library as a dependency in Xcode (11 and above) – see the [docs](https://developer.apple.com/documentation/xcode/adding_package_dependencies_to_your_app). The package repository URL is:\n\n```bash\nhttps://github.com/ragzy15/PublisherKit.git\n```\n\nAlternatively, you can add PublisherKit as a dependency in your `Package.swift` file. For example:\n\n```swift\n// swift-tools-version:5.1\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"YourPackage\",\n    products: [\n        .library(\n            name: \"YourPackage\",\n            targets: [\"YourPackage\"]),\n    ],\n    dependencies: [\n        .package(url: \"https://github.com/ragzy15/PublisherKit.git\", from: \"4.0.2\"),\n    ],\n    targets: [\n        .target(\n            name: \"YourPackage\",\n            dependencies: [\"PublisherKit\"]),\n    ]\n)\n```\n\nYou can install by using swift package manager built into Xcode or clone the repository and add a sub project into your project.\n\n### CocoaPods\n\n[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects.\n\nIf you don't already have the Cocoapods gem installed, run the following command:\n\n```bash\n$ gem install cocoapods\n```\n\nTo integrate PublisherKit into your Xcode project using CocoaPods, specify it in your `Podfile`:\n\n```ruby\nsource 'https://github.com/CocoaPods/Specs.git'\nplatform :ios, '10.0'\nuse_frameworks!\n\npod 'PublisherKit', '~\u003e 4.0.2'\n```\n\nThen, run the following command:\n\n```bash\n$ pod install\n```\n\n### Carthage\n\n[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that automates the process of adding frameworks to your application.\n\nYou can install Carthage with [Homebrew](http://brew.sh/) using the following command:\n\n```bash\n$ brew update\n$ brew install carthage\n```\n\nTo integrate PublisherKit into your Xcode project using Carthage, specify it in your `Cartfile`:\n\n```ogdl\ngithub \"ragzy15/PublisherKit\"\n```\n\n## Usage\n\n```swift\nsearchTextField.textDidChangePublisher\n    .debounce(for: .milliseconds(300), scheduler: DispatchQueue.main)\n    .compactMap { (text) -\u003e String? in\n        text.isEmpty ? nil : text\n    }\n    .removeDuplicates()\n    .flatMap { (text) -\u003e AnyPublisher\u003cSearchResults, Never\u003e in\n        self.search(with: text)\n    }\n    .receive(on: DispatchQueue.main)\n    .sink { (results) in\n        print(results)\n    }\n    .store(in: \u0026cancellables)\n\n```\nThere is also a demo project included.\n\n## Communication\n\n* Please open an issue if you find a bug or have a feature request.\n* Please submit a pull request if you would like to contribute (some tests would be nice).\n\nThanks ;)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fragzy15%2Fpublisherkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fragzy15%2Fpublisherkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fragzy15%2Fpublisherkit/lists"}