{"id":17996739,"url":"https://github.com/cosmo/hackman","last_synced_at":"2026-02-24T01:08:58.772Z","repository":{"id":63907241,"uuid":"202229136","full_name":"Cosmo/HackMan","owner":"Cosmo","description":"🤖🔜🤯 Stop writing boilerplate code yourself. Let hackman do it for you via the command line.","archived":false,"fork":false,"pushed_at":"2022-02-01T17:57:20.000Z","size":780,"stargazers_count":292,"open_issues_count":3,"forks_count":11,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-24T09:42:39.468Z","etag":null,"topics":["apps","boilerplate","generator","ios","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","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/Cosmo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-13T21:54:40.000Z","updated_at":"2024-12-19T19:41:10.000Z","dependencies_parsed_at":"2022-11-28T22:49:34.000Z","dependency_job_id":null,"html_url":"https://github.com/Cosmo/HackMan","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cosmo%2FHackMan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cosmo%2FHackMan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cosmo%2FHackMan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cosmo%2FHackMan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Cosmo","download_url":"https://codeload.github.com/Cosmo/HackMan/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245735877,"owners_count":20663807,"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":["apps","boilerplate","generator","ios","swift"],"created_at":"2024-10-29T21:15:42.520Z","updated_at":"2026-02-24T01:08:58.730Z","avatar_url":"https://github.com/Cosmo.png","language":"Swift","readme":"\u003cimg src=\"https://github.com/Cosmo/HackMan/raw/master/HackMan-Banner.png\" alt=\" text\" width=\"100%\" /\u003e\n\n# HackMan\n\n[![Swift Package Manager compatible](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) [![License MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http://www.opensource.org/licenses/MIT)\n\nHackMan is a simple tool for generating boilerplate code directly via the command line.\n\nLet `hackman` do the boring work and save some time.\nHackman is heavily inspired by the `rails` command.\n\n## Installation\n\n### Clone and build\n\n```sh\ngit clone git@github.com:Cosmo/HackMan.git\ncd HackMan\nswift build -c release\n```\n\n### Add `hackman` executable to your `PATH`.\n\n```sh\nPATH=$PATH:$(pwd)/.build/release\n```\n\nor make it persistent\n\nFor `zsh` Users (default on macOS Catalina)\n```sh\necho \"export PATH=\\\"\\$PATH:$(pwd)/.build/release\\\"\" \u003e\u003e ~/.zshrc\n```\n\nFor `bash` Users (default on macOS Mojave)\n```sh\necho \"export PATH=\\\"\\$PATH:$(pwd)/.build/release\\\"\" \u003e\u003e ~/.bash_profile\n```\n\n## Usage\n\n### New Project\n\n```sh\n# Create new project directory including a \"project.yml\" for xcodegen\nhackman new APP_NAME\n\n# Change into your project directory\ncd APP_NAME\n```\n\n### Generators\n\nRun these generators inside of your project directory.\n\n```sh\n# Create an AppDelegate\nhackman generate app_delegate\n\nOptions\n  --coordinator, -c\n    Adds coordinator support\n\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create an empty AssetCatalog\nhackman generate asset_catalog\n\nOptions\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a LaunchScreen-Storyboard\nhackman generate launch_screen\n\nOptions\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a ReusableView protocol and useful extensions for UICollectionViews and UITableViews\nhackman generate reusable_view\n\nOptions\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a Coordinator protocol\nhackman generate coordinator\n\nOptions\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a MainCoordinator\nhackman generate coordinator_main NAME NAME …\n\nOptions\n  --force, -f\n    Force override existing files\n\n  --include=NAME,NAME,…\n    Include ViewControllers that were not generated via scaffold.\n    Names must be separated with commas. Spaces between names are not allowed.\n```\n```sh\n# Create a Child-Coordinator with the given name\nhackman generate coordinator_child NAME\n\nOptions\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a Model with the given name and properties\nhackman generate model NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] …\n\nOptions\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a UIViewController-Subclass with the given name\nhackman generate view_controller NAME\n\nOptions\n  --coordinator, -c\n    Adds coordinator support\n\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a ViewControllerCollection (UIViewController-Subclass with a UICollectionView) and UICollectionViewDataSource\nhackman generate view_controller_collection NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] …\n\nOptions\n  --coordinator, -c\n    Adds coordinator support\n\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a UICollectionViewCell-Subclass with the given namen and properties as UILabels\nhackman generate collection_view_cell NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] …\n\nOptions\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a ViewControllerTable (UIViewController-Subclass with a UITableView) and UITableViewDataSource\nhackman generate view_controller_table NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] …\n\nOptions\n  --coordinator, -c\n    Adds coordinator support\n\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a UITableViewCell-Subclass with the given namen and properties as UILabels\nhackman generate table_view_cell NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] …\n\nOptions\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a ViewControllerDetail (UIViewController-Subclass) with the given namen and properties as UILabels\nhackman generate view_controller_detail NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] …\n\nOptions\n  --coordinator, -c\n    Adds coordinator support\n\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a UIViewController-Subclass with a UIWebView\nhackman generate view_controller_web\n\nOptions\n  --coordinator, -c\n    Adds coordinator support\n\n  --force, -f\n    Force override existing files\n```\n```sh\n# Create a UIViewController-Subclass with entry points for legal documents\nhackman generate view_controller_information\n\nOptions\n  --coordinator, -c\n    Adds coordinator support\n  \n  --force, -f\n    Force override existing files\n```\n```sh\n# Create Model, UICollectionView/UITableView Extensions, UIViewController with UICollectionView/UITableView, ViewControllerDetail, ChildCoordinator, Coordinator Protocol and ReusableView Protocol\nhackman generate scaffold NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] …\n\n# By default, the scaffold will be UICollectionView based.\n# In order to create UITableView based scaffolds, pass the --view=table at the end.\n# Like so:\nhackman generate scaffold song title:string year:int --view=table\n\nOptions\n  --coordinator, -c\n    Adds coordinator support\n    \n  --force, -f\n    Force override existing files\n```\n\nYou can also write `hackman g` instead of `hackman generate`.\n\n### Properties\n\nWhen creating scaffolds, models, controllers you can also specify multiple fields to be generated automatically\n\n```sh\nhackman g scaffold author name:string birthday:date\n```\nThis commands creates among other things a struct of type `Author` with the following properties.\n```swift\n    let name: String\n    let birthday: Date\n```\n\nYou can also reference to your custom types.\n```sh\nhackman g scaffold Article title:string body:string published_at:date author:author\n```\nThis will generate the following properties inside of the `Article` model.\n```swift\n    let title: String\n    let body: String\n    let publishedAt: Date\n    let author: Author\n```\n\nIf you omit the property type, `hackman` assumes you want a property of type `String`.\n```sh\nhackman g scaffold article title body published_at:date author:author\n```\n\n\n### An example of a fully working app\n\n```sh\nhackman new MusicApp\ncd MusicApp\nhackman g app_delegate --coordinator\nhackman g asset_catalog\nhackman g launch_screen\nhackman g scaffold artist name --coordinator\nhackman g scaffold song title year:int --coordinator\nhackman g scaffold album name uuid artist:artist created_at:date updated_at:date --coordinator\nhackman g view_controller_information --coordinator\nhackman g coordinator_main song artist album --include=information\nxcodegen\nopen MusicApp.xcodeproj\n```\n\n#### Demo\n\n![Demo](https://github.com/Cosmo/HackMan/blob/master/HackMan-Preview.gif?raw=true)\n\n## Requirements\n\n* Xcode 10\n* Swift 5\n\n## Todos\n\n* [ ] Easier setup\n* [ ] Easy support for custom generators\n* [x] Add help (-h / --help)\n* [ ] SwiftUI based templates\n* [ ] Generator for localization\n\n## Contact\n\n* Devran \"Cosmo\" Uenal\n* Twitter: [@maccosmo](http://twitter.com/maccosmo)\n\n## License\n\nHackMan is released under the [MIT License](http://www.opensource.org/licenses/MIT).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcosmo%2Fhackman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcosmo%2Fhackman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcosmo%2Fhackman/lists"}