Thanks for contributing! The following is a set of guidelines for contributions to this project. As Pirates of the Caribbean pointed out, guidelines != rules. Therefore, use your best judgement and feel free to propose changes to this process.
This project adheres to the Contributor Covenant v2.1, so you are expected to uphold the requirements of that Code of Conduct.
Also, contributions are only accepted if the committer accepts the Contributor License Agreement (CLA). This project uses the Developer Certificate of Origin (DCO):
Developer Certificate of Origin Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
1 Letterman Drive
Suite D4700
San Francisco, CA, 94129
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or
(b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or
(c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.
(d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.
- Search the open issues for any issue that resembles your own.
- Search the closed issues for any issue that resembles your own.
- If you can't find anything resembling the feature request that you want or bug report for a bug that you are experiencing, open a new issue using the respective issue template (
Bug Report
orFeature Request
) with a descriptive title. Support requests (usage/installation questions) should use their respective process (see SUPPORT for details).
Barring vacations/holidays, the issue will be looked at within 3 business days.
Please open a corresponding issue first. This allows for agreement on the implementation for a bug fix or feature request before you start working on it (possibly saving you lots of time). However, if the change is to fix a typo or add documentation, a direct pull request is ok.
- All pull requests should be based off of the
master
branch. Please do not include any unmerged changes from other branches. - All pull requests should be scoped to one change only. Seemingly trivial changes alongside other changes may have unforeseen consequences. By limiting the number of changes in a pull request, it makes bug isolation much easier.
- All pull requests must have a descriptive title (avoid Fixes #XXXX).
- All pull requests must adhere to the project's code standards (see below).
- All pull requests are checked by a few automated systems. Please ensure that your change passes these checks.
- Changes must have corresponding test updates (if applicable).
- Changes must have corresponding documentation updates (if applicable).
- Changes must not introduce static analysis issues (ASan, TSan, UBSan, MTC, & Static Analyzer).
Barring vacations/holidays, the issue will be looked at within 3 business days.
- Optimize for the reader.
- Be consistent.
- Follow Apple guidelines.
- All code must be modern Objective-C (dot syntax, property methods, object literals, etc).
- All code must be written in a Swift friendly way.
- Code must be annotated for SDK availability if there are SDK version requirements.
- Exported constants/global types must be properly exported via
FOUNDATION_EXPORT
. - Enums must be properly
typdef
'd withNS_ENUM
orNS_ERROR_ENUM
. - Variables and methods should have meaningful and descriptive names.
- Properties should include their atomicity, ARC qualifier, & nullability.
- System headers must be imported as both a module and regular import to support both types of consumers.
- Documented parameters should be aligned to the longest parameter.
- Implementation files should be split up logically via
#pragma
s.