{"adoption": {"forks": 193, "observed_at": "2026-08-28T04:07:05.530816+00:00", "stars": 2629}, "canonical_url": "https://ross.abutalabs.com/products/viewinspector", "card": {"archived": false, "artifact_type": "library", "description": "Runtime introspection and unit testing of SwiftUI views", "domain": ["testing", "frontend", "developer-tools"], "enriched": true, "function": ["testing", "developer-tools"], "health_score": 94, "homepage": null, "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["nalexn/ViewInspector"], "name": "nalexn/ViewInspector", "platform": [], "pushed_at": "2026-08-22T13:04:54+00:00", "repo": "nalexn/ViewInspector", "stars": 2629, "tags": ["swiftui", "unit-testing", "runtime-introspection", "view-hierarchy", "xctest", "ios", "macos", "swift"], "topics": ["swiftui", "swiftui-views", "unit-testing", "runtime-typechecking", "best-practices", "swift", "swift5"], "urls": [], "use_cases": ["unit test SwiftUI views", "find views of a specific type in a SwiftUI hierarchy", "read the internal state of standard SwiftUI views like Text", "verify custom view state such as @State and @ObservedObject", "simulate button taps and trigger callbacks in tests", "write asynchronous tests for views with onAppear callbacks"], "what_it_is": "A Swift library for unit testing SwiftUI views by traversing the view hierarchy at runtime and exposing the underlying view structs. It uses official Swift reflection APIs to inspect standard and custom views, read their state, and simulate user interactions.", "when_to_avoid": ["you need UI rendering or pixel-level snapshot tests rather than structural inspection", "your project does not use SwiftUI", "you need to add it to the production target - it is test-target only"], "when_to_choose": ["you want to unit test SwiftUI view logic and hierarchy without snapshot testing", "you need to assert on view attributes, state, or bindings in XCTest", "you want to simulate user interactions like taps in SwiftUI tests"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/viewinspector", "repo": "nalexn/ViewInspector", "role": "main", "score": 73}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.530816+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:19:40.739828+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ba33c6bf1bc0cf767215fa73f8fd3d3f6d69c0aaeaf9d0eb40fd1e76668bfe1f", "fetched_at": "2026-08-28T04:07:05.530816+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nalexn/ViewInspector"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.530816+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:19:40.739828+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ba33c6bf1bc0cf767215fa73f8fd3d3f6d69c0aaeaf9d0eb40fd1e76668bfe1f", "fetched_at": "2026-08-28T04:07:05.530816+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nalexn/ViewInspector"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:19:40.739828+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ba33c6bf1bc0cf767215fa73f8fd3d3f6d69c0aaeaf9d0eb40fd1e76668bfe1f", "fetched_at": "2026-08-28T04:07:05.530816+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nalexn/ViewInspector"}], "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:07:05.530816+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.530816+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.530816+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:19:40.739828+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ba33c6bf1bc0cf767215fa73f8fd3d3f6d69c0aaeaf9d0eb40fd1e76668bfe1f", "fetched_at": "2026-08-28T04:07:05.530816+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nalexn/ViewInspector"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.530816+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.530816+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:19:40.739828+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ba33c6bf1bc0cf767215fa73f8fd3d3f6d69c0aaeaf9d0eb40fd1e76668bfe1f", "fetched_at": "2026-08-28T04:07:05.530816+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nalexn/ViewInspector"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.530816+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.530816+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.530816+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:19:40.739828+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ba33c6bf1bc0cf767215fa73f8fd3d3f6d69c0aaeaf9d0eb40fd1e76668bfe1f", "fetched_at": "2026-08-28T04:07:05.530816+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nalexn/ViewInspector"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.530816+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:05.530816+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:19:40.739828+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ba33c6bf1bc0cf767215fa73f8fd3d3f6d69c0aaeaf9d0eb40fd1e76668bfe1f", "fetched_at": "2026-08-28T04:07:05.530816+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nalexn/ViewInspector"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:19:40.739828+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ba33c6bf1bc0cf767215fa73f8fd3d3f6d69c0aaeaf9d0eb40fd1e76668bfe1f", "fetched_at": "2026-08-28T04:07:05.530816+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nalexn/ViewInspector"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:19:40.739828+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ba33c6bf1bc0cf767215fa73f8fd3d3f6d69c0aaeaf9d0eb40fd1e76668bfe1f", "fetched_at": "2026-08-28T04:07:05.530816+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nalexn/ViewInspector"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:19:40.739828+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "ba33c6bf1bc0cf767215fa73f8fd3d3f6d69c0aaeaf9d0eb40fd1e76668bfe1f", "fetched_at": "2026-08-28T04:07:05.530816+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nalexn/ViewInspector"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 24}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2482, "days_push": 11, "days_rel": 346, "gap_med": 111, "n_releases_24m": 4}, "score": 73, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}