Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/ivpn/ios-app

Official IVPN iOS app
https://github.com/ivpn/ios-app

ios ivpn privacy security swift vpn vpn-client

Last synced: 2 months ago
JSON representation

Official IVPN iOS app

Awesome Lists containing this project

README

        

# IVPN for iOS

![CI](https://github.com/ivpn/ios-app/workflows/CI/badge.svg)
![SwiftLint](https://github.com/ivpn/ios-app/workflows/SwiftLint/badge.svg)
![Lint Code Base](https://github.com/ivpn/ios-app/workflows/Lint%20Code%20Base/badge.svg)

**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).

* [About this Repo](#about-repo)
* [Installation](#installation)
* [Testing](#testing)
* [Deployment](#deployment)
* [Versioning](#versioning)
* [Contributing](#contributing)
* [Security Policy](#security)
* [License](#license)
* [Authors](#Authors)
* [Acknowledgements](#acknowledgements)


## About this Repo

This is the official Git repo of the [IVPN for iOS project](https://github.com/ivpn/ios-app).


## 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 14.0+
- Xcode 14.0+
- Swift 5.0+
- fastlane 2.178.0+
- Go 1.18+

### Dev dependencies

Project dev dependencies:

* [fastlane](https://fastlane.tools)
* [SwiftLint](https://github.com/realm/SwiftLint)
* [Go](https://golang.org)

Install fastlane, SwiftLint and Go:

```sh
brew install fastlane swiftlint go
```

### Dependencies

Dependencies are installed with [Swift Package Manager](https://swift.org/package-manager/).

Project dependencies:

* [WireGuardKit](https://github.com/WireGuard/wireguard-apple)
* [TunnelKit](https://github.com/passepartoutvpn/tunnelkit)
* [SnapKit](https://github.com/SnapKit/SnapKit)
* [KeychainAccess](https://github.com/kishikawakatsumi/KeychainAccess)
* [SwiftyStoreKit](https://github.com/bizz84/SwiftyStoreKit)
* [JGProgressHUD](https://github.com/JonasGessner/JGProgressHUD)
* [ActiveLabel](https://github.com/optonaut/ActiveLabel.swift)
* [ReachabilitySwift](https://github.com/ashleymills/Reachability.swift)
* [FloatingPanel](https://github.com/scenee/FloatingPanel)

### 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
```

### OpenVPN configuration

Rename and populate `OpenVPNConf.swift` file:

```sh
cp IVPNClient/Config/OpenVPNConf.template.swift IVPNClient/Config/OpenVPNConf.swift
```

### Build V2RayControl.xcframework

Build `V2RayControl.xcframework`:

```sh
./build-v2ray.sh
```

### Build liboqs.a

To compile [liboqs](https://github.com/open-quantum-safe/liboqs), additional packages are required:

```sh
brew install cmake ninja [email protected] wget doxygen graphviz astyle valgrind
pip3 install pytest pytest-xdist pyyaml
```

Build `liboqs.a`:

```sh
./build-liboqs.sh
```

### 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 -scheme IVPNClient -destination 'platform=iOS Simulator,name=iPhone 14'
```


## 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.