{"id":13778049,"url":"https://github.com/Mijick/Timer","last_synced_at":"2025-05-11T11:34:45.897Z","repository":{"id":196718157,"uuid":"694753102","full_name":"Mijick/Timer","owner":"Mijick","description":"Modern API for Timer","archived":false,"fork":false,"pushed_at":"2024-08-17T22:23:32.000Z","size":14,"stargazers_count":97,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-19T06:37:29.075Z","etag":null,"topics":["ios","ios-sdk","ios-swift","spm","swift","swift-package","swift-package-manager","swift5","swiftlibrary","swiftui","swiftui-framework","timer"],"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/Mijick.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"mijick","custom":null}},"created_at":"2023-09-21T16:11:04.000Z","updated_at":"2024-10-06T09:22:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"205d9611-c801-4a18-8ca0-c407c599d833","html_url":"https://github.com/Mijick/Timer","commit_stats":null,"previous_names":["mijick/timer"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mijick%2FTimer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mijick%2FTimer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mijick%2FTimer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mijick%2FTimer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mijick","download_url":"https://codeload.github.com/Mijick/Timer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225043274,"owners_count":17411955,"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":["ios","ios-sdk","ios-swift","spm","swift","swift-package","swift-package-manager","swift5","swiftlibrary","swiftui","swiftui-framework","timer"],"created_at":"2024-08-03T18:00:50.761Z","updated_at":"2025-05-11T11:34:45.881Z","avatar_url":"https://github.com/Mijick.png","language":"Swift","readme":"\u003c!--Hero Image--\u003e\n\u003cp align=\"center\"\u003e\n    \u003cpicture\u003e \n      \u003cimg alt=\"MijickTimer Hero\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/hero.png\" width=\"100%\"\u003e\n    \u003c/picture\u003e\n\u003c/p\u003e\n\n\n\u003c!--Text Header--\u003e\n\u003cp\u003e\n    \u003ch3 align=\"center\"\u003eTimers made simple\u003c/h3\u003e\n    \u003cp align=\"center\"\u003eEasy to use yet powerful Timer library. Keep your code clean.\u003c/p\u003e\n\u003c/p\u003e\n\n\n\u003c!--Links: Demo, Wiki--\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://link.mijick.com/timer-demo\" rel=\"nofollow\"\u003e\u003cb\u003eTry demo we prepared\u003c/b\u003e\u003c/a\u003e\n    |\n    \u003ca href=\"https://link.mijick.com/timer-wiki\" rel=\"nofollow\"\u003e\u003cb\u003eFramework documentation\u003c/b\u003e\u003c/a\u003e\n    |\n    \u003ca href=\"https://link.mijick.com/timer-roadmap\" rel=\"nofollow\"\u003e\u003cb\u003eRoadmap\u003c/b\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\n\u003c!--Labels--\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Labels\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/Labels/labels.svg\"/\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\n\u003c!--GIFs--\u003e\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003eMultiple Timers\u003c/th\u003e\n            \u003cth\u003eState Control\u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003cimg alt=\"Timer Examples\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/GIFs/Timer-1.gif\"/\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003cimg alt=\"Timer Examples\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/GIFs/Timer-2.gif\"/\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n\n\u003c!--Buttons--\u003e\n\u003cp\u003e\n    \u003c!--Discord--\u003e\n    \u003ca href=\"https://link.mijick.com/discord\"\u003e\n        \u003cimg alt=\"Join us on Discord\" src=\"https://github.com/Mijick/Assets/blob/main/Common/Buttons/discord.png\" height=\"40px\"\u003e\n    \u003c/a\u003e\n    \u003c!--Linkedin--\u003e\n    \u003ca href=\"https://link.mijick.com/linkedin\"\u003e\n        \u003cimg alt=\"Follow us on LinkedIn\" src=\"https://github.com/Mijick/Assets/blob/main/Common/Buttons/linkedin.png\" height=\"40px\"\u003e\n    \u003c/a\u003e\n    \u003c!--GitHub--\u003e\n    \u003ca href=\"https://link.mijick.com/github\"\u003e\n        \u003cimg alt=\"See our other frameworks\" src=\"https://github.com/Mijick/Assets/blob/main/Common/Buttons/github.png\" height=\"40px\"\u003e\n    \u003c/a\u003e\n    \u003c!--Medium--\u003e\n    \u003ca href=\"https://link.mijick.com/medium\"\u003e\n        \u003cimg alt=\"Read us on Medium\" src=\"https://github.com/Mijick/Assets/blob/main/Common/Buttons/medium.png\" height=\"40px\"\u003e\n    \u003c/a\u003e\n    \u003c!--Buymeacoffee--\u003e\n    \u003ca href=\"https://link.mijick.com/buymeacoffee\"\u003e\n        \u003cimg alt=\"Buy us a coffee\" src=\"https://github.com/Mijick/Assets/blob/main/Common/Buttons/buymeacoffee.png\" height=\"40px\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003c!--Features table--\u003e\n# ✨ Features\n\u003ctable\u003e\n        \u003ctbody\u003e\n            \u003ctr\u003e\n              \u003ctd\u003e \n                ⏳\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Countdown Timer (Down-Going)\n              \u003c/td\u003e\n            \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e \n                ⏱️\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Count-Up Timer (Elapsed Time)\n              \u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e \n                ⏸️\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Pause Timer\n              \u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e \n                ▶️\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Resume Timer\n              \u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e \n                ⏭️\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Skip Timer\n              \u003c/td\u003e\n          \u003c/tr\u003e\n          \u003ctr\u003e\n              \u003ctd\u003e \n                ⏮️\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Cancel Timer\n              \u003c/td\u003e\n          \u003c/tr\u003e\n           \u003ctr\u003e\n              \u003ctd\u003e \n              ⚡\n              \u003c/td\u003e\n              \u003ctd\u003e\n                 Reactive programming friendly\n              \u003c/td\u003e\n          \u003c/tr\u003e\n        \u003c/tbody\u003e\n    \u003c/table\u003e\n\n\n\u003c!--Description--\u003e\n# ☀️ What is MijickTimer?\nMijickTimer library is Swift-based library that offers powerful and flexible timer features for iOS and macOS and visionOS apps. It allows to create both countdown and count-up timers with enhanced state management and observation options. \n\n\u003cp\u003e\n    \u003ch3\u003eCount-Up Timer\u003c/h3\u003e\n    \u003cp\u003e Track elapsed time seamlessly with a count-up timer. Ideal for productivity, logging or workout apps.\u003c/p\u003e\n    \u003cp\u003e Take a look at the implementation details \u003ca href=\"https://github.com/Mijick/Timer/wiki/Timer-Start-Up\"\u003ehere\u003c/a\u003e. \u003c/p\u003e\n\u003c/p\u003e\n\u003cimg alt=\"A demonstration of the code used to compare the implementation of the native iOS timer framework with the custom MijickTimer.\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/Code/less-code.png\" width=\"100%\"\u003e\n\n\u003cp\u003e\n    \u003ch3\u003eCountdown Timer\u003c/h3\u003e\n    \u003cp\u003e Easily create countdown timers to track remaining time. Perfect for games, events or task apps.\u003c/p\u003e\n    \u003cp\u003e Take a look at the implementation details \u003ca href=\"https://github.com/Mijick/Timer/wiki/Timer-Start-Up\"\u003ehere\u003c/a\u003e. \u003c/p\u003e\n\u003c/p\u003e\n\u003cimg alt=\"An illustration of how to create a countdown timer using only a few lines of code with the MijickTimer library.\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/Code/countdown.png\" width=\"100%\"\u003e\n\n\u003cp\u003e\n    \u003ch3\u003eControl Timer state\u003c/h3\u003e\n    \u003cp\u003e Pause timers and resume them later without losing progress. It also allows to skip and cancel the progress. \u003c/p\u003e\n    \u003cp\u003e Take a look at the implementation details \u003ca href=\"https://github.com/Mijick/Timer/wiki/Timer-State-Control\"\u003ehere\u003c/a\u003e. \u003c/p\u003e\n    \u003c/p\u003e\n\u003c/p\u003e\n\u003cimg alt=\"Demonstrates code for controlling the Timer state via the MijickTimer library: stop, pause, resume, skip, and cancel or stop the Timer.\", src=\"https://github.com/Mijick/Assets/blob/main/Timer/Code/state-control.png\" width=\"100%\"\u003e\n\n\u003ch3\u003eObserve Timer State\u003c/h3\u003e\n\u003cp\u003e \n  \u003cp\u003e Monitor timer state with a variety of different approaches: binding, callbacks, combine, state value updates.\u003c/p\u003e\n  \u003cp\u003e Take a look at the implementation details \u003ca href=\"https://github.com/Mijick/Timer/wiki/Timer-State-Observing\"\u003ehere\u003c/a\u003e. \u003c/p\u003e\n\u003c/p\u003e\n\u003cimg alt=\"The code illustrates various methods for monitoring the current timer state, including binding, callbacks, combining, and state observation\" src=\"https://github.com/Mijick/Assets/blob/main/Timer/Code/state-observe.png\" width=\"100%\"\u003e\n\n\n\u003c!--Why to choose description--\u003e\n# ✅ Why MijickTimer?\n\u003ch4\u003eMultiple Apple Platform Support:\u003c/h4\u003e\n\n* iPhone, iPad. Requires iOS 13.0+  .\n* Mac. Requires macOS 10.15+.\n* Apple Vision Pro. Requires visionOS 1.0+.\n  \n\u003ch4\u003eBuilt for Swift 6:\u003c/h4\u003e\n    \n* Modern, efficient, and designed for performance.\n  \n\u003ch4\u003eAll-in-One Timer Solution:\u003c/h4\u003e\n    \n* Handles countdowns, count-ups, pausing, resuming and state management seamlessly.\n  \n\u003ch4\u003eVersatile Observation:\u003c/h4\u003e\n    \n*  Choose callbacks, bindings or Combine for the implementation that works best for you.\n*  Provides the ability to access the state of a specific timer from any part of the code base.\n\n\u003ch4\u003eIt's just a cool library 😎\u003c/h4\u003e\n\n\n\u003c!--Documentation--\u003e\n# 🚀 How to use it?\nVisit the framework's [documentation](https://link.mijick.com/timer-wiki) to learn how to integrate your project with **MijickTimer**. \u003cbr\u003e\nSee for yourself how does it work by cloning [project](https://link.mijick.com/timer-demo) we created\n\n\n\u003c!--Community--\u003e\n# 🍀 Community\nJoin the welcoming community of developers on [Discord](https://link.mijick.com/discord).\n\n\n\u003c!--Contribution--\u003e\n# 🌼 Contribute\nTo contribute a feature or idea to **MijickTimer**, create an [issue](https://github.com/Mijick/Timer/issues/new?assignees=FulcrumOne\u0026labels=state%3A+inactive%2C+type%3A+feature\u0026projects=\u0026template=🚀-feature-request.md\u0026title=%5BFREQ%5D) explaining your idea or bring it up on [Discord](https://discord.com/invite/dT5V7nm5SC). \u003cbr\u003e\nIf you find a bug, please create an [issue](https://github.com/Mijick/Timer/issues/new?assignees=FulcrumOne%2C+jay-jay-lama\u0026labels=state%3A+inactive%2C+type%3A+bug\u0026projects=\u0026template=🦟-bug-report.md\u0026title=%5BBUG%5D). \u003cbr\u003e\nIf you would like to contribute, please refer to the [Contribution Guidelines](https://link.mijick.com/contribution-guidelines).\n\n\n\u003c!--Sponsorship--\u003e\n# 💜 Sponsor our work\nSupport our work by [becoming a backer](https://link.mijick.com/buymeacoffee).\n\n","funding_links":["https://buymeacoffee.com/mijick"],"categories":["Extensions"],"sub_categories":["Content"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMijick%2FTimer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMijick%2FTimer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMijick%2FTimer/lists"}