{"adoption": {"forks": 292, "observed_at": "2026-08-28T04:04:08.560864+00:00", "stars": 1253}, "canonical_url": "https://ross.abutalabs.com/products/mod-pbxproj", "card": {"archived": false, "artifact_type": "library", "description": "A python module to manipulate XCode projects", "domain": ["developer-tools", "cross-platform"], "enriched": true, "function": ["parser", "developer-tools", "cli"], "health_score": 59, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["kronenthaler/mod-pbxproj"], "name": "kronenthaler/mod-pbxproj", "platform": ["python", "cli", "cross-platform"], "pushed_at": "2026-02-04T14:25:15+00:00", "repo": "kronenthaler/mod-pbxproj", "stars": 1253, "tags": ["xcode", "pbxproj", "ios", "project-files", "build-automation", "automation"], "topics": ["xcode", "pbxproj", "python", "library", "cli", "hacktoberfest"], "urls": [], "use_cases": ["automatically add new source files to an Xcode project from a script", "modify build settings across many Xcode projects in CI", "generate or patch .pbxproj files for iOS/macOS app scaffolding tools", "merge or diff Xcode project file changes programmatically", "manage CocoaPods-style file references without opening Xcode"], "what_it_is": "A Python library for programmatically parsing and manipulating Xcode project files (.pbxproj). It lets scripts add, remove, or modify files, targets, and build settings in Xcode projects without opening the IDE.", "when_to_avoid": ["you need to build or compile Xcode projects (use xcodebuild instead)", "you work with non-Apple project formats", "you need a GUI for editing project files"], "when_to_choose": ["you need to script changes to Xcode project files in Python", "you're building a code generator or scaffolding tool for iOS/macOS apps", "you want to automate project file edits in CI pipelines"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mod-pbxproj", "repo": "kronenthaler/mod-pbxproj", "role": "main", "score": 52}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.560864+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T05:07:29.068667+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3bfdd0456733fece0f7ccf22eb4db2d28f998aef4c8b6df6d4bc41ddbc3c451", "fetched_at": "2026-08-29T12:18:12.940579+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/mod-pbxproj/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.560864+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T05:07:29.068667+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3bfdd0456733fece0f7ccf22eb4db2d28f998aef4c8b6df6d4bc41ddbc3c451", "fetched_at": "2026-08-29T12:18:12.940579+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/mod-pbxproj/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T05:07:29.068667+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3bfdd0456733fece0f7ccf22eb4db2d28f998aef4c8b6df6d4bc41ddbc3c451", "fetched_at": "2026-08-29T12:18:12.940579+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/mod-pbxproj/json"}], "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:04:08.560864+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.560864+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.560864+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T05:07:29.068667+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3bfdd0456733fece0f7ccf22eb4db2d28f998aef4c8b6df6d4bc41ddbc3c451", "fetched_at": "2026-08-29T12:18:12.940579+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/mod-pbxproj/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.560864+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.560864+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T05:07:29.068667+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3bfdd0456733fece0f7ccf22eb4db2d28f998aef4c8b6df6d4bc41ddbc3c451", "fetched_at": "2026-08-29T12:18:12.940579+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/mod-pbxproj/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.560864+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.560864+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.560864+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T05:07:29.068667+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3bfdd0456733fece0f7ccf22eb4db2d28f998aef4c8b6df6d4bc41ddbc3c451", "fetched_at": "2026-08-29T12:18:12.940579+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/mod-pbxproj/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.560864+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.560864+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T05:07:29.068667+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3bfdd0456733fece0f7ccf22eb4db2d28f998aef4c8b6df6d4bc41ddbc3c451", "fetched_at": "2026-08-29T12:18:12.940579+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/mod-pbxproj/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T05:07:29.068667+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3bfdd0456733fece0f7ccf22eb4db2d28f998aef4c8b6df6d4bc41ddbc3c451", "fetched_at": "2026-08-29T12:18:12.940579+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/mod-pbxproj/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T05:07:29.068667+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3bfdd0456733fece0f7ccf22eb4db2d28f998aef4c8b6df6d4bc41ddbc3c451", "fetched_at": "2026-08-29T12:18:12.940579+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/mod-pbxproj/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T05:07:29.068667+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3bfdd0456733fece0f7ccf22eb4db2d28f998aef4c8b6df6d4bc41ddbc3c451", "fetched_at": "2026-08-29T12:18:12.940579+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/mod-pbxproj/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 65, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_readme"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4912, "days_push": 210, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 52, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}