- Each message (issue, commit, pull request) starts with a verb
- Each message starts with an uppercase and doesn't end with a period
- Each message starts with a line that is less than 80 characters long
Examples:
- Design login workflow
- Update to latest version of Play tools
- Improve display of CI failures
- Each issue represents a single problem
- Each issue has a milestone attached
- Each milestone needs to match one of the following patterns:
- semantic version number (
1.0
,1.0.5
) - semantic version number with a wildcard (
2.x
,2.1.x
) undecided
- issues we want to keep, but aren't sure when we'll addressinvalid
- issues that were duplicate, invalid (or similar) go here to avoid upsetting milestone counts
- Each commit represents a single change
- Each commit keeps the project fully functional
- Each commit message that closes an issue ends with
(close #XYZ)
Examples:
- Design login workflow (close #1)
- Fix typo in about dialog
- Document data model accessors (close #3, close #4)
- Each pull request represents a single problem
- Each pull request has a milestone attached
- Each pull request contains as few commits as needed
- Each pull request is rebased on latest
develop
- Each pull request is free from fixup or revert commits
- Use true merge if it's desirable for the branch to remain visible in the long run
- Use fast-forward merge for temporary branches
- Create a feature branch
feature/xxx-yyy-zzz
- Make and commit changes
- Create a pull request against
develop
- Go through code review
- See your pull request merged
- Branch out
release/X.Y.Z
fromdevelop
- Test the release
- Merge the release branch to
master
- Tag the merge commit as
X.Y.Z
- Delete the release branch
- Deploy from
master
branch
- No magic numbers in storyboards. To have space between views - use layout margins. To get even more space - use embed views.
- Extention vs subclassing. Avoid subclassing and use protocols instead. One can google about it or check this artcile or this or even this.
- Use
NSLocalizedString
for all strings visible to user.