{"adoption": {"forks": 145, "observed_at": "2026-08-28T04:03:24.884157+00:00", "stars": 1057}, "canonical_url": "https://ross.abutalabs.com/products/somotiondetector", "card": {"archived": false, "artifact_type": "library", "description": "Simple library to detect motion type (walking, running, automotive) and count users steps. This library will make motion detection much more easily.", "domain": ["mobile-development"], "enriched": true, "function": ["machine-learning"], "health_score": 20, "homepage": null, "language": "Objective-C", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["matghazaryan/SOMotionDetector"], "name": "matghazaryan/SOMotionDetector", "platform": [], "pushed_at": "2024-08-31T02:27:26+00:00", "repo": "matghazaryan/SOMotionDetector", "stars": 1057, "tags": ["motion-detection", "step-counting", "coremotion", "corelocation", "pedometer", "activity-recognition", "sensor-fusion", "ios", "objective-c"], "topics": [], "urls": [], "use_cases": ["detect whether the user is walking, running, or driving in an iOS app", "count user steps with a pedometer library", "track motion activity in the background and relaunch the app from killed state", "build a fitness tracking feature without needing the M7 chip", "get callbacks when motion type or location changes", "customize speed thresholds for walking, running, and automotive detection"], "what_it_is": "An Objective-C library for iOS that detects user motion type (not moving, walking, running, automotive) and counts steps using CoreLocation and CoreMotion data. It works on all iOS devices without requiring the M7 coprocessor chip.", "when_to_avoid": ["you are building for Android or cross-platform with a single codebase", "you need modern Swift-native APIs like CoreMotion's CMMotionActivityManager", "your minimum deployment target is above iOS 9 and you want actively maintained Swift alternatives", "you need highly accurate activity recognition that dedicated hardware sensors provide"], "when_to_choose": ["you need motion type detection on older iOS devices without an M7 coprocessor", "you want a simple drop-in Objective-C library with block-based callbacks", "you need background location updates and app relaunch from killed state", "you want customizable speed thresholds for activity classification"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/somotiondetector", "repo": "matghazaryan/SOMotionDetector", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:57:59.286814+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1d6a8592da9e8b36c2a449b6a2cf89abfd4ae5dc8e849b0cad53cccefc0d7472", "fetched_at": "2026-08-28T04:03:24.884157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/matghazaryan/SOMotionDetector"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:57:59.286814+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1d6a8592da9e8b36c2a449b6a2cf89abfd4ae5dc8e849b0cad53cccefc0d7472", "fetched_at": "2026-08-28T04:03:24.884157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/matghazaryan/SOMotionDetector"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:57:59.286814+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1d6a8592da9e8b36c2a449b6a2cf89abfd4ae5dc8e849b0cad53cccefc0d7472", "fetched_at": "2026-08-28T04:03:24.884157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/matghazaryan/SOMotionDetector"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:57:59.286814+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1d6a8592da9e8b36c2a449b6a2cf89abfd4ae5dc8e849b0cad53cccefc0d7472", "fetched_at": "2026-08-28T04:03:24.884157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/matghazaryan/SOMotionDetector"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:57:59.286814+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1d6a8592da9e8b36c2a449b6a2cf89abfd4ae5dc8e849b0cad53cccefc0d7472", "fetched_at": "2026-08-28T04:03:24.884157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/matghazaryan/SOMotionDetector"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:57:59.286814+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1d6a8592da9e8b36c2a449b6a2cf89abfd4ae5dc8e849b0cad53cccefc0d7472", "fetched_at": "2026-08-28T04:03:24.884157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/matghazaryan/SOMotionDetector"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:24.884157+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:57:59.286814+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1d6a8592da9e8b36c2a449b6a2cf89abfd4ae5dc8e849b0cad53cccefc0d7472", "fetched_at": "2026-08-28T04:03:24.884157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/matghazaryan/SOMotionDetector"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:57:59.286814+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1d6a8592da9e8b36c2a449b6a2cf89abfd4ae5dc8e849b0cad53cccefc0d7472", "fetched_at": "2026-08-28T04:03:24.884157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/matghazaryan/SOMotionDetector"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:57:59.286814+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1d6a8592da9e8b36c2a449b6a2cf89abfd4ae5dc8e849b0cad53cccefc0d7472", "fetched_at": "2026-08-28T04:03:24.884157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/matghazaryan/SOMotionDetector"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:57:59.286814+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1d6a8592da9e8b36c2a449b6a2cf89abfd4ae5dc8e849b0cad53cccefc0d7472", "fetched_at": "2026-08-28T04:03:24.884157+00:00", "kind": "readme", "missing": false, "url": "https://github.com/matghazaryan/SOMotionDetector"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4562, "days_push": 733, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}