{"id":25195970,"url":"https://github.com/simplisticated/reportage","last_synced_at":"2025-12-12T06:21:37.693Z","repository":{"id":62452796,"uuid":"145105039","full_name":"simplisticated/Reportage","owner":"simplisticated","description":"Console logger for iOS","archived":false,"fork":false,"pushed_at":"2018-08-31T21:07:13.000Z","size":75,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2024-04-23T17:25:11.353Z","etag":null,"topics":["debugger","ios","logger","swift","xcode"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simplisticated.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-08-17T10:05:43.000Z","updated_at":"2021-12-23T22:19:42.000Z","dependencies_parsed_at":"2022-11-01T23:45:52.168Z","dependency_job_id":null,"html_url":"https://github.com/simplisticated/Reportage","commit_stats":null,"previous_names":["igormatyushkin014/reportage"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplisticated%2FReportage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplisticated%2FReportage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplisticated%2FReportage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplisticated%2FReportage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simplisticated","download_url":"https://codeload.github.com/simplisticated/Reportage/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247208022,"owners_count":20901568,"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":["debugger","ios","logger","swift","xcode"],"created_at":"2025-02-10T01:39:15.601Z","updated_at":"2025-12-12T06:21:37.626Z","avatar_url":"https://github.com/simplisticated.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\" \u003e\n\t\u003cimg src=\"/Images/logo_2048_2048.png\" alt=\"Reportage\" title=\"Reportage\" width=\"300px\" height=\"300px\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\t\u003ca href=\"https://swift.org\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/badge/Swift-4.0-orange.svg?style=flat\"\u003e\n\t\u003c/a\u003e\n\t\u003ca href=\"https://cocoapods.org\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/cocoapods/v/Reportage.svg\"\u003e\n\t\u003c/a\u003e\n\t\u003ca href=\"https://cocoapods.org\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/cocoapods/dt/Reportage.svg\"\u003e\n\t\u003c/a\u003e\n\t\u003ca href=\"https://tldrlegal.com/license/mit-license\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/badge/License-Apache 2.0-blue.svg?style=flat\"\u003e\n\t\u003c/a\u003e\n\u003c/p\u003e\n\n## At a Glance\n\n`Reportage` is a powerful tool that simplifies console output in Xcode.\n\n## How To Get Started\n\n- Copy content of `Source` folder to your project.\n\nor\n\n- Use `Reportage` cocoapod\n\n## Requirements\n\n* iOS 9 and later\n* Xcode 9 and later\n* Swift 4\n\n## Usage\n\n### Settings\n\nEverything starts with `Logger` instance. Usually, it's enough to use the singletone (`Logger.shared`), but you can create another one with `Logger()`.\n\n`Logger` is a highly customizable thing. You can setup width of line, offset, prefix and many other things.\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003eSetting\u003c/th\u003e\n    \u003cth\u003ePossible values\u003c/th\u003e\n    \u003cth\u003eDefault value\u003c/th\u003e\n    \u003cth\u003eDescription\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003ewidth\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eAny \u003ccode\u003eInt\u003c/code\u003e value bigger than \u003ccode\u003e0\u003c/code\u003e.\u003c/td\u003e\n    \u003ctd\u003e\u003ccode\u003e40\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eMaximum width of line. Measured in symbols.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eoffset\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eAny \u003ccode\u003eInt\u003c/code\u003e value equal to or bigger than \u003ccode\u003e0\u003c/code\u003e.\u003c/td\u003e\n    \u003ctd\u003e\u003ccode\u003e0\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eLeft offset of logger's output. Measured in symbols.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eoffsetPattern\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eAny \u003ccode\u003eString\u003c/code\u003e value.\u003c/td\u003e\n    \u003ctd\u003eSpace.\u003c/td\u003e\n    \u003ctd\u003ePattern to fill the offset's space with.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003edateFormat\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003e.date\u003c/code\u003e\u003cbr\u003e\n      \u003ccode\u003e.time\u003c/code\u003e\u003cbr\u003e\n      \u003ccode\u003e.dateTime\u003c/code\u003e\u003cbr\u003e\n      \u003ccode\u003e.custom(value: String)\u003c/code\u003e\u003cbr\u003e\n      \u003ccode\u003e.none\u003c/code\u003e\u003cbr\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ccode\u003e.dateTime\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eFormat of date printed before the message. If \u003ccode\u003e.none\u003c/code\u003e, date will not be printed.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eprefix\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eAny \u003ccode\u003eString\u003c/code\u003e value.\u003c/td\u003e\n    \u003ctd\u003eEmpty.\u003c/td\u003e\n    \u003ctd\u003ePrefix of the message. Usually emoji but can be anything else.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003euppercased\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003etrue\u003c/code\u003e\u003cbr\u003e\n      \u003ccode\u003efalse\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ccode\u003efalse\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eSpecifies whether message should be uppercased or not.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003eheader\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003e.emptyLine\u003c/code\u003e\u003cbr\u003e\n      \u003ccode\u003e.line(pattern: String)\u003c/code\u003e\u003cbr\u003e\n      \u003ccode\u003e.custom(text: String)\u003c/code\u003e\u003cbr\u003e\n      \u003ccode\u003e.none\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ccode\u003e.none\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eHeader that is printed before the message.\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ccode\u003efooter\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003e\n      \u003ccode\u003e.emptyLine\u003c/code\u003e\u003cbr\u003e\n      \u003ccode\u003e.line(pattern: String)\u003c/code\u003e\u003cbr\u003e\n      \u003ccode\u003e.custom(text: String)\u003c/code\u003e\u003cbr\u003e\n      \u003ccode\u003e.none\u003c/code\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\u003ccode\u003e.emptyLine\u003c/code\u003e\u003c/td\u003e\n    \u003ctd\u003eFooter that is printed after the message.\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\nExample of `Logger`'s full customization:\n\n```swift\nLogger.shared\n    .width(80)\n    .offset(4)\n    .offsetPattern(\" \")\n    .prefix(\"🚀\")\n    .dateFormat(.dateTime)\n    .uppercased(false)\n    .header(.none)\n    .footer(.emptyLine)\n```\n\n### Output\n\nSending message to console is incredibly easy:\n\n```swift\nlogger.print(\"Some message\")\n```\n\nAlso, you can change output settings on the go:\n\n```swift\nlogger\n    .dateFormat(.none)\n    .offset(0)\n    .prefix(\"🚀\")\n    .print(\"App is launched\")\n    .dateFormat(.time)\n    .offset(20)\n    .prefix(\"🖥\")\n    .print(\"Authorization requested\")\n```\n\n## License\n\n`Reportage` is available under the Apache 2.0 license. See the [LICENSE](./LICENSE) file for more info.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimplisticated%2Freportage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimplisticated%2Freportage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimplisticated%2Freportage/lists"}