An open API service indexing awesome lists of open source software.

https://github.com/mdb1/swiftypick

Useful Swift code samples, extensions, functionalities and scripts to cherry-pick and use in your projects
https://github.com/mdb1/swiftypick

ios swift xcode

Last synced: 13 days ago
JSON representation

Useful Swift code samples, extensions, functionalities and scripts to cherry-pick and use in your projects

Awesome Lists containing this project

README

          

# SwiftyPick 🦅🍒

Useful Swift code samples, extensions, functionalities and scripts to cherry-pick and use in your projects.

|[Codebase documentation](https://mdb1.github.io/SwiftyPick)|
|-|
|![Documentation](https://mdb1.github.io/SwiftyPick/badge.svg)|

The documentation on this project is generated and updated automatically using Jazzy + Github Actions. For more info check the [Jazzy docs](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/Jazzy.md) on this repo.

## Purpose

The idea behind this project is not to be a `pod` that users import into their own projects, but rather a collection of useful ideas, well-organized and documented, to cherry-pick as needed into another projects.
Every new piece of functionality will have a proper document explaining it's usage under the `Documentation` directory.

## Installation

### SwiftLint
> `brew install swiftlint`

### Configure the Git Hooks
> `git config core.hooksPath .githooks`

### CocoaPods
> Run `pod install` on the root of the project

Open `SwiftyPick.xcworkspace` with Xcode

# Features 🚀

## Code

### Extensions

* [Add support for multiple Color Palettes](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/ColorPalette.md): Easily handle multiple color palettes in your app.
* [AutoLayout helper methods](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/AutoLayout.md): Lightweight classes for declarative auto layout.
* [TableView extensions](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/TableViewExtensions.md): A couple of helper methods when dealing with table and collection views and cells.

### Features

* [SwiftGen](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/SwiftGen.md): Get autogenerated instances of colors, images, and localized strings.

### Networking
* `// TODO //`

### Testing
* [Xcode Test Plans](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/TestPlans.md): Configure different test plans in your project in order to test different configurations.

### UI
* `// TODO //`

### UI Design Patterns
* [MVP](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/MVP.md): Use the MVP design pattern in your project.

## Process

### Danger
* [Danger](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/Danger.md): Configure Danger and add a Github Action to run the script on every PR.

### Documentation
* [Jazzy](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/Jazzy.md): Configure Jazzy to get autogenerated `html` files for documentation.

### Fastlane
* [Fastlane](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/Fastlane.md): Configure Fastlane in your project and add a Github Action to run the tests on every PR to `main`.
* [Run Test Plans on Fastlane](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/TestPlans.md): Configure your fastfile to run different test plans.
* [Automatic distribution to testflight](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/Fastlane+Distribution.md): Automate the process of uploading builds to testflight using Fastlane and Github Actions.

### Github

* [Set up PR and Issue templates](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/GithubTemplates.md): How to add a Pull Request or Issue template to your project.
* [Github Actions](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/GithubActions.md): How to add a Github Actions and make them run on Pull Requests.

### SwiftLint

* [SwiftLint](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/SwiftLint.md): How to add and configure SwiftLint rules.

### Scripts

* [Sort Project files alphabetically](https://github.com/mdb1/SwiftyPick/blob/main/Documentation/SortProject.md): Keep the Xcode project files sorted alphabetically and avoid conflicts in the `.pbxproj` file.

# TODOs
This is the list of things I want to add to the project in the near future:

- [ ] UserDefaults easy access / FeatureFlags using UserDefaults
- [ ] Logger: Object to log useful information to the console (and to report to analytics/crashlytics)
- [ ] Lightweight `URLSession` networking layer
- [ ] PokedexViewController
- Use MVP: PokedexPresenter, PokedexPresenting, PokedexPresentingDelegate
- Use the new networking layer for the backend call
- Unit test the presenter using a mock presenter to avoid the network call
- [ ] NumberFormatter + Regional unit tests (ie: check the `,` or `.` separator for decimals/thousands depending on the region)
- [ ] CurrencyFormatter + Regional unit tests
- [ ] DateFormatter + Regional unit tests
- [ ] Dynamic Fonts (For accessibility)
- [ ] UITests layer using Page Object pattern
- [ ] Run UI Tests against local json files to avoid using the network
- [ ] Schemes (prod/dev)
- [ ] UIView extension with some basic animations
- [ ] Firebase integration (Analytics/Crashlytics/AB Testing/Flags)
- [ ] Custom Operators from the `Advanced Swift` book
- [ ] GraphQL support
- [ ] Settings view: dark mode, color palette, app icon, local feature flags, display backend calls for debug, change accessibility features, etc

# Contributing

Check out the [Contribution guide](https://github.com/mdb1/SwiftyPick/blob/main/.github/CONTRIBUTING.md)