# ios-app
**Repository Path**: reginx/ios-app
## Basic Information
- **Project Name**: ios-app
- **Description**: Official IVPN iOS app
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-07-06
- **Last Updated**: 2021-07-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# IVPN for iOS
**IVPN for iOS** is a native app built using Swift language. Some of the features include: multiple protocols (IKEv2, OpenVPN, WireGuard), Kill-switch, Multi-Hop, Trusted Networks, AntiTracker, Custom DNS, Dark mode and more.
IVPN iOS app is distributed on the [App Store](https://apps.apple.com/us/app/ivpn-serious-privacy-protection/id1193122683?mt=8).
* [Installation](#installation)
* [Testing](#testing)
* [Deployment](#deployment)
* [Versioning](#versioning)
* [Contributing](#contributing)
* [Security Policy](#security)
* [License](#license)
* [Authors](#Authors)
* [Acknowledgements](#acknowledgements)
## Installation
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
### Requirements
- iOS 12.0+
- Xcode 11.0+
- Swift 5.0+
- Git (preinstalled with Xcode Command Line Tools)
- Ruby (preinstalled with macOS)
- CocoaPods 1.6.2+
- fastlane 2.137.0+
- Go 1.14+
### Dev dependencies
Project dev dependencies:
* [CocoaPods](https://cocoapods.org)
* [fastlane](https://fastlane.tools)
* [SwiftLint](https://github.com/realm/SwiftLint)
* [Go](https://golang.org)
Install CocoaPods:
```sh
$ sudo gem install cocoapods
```
Install fastlane, SwiftLint and Go:
```sh
$ brew install fastlane swiftlint go
```
### Dependencies
Dependencies are installed with [CocoaPods](https://cocoapods.org).
WireGuard static library is compiled at Xcode build phase from implementation of [WireGuard in Go](https://git.zx2c4.com/wireguard-go/).
Project dependencies:
* [wireguard-go](https://git.zx2c4.com/wireguard-go/)
* [TunnelKit](https://github.com/passepartoutvpn/tunnelkit)
* [Bamboo](https://github.com/wordlessj/Bamboo)
* [KeychainAccess](https://github.com/kishikawakatsumi/KeychainAccess)
* [SwiftyStoreKit](https://github.com/bizz84/SwiftyStoreKit)
* [JGProgressHUD](https://github.com/JonasGessner/JGProgressHUD)
* [SDCAlertView](https://github.com/sberrevoets/SDCAlertView)
* [ActiveLabel](https://github.com/optonaut/ActiveLabel.swift)
* [ReachabilitySwift](https://github.com/ashleymills/Reachability.swift)
* [Sentry](https://github.com/getsentry/sentry-cocoa)
To pull and build dependencies run:
```sh
$ pod install
$ open IVPNClient.xcworkspace
```
### Xcode build configurations
There are different build configurations: Staging and Release.
Rename and populate `.xcconfig` files:
```sh
$ cp IVPNClient/Config/staging.template.xcconfig IVPNClient/Config/staging.xcconfig
$ cp IVPNClient/Config/release.template.xcconfig IVPNClient/Config/release.xcconfig
$ cp wireguard-tunnel-provider/Config/wg-staging.template.xcconfig wireguard-tunnel-provider/Config/wg-staging.xcconfig
$ cp wireguard-tunnel-provider/Config/wg-release.template.xcconfig wireguard-tunnel-provider/Config/wg-release.xcconfig
$ cp today-extension/Config/today-extension-staging.template.xcconfig today-extension/Config/today-extension-staging.xcconfig
$ cp today-extension/Config/today-extension-release.template.xcconfig today-extension/Config/today-extension-release.xcconfig
```
### OpenVPN configuration
Rename and populate `OpenVPNConf.swift` file:
```sh
$ cp IVPNClient/Config/OpenVPNConf.template.swift IVPNClient/Config/OpenVPNConf.swift
```
### Fastlane configuration
Rename and populate `Appfile` files:
```sh
$ cp fastlane/Appfile.template fastlane/Appfile
```
## Testing
Run code linter using fastlane:
```sh
$ fastlane lint
```
Run tests using fastlane:
```sh
$ fastlane test
```
Alternatively, run tests using xcodebuild:
```sh
$ xcodebuild test -workspace IVPNClient.xcworkspace -scheme IVPNClient -destination 'platform=iOS Simulator,name=iPhone 11 Pro'
```
## Deployment
To build and deploy beta build to TestFlight:
```sh
$ fastlane beta
```
To build and deploy staging build to TestFlight:
```sh
$ fastlane staging
```
To build and deploy App Store release build to TestFlight:
```sh
$ fastlane release
```
## Versioning
Project is using [Semantic Versioning (SemVer)](https://semver.org) for creating release versions.
SemVer is a 3-component system in the format of `x.y.z` where:
`x` stands for a **major** version
`y` stands for a **minor** version
`z` stands for a **patch**
So we have: `Major.Minor.Patch`
## Contributing
If you are interested in contributing to IVPN for iOS project, please read our [Contributing Guidelines](/.github/CONTRIBUTING.md).
## Security Policy
If you want to report a security problem, please read our [Security Policy](/.github/SECURITY.md).
## License
This project is licensed under the GPLv3 - see the [License](/LICENSE.md) file for details.
## Authors
See the [Authors](/AUTHORS) file for the list of contributors who participated in this project.
## Acknowledgements
See the [Acknowledgements](/ACKNOWLEDGEMENTS.md) file for the list of third party libraries used in this project.