{"id":23033958,"url":"https://github.com/freenowtech/sensor","last_synced_at":"2025-06-25T17:04:33.090Z","repository":{"id":41393130,"uuid":"159844526","full_name":"freenowtech/Sensor","owner":"freenowtech","description":"A fresh look at iOS development","archived":false,"fork":false,"pushed_at":"2022-08-19T13:00:04.000Z","size":42952,"stargazers_count":39,"open_issues_count":0,"forks_count":6,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-11-18T05:33:25.652Z","etag":null,"topics":["architecture","cocoapods","ios","mobile","mobile-development","mytaxi","reactive","rxswift","swift","swift-package-manager"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/freenowtech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-30T15:45:03.000Z","updated_at":"2023-07-23T13:00:46.000Z","dependencies_parsed_at":"2022-09-18T06:05:38.810Z","dependency_job_id":null,"html_url":"https://github.com/freenowtech/Sensor","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freenowtech%2FSensor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freenowtech%2FSensor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freenowtech%2FSensor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freenowtech%2FSensor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/freenowtech","download_url":"https://codeload.github.com/freenowtech/Sensor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229843383,"owners_count":18132900,"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":["architecture","cocoapods","ios","mobile","mobile-development","mytaxi","reactive","rxswift","swift","swift-package-manager"],"created_at":"2024-12-15T16:28:16.684Z","updated_at":"2024-12-15T16:28:17.117Z","avatar_url":"https://github.com/freenowtech.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Sensor](Docs/images/Sensor.png)\n\n# Sensor\n![Swift 5](https://img.shields.io/badge/Swift-5-orange.svg)\n![Cocoapods compatible](https://img.shields.io/cocoapods/v/Sensor.svg)\n![Swift Package Manager compatible](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg)\n\nNowadays, mobile applications become increasingly powerful and complex, rich of features that try to improve the user's experience. But power is nothing without control: the more powerful (and complex) the app is, the highest the chance it can end up in an inconsistent state.\n\nThe good news is our **Sensor Architecture**: an elegant and a good way to organise your code when working with complex applications.\nWith the ability to define all the possible states, of each feature of a mobile application, the chances to end up in an inconsistent state are most unlikely. Thanks to the concept of the State Machine and its deterministic behaviour, we can be sure that all the transitions from a state to another state are regulated by a finite set of events that can happen.\n\nThe **Sensor** framework comes with batteries included so you can start writing safe apps straight away.\n\nThe **SensorTest** framework includes some goodies to help you write unit tests in a breeze.\n\n## Learn more\n**[Read the docs](Docs/sensor.md)**\n\n[Video with a presentation of this architecture](https://www.youtube.com/watch?v=Dp2LQo2DOcg\u0026t=15s)\n\n[Presentation used on the video](https://github.com/freenowtech/Sensor/blob/master/CodingTestableAppsOnSteroids.pdf)\n\n[How to contribute to Sensor](CONTRIBUTING.md)\n\n## Setup\n### Cocoapods\nTo use the **Sensor** framework, add the following line to the target of your app on your Podfile:\n\n`pod 'Sensor', '0.1.1'`\n\nIn your app, add the following import:\n\n`import Sensor`\n\nTo use the **SensorTest** framework, add the following line to the test target on your Podfile:\n\n`pod 'SensorTest', '0.1.1'`\n\nIn your tests, add the following import:\n\n`import SensorTest`\n\n### Swift Package Manager\nAdd the following line to your package dependencies:\n\n`.package(url: \"https://github.com/freenowtech/Sensor.git\", from: \"0.1.1\"),`\n\nAdd `Sensor` to your main target dependencies. Add `SensorTest` to your test target dependencies.\n\nThe minimum macOS version is 10.13.\n\nExample `Package.swift` file:\n```swift\n// swift-tools-version:5.0\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: \"Package\",\n    platforms: [\n       .macOS(.v10_13),\n    ],\n    dependencies: [\n        .package(url: \"https://github.com/freenowtech/Sensor.git\", from: \"0.1.1\"),\n    ],\n    targets: [\n        .target(\n            name: \"Target\",\n            dependencies: [\"Sensor\"]),\n        .testTarget(\n            name: \"TestTarget\",\n            dependencies: [\"Target\", \"SensorTest\"]),\n    ]\n)\n```\n\n## Contributors\n* Stefan Bieschewski\n* David Cortés [\u003cimg src=\"Docs/images/SocialIcons/GitHub-Mark-32px.png\" width=\"15\" height=\"15\"\u003e](https://github.com/davebcn87)\n* Fabio Cuomo\n* Mounir Dellagi\n* Lluís Gómez [\u003cimg src=\"Docs/images/SocialIcons/GitHub-Mark-32px.png\" width=\"15\" height=\"15\"\u003e](https://github.com/lluisgh28)\n* Carlos Nuñez\n* Ferran Pujol [\u003cimg src=\"Docs/images/SocialIcons/GitHub-Mark-32px.png\" width=\"15\" height=\"15\"\u003e](https://github.com/ferranpujolcamins) [\u003cimg src=\"Docs/images/SocialIcons/Twitter_Social_Icon_Circle_Color.png\" width=\"15\" height=\"15\"\u003e](https://twitter.com/ferranpujolca)\n* Adrian Zdanowicz\n\n\nProject milestones:\n\n* David Cortés \u0026 Stefan Bieschewski\n    * First version of a reactive state management without feedback loop.\n* Stefan Bieschewski\n    * First version of Driver+Reducible using RxFeedback.\n* Mounir Dellagi\n    * First example using Sensor with a login app.\n* Stefan Bieschewski\n    * Added Context and TriggerableEffects as enums to make the reducer testable.\n* Lluís Gómez\n    * Preparing examples with a real app feature.\n* David Cortés\n    * Make SensorTest show a diff for unequal values.\n* Ferran Pujol\n    * SensorTest improvements and Sensor unit tests.\n* Ferran Pujol\n    * Add unique ID to effects so they can be triggered more than once.\n* Ferran Pujol\n    * Sensor DSL \u0026 Sensor 0.2.0 changes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreenowtech%2Fsensor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffreenowtech%2Fsensor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreenowtech%2Fsensor/lists"}