|
1 | 1 | # ValidatableKit |
2 | | -Composable data validation API in Swift. |
| 2 | + |
| 3 | +[](https://swiftylab.github.io/ValidatableKit/documentation/validatablekit/) |
| 4 | +[](https://badge.fury.io/co/ValidatableKit) |
| 5 | +[](https://badge.fury.io/gh/SwiftyLab%2FValidatableKit) |
| 6 | +[](https://github.com/Carthage/Carthage) |
| 7 | +[](https://img.shields.io/badge/Swift-5-DE5D43) |
| 8 | +[](https://img.shields.io/badge/Platforms-all-sucess) |
| 9 | +[](https://github.com/SwiftyLab/ValidatableKit/actions/workflows/main.yml) |
| 10 | +[](https://www.codefactor.io/repository/github/swiftylab/validatablekit) |
| 11 | +[](https://codecov.io/gh/SwiftyLab/ValidatableKit) |
| 12 | + |
| 13 | +Composable data validation API in Swift exposing simple DSL for writing validations. |
| 14 | + |
| 15 | +## Overview |
| 16 | + |
| 17 | +**ValidatableKit** allows validating data by providing ``Validator`` for the type. ``Validator``s can be created by directly providing callback that performs the validation on basic data types and provides ``ValidatorResult``: |
| 18 | + |
| 19 | +```swift |
| 20 | +let skip: Validator<Int> = .init { _ in ValidatorResults.Skipped() } |
| 21 | +``` |
| 22 | + |
| 23 | +Or the library provided DSL can be used to add validations to properties for complex data types: |
| 24 | + |
| 25 | +```swift |
| 26 | +struct User: Validatable { |
| 27 | + let name: String |
| 28 | + let email: String |
| 29 | + let age: Int |
| 30 | + |
| 31 | + var validator: Validator<Self> { |
| 32 | + return Validator<Self> |
| 33 | + .name(!.isEmpty, .alphanumeric) |
| 34 | + .email(.isEmail) |
| 35 | + } |
| 36 | +} |
| 37 | +``` |
| 38 | + |
| 39 | +## Requirements |
| 40 | + |
| 41 | +| Platform | Minimum Swift Version | Installation | Status | |
| 42 | +| --- | --- | --- | --- | |
| 43 | +| iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+ | 5.1 | [CocoaPods](#cocoapods), [Carthage](#carthage), [Swift Package Manager](#swift-package-manager), [Manual](#manually) | Fully Tested | |
| 44 | +| Linux | 5.1 | [Swift Package Manager](#swift-package-manager) | Fully Tested | |
| 45 | +| Windows | 5.3 | [Swift Package Manager](#swift-package-manager) | Fully Tested | |
| 46 | + |
| 47 | +## Installation |
| 48 | + |
| 49 | +### CocoaPods |
| 50 | + |
| 51 | +[CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate `ValidatableKit` into your Xcode project using CocoaPods, specify it in your `Podfile`: |
| 52 | + |
| 53 | +```ruby |
| 54 | +pod 'ValidatableKit' |
| 55 | +``` |
| 56 | + |
| 57 | +Optionally, you can also use the pre-built XCFramework from the GitHub releases page by replacing `{version}` with the required version you want to use: |
| 58 | + |
| 59 | +```ruby |
| 60 | +pod 'ValidatableKit', :http => 'https://github.com/SwiftyLab/ValidatableKit/releases/download/v{version}/ValidatableKit-{version}.xcframework.zip' |
| 61 | +``` |
| 62 | + |
| 63 | +### Carthage |
| 64 | + |
| 65 | +[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate `ValidatableKit` into your Xcode project using Carthage, specify it in your `Cartfile`: |
| 66 | + |
| 67 | +```ogdl |
| 68 | +github "SwiftyLab/ValidatableKit" |
| 69 | +``` |
| 70 | + |
| 71 | +### Swift Package Manager |
| 72 | + |
| 73 | +The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. |
| 74 | + |
| 75 | +Once you have your Swift package set up, adding `ValidatableKit` as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`. |
| 76 | + |
| 77 | +```swift |
| 78 | +.package(url: "https://github.com/SwiftyLab/ValidatableKit.git", from: "1.0.0"), |
| 79 | +``` |
| 80 | + |
| 81 | +Optionally, you can also use the pre-built XCFramework from the GitHub releases page by replacing `{version}` and `{checksum}` with the required version and checksum of artifact you want to use: |
| 82 | + |
| 83 | +```swift |
| 84 | +.binaryTarget(name: "ValidatableKit", url: "https://github.com/SwiftyLab/ValidatableKit/releases/download/v{version}/ValidatableKit-{version}.xcframework.zip", checksum: "{checksum}"), |
| 85 | +``` |
| 86 | + |
| 87 | +### Manually |
| 88 | + |
| 89 | +If you prefer not to use any of the aforementioned dependency managers, you can integrate `ValidatableKit` into your project manually. |
| 90 | + |
| 91 | +#### Git Submodule |
| 92 | + |
| 93 | +- Open up Terminal, `cd` into your top-level project directory, and run the following command "if" your project is not initialized as a git repository: |
| 94 | + |
| 95 | + ```bash |
| 96 | + $ git init |
| 97 | + ``` |
| 98 | + |
| 99 | +- Add `ValidatableKit` as a git [submodule](https://git-scm.com/docs/git-submodule) by running the following command: |
| 100 | + |
| 101 | + ```bash |
| 102 | + $ git submodule add https://github.com/SwiftyLab/ValidatableKit.git |
| 103 | + ``` |
| 104 | + |
| 105 | +- Open the new `ValidatableKit` folder, and drag the `ValidatableKit.xcodeproj` into the Project Navigator of your application's Xcode project or existing workspace. |
| 106 | + |
| 107 | + > It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter. |
| 108 | +
|
| 109 | +- Select the `ValidatableKit.xcodeproj` in the Project Navigator and verify the deployment target satisfies that of your application target (should be less or equal). |
| 110 | +- Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the `Targets` heading in the sidebar. |
| 111 | +- In the tab bar at the top of that window, open the "General" panel. |
| 112 | +- Click on the `+` button under the `Frameworks and Libraries` section. |
| 113 | +- You will see `ValidatableKit.xcodeproj` folder with `ValidatableKit.framework` nested inside. |
| 114 | +- Select the `ValidatableKit.framework` and that's it! |
| 115 | + |
| 116 | + > The `ValidatableKit.framework` is automagically added as a target dependency, linked framework and embedded framework in build phase which is all you need to build on the simulator and a device. |
| 117 | +
|
| 118 | +#### XCFramework |
| 119 | + |
| 120 | +You can also directly download the pre-built artifact from the GitHub releases page: |
| 121 | + |
| 122 | +- Download the artifact from the GitHub releases page of the format `ValidatableKit-{version}.xcframework.zip` where `{version}` is the version you want to use. |
| 123 | +- Extract the XCFrameworks from the archive, and drag the `ValidatableKit.xcframework` into the Project Navigator of your application's target folder in your Xcode project. |
| 124 | +- Select `Copy items if needed` and that's it! |
| 125 | + |
| 126 | + > The `ValidatableKit.xcframework` is automagically added in the embedded `Frameworks and Libraries` section, an in turn the linked framework in build phase. |
| 127 | +
|
| 128 | +## Usage |
| 129 | + |
| 130 | +See the full [documentation](https://swiftylab.github.io/ValidatableKit/documentation/validatablekit/) for API details and articles on sample scenarios. |
| 131 | + |
| 132 | +## Contributing |
| 133 | + |
| 134 | +If you wish to contribute a change, suggest any improvements, |
| 135 | +please review our [contribution guide](CONTRIBUTING.md), |
| 136 | +check for open [issues](https://github.com/SwiftyLab/ValidatableKit/issues), if it is already being worked upon |
| 137 | +or open a [pull request](https://github.com/SwiftyLab/ValidatableKit/pulls). |
| 138 | + |
| 139 | +## License |
| 140 | + |
| 141 | +`ValidatableKit` is released under the MIT license. [See LICENSE](LICENSE) for details. |
| 142 | + |
0 commit comments