Cosmo/HackMan
π€ππ€― Stop writing boilerplate code yourself. Let hackman do it for you via the command line.
Installation
Clone and build
git clone git@github.com:Cosmo/HackMan.git
cd HackMan
swift build -c releaseAdd hackman executable to your PATH.
PATH=$PATH:$(pwd)/.build/releaseor make it persistent
For zsh Users (default on macOS Catalina)
echo "export PATH=\"\$PATH:$(pwd)/.build/release\"" >> ~/.zshrcFor bash Users (default on macOS Mojave)
echo "export PATH=\"\$PATH:$(pwd)/.build/release\"" >> ~/.bash_profileUsage
New Project
# Create new project directory including a "project.yml" for xcodegen
hackman new APP_NAME
# Change into your project directory
cd APP_NAMEGenerators
Run these generators inside of your project directory.
# Create an AppDelegate
hackman generate app_delegate
Options
--coordinator, -c
Adds coordinator support
--force, -f
Force override existing files# Create an empty AssetCatalog
hackman generate asset_catalog
Options
--force, -f
Force override existing files# Create a LaunchScreen-Storyboard
hackman generate launch_screen
Options
--force, -f
Force override existing files# Create a ReusableView protocol and useful extensions for UICollectionViews and UITableViews
hackman generate reusable_view
Options
--force, -f
Force override existing files# Create a Coordinator protocol
hackman generate coordinator
Options
--force, -f
Force override existing files# Create a MainCoordinator
hackman generate coordinator_main NAME NAME β¦
Options
--force, -f
Force override existing files
--include=NAME,NAME,β¦
Include ViewControllers that were not generated via scaffold.
Names must be separated with commas. Spaces between names are not allowed.# Create a Child-Coordinator with the given name
hackman generate coordinator_child NAME
Options
--force, -f
Force override existing files# Create a Model with the given name and properties
hackman generate model NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] β¦
Options
--force, -f
Force override existing files# Create a UIViewController-Subclass with the given name
hackman generate view_controller NAME
Options
--coordinator, -c
Adds coordinator support
--force, -f
Force override existing files# Create a ViewControllerCollection (UIViewController-Subclass with a UICollectionView) and UICollectionViewDataSource
hackman generate view_controller_collection NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] β¦
Options
--coordinator, -c
Adds coordinator support
--force, -f
Force override existing files# Create a UICollectionViewCell-Subclass with the given namen and properties as UILabels
hackman generate collection_view_cell NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] β¦
Options
--force, -f
Force override existing files# Create a ViewControllerTable (UIViewController-Subclass with a UITableView) and UITableViewDataSource
hackman generate view_controller_table NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] β¦
Options
--coordinator, -c
Adds coordinator support
--force, -f
Force override existing files# Create a UITableViewCell-Subclass with the given namen and properties as UILabels
hackman generate table_view_cell NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] β¦
Options
--force, -f
Force override existing files# Create a ViewControllerDetail (UIViewController-Subclass) with the given namen and properties as UILabels
hackman generate view_controller_detail NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] β¦
Options
--coordinator, -c
Adds coordinator support
--force, -f
Force override existing files# Create a UIViewController-Subclass with a UIWebView
hackman generate view_controller_web
Options
--coordinator, -c
Adds coordinator support
--force, -f
Force override existing files# Create a UIViewController-Subclass with entry points for legal documents
hackman generate view_controller_information
Options
--coordinator, -c
Adds coordinator support
--force, -f
Force override existing files# Create Model, UICollectionView/UITableView Extensions, UIViewController with UICollectionView/UITableView, ViewControllerDetail, ChildCoordinator, Coordinator Protocol and ReusableView Protocol
hackman generate scaffold NAME [PROPERTY[:TYPE] PROPERTY[:TYPE]] β¦
# By default, the scaffold will be UICollectionView based.
# In order to create UITableView based scaffolds, pass the --view=table at the end.
# Like so:
hackman generate scaffold song title:string year:int --view=table
Options
--coordinator, -c
Adds coordinator support
--force, -f
Force override existing filesYou can also write hackman g instead of hackman generate.
Properties
When creating scaffolds, models, controllers you can also specify multiple fields to be generated automatically
hackman g scaffold author name:string birthday:dateThis commands creates among other things a struct of type Author with the following properties.
let name: String
let birthday: DateYou can also reference to your custom types.
hackman g scaffold Article title:string body:string published_at:date author:authorThis will generate the following properties inside of the Article model.
let title: String
let body: String
let publishedAt: Date
let author: AuthorIf you omit the property type, hackman assumes you want a property of type String.
hackman g scaffold article title body published_at:date author:authorAn example of a fully working app
hackman new MusicApp
cd MusicApp
hackman g app_delegate --coordinator
hackman g asset_catalog
hackman g launch_screen
hackman g scaffold artist name --coordinator
hackman g scaffold song title year:int --coordinator
hackman g scaffold album name uuid artist:artist created_at:date updated_at:date --coordinator
hackman g view_controller_information --coordinator
hackman g coordinator_main song artist album --include=information
xcodegen
open MusicApp.xcodeprojDemo
[Demo]
Requirements
- Xcode 10
- Swift 5
Todos
- [ ] Easier setup
- [ ] Easy support for custom generators
- [x] Add help (-h / --help)
- [ ] SwiftUI based templates
- [ ] Generator for localization
Contact
- Devran "Cosmo" Uenal
- Twitter: @maccosmo
License
HackMan is released under the MIT License.
Package Metadata
Repository: Cosmo/HackMan
Stars: 290
Forks: 10
Open issues: 3
Default branch: master
Primary language: swift
License: MIT
Topics: apps, boilerplate, generator, ios, swift
README: README.md