{"id":17335850,"url":"https://github.com/malinskiy/xcresult-json","last_synced_at":"2025-03-27T07:23:14.534Z","repository":{"id":147818243,"uuid":"584117950","full_name":"Malinskiy/xcresult-json","owner":"Malinskiy","description":"Command-line utility to transform xcresult into machine-readable format for consumption outside of Apple's ecosystem","archived":false,"fork":false,"pushed_at":"2023-01-05T15:11:41.000Z","size":1218,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-01T12:26:05.708Z","etag":null,"topics":["xcode","xcresult","xcresultbundle","xctest"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Malinskiy.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":["Malinskiy"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2023-01-01T12:54:43.000Z","updated_at":"2024-09-25T19:26:31.000Z","dependencies_parsed_at":"2023-05-27T14:45:21.142Z","dependency_job_id":null,"html_url":"https://github.com/Malinskiy/xcresult-json","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Malinskiy%2Fxcresult-json","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Malinskiy%2Fxcresult-json/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Malinskiy%2Fxcresult-json/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Malinskiy%2Fxcresult-json/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Malinskiy","download_url":"https://codeload.github.com/Malinskiy/xcresult-json/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245798871,"owners_count":20674044,"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":["xcode","xcresult","xcresultbundle","xctest"],"created_at":"2024-10-15T15:12:33.585Z","updated_at":"2025-03-27T07:23:14.508Z","avatar_url":"https://github.com/Malinskiy.png","language":"Rust","funding_links":["https://github.com/sponsors/Malinskiy"],"categories":[],"sub_categories":[],"readme":"# xcresult-json\n\nA commmand-line utility to convert Xcode's proprietary xcresult bundle into a readable format for consumption outside of Apple's ecosystem.\n\n# Usage\nAssuming `/path/to/x.xcresult` is a valid path to your test results:\n```sh\n$ xcresult-json --input /path/to/x.xcresult convert --output /path/to/out\n```\n\n# Installation\n\n```\n$ brew tap malinskiy/tap\n$ brew install xcresult-json\n```\n\nor you can manually download a package from [GitHub Releases](https://github.com/Malinskiy/xcresult-json/releases).\n\n# Requirements\nThis tool is designed to run only within Apple's macOS environment.\n\n# Design\n\nWhile it's certainly possible to extract the same data from xcresult without access to macOS, potential breakage of the internal format makes this an unwise choice.\n\nUnderlying design of xcresult includes (as of Xcode 14) a [CAS](https://en.wikipedia.org/wiki/Content-addressable_storage) as well as a generic key-value pair meta information in the form of **Info.plist**.\n\n`xcresult-json` is designed to be as minimally-invasive as possible to optimize with future versions of xcresult format. To convert the xcresult `xcresult-json` does three things:\n\n1. Utilizes `xcresulttool` provided by Xcode distribution to extract entries from CAS\n2. For structured objects `xcresulttool` exposes a JSON formatted output. If any references to other structured objects are found - `xcresult-json` will embed them into the same JSON to minimize the number of times you need to lookup entries in CAS.\n3. For unstructured object (attachments of any sort like screenshots or diagnostic logs) raw binary is unpacked (currently the objects seems to be compressed using [Zstandard](http://facebook.github.io/zstd/)) using same `xcresulttool` and placed into a folder **cas** with the same reference id as the original xcresult report\n\nExample output structure:\n```sh\n$ tree out/1017af07-cba3-4c79-ab87-d4c959bda03b\nout/1017af07-cba3-4c79-ab87-d4c959bda03b\n|-- cas\n|   |-- 0~0xGbDwguplxVFNfSZgrqYIA4R_LMLZWpWxWXWRXXkQH2mRHGJikMyMrFB5VPYtUIggBKqU9v2IYZy90v7DVC2A==\n|   |-- 0~3d6ZMvyj5amSQlg9L0WwjX_E6FsX_i74TAx2bb0TQfiIibjIFjkWZKskLsOMLgleNEzHK5Y1h2AAgLGw0rI0hw==\n|   |-- 0~DO5sZbikU180sQSd1X3o-BsQSpXDL_jVDH__Yjvaw_djldyH8iTEyeFtJe9HoJb7El1mnDRnYZUUZSEmktbH5Q==\n|   |-- 0~UhbINgK1oKc9IBEMsHAaeTIKRE0yONa_AdrNAiQkPcW2R9fpVi53wea9Woo_SVRG66ZFt-oXPI-ULdoopUQPNw==\n|   |-- 0~c3www9rMSmVn4sPax9X7YeIVKp4mk9C2bSKNQco5dFMroJ5BhdsGJ14FeYsKNmC9e2DXNazef30OMPJFddiRog==\n|   |-- 0~jOeQxW4ylp5Ax-ULmKd0CjOh2HlEKpIic-cYenNfQiJ0Lei5xoBtKFzlfArFhN_Cy8sGktNevO2qfOZxDGY-ZA==\n|   `-- 0~uQWRV2bhbOXpQwbeX5Sh0ESxXKvsFnzN5HgBhDnqFWaFV6uQ6rAIZywjK7e6t6iisWdY94HzaS7kWJWSCS2CGw==\n`-- xcresult.json\n\n1 directory, 8 files\n\n```\n\nWhere `xcresult.json` is the unwrapped structured object about the test run execution and the cas folder contains raw assets references by xcresult.json\n\n# Help\n```sh\n$ xcresult-json convert --help\nUsage: xcresult-json --input \u003cINPUT\u003e convert --output \u003cOUTPUT\u003e\n\nOptions:\n  -o, --output \u003cOUTPUT\u003e  \n  -h, --help             Print help information\n```\n\n# License\n```\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; If not, see \u003chttp://www.gnu.org/licenses/\u003e\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalinskiy%2Fxcresult-json","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmalinskiy%2Fxcresult-json","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalinskiy%2Fxcresult-json/lists"}