{"id":21089767,"url":"https://github.com/hituziando/loggingviewkit","last_synced_at":"2026-01-31T10:02:34.332Z","repository":{"id":50282416,"uuid":"161909533","full_name":"HituziANDO/LoggingViewKit","owner":"HituziANDO","description":"LoggingViewKit is a framework that can record user click events, etc. All records are stored in a local database and the framework does not send any data externally.","archived":false,"fork":false,"pushed_at":"2024-05-27T09:54:31.000Z","size":16495,"stargazers_count":2,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-11T17:12:53.321Z","etag":null,"topics":["debug","debugging","framework","ios","library","log","logger","logging"],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HituziANDO.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-12-15T13:51:57.000Z","updated_at":"2024-05-27T09:54:35.000Z","dependencies_parsed_at":"2024-04-15T04:11:51.143Z","dependency_job_id":"570a38b9-56f6-47f2-b28a-ac9eafc43e5e","html_url":"https://github.com/HituziANDO/LoggingViewKit","commit_stats":{"total_commits":54,"total_committers":1,"mean_commits":54.0,"dds":0.0,"last_synced_commit":"e2589e39dd78dbb61ea9edf5961a30354a164062"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/HituziANDO/LoggingViewKit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HituziANDO%2FLoggingViewKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HituziANDO%2FLoggingViewKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HituziANDO%2FLoggingViewKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HituziANDO%2FLoggingViewKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HituziANDO","download_url":"https://codeload.github.com/HituziANDO/LoggingViewKit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HituziANDO%2FLoggingViewKit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28937814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T08:53:31.997Z","status":"ssl_error","status_checked_at":"2026-01-31T08:51:38.521Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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"}},"keywords":["debug","debugging","framework","ios","library","log","logger","logging"],"created_at":"2024-11-19T21:31:15.012Z","updated_at":"2026-01-31T10:02:34.314Z","avatar_url":"https://github.com/HituziANDO.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LoggingViewKit\n\n![release](https://img.shields.io/github/v/release/HituziANDO/LoggingViewKit?display_name=tag)\n![Pod Platform](https://img.shields.io/cocoapods/p/LoggingViewKit.svg?style=flat)\n[![Pod Version](https://img.shields.io/cocoapods/v/LoggingViewKit.svg?style=flat)](https://cocoapods.org/pods/LoggingViewKit)\n[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![Swift Package Manager compatible](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager)\n\nLoggingViewKit is a framework that can record user click events, etc. All records are stored in a local database and the framework does not send any data externally.\n\n## Include in Your Project\n\n### Swift Package Manager\n\nLoggingViewKit is available through Swift Package Manager. To install it using Xcode, specify the git URL for LoggingViewKit.\n\n```\nhttps://github.com/HituziANDO/LoggingViewKit\n```\n\n### CocoaPods\n\nLoggingViewKit is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod \"LoggingViewKit\"\n```\n\n### Carthage\n\nLoggingViewKit is available through [Carthage](https://github.com/Carthage/Carthage). To install it, simply add the following line to your Cartfile:\n\n```\ngithub \"HituziANDO/LoggingViewKit\"\n```\n\n## Import framework\n\n```swift\nimport LoggingViewKit\n```\n\n## Usage\n\n1. Programmatically write click event\n\t\n\tIn following code, `buttonPressed` method is set to the action method of UIButton.\n\t\n\t```swift\n\t@objc func buttonPressed(_ sender: Any) {\n       // Records a click event.\n       let attr = LGVLoggingAttribute(view: sender,\n                                      name: \"SampleButton\",\n                                      loggingEnabled: true)\n       attr.info = [\"more-info\": \"test\"]\n       LGVLoggingViewService.shared().click(attr)\n   }\n\t```\n\n1. Start recording\n\n\t```swift\t\n\tLGVLoggingViewService.shared().startRecording()\n\t```\n\n1. Stop recording\n\n\t```swift\n\tLGVLoggingViewService.shared().stopRecording()\n\t```\n\n1. Read all logs\n\n\t```swift\n\tlet logs = LGVLoggingViewService.shared().allLogs()\n\t```\n\n1. Delete all logs\n\n\t```swift\n\tLGVLoggingViewService.shared().deleteAllLogs()\n\t```\n\nMore info, see my [sample project](https://github.com/HituziANDO/LoggingViewKit/tree/master/Sample).\n\n### Use Storyboard\n\nIf you use the storyboard, you can set UI class such as `LGVButton` in the storyboard.\n\n![screenshot1](./readme-images/screenshot1.png)\n\nLoggingViewKit has following UI classes by default.\n\n- Button\n- Label\n- SegmentedControl\n- Slider\n- Stepper\n- Switch\n- View\n\n1. Set arbitrary name to Logging Name field\n\n\t![screenshot2](./readme-images/screenshot2.png)\n\t\n\t**[NOTE]** Recommend setting a unique name.\n\t\n1. Select `On` in Logging field to record the view\n\t\n\t**[NOTE]** If you select `Off` or `Default`, the view is not target to record.\n\n## Sample Log\n\nLoggingViewKit records logs like the following log.\n\n```\n{\n    ID = 47;\n    eventType = \"click\";\n    absoluteClickX = \"124.3333282470703\";\n    absoluteClickY = \"189.6666564941406\";\n    clickX = \"108.3333282470703\";\n    clickY = \"145.6666564941406\";\n    createdAt = \"2018-12-25 23:02:13 +0000\";\n    info =     {\n        newValue = 2;\n    };\n    key = \"7F34859D-2164-4B4B-B896-EA9D3D826C92\";\n    name = SampleSegmentedControl;\n}\n```\n\n## Dump View Hierarchy\n\nLoggingViewKit can dump the hierarchy of specified view to Xcode console. The sample log is following.\n\n```\n2019-04-02 12:11:59.876292+0900 LoggingViewSwiftSample[8616:19026371] ===ViewHierarchy===\nUIView\n  LGVView(loggingName: (null))\n    LGVButton(loggingName: SampleButton)\n    LGVSwitch(loggingName: SampleSwitch)\n      UISwitchModernVisualElement\n        UIView\n          UIView\n        UIView\n          UIView\n        UIView\n          UIImageView\n          UIImageView\n        UIImageView\n    LGVSegmentedControl(loggingName: SampleSegmentedControl)\n      UISegment\n        UISegmentLabel\n        UIImageView\n      UISegment\n        UISegmentLabel\n        UIImageView\n      UISegment\n        UISegmentLabel\n        UIImageView\n      UISegment\n        UISegmentLabel\n        UIImageView\n    LGVStepper(loggingName: SampleStepper)\n      _UIStepperButton\n      _UIStepperButton\n      UIImageView\n    LGVLabel(loggingName: SampleLabel)\n    LGVView(loggingName: SampleView)\n      LGVButton(loggingName: TestButton)\n    LGVSlider(loggingName: SampleSlider)\n```\n\n### Usage\n\n```swift\noverride func viewDidLoad() {\n    super.viewDidLoad()\n\n    #if DEBUG\n    // Dumps hierarchy of the root view.\n    LGVViewHierarchy.dump(view)\n    #endif\n}\n```\n\n**[NOTE]** Recommend that you enclose with `#if DEBUG ~ #endif`. Then LoggingViewKit dumps logs only in Debug build.\n\n**How to Enable DEBUG Flag:**\n\n1. Open Build Settings \u003e Swift Compiler - Custom Flags \u003e Other Swift Flags section\n1. Add `-DDEBUG` flag to Debug row\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhituziando%2Floggingviewkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhituziando%2Floggingviewkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhituziando%2Floggingviewkit/lists"}