{"id":96,"name":null,"description":"Flexible and fast xcodebuild formatter","url":"https://github.com/xcpretty/xcpretty","last_synced_at":"2026-04-30T16:30:33.342Z","repository":{"id":12383228,"uuid":"15035229","full_name":"xcpretty/xcpretty","owner":"xcpretty","description":"Flexible and fast xcodebuild formatter","archived":false,"fork":false,"pushed_at":"2025-03-26T19:42:24.000Z","size":3830,"stargazers_count":4034,"open_issues_count":120,"forks_count":284,"subscribers_count":60,"default_branch":"master","last_synced_at":"2026-04-20T00:14:16.144Z","etag":null,"topics":["ci","continuous-integration","ios"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xcpretty.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","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}},"created_at":"2013-12-09T01:31:14.000Z","updated_at":"2026-04-17T14:49:59.000Z","dependencies_parsed_at":"2024-02-26T01:48:58.216Z","dependency_job_id":"529e50c3-c027-4f7a-bf22-dc9bd5bf76c1","html_url":"https://github.com/xcpretty/xcpretty","commit_stats":{"total_commits":538,"total_committers":44,"mean_commits":"12.227272727272727","dds":0.6133828996282528,"last_synced_commit":"456604313faf4a1de6a4e687c2412eaf6097c4b0"},"previous_names":["supermarin/xcpretty","mneorr/xcpretty"],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/xcpretty/xcpretty","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xcpretty%2Fxcpretty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xcpretty%2Fxcpretty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xcpretty%2Fxcpretty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xcpretty%2Fxcpretty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xcpretty","download_url":"https://codeload.github.com/xcpretty/xcpretty/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xcpretty%2Fxcpretty/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32041483,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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"}},"owner":{"login":"xcpretty","name":"xcpretty","uuid":"22400238","kind":"organization","description":null,"email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/22400238?v=4","repositories_count":2,"last_synced_at":"2023-08-06T21:11:54.400Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/xcpretty","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-06T17:07:33.766Z","updated_at":"2023-08-06T21:11:54.410Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xcpretty","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xcpretty/repositories"},"packages":[],"commits":{"id":3505,"full_name":"xcpretty/xcpretty","default_branch":"master","total_commits":543,"total_committers":44,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":12.340909090909092,"dds":0.6169429097605893,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2026-04-21T03:08:42.415Z","last_synced_commit":"33d1f0a4adcbc37f4250917b3adff766c3d67b67","created_at":"2023-03-07T09:17:59.700Z","updated_at":"2026-04-21T03:06:11.555Z","committers":[{"name":"Marin Usalj","email":"mneorr@gmail.com","login":null,"count":208},{"name":"Delisa Mason","email":"iskanamagus@gmail.com","login":"kattrali","count":142},{"name":"Marin Usalj","email":"marin2211@gmail.com","login":null,"count":75},{"name":"Boris Bügling","email":"boris@icculus.org","login":"neonichu","count":12},{"name":"Titolo, Michele","email":"Michele.Titolo@capitalone.com","login":null,"count":10},{"name":"Norio Nomura","email":"norio.nomura@gmail.com","login":"norio-nomura","count":9},{"name":"Simone Civetta","email":"simonecivetta@gmail.com","login":null,"count":8},{"name":"Cédric Luthi","email":"cedric.luthi@gmail.com","login":"0xced","count":6},{"name":"Kyle Fuller","email":"kyle@fuller.li","login":"kylef","count":5},{"name":"Marin Usalj","email":"supermarin","login":"supermarin","count":5},{"name":"Jared Grubb","email":"jgrubb@apple.com","login":"jaredgrubb","count":5},{"name":"Eloy Durán","email":"eloy.de.enige@gmail.com","login":"alloy","count":4},{"name":"Dan Fleming","email":"dan@dflems.com","login":"dflems","count":4},{"name":"Killian THORON","email":"killian.thoron@niji.fr","login":null,"count":3},{"name":"Maksym Grebenets","email":"maksym.grebenets@cba.com.au","login":null,"count":3},{"name":"Paul Cantrell","email":"cantrell@pobox.com","login":"pcantrell","count":3},{"name":"Matt Cotton","email":"mattcotton3@gmail.com","login":"mattcotton","count":3},{"name":"Iulian Onofrei","email":"5748627+revolter","login":"revolter","count":3},{"name":"Dustin Norman","email":"dustin.norman@gmail.com","login":"DustinNorman","count":3},{"name":"KrauseFx","email":"KrauseFx@gmail.com","login":"KrauseFx","count":3},{"name":"Vladimir Burdukov","email":"chippcheg@gmail.com","login":"chipp","count":2},{"name":"wcrestfield","email":"wcrestfi@gmail.com","login":"wcrestfield","count":2},{"name":"Huy Nguyen","email":"huy@highfive.com","login":null,"count":2},{"name":"Juan Pablo Civile","email":"jpcivile@monits.com","login":null,"count":2},{"name":"Michael Tauraso","email":"mtauraso@squareup.com","login":null,"count":2},{"name":"kenji21","email":"r.bergoin@openium.fr","login":"kenji21","count":1},{"name":"andybest","email":"andybest.net@gmail.com","login":"andybest","count":1},{"name":"Teichmann, Bjoern","email":"Bjoern.Teichmann@sys.aok.de","login":"BjoernT-AS","count":1},{"name":"Sean Abraham","email":"Sean.A208@gmail.com","login":"seanabraham","count":1},{"name":"Scott Albertson","email":"ascottalbertson@gmail.com","login":"salbertson","count":1},{"name":"Piet Brauer","email":"piet@nerdishbynature.com","login":"pietbrauer","count":1},{"name":"Jonas Witt","email":"jonas@metaquark.de","login":null,"count":1},{"name":"Josh Vickery","email":"jvickery@shopkeep.com","login":null,"count":1},{"name":"Samuel Groß","email":"dev@samuel-gross.de","login":null,"count":1},{"name":"rasharab","email":"rashin@buddybuild.com","login":null,"count":1},{"name":"Owen Hart","email":"owen@subsplash.com","login":"owjsub","count":1},{"name":"Kohki Miki","email":"giginet.net@gmail.com","login":"giginet","count":1},{"name":"Killian THORON","email":"killian.thoron@gmail.com","login":"iKiKi","count":1},{"name":"John Harrison","email":"harjohn@amazon.com","login":"ashgti","count":1},{"name":"Fabio Pelosin","email":"fabiopelosin@gmail.com","login":"fabiopelosin","count":1},{"name":"Dimitar Kerezov","email":"d.kerezov@gmail.com","login":"Mitko-Kerezov","count":1},{"name":"Dave Schukin","email":"daveschukin@gmail.com","login":"schukin","count":1},{"name":"Christian Sampaio","email":"christian.fsampaio@gmail.com","login":"chrisfsampaio","count":1},{"name":"Chris Ballinger","email":"chrisballinger@gmail.com","login":"chrisballinger","count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/xcpretty%2Fxcpretty/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-21T00:00:07.949Z","repositories_count":6215268,"commits_count":899447002,"contributors_count":34906382,"owners_count":1143777,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"xcpretty/xcpretty","html_url":"https://github.com/xcpretty/xcpretty","last_synced_at":"2026-04-14T15:07:30.269Z","status":"error","issues_count":84,"pull_requests_count":41,"avg_time_to_close_issue":51282445.208333336,"avg_time_to_close_pull_request":65275907.93103448,"issues_closed_count":24,"pull_requests_closed_count":29,"pull_request_authors_count":26,"issue_authors_count":79,"avg_comments_per_issue":4.2023809523809526,"avg_comments_per_pull_request":2.5365853658536586,"merged_pull_requests_count":15,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":5,"past_year_avg_time_to_close_issue":2447898.0,"past_year_avg_time_to_close_pull_request":1223066.0,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":2,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":2.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":2,"created_at":"2023-05-12T13:06:00.355Z","updated_at":"2026-04-14T15:07:30.270Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/xcpretty%2Fxcpretty","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/xcpretty%2Fxcpretty/issues","issue_labels_count":{"bug":1},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":79,"COLLABORATOR":3,"CONTRIBUTOR":2},"pull_request_author_associations_count":{"NONE":22,"COLLABORATOR":11,"CONTRIBUTOR":8},"issue_authors":{"keith":2,"DenTelezhkin":2,"yishuiliunian":2,"revolter":2,"mateuszzz88":2,"jpdutoit":1,"Apocryphon":1,"ANTARESXXI":1,"AyaAkl25":1,"pepicrft":1,"pengbins":1,"sysulzh":1,"fndppx":1,"drkibitz":1,"Cyberbeni":1,"kovaam":1,"mberube09":1,"llyons":1,"adamayoung":1,"Justintime50":1,"stopiccot":1,"idrougge":1,"szymon-kazmierczak":1,"kenji21":1,"saviosailas":1,"dabrahams":1,"xareelee":1,"mancha-24":1,"remystr":1,"noobs2ninjas":1,"Krizai":1,"MSch":1,"kirillzh":1,"janpio":1,"asalom":1,"FabienLydoire":1,"lyndsey-ferguson":1,"zdrever":1,"Inn-GS":1,"ilyapuchka":1,"SiddhiRao10":1,"christopherstott":1,"abdullahselek":1,"Kmohamed":1,"0xC4m3l-jiang":1,"dhruvsbhatt":1,"SanketSB237":1,"paulz":1,"ButkiewiczP":1,"mkj-is":1,"sandeepmahajan11":1,"ChrisMash":1,"LMojica":1,"XaviorXiao":1,"trupin":1,"beretboat":1,"truebit":1,"gangadharbonda":1,"remarkablex":1,"patteruel-dev":1,"Jack-Rain":1,"eimermusic":1,"vickeryj":1,"acecilia":1,"jainhitesh3":1,"thevenkat94":1,"stephanheilner":1,"secretagencyit":1,"showtestlog":1,"Apanlin":1,"ianfixes":1,"yingnierxiao":1,"HappyMary":1,"lilyball":1,"delebedev":1,"seanreinhardtapps":1,"zachriggle":1,"marcelofabri":1,"luisxiaomai":1},"pull_request_authors":{"keith":6,"revolter":4,"saltman007web":2,"rasharab":2,"owjsub":2,"salbertson":2,"hisaichi5518":2,"chrisballinger":2,"samfranpeloton":2,"kattrali":1,"harlanhaskins":1,"mkj-is":1,"trupin":1,"clarmso":1,"thasegaw":1,"hiteshjain4":1,"lyndsey-ferguson":1,"gredman":1,"Mitko-Kerezov":1,"tayminni80":1,"voom-pairing-turbine":1,"johnhammerlund":1,"albertaleksieiev":1,"qawslihaoran":1,"saitjr":1,"rafaelnobrepd":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-20T00:00:09.428Z","repositories_count":14341998,"issues_count":34444222,"pull_requests_count":112747259,"authors_count":11241165,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"NONE":2},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{"0xC4m3l-jiang":1,"kovaam":1},"past_year_pull_request_authors":{},"maintainers":[{"login":"keith","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/keith"},{"login":"revolter","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/revolter"},{"login":"kattrali","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/kattrali"}],"active_maintainers":[]},"events":{"total":{"PullRequestEvent":5,"ForkEvent":8,"IssuesEvent":8,"WatchEvent":93,"IssueCommentEvent":50,"PushEvent":2,"PullRequestReviewEvent":2,"CreateEvent":1},"last_year":{"PullRequestEvent":1,"ForkEvent":2,"WatchEvent":44,"IssueCommentEvent":4}},"keywords":["ci","continuous-integration","ios"],"dependencies":[{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2022-07-15T11:30:31.194Z","updated_at":"2022-07-15T11:30:31.194Z","repository_link":"https://github.com/xcpretty/xcpretty/blob/master/Gemfile","dependencies":[{"id":220373125,"package_name":"kicker","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false}]},{"ecosystem":"rubygems","filepath":"xcpretty.gemspec","sha":null,"kind":"manifest","created_at":"2022-07-15T11:30:31.316Z","updated_at":"2022-07-15T11:30:31.316Z","repository_link":"https://github.com/xcpretty/xcpretty/blob/master/xcpretty.gemspec","dependencies":[{"id":220373770,"package_name":"rouge","ecosystem":"rubygems","requirements":"~\u003e 2.0.7","direct":true,"kind":"runtime","optional":false},{"id":220373771,"package_name":"bundler","ecosystem":"rubygems","requirements":"~\u003e 1.3","direct":true,"kind":"development","optional":false},{"id":220373772,"package_name":"rake","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":220373773,"package_name":"rubocop","ecosystem":"rubygems","requirements":"~\u003e 0.34.0","direct":true,"kind":"development","optional":false},{"id":220373774,"package_name":"rspec","ecosystem":"rubygems","requirements":"= 2.99.0","direct":true,"kind":"development","optional":false},{"id":220373775,"package_name":"cucumber","ecosystem":"rubygems","requirements":"~\u003e 1.0","direct":true,"kind":"development","optional":false}]}],"score":12.116016638354319,"created_at":"2024-12-15T21:38:06.978Z","updated_at":"2026-04-30T16:30:33.344Z","avatar_url":"https://github.com/xcpretty.png","language":"Ruby","monthly_downloads":0,"readme":"![logo](http://i.imgur.com/i2fElxx.png)\n\n__`xcpretty` is a fast and flexible formatter for `xcodebuild`__.\u003cbr/\u003e\nIt does one thing, and it should do it well.\n\n[![Gem version](http://img.shields.io/gem/v/xcpretty.svg)](http://rubygems.org/gems/xcpretty)\n[![Build Status](https://travis-ci.org/supermarin/xcpretty.svg?branch=master)](https://travis-ci.org/supermarin/xcpretty)\n[![Code Climate](http://img.shields.io/codeclimate/github/supermarin/xcpretty.svg)](https://codeclimate.com/github/supermarin/xcpretty)\n[![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com)\n\n## Installation\n``` bash\n$ gem install xcpretty\n```\n\n## Usage\n``` bash\n$ xcodebuild [flags] | xcpretty\n```\n`xcpretty` is designed to be piped with `xcodebuild` and thus keeping 100%\ncompatibility with it. It's even a bit faster than `xcodebuild` itself, since\nit saves your terminal some prints.\n\n__Important:__ If you're running `xcpretty` on a CI like Travis or Jenkins, you\nmay want to exit with same status code as `xcodebuild`.\nCI systems usually use status codes to determine if the build has failed.\n\n``` bash\n$ set -o pipefail \u0026\u0026 xcodebuild [flags] | xcpretty\n#\n# OR\n#\n$ xcodebuild [flags] | xcpretty \u0026\u0026 exit ${PIPESTATUS[0]}\n```\n\n## Raw xcodebuild output\nYou might want to use `xcpretty` together with `tee` to store the raw log in a\nfile, and get the pretty output in the terminal. This might be useful if you\nwant to inspect a failure in detail and aren't able to tell from the pretty\noutput.\n\nHere's a way of doing it:\n``` bash\n$ xcodebuild [flags] | tee xcodebuild.log | xcpretty\n```\n\n## Formats\n\n- `--simple`, `-s` (default)\n![xcpretty --simple](http://i.imgur.com/LdmozBS.gif)\n\n- `--test`, `-t` (RSpec style)\n![xcpretty alpha](http://i.imgur.com/VeTQQub.gif)\n- `--tap` ([Test Anything Protocol](http://testanything.org)-compatible output)\n- `--knock`, `-k` (a [simplified version](https://github.com/chneukirchen/knock) of the Test Anything Protocol)\n\n## ANSI / UTF-8\n\n- `--[no-]color`: Show build icons in color. (you can add it to `--simple` or `--test` format).\n  Defaults to auto-detecting color availability.\n- `--[no-]utf`: Use unicode characters in build output or only ASCII.\n  Defaults to auto-detecting the current locale.\n\n## Reporters\n\n- `--report junit`, `-r junit`: Creates a JUnit-style XML report at `build/reports/junit.xml`, compatible with Jenkins and TeamCity CI.\n\n- `--report html`, `-r html`: Creates a simple HTML report at `build/reports/tests.html`.\n![xcpretty html](http://i.imgur.com/0Rnux3v.gif)\n\n- `--report json-compilation-database`, `-r json-compilation-database`: Creates a [JSON compilation database](http://clang.llvm.org/docs/JSONCompilationDatabase.html) at `build/reports/compilation_db.json`. This is a format to replay single compilations independently of the build system.\n\nWriting a report to a custom path can be specified using `--output PATH`.\n\n## Extensions\n\n`xcpretty` supports custom formatters through the use of the\n`--formatter` flag, which takes a path to a file as an argument. The\nfile must contain a Ruby subclass of `XCPretty::Formatter`, and\nreturn that class at the end of the file. The class\ncan override the `format_*` methods to hook into output parsing\nevents.\n\n### Known extensions\n\n* [xcpretty-travis-formatter](https://github.com/kattrali/xcpretty-travis-formatter): support for cleaner output in TravisCI using code folding\n\nThe recommended format is a gem containing the formatter and named\nwith an `xcpretty-` prefix, for easier discovery.\n\n\n## Team\n\n- [Marin Usalj](http://github.com/supermarin) http://supermar.in\n- [Delisa Mason](http://github.com/kattrali) http://delisa.me\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["apps","deployment","fastlane","screenshots","cocoapods","dependency-manager","mac","objective-c","gitlab","bitbucket"],"project_url":"https://ruby.ecosyste.ms/api/v1/projects/96","html_url":"https://ruby.ecosyste.ms/projects/96"}