These apps depend on TunnelKit.
The app contains a Network Tunneling Protocol Client and allows its users to create a VPN tunnel if you are able to connect to an eduVPN or Let's Connect enabled server.
Copyright (c) 2020-2021 The Commons Conservancy. All rights reserved.
This project is licensed under the [GPLv3][license-content].
As seen in [libsignal-protocol-c][license-signal]:
Additional Permissions For Submission to Apple App Store: Provided that you are otherwise in compliance with the GPLv3 for each covered work you convey (including without limitation making the Corresponding Source available in compliance with Section 6 of the GPLv3), the Author also grants you the additional permission to convey through the Apple App Store non-source executable versions of the Program as incorporated into each applicable covered work as Executable Versions only under the Mozilla Public License version 2.0 (https://www.mozilla.org/en-US/MPL/2.0/).
Due to the usage of Network Extensions, you can not fully test this app on a Simulator.
The infrastructure for Network Extension (NE) providers is simply not present on the simulator because, conceptually, it lives ‘below’ the kernel, and the simulator is layered on the OS X kernel.
The build proces takes the number of commits on the current branch as the build number with git rev-list HEAD --count
. The version string is configured in AppVersion.xcconfig.
The exact behavior is defined in the script set_build_number.sh.
Most dependencies are managed with CocoaPods. But this repository is set up in such a way that you do not need CocoaPods to build this project, only when updating dependencies. Dependencies are defined in a Podfile, exact versions are 'locked' in Podfile.lock. All dependencies defined in the Podfile are committed to this repository.
WireGuardKit alone is managed with Swift Package Manager, tied to either a specific version or commit.
There are two flavours of apps that are built from the same codebase:
- eduVPN app
- Let’s Connect! app
This needs to be configured in two files, which are different for macOS and iOS:
- For macOS:
Config/Mac/config.json
Config/Mac/Developer-macOS.xcconfig
- For iOS:
Config/iOS/config.json
Config/iOS/Developer.xcconfig
-
SwiftLint and Go need to be installed. The build setup looks for these in the paths that HomeBrew installs into.
To install, run:
brew install swiftlint go
Go version 1.16 is required.
-
An explicit App ID needs to be created at the Apple Developer website for each platform
To do this, you can:
- Go to your Apple Developer account page
- Go to Certificates, IDs and Profiles > Identifiers
- Create an App ID with an Explicit Bundle ID, with the following Capabilities:
- App Groups
- Network Extensions
- Specify the Bundle ID in the appropriate
Developer*.xcconfig
file as described below
To build the app, run:
$ cp Config/Mac/config-eduvpn_new_discovery.json Config/Mac/config.json
$ cp Config/Mac/Developer-macOS.xcconfig.eduvpn-template Config/Mac/Developer-macOS.xcconfig
$ vim Config/Mac/Developer-macOS.xcconfig # Edit as reqd.
Then, open EduVPN.xcworkspace
in Xcode and build the 'EduVPN-macOS' target.
To build the app, run:
$ cp Config/Mac/config-letsconnect_new_discovery.json Config/Mac/config.json
$ cp Config/Mac/Developer-macOS.xcconfig.letsconnect-template Config/Mac/Developer-macOS.xcconfig
$ vim Config/Mac/Developer-macOS.xcconfig # Edit as reqd.
Then, open EduVPN.xcworkspace
in Xcode and build the 'EduVPN-macOS' target.
To build the app, run:
$ cp Config/iOS/config-eduvpn_new_discovery.json Config/iOS/config.json
$ cp Config/iOS/Developer.xcconfig.eduvpn-template Config/iOS/Developer.xcconfig
$ vim Config/iOS/Developer.xcconfig # Edit as reqd.
Then, open EduVPN.xcworkspace
in Xcode and build the 'EduVPN-iOS' target.
To build the app, run:
$ cp Config/iOS/config-letsconnect_new_discovery.json Config/iOS/config.json
$ cp Config/iOS/Developer.xcconfig.letsconnect-template Config/iOS/Developer.xcconfig
$ vim Config/iOS/Developer.xcconfig # Edit as reqd.
Then, open EduVPN.xcworkspace
in Xcode and build the 'EduVPN-iOS' target.
The app can be tested using UI tests written using XCUITest.
The tests can modify the app data, so to avoid losing your added servers, it's recommended that you use a separate app bundle identifier for running the UI tests. The app bundle identifier is configurable in Developer.xcconfig or Developer-macOS.xcconfig as specified above.
The iOS UI tests are intended to be run on a physical device (not on the iOS Simulator).
Before running the tests, specify the server credentials:
$ cp EduVPN-UITests-iOS/TestServerCredentialsiOS.swift-template EduVPN-UITests-iOS/TestServerCredentialsiOS.swift
$ vim EduVPN-UITests-iOS/TestServerCredentialsiOS.swift # Enter credentials
Then:
- Open
EduVPN.xcworkspace
in Xcode - Ensure the test targets (EduVPN-Tests-iOS, EduVPN-UITests-iOS) have correct 'Team' set under 'Signing & Capabilities'
- In the scheme selector breadcrumb panel, select the 'EduVPN-iOS' scheme and your connected iDevice
- Click on Product > Test
Do not use the iDevice when the test is running.
Before running the tests, specify the server credentials:
$ cp EduVPN-UITests-macOS/TestServerCredentialsmacOS.swift-template EduVPN-UITests-macOS/TestServerCredentialsmacOS.swift
$ vim EduVPN-UITests-macOS/TestServerCredentialsmacOS.swift # Enter credentials
Then:
- Open Safari.app, open a new private window, close all other windows
- Open
EduVPN.xcworkspace
in Xcode - Ensure the test targets (EduVPN-Tests-macOS, EduVPN-UITests-macOS) have correct 'Team' set under 'Signing & Capabilities'
- In the scheme selector breadcrumb panel, select the 'EduVPN-iOS' scheme and the macOS machine
- Click on Product > Test
Do not use the macOS machine when the test is running.