Skip to content

Commit

Permalink
Update application
Browse files Browse the repository at this point in the history
  • Loading branch information
kp-laura-sempere committed Sep 6, 2023
1 parent ebbf50b commit 99e87c7
Show file tree
Hide file tree
Showing 93 changed files with 2,948 additions and 1,093 deletions.
256 changes: 256 additions & 0 deletions .github/workflows/vpn-ios.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,256 @@
name: pia-mobile/ios/vpn-ios
on:
push:
workflow_dispatch:
concurrency:
group: "${{ github.ref }}"
cancel-in-progress: true
env:
PIA_STAGING_ENDPOINT: "${{ secrets.PIA_STAGING_ENDPOINT }}"
PIA_CUSTOM_SERVERS: chipotle251:US:chipotle251.londontrustmedia.com:108.61.57.211:8080:500 sharingan:GB:sharingan.londontrustmedia.com:185.195.200.20:8080:500
PIA_FIREBASE_PLIST: <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>CLIENT_ID</key><string>599746893663-naub4m5ppoos0tuodrjuk67t0q5saj3m.apps.googleusercontent.com</string><key>REVERSED_CLIENT_ID</key><string>com.googleusercontent.apps.599746893663-naub4m5ppoos0tuodrjuk67t0q5saj3m</string><key>API_KEY</key><string>AIzaSyD_9Gdzi4WgNfAwl9PPupph1eWnf0zstA4</string><key>GCM_SENDER_ID</key><string>599746893663</string><key>PLIST_VERSION</key><string>1</string><key>BUNDLE_ID</key><string>com.privateinternetaccess.ios.PIA-VPN</string><key>PROJECT_ID</key><string>pia-ios-e7da0</string><key>STORAGE_BUCKET</key><string>pia-ios-e7da0.appspot.com</string><key>IS_ADS_ENABLED</key><false></false><key>IS_ANALYTICS_ENABLED</key><false></false><key>IS_APPINVITE_ENABLED</key><true></true><key>IS_GCM_ENABLED</key><true></true><key>IS_SIGNIN_ENABLED</key><true></true><key>GOOGLE_APP_ID</key><string>1:599746893663:ios:9a64d6b91b33eb1f3088ea</string><key>DATABASE_URL</key><string>https://pia-ios-e7da0.firebaseio.com</string></dict></plist>
APPCENTER_API_TOKEN: "${{ secrets.APPCENTER_API_TOKEN }}"
APPCENTER_OWNER_NAME: Kape
APPCENTER_APP_NAME: PIA-VPN
APPCENTER_DISTRIBUTE_DESTINATIONS: QA,Developers
APPSTORE_USERNAME: "${{ secrets.APPSTORE_USERNAME }}"
APPSTORE_SPECIFIC_PWD: "${{ secrets.APPSTORE_SPECIFIC_PWD }}"
APPSTORE_PASSWORD: 7Uyz@VouY3pvn!gdU7Zr
APP_IDENTIFIER: "${{ secrets.APP_IDENTIFIER }}"
APPSTORE_CONNECT_TEAM_ID: '609225'
APPSTORE_DEVELOPER_TEAM_ID: "${{ secrets.APPSTORE_DEVELOPER_TEAM_ID }}"
FASTLANE_USER: "${{ secrets.FASTLANE_USER }}"
FASTLANE_PASSWORD: 7Uyz@VouY3pvn!gdU7Zr
MATCH_PASSWORD: "${{ secrets.MATCH_PASSWORD }}"
SLACK_URL: "${{ secrets.SLACK_URL }}"
DELIVER_USER: "${{ secrets.DELIVER_USER }}"
jobs:
qa_archive:
runs-on:
- self-hosted
- ios
if: (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads//^release.*$/')
timeout-minutes: 60
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
STAGE_BUILD_PATH: build
STAGE_ARTIFACTS_PATH: dist
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist
STAGE_ARCHIVE_NAME: pia-vpn
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json"
MATCH_TYPE: adhoc
GYM_SCHEME: PIA VPN dev
GYM_EXPORT_METHOD: ad-hoc
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 50
lfs: true
- run: gem install bundler --no-ri --no-rdoc
- run: bundle update
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint"
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers"
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist"
- run: bundle exec fastlane create_archive
- uses: actions/upload-artifact@v2
if: success()
with:
name: "${{ github.job }}"
retention-days: 7
path: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.*"
beta_manual_archive:
runs-on:
- self-hosted
- ios
if: github.event_name == 'workflow_dispatch'
timeout-minutes: 60
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
STAGE_BUILD_PATH: build
STAGE_ARTIFACTS_PATH: dist
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist
STAGE_ARCHIVE_NAME: pia-vpn
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json"
MATCH_TYPE: appstore
GYM_SCHEME: PIA VPN
GYM_EXPORT_METHOD: app-store
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 50
lfs: true
- run: gem install bundler --no-ri --no-rdoc
- run: bundle update
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint"
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers"
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist"
- run: bundle exec fastlane create_beta_archive
- uses: actions/upload-artifact@v2
if: success()
with:
name: "${{ github.job }}"
retention-days: 7
path: "$STAGE_TESTFLIGHT_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.*"
manual_qa_archive:
runs-on:
- self-hosted
- ios
if: github.event_name == 'workflow_dispatch'
timeout-minutes: 60
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
STAGE_BUILD_PATH: build
STAGE_ARTIFACTS_PATH: dist
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist
STAGE_ARCHIVE_NAME: pia-vpn
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json"
MATCH_TYPE: adhoc
GYM_SCHEME: PIA VPN dev
GYM_EXPORT_METHOD: ad-hoc
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 50
lfs: true
- run: gem install bundler --no-ri --no-rdoc
- run: bundle update
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint"
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers"
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist"
- run: bundle exec fastlane create_archive
- uses: actions/upload-artifact@v2
if: success()
with:
name: "${{ github.job }}"
retention-days: 7
path: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.*"
qa_deploy:
needs:
- qa_archive
- beta_manual_archive
- manual_qa_archive
runs-on:
- self-hosted
- ios
if: (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads//^release.*$/')
environment:
name: hockey
url: "$HOCKEY_URL"
timeout-minutes: 60
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
STAGE_BUILD_PATH: build
STAGE_ARTIFACTS_PATH: dist
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist
STAGE_ARCHIVE_NAME: pia-vpn
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json"
IPA_OUTPUT_PATH: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.ipa"
FL_HOCKEY_IPA: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.ipa"
FL_HOCKEY_COMMIT_SHA: "${{ github.sha }}"
FL_HOCKEY_BUILD_SERVER_URL: "${{ github.server_url }}/${{ github.repository }}/-/jobs/${{ github.job }}"
FL_HOCKEY_REPOSITORY_URL: "${{ github.server_url }}/${{ github.repository }}"
FL_HOCKEY_NOTIFY: 'false'
FL_HOCKEY_STRATEGY: replace
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 50
lfs: true
- uses: actions/download-artifact@v2
- run: gem install bundler --no-ri --no-rdoc
- run: bundle update
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint"
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers"
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist"
- run: bundle exec fastlane qa_deploy
- uses: actions/upload-artifact@v2
if: success()
with:
name: "${{ github.job }}"
retention-days: 7
path: "$SERIALIZED_ARCHIVE_JSON"
beta_manual_deploy:
needs:
- qa_archive
- beta_manual_archive
- manual_qa_archive
runs-on:
- self-hosted
- ios
if: github.event_name == 'workflow_dispatch'
environment:
name: testflight
timeout-minutes: 60
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
STAGE_BUILD_PATH: build
STAGE_ARTIFACTS_PATH: dist
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist
STAGE_ARCHIVE_NAME: pia-vpn
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json"
PILOT_IPA: "$STAGE_TESTFLIGHT_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.ipa"
PILOT_DISTRIBUTE_EXTERNAL: 'true'
DEMO_ACCOUNT_REQUIRED: 'true'
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 50
lfs: true
- uses: actions/download-artifact@v2
- run: gem install bundler --no-ri --no-rdoc
- run: bundle update
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint"
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers"
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist"
- run: bundle exec fastlane beta_deploy
manual_qa_deploy:
needs:
- qa_archive
- beta_manual_archive
- manual_qa_archive
runs-on:
- self-hosted
- ios
if: github.event_name == 'workflow_dispatch'
environment:
name: hockey
url: "$HOCKEY_URL"
timeout-minutes: 60
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
STAGE_BUILD_PATH: build
STAGE_ARTIFACTS_PATH: dist
STAGE_TESTFLIGHT_ARTIFACTS_PATH: apple_dist
STAGE_ARCHIVE_NAME: pia-vpn
SERIALIZED_ARCHIVE_JSON: "$STAGE_ARTIFACTS_PATH/notify.json"
IPA_OUTPUT_PATH: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.ipa"
FL_HOCKEY_IPA: "$STAGE_ARTIFACTS_PATH/$STAGE_ARCHIVE_NAME.ipa"
FL_HOCKEY_COMMIT_SHA: "${{ github.sha }}"
FL_HOCKEY_BUILD_SERVER_URL: "${{ github.server_url }}/${{ github.repository }}/-/jobs/${{ github.job }}"
FL_HOCKEY_REPOSITORY_URL: "${{ github.server_url }}/${{ github.repository }}"
FL_HOCKEY_NOTIFY: 'false'
FL_HOCKEY_STRATEGY: replace
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 50
lfs: true
- uses: actions/download-artifact@v2
- run: gem install bundler --no-ri --no-rdoc
- run: bundle update
- run: echo "$PIA_STAGING_ENDPOINT" >"Resources/staging.endpoint"
- run: echo "$PIA_CUSTOM_SERVERS" >"Resources/custom.servers"
- run: echo "$PIA_FIREBASE_PLIST" >"Resources/GoogleService-Info.plist"
- run: bundle exec fastlane qa_deploy
- uses: actions/upload-artifact@v2
if: success()
with:
name: "${{ github.job }}"
retention-days: 7
path: "$SERIALIZED_ARCHIVE_JSON"
2 changes: 1 addition & 1 deletion PIA VPN Tunnel/PacketTunnelProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
// Internet Access iOS Client. If not, see <https://www.gnu.org/licenses/>.
//

import TunnelKit
import TunnelKitOpenVPNAppExtension

class PacketTunnelProvider: OpenVPNTunnelProvider {
}
17 changes: 17 additions & 0 deletions PIA VPN UITests/Credentials.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>expired</key>
<dict/>
<key>valid</key>
<dict/>
<key>invalid</key>
<dict>
<key>username</key>
<string>random.username</string>
<key>password</key>
<string>passWord@533</string>
</dict>
</dict>
</plist>
47 changes: 47 additions & 0 deletions PIA VPN UITests/CredentialsUtil.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
//
// CredentialsUtil.swift
// PIA VPN
//
// Created by Waleed Mahmood on 08.03.22.
// Copyright © 2022 Private Internet Access Inc. All rights reserved.
//

import Foundation

public enum CredentialsType: String {
case valid = "valid"
case expired = "expired"
case invalid = "invalid"
}

public struct Credentials: Codable {
let username: String
let password: String

init(from dictionary: Any) throws {
let data = try JSONSerialization.data(withJSONObject: dictionary, options: .prettyPrinted)
let decoder = JSONDecoder()
self = try decoder.decode(Self.self, from: data)
}
}

public class CredentialsUtil {
public static func credentials(type: CredentialsType) -> Credentials {
let bundle = Bundle(for: CredentialsUtil.self)
guard let filePath = bundle.path(forResource: "Credentials", ofType: "plist") else {
fatalError("Couldn't find file 'Credentials.plist'")
}

let plist = NSDictionary(contentsOfFile: filePath)
guard let dictionary = plist?.object(forKey: type.rawValue) as? [String: String] else {
fatalError("Couldn't find key '\(type.rawValue)' in 'Credentials.plist'")
}

do {
return try Credentials(from: dictionary)
}
catch {
  fatalError("Credential file does not contain required information")
}
}
}
33 changes: 33 additions & 0 deletions PIA VPN UITests/PIALaunchTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
//
// PIALaunchTests.swift
// PIA VPN UITests
//
// Created by Waleed Mahmood on 01.03.22.
// Copyright © 2022 Private Internet Access Inc. All rights reserved.
//

import XCTest

class PIALaunchTests: XCTestCase {

override class var runsForEachTargetApplicationUIConfiguration: Bool {
true
}

override func setUpWithError() throws {
continueAfterFailure = false
}

func testLaunch() throws {
let app = XCUIApplication()
app.launch()

// Insert steps here to perform after app launch but before taking a screenshot,
// such as logging into a test account or navigating somewhere in the app

let attachment = XCTAttachment(screenshot: app.screenshot())
attachment.name = "Launch Screen"
attachment.lifetime = .keepAlways
add(attachment)
}
}
Loading

0 comments on commit 99e87c7

Please sign in to comment.