Refactor library targets (#799)
Renames: - AppUI → UILibrary - AppUIPlatform → AppUI (conditional umbrella) + AppUI[Main|TV] - APILibrary/CommonLibrary/UtilsLibrary → Common[API|Library|Utils] Dependencies: - AppUI → UILibrary - UILibrary → AppLibrary, CommonAPI - AppLibrary → CommonLibrary, CommonUtils
This commit is contained in:
parent
72e784272a
commit
070b661c43
2
Gemfile
2
Gemfile
|
@ -1,6 +1,6 @@
|
||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
|
|
||||||
gem "fastlane", :github => "keeshux/fastlane", :ref => "2f464bc16fbebf4dbac52ed7362993434af3f022"
|
gem "fastlane", :github => "keeshux/fastlane", :ref => "91a3bc8cbf26dd761920939fd7579ee4362ce9b3"
|
||||||
gem "dotenv"
|
gem "dotenv"
|
||||||
|
|
||||||
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
|
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
|
||||||
|
|
42
Gemfile.lock
42
Gemfile.lock
|
@ -1,9 +1,9 @@
|
||||||
GIT
|
GIT
|
||||||
remote: https://github.com/keeshux/fastlane.git
|
remote: https://github.com/keeshux/fastlane.git
|
||||||
revision: 2f464bc16fbebf4dbac52ed7362993434af3f022
|
revision: 91a3bc8cbf26dd761920939fd7579ee4362ce9b3
|
||||||
ref: 2f464bc16fbebf4dbac52ed7362993434af3f022
|
ref: 91a3bc8cbf26dd761920939fd7579ee4362ce9b3
|
||||||
specs:
|
specs:
|
||||||
fastlane (2.223.1)
|
fastlane (2.225.0)
|
||||||
CFPropertyList (>= 2.3, < 4.0.0)
|
CFPropertyList (>= 2.3, < 4.0.0)
|
||||||
addressable (>= 2.8, < 3.0.0)
|
addressable (>= 2.8, < 3.0.0)
|
||||||
artifactory (~> 3.0)
|
artifactory (~> 3.0)
|
||||||
|
@ -19,6 +19,7 @@ GIT
|
||||||
faraday-cookie_jar (~> 0.0.6)
|
faraday-cookie_jar (~> 0.0.6)
|
||||||
faraday_middleware (~> 1.0)
|
faraday_middleware (~> 1.0)
|
||||||
fastimage (>= 2.1.0, < 3.0.0)
|
fastimage (>= 2.1.0, < 3.0.0)
|
||||||
|
fastlane-sirp (>= 1.0.0)
|
||||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
gh_inspector (>= 1.1.2, < 2.0.0)
|
||||||
google-apis-androidpublisher_v3 (~> 0.3)
|
google-apis-androidpublisher_v3 (~> 0.3)
|
||||||
google-apis-playcustomapp_v1 (~> 0.1)
|
google-apis-playcustomapp_v1 (~> 0.1)
|
||||||
|
@ -57,20 +58,20 @@ GEM
|
||||||
artifactory (3.0.17)
|
artifactory (3.0.17)
|
||||||
atomos (0.1.3)
|
atomos (0.1.3)
|
||||||
aws-eventstream (1.3.0)
|
aws-eventstream (1.3.0)
|
||||||
aws-partitions (1.981.0)
|
aws-partitions (1.1001.0)
|
||||||
aws-sdk-core (3.209.1)
|
aws-sdk-core (3.211.0)
|
||||||
aws-eventstream (~> 1, >= 1.3.0)
|
aws-eventstream (~> 1, >= 1.3.0)
|
||||||
aws-partitions (~> 1, >= 1.651.0)
|
aws-partitions (~> 1, >= 1.992.0)
|
||||||
aws-sigv4 (~> 1.9)
|
aws-sigv4 (~> 1.9)
|
||||||
jmespath (~> 1, >= 1.6.1)
|
jmespath (~> 1, >= 1.6.1)
|
||||||
aws-sdk-kms (1.94.0)
|
aws-sdk-kms (1.95.0)
|
||||||
aws-sdk-core (~> 3, >= 3.207.0)
|
aws-sdk-core (~> 3, >= 3.210.0)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.5)
|
||||||
aws-sdk-s3 (1.166.0)
|
aws-sdk-s3 (1.169.0)
|
||||||
aws-sdk-core (~> 3, >= 3.207.0)
|
aws-sdk-core (~> 3, >= 3.210.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.5)
|
||||||
aws-sigv4 (1.10.0)
|
aws-sigv4 (1.10.1)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
aws-eventstream (~> 1, >= 1.0.2)
|
||||||
babosa (1.0.4)
|
babosa (1.0.4)
|
||||||
base64 (0.2.0)
|
base64 (0.2.0)
|
||||||
|
@ -87,7 +88,7 @@ GEM
|
||||||
domain_name (0.6.20240107)
|
domain_name (0.6.20240107)
|
||||||
dotenv (2.8.1)
|
dotenv (2.8.1)
|
||||||
emoji_regex (3.2.3)
|
emoji_regex (3.2.3)
|
||||||
excon (0.111.0)
|
excon (0.112.0)
|
||||||
faraday (1.10.4)
|
faraday (1.10.4)
|
||||||
faraday-em_http (~> 1.0)
|
faraday-em_http (~> 1.0)
|
||||||
faraday-em_synchrony (~> 1.0)
|
faraday-em_synchrony (~> 1.0)
|
||||||
|
@ -121,6 +122,8 @@ GEM
|
||||||
loco_strings (~> 0.1.4.1)
|
loco_strings (~> 0.1.4.1)
|
||||||
ruby-openai (~> 3.7)
|
ruby-openai (~> 3.7)
|
||||||
fastlane-plugin-versioning (0.6.0)
|
fastlane-plugin-versioning (0.6.0)
|
||||||
|
fastlane-sirp (1.0.0)
|
||||||
|
sysrandom (~> 1.0)
|
||||||
gh_inspector (1.1.3)
|
gh_inspector (1.1.3)
|
||||||
google-apis-androidpublisher_v3 (0.54.0)
|
google-apis-androidpublisher_v3 (0.54.0)
|
||||||
google-apis-core (>= 0.11.0, < 2.a)
|
google-apis-core (>= 0.11.0, < 2.a)
|
||||||
|
@ -167,8 +170,8 @@ GEM
|
||||||
multi_xml (>= 0.5.2)
|
multi_xml (>= 0.5.2)
|
||||||
httpclient (2.8.3)
|
httpclient (2.8.3)
|
||||||
jmespath (1.6.2)
|
jmespath (1.6.2)
|
||||||
json (2.7.2)
|
json (2.7.5)
|
||||||
jwt (2.9.1)
|
jwt (2.9.3)
|
||||||
base64
|
base64
|
||||||
loco_strings (0.1.4.1)
|
loco_strings (0.1.4.1)
|
||||||
nokogiri (~> 1.13, >= 1.13.8)
|
nokogiri (~> 1.13, >= 1.13.8)
|
||||||
|
@ -179,7 +182,7 @@ GEM
|
||||||
multi_xml (0.7.1)
|
multi_xml (0.7.1)
|
||||||
bigdecimal (~> 3.1)
|
bigdecimal (~> 3.1)
|
||||||
multipart-post (2.4.1)
|
multipart-post (2.4.1)
|
||||||
nanaimo (0.3.0)
|
nanaimo (0.4.0)
|
||||||
naturally (2.2.1)
|
naturally (2.2.1)
|
||||||
nkf (0.2.0)
|
nkf (0.2.0)
|
||||||
nokogiri (1.16.7)
|
nokogiri (1.16.7)
|
||||||
|
@ -198,7 +201,7 @@ GEM
|
||||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||||
uber (< 0.2.0)
|
uber (< 0.2.0)
|
||||||
retriable (3.1.2)
|
retriable (3.1.2)
|
||||||
rexml (3.3.8)
|
rexml (3.3.9)
|
||||||
rouge (2.0.7)
|
rouge (2.0.7)
|
||||||
ruby-openai (3.7.0)
|
ruby-openai (3.7.0)
|
||||||
httparty (>= 0.18.1)
|
httparty (>= 0.18.1)
|
||||||
|
@ -213,6 +216,7 @@ GEM
|
||||||
simctl (1.6.10)
|
simctl (1.6.10)
|
||||||
CFPropertyList
|
CFPropertyList
|
||||||
naturally
|
naturally
|
||||||
|
sysrandom (1.0.5)
|
||||||
terminal-notifier (2.0.0)
|
terminal-notifier (2.0.0)
|
||||||
terminal-table (3.0.2)
|
terminal-table (3.0.2)
|
||||||
unicode-display_width (>= 1.1.1, < 3)
|
unicode-display_width (>= 1.1.1, < 3)
|
||||||
|
@ -224,13 +228,13 @@ GEM
|
||||||
uber (0.1.0)
|
uber (0.1.0)
|
||||||
unicode-display_width (2.6.0)
|
unicode-display_width (2.6.0)
|
||||||
word_wrap (1.0.0)
|
word_wrap (1.0.0)
|
||||||
xcodeproj (1.25.0)
|
xcodeproj (1.27.0)
|
||||||
CFPropertyList (>= 2.3.3, < 4.0)
|
CFPropertyList (>= 2.3.3, < 4.0)
|
||||||
atomos (~> 0.1.3)
|
atomos (~> 0.1.3)
|
||||||
claide (>= 1.0.2, < 2.0)
|
claide (>= 1.0.2, < 2.0)
|
||||||
colored2 (~> 3.1)
|
colored2 (~> 3.1)
|
||||||
nanaimo (~> 0.3.0)
|
nanaimo (~> 0.4.0)
|
||||||
rexml (>= 3.3.2, < 4.0)
|
rexml (>= 3.3.6, < 4.0)
|
||||||
xcpretty (0.3.0)
|
xcpretty (0.3.0)
|
||||||
rouge (~> 2.0.7)
|
rouge (~> 2.0.7)
|
||||||
xcpretty-travis-formatter (1.0.1)
|
xcpretty-travis-formatter (1.0.1)
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
0E182C6C2CD61CD800051DB2 /* AppUI in Frameworks */ = {isa = PBXBuildFile; productRef = 0E182C6B2CD61CD800051DB2 /* AppUI */; };
|
||||||
0E757F132CD0CFFC006E13E1 /* PassepartoutLoginItemApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E757F122CD0CFFC006E13E1 /* PassepartoutLoginItemApp.swift */; };
|
0E757F132CD0CFFC006E13E1 /* PassepartoutLoginItemApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E757F122CD0CFFC006E13E1 /* PassepartoutLoginItemApp.swift */; };
|
||||||
0E757F202CD0D22B006E13E1 /* PassepartoutLoginItem.app in Embed Login Item */ = {isa = PBXBuildFile; fileRef = 0E757F102CD0CFFC006E13E1 /* PassepartoutLoginItem.app */; platformFilters = (macos, ); settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
0E757F202CD0D22B006E13E1 /* PassepartoutLoginItem.app in Embed Login Item */ = {isa = PBXBuildFile; fileRef = 0E757F102CD0CFFC006E13E1 /* PassepartoutLoginItem.app */; platformFilters = (macos, ); settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||||
0E757F232CD0D2BD006E13E1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E757F212CD0D2B7006E13E1 /* AppDelegate.swift */; };
|
0E757F232CD0D2BD006E13E1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E757F212CD0D2B7006E13E1 /* AppDelegate.swift */; };
|
||||||
|
@ -19,7 +20,6 @@
|
||||||
0EC066D12C7DC47600D88A94 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0EC066D02C7DC47600D88A94 /* LaunchScreen.storyboard */; platformFilter = ios; };
|
0EC066D12C7DC47600D88A94 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0EC066D02C7DC47600D88A94 /* LaunchScreen.storyboard */; platformFilter = ios; };
|
||||||
0EC332CA2B8A1808000B9C2F /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EC332C92B8A1808000B9C2F /* NetworkExtension.framework */; };
|
0EC332CA2B8A1808000B9C2F /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EC332C92B8A1808000B9C2F /* NetworkExtension.framework */; };
|
||||||
0EC332D22B8A1808000B9C2F /* PassepartoutTunnel.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 0EC332C82B8A1808000B9C2F /* PassepartoutTunnel.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
0EC332D22B8A1808000B9C2F /* PassepartoutTunnel.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 0EC332C82B8A1808000B9C2F /* PassepartoutTunnel.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||||
0EC4A7132CD597EF00B7CAAD /* AppUIPlatform in Frameworks */ = {isa = PBXBuildFile; productRef = 0EC4A7122CD597EF00B7CAAD /* AppUIPlatform */; };
|
|
||||||
0EC797422B9378E000C093B7 /* Shared+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC797402B9378E000C093B7 /* Shared+App.swift */; };
|
0EC797422B9378E000C093B7 /* Shared+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC797402B9378E000C093B7 /* Shared+App.swift */; };
|
||||||
0EC797432B9378E000C093B7 /* Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC797412B9378E000C093B7 /* Shared.swift */; };
|
0EC797432B9378E000C093B7 /* Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC797412B9378E000C093B7 /* Shared.swift */; };
|
||||||
0EC797442B93790600C093B7 /* Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC797412B9378E000C093B7 /* Shared.swift */; };
|
0EC797442B93790600C093B7 /* Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC797412B9378E000C093B7 /* Shared.swift */; };
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
0EC4A7132CD597EF00B7CAAD /* AppUIPlatform in Frameworks */,
|
0E182C6C2CD61CD800051DB2 /* AppUI in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -290,7 +290,7 @@
|
||||||
);
|
);
|
||||||
name = Passepartout;
|
name = Passepartout;
|
||||||
packageProductDependencies = (
|
packageProductDependencies = (
|
||||||
0EC4A7122CD597EF00B7CAAD /* AppUIPlatform */,
|
0E182C6B2CD61CD800051DB2 /* AppUI */,
|
||||||
);
|
);
|
||||||
productName = PassepartoutKit;
|
productName = PassepartoutKit;
|
||||||
productReference = 0E06D18F2B87629100176E1D /* Passepartout.app */;
|
productReference = 0E06D18F2B87629100176E1D /* Passepartout.app */;
|
||||||
|
@ -983,6 +983,10 @@
|
||||||
/* End XCConfigurationList section */
|
/* End XCConfigurationList section */
|
||||||
|
|
||||||
/* Begin XCSwiftPackageProductDependency section */
|
/* Begin XCSwiftPackageProductDependency section */
|
||||||
|
0E182C6B2CD61CD800051DB2 /* AppUI */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
productName = AppUI;
|
||||||
|
};
|
||||||
0E6C0A022BF4047100450362 /* AppLibrary */ = {
|
0E6C0A022BF4047100450362 /* AppLibrary */ = {
|
||||||
isa = XCSwiftPackageProductDependency;
|
isa = XCSwiftPackageProductDependency;
|
||||||
productName = AppLibrary;
|
productName = AppLibrary;
|
||||||
|
@ -995,10 +999,6 @@
|
||||||
isa = XCSwiftPackageProductDependency;
|
isa = XCSwiftPackageProductDependency;
|
||||||
productName = TunnelLibrary;
|
productName = TunnelLibrary;
|
||||||
};
|
};
|
||||||
0EC4A7122CD597EF00B7CAAD /* AppUIPlatform */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
productName = AppUIPlatform;
|
|
||||||
};
|
|
||||||
/* End XCSwiftPackageProductDependency section */
|
/* End XCSwiftPackageProductDependency section */
|
||||||
};
|
};
|
||||||
rootObject = 0E06D1872B87629100176E1D /* Project object */;
|
rootObject = 0E06D1872B87629100176E1D /* Project object */;
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
"location" : "git@github.com:passepartoutvpn/passepartoutkit-source",
|
"location" : "git@github.com:passepartoutvpn/passepartoutkit-source",
|
||||||
"state" : {
|
"state" : {
|
||||||
"revision" : "e95c7b54dc11e744d9b40a722fccf752436ac0ef"
|
"revision" : "b32b63ab8e09883f965737bb6214dfb81e38283a"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,18 +23,18 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppUI
|
|
||||||
import CommonLibrary
|
import CommonLibrary
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
import UILibrary
|
||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
final class AppDelegate: NSObject {
|
final class AppDelegate: NSObject {
|
||||||
let context: AppContext = .shared
|
let context: AppContext = .shared
|
||||||
// let context: AppContext = .mock(withRegistry: .shared)
|
// let context: AppContext = .mock(withRegistry: .shared)
|
||||||
|
|
||||||
func configure(with appUIConfiguring: AppUIConfiguring) {
|
func configure(with uiConfiguring: UILibraryConfiguring) {
|
||||||
AppUI(appUIConfiguring)
|
UILibrary(uiConfiguring)
|
||||||
.configure(with: context)
|
.configure(with: context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,10 +25,6 @@ let package = Package(
|
||||||
name: "AppUIMain",
|
name: "AppUIMain",
|
||||||
targets: ["AppUIMain"]
|
targets: ["AppUIMain"]
|
||||||
),
|
),
|
||||||
.library(
|
|
||||||
name: "AppUIPlatform",
|
|
||||||
targets: ["AppUIPlatform"]
|
|
||||||
),
|
|
||||||
.library(
|
.library(
|
||||||
name: "AppUITV",
|
name: "AppUITV",
|
||||||
targets: ["AppUITV"]
|
targets: ["AppUITV"]
|
||||||
|
@ -36,11 +32,15 @@ let package = Package(
|
||||||
.library(
|
.library(
|
||||||
name: "TunnelLibrary",
|
name: "TunnelLibrary",
|
||||||
targets: ["CommonLibrary"]
|
targets: ["CommonLibrary"]
|
||||||
|
),
|
||||||
|
.library(
|
||||||
|
name: "UILibrary",
|
||||||
|
targets: ["UILibrary"]
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
dependencies: [
|
dependencies: [
|
||||||
// .package(url: "git@github.com:passepartoutvpn/passepartoutkit-source", from: "0.9.0"),
|
// .package(url: "git@github.com:passepartoutvpn/passepartoutkit-source", from: "0.9.0"),
|
||||||
.package(url: "git@github.com:passepartoutvpn/passepartoutkit-source", revision: "e95c7b54dc11e744d9b40a722fccf752436ac0ef"),
|
.package(url: "git@github.com:passepartoutvpn/passepartoutkit-source", revision: "b32b63ab8e09883f965737bb6214dfb81e38283a"),
|
||||||
// .package(path: "../../../passepartoutkit-source"),
|
// .package(path: "../../../passepartoutkit-source"),
|
||||||
.package(url: "git@github.com:passepartoutvpn/passepartoutkit-source-openvpn-openssl", from: "0.9.1"),
|
.package(url: "git@github.com:passepartoutvpn/passepartoutkit-source-openvpn-openssl", from: "0.9.1"),
|
||||||
// .package(url: "git@github.com:passepartoutvpn/passepartoutkit-source-openvpn-openssl", revision: "031863a1cd683962a7dfe68e20b91fa820a1ecce"),
|
// .package(url: "git@github.com:passepartoutvpn/passepartoutkit-source-openvpn-openssl", revision: "031863a1cd683962a7dfe68e20b91fa820a1ecce"),
|
||||||
|
@ -53,13 +53,6 @@ let package = Package(
|
||||||
targets: [
|
targets: [
|
||||||
// Targets are the basic building blocks of a package, defining a module or a test suite.
|
// Targets are the basic building blocks of a package, defining a module or a test suite.
|
||||||
// Targets can depend on other targets in this package and products from dependencies.
|
// Targets can depend on other targets in this package and products from dependencies.
|
||||||
.target(
|
|
||||||
name: "APILibrary",
|
|
||||||
dependencies: ["CommonLibrary"],
|
|
||||||
resources: [
|
|
||||||
.copy("API")
|
|
||||||
]
|
|
||||||
),
|
|
||||||
.target(
|
.target(
|
||||||
name: "AppData",
|
name: "AppData",
|
||||||
dependencies: []
|
dependencies: []
|
||||||
|
@ -87,42 +80,38 @@ let package = Package(
|
||||||
.target(
|
.target(
|
||||||
name: "AppLibrary",
|
name: "AppLibrary",
|
||||||
dependencies: [
|
dependencies: [
|
||||||
"APILibrary",
|
"CommonLibrary",
|
||||||
"Kvitto",
|
"CommonUtils",
|
||||||
"UtilsLibrary"
|
"Kvitto"
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
.target(
|
.target(
|
||||||
name: "AppUI",
|
name: "AppUI",
|
||||||
dependencies: [
|
|
||||||
"AppDataProfiles",
|
|
||||||
"AppDataProviders",
|
|
||||||
"AppLibrary"
|
|
||||||
],
|
|
||||||
resources: [
|
|
||||||
.process("Resources")
|
|
||||||
]
|
|
||||||
),
|
|
||||||
.target(
|
|
||||||
name: "AppUIMain",
|
|
||||||
dependencies: [
|
|
||||||
"AppUI",
|
|
||||||
"LegacyV2"
|
|
||||||
],
|
|
||||||
resources: [
|
|
||||||
.process("Resources")
|
|
||||||
]
|
|
||||||
),
|
|
||||||
.target(
|
|
||||||
name: "AppUIPlatform",
|
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.target(name: "AppUIMain", condition: .when(platforms: [.iOS, .macOS])),
|
.target(name: "AppUIMain", condition: .when(platforms: [.iOS, .macOS])),
|
||||||
.target(name: "AppUITV", condition: .when(platforms: [.tvOS]))
|
.target(name: "AppUITV", condition: .when(platforms: [.tvOS]))
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
|
.target(
|
||||||
|
name: "AppUIMain",
|
||||||
|
dependencies: [
|
||||||
|
"LegacyV2",
|
||||||
|
"UILibrary"
|
||||||
|
],
|
||||||
|
resources: [
|
||||||
|
.process("Resources")
|
||||||
|
]
|
||||||
|
),
|
||||||
.target(
|
.target(
|
||||||
name: "AppUITV",
|
name: "AppUITV",
|
||||||
dependencies: ["AppUI"]
|
dependencies: ["UILibrary"]
|
||||||
|
),
|
||||||
|
.target(
|
||||||
|
name: "CommonAPI",
|
||||||
|
dependencies: ["CommonLibrary"],
|
||||||
|
resources: [
|
||||||
|
.copy("API")
|
||||||
|
]
|
||||||
),
|
),
|
||||||
.target(
|
.target(
|
||||||
name: "CommonLibrary",
|
name: "CommonLibrary",
|
||||||
|
@ -135,10 +124,13 @@ let package = Package(
|
||||||
.process("Resources")
|
.process("Resources")
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
|
.target(
|
||||||
|
name: "CommonUtils"
|
||||||
|
),
|
||||||
.target(
|
.target(
|
||||||
name: "LegacyV2",
|
name: "LegacyV2",
|
||||||
dependencies: [
|
dependencies: [
|
||||||
"UtilsLibrary",
|
"CommonUtils",
|
||||||
.product(name: "PassepartoutKit", package: "passepartoutkit-source")
|
.product(name: "PassepartoutKit", package: "passepartoutkit-source")
|
||||||
],
|
],
|
||||||
resources: [
|
resources: [
|
||||||
|
@ -146,7 +138,16 @@ let package = Package(
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
.target(
|
.target(
|
||||||
name: "UtilsLibrary"
|
name: "UILibrary",
|
||||||
|
dependencies: [
|
||||||
|
"AppDataProfiles",
|
||||||
|
"AppDataProviders",
|
||||||
|
"AppLibrary",
|
||||||
|
"CommonAPI"
|
||||||
|
],
|
||||||
|
resources: [
|
||||||
|
.process("Resources")
|
||||||
|
]
|
||||||
),
|
),
|
||||||
.testTarget(
|
.testTarget(
|
||||||
name: "AppLibraryTests",
|
name: "AppLibraryTests",
|
||||||
|
@ -157,8 +158,8 @@ let package = Package(
|
||||||
dependencies: ["AppUIMain"]
|
dependencies: ["AppUIMain"]
|
||||||
),
|
),
|
||||||
.testTarget(
|
.testTarget(
|
||||||
name: "AppUITests",
|
name: "UILibraryTests",
|
||||||
dependencies: ["AppUI"]
|
dependencies: ["UILibrary"]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -26,10 +26,10 @@
|
||||||
import AppData
|
import AppData
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
import Combine
|
import Combine
|
||||||
|
import CommonUtils
|
||||||
import CoreData
|
import CoreData
|
||||||
import Foundation
|
import Foundation
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
extension AppData {
|
extension AppData {
|
||||||
public static func cdProfileRepositoryV3(
|
public static func cdProfileRepositoryV3(
|
||||||
|
|
|
@ -25,10 +25,10 @@
|
||||||
|
|
||||||
import AppData
|
import AppData
|
||||||
import Combine
|
import Combine
|
||||||
|
import CommonUtils
|
||||||
import CoreData
|
import CoreData
|
||||||
import Foundation
|
import Foundation
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
extension AppData {
|
extension AppData {
|
||||||
public static func cdProviderRepositoryV3(
|
public static func cdProviderRepositoryV3(
|
||||||
|
|
|
@ -24,10 +24,10 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppData
|
import AppData
|
||||||
|
import CommonUtils
|
||||||
import CoreData
|
import CoreData
|
||||||
import Foundation
|
import Foundation
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
final class CDVPNProviderServerRepositoryV3: VPNProviderServerRepository {
|
final class CDVPNProviderServerRepositoryV3: VPNProviderServerRepository {
|
||||||
private let context: NSManagedObjectContext
|
private let context: NSManagedObjectContext
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import CommonLibrary
|
import CommonLibrary
|
||||||
|
import CommonUtils
|
||||||
import Foundation
|
import Foundation
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
public struct AppProduct: RawRepresentable, Hashable, Sendable {
|
public struct AppProduct: RawRepresentable, Hashable, Sendable {
|
||||||
public let rawValue: String
|
public let rawValue: String
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import Foundation
|
import Foundation
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
public protocol AppProductHelper: InAppHelper where ProductIdentifier == AppProduct {
|
public protocol AppProductHelper: InAppHelper where ProductIdentifier == AppProduct {
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import Foundation
|
import Foundation
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
public protocol AppReceiptReader: InAppReceiptReader where UserLevel == AppUserLevel {
|
public protocol AppReceiptReader: InAppReceiptReader where UserLevel == AppUserLevel {
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import Foundation
|
import Foundation
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
// FIXME: #424, reload receipt + objectWillChange on purchase/transactions
|
// FIXME: #424, reload receipt + objectWillChange on purchase/transactions
|
||||||
|
|
||||||
|
|
|
@ -23,10 +23,10 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import Foundation
|
import Foundation
|
||||||
import Kvitto
|
import Kvitto
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
public final class KvittoReceiptReader: AppReceiptReader {
|
public final class KvittoReceiptReader: AppReceiptReader {
|
||||||
public init() {
|
public init() {
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import Foundation
|
import Foundation
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
public actor MockAppProductHelper: AppProductHelper {
|
public actor MockAppProductHelper: AppProductHelper {
|
||||||
public private(set) var products: [AppProduct: InAppProduct]
|
public private(set) var products: [AppProduct: InAppProduct]
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import Foundation
|
import Foundation
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
public actor MockAppReceiptReader: AppReceiptReader {
|
public actor MockAppReceiptReader: AppReceiptReader {
|
||||||
private var receipt: InAppReceipt?
|
private var receipt: InAppReceipt?
|
||||||
|
|
|
@ -23,10 +23,10 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
@_exported import AppUI
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
@_exported import UILibrary
|
||||||
|
|
||||||
public final class AppUIMain: AppUIConfiguring {
|
public final class AppUIMain: UILibraryConfiguring {
|
||||||
public init() {
|
public init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import Foundation
|
import Foundation
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
final class ProfileImporter: ObservableObject {
|
final class ProfileImporter: ObservableObject {
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
import CommonLibrary
|
import CommonLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct AboutView: View {
|
struct AboutView: View {
|
||||||
let profileManager: ProfileManager
|
let profileManager: ProfileManager
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct CreditsView: View {
|
struct CreditsView: View {
|
||||||
var body: some View {
|
var body: some View {
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct AppToolbar: ToolbarContent, SizeClassProviding {
|
struct AppToolbar: ToolbarContent, SizeClassProviding {
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct InstalledProfileView: View, Routable {
|
struct InstalledProfileView: View, Routable {
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfileContainerView: View, Routable {
|
struct ProfileContainerView: View, Routable {
|
||||||
let layout: ProfilesLayout
|
let layout: ProfilesLayout
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfileContextMenu: View, Routable {
|
struct ProfileContextMenu: View, Routable {
|
||||||
let profileManager: ProfileManager
|
let profileManager: ProfileManager
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfileDuplicateButton<Label>: View where Label: View {
|
struct ProfileDuplicateButton<Label>: View where Label: View {
|
||||||
let profileManager: ProfileManager
|
let profileManager: ProfileManager
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfileGridView: View, Routable, TunnelInstallationProviding {
|
struct ProfileGridView: View, Routable, TunnelInstallationProviding {
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfileImporterModifier: ViewModifier {
|
struct ProfileImporterModifier: ViewModifier {
|
||||||
let profileManager: ProfileManager
|
let profileManager: ProfileManager
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfileListView: View, Routable, TunnelInstallationProviding {
|
struct ProfileListView: View, Routable, TunnelInstallationProviding {
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfileRowView: View, Routable {
|
struct ProfileRowView: View, Routable {
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfilesLayoutPicker: View {
|
struct ProfilesLayoutPicker: View {
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct TunnelRestartButton<Label>: View where Label: View {
|
struct TunnelRestartButton<Label>: View where Label: View {
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
import CommonLibrary
|
import CommonLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
extension DebugLogView {
|
extension DebugLogView {
|
||||||
static func withApp(parameters: Constants.Log) -> DebugLogView {
|
static func withApp(parameters: Constants.Log) -> DebugLogView {
|
||||||
|
@ -93,7 +93,7 @@ private extension DebugLogView {
|
||||||
|
|
||||||
var copyButton: some View {
|
var copyButton: some View {
|
||||||
Button {
|
Button {
|
||||||
copyToPasteboard(content)
|
Utils.copyToPasteboard(content)
|
||||||
} label: {
|
} label: {
|
||||||
ThemeImage(.copy)
|
ThemeImage(.copy)
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,10 +26,10 @@
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
|
|
||||||
import CommonLibrary
|
import CommonLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UIKit
|
import UIKit
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
extension ReportIssueButton: View {
|
extension ReportIssueButton: View {
|
||||||
var body: some View {
|
var body: some View {
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import Combine
|
import Combine
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct DNSView: View, ModuleDraftEditing {
|
struct DNSView: View, ModuleDraftEditing {
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct HTTPProxyView: View, ModuleDraftEditing {
|
struct HTTPProxyView: View, ModuleDraftEditing {
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct IPView: View, ModuleDraftEditing {
|
struct IPView: View, ModuleDraftEditing {
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct OnDemandView: View, ModuleDraftEditing {
|
struct OnDemandView: View, ModuleDraftEditing {
|
||||||
|
|
||||||
|
|
|
@ -24,10 +24,10 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import CPassepartoutOpenVPNOpenSSL
|
import CPassepartoutOpenVPNOpenSSL
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct OpenVPNView: View, ModuleDraftEditing {
|
struct OpenVPNView: View, ModuleDraftEditing {
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
enum ModuleRow: Hashable {
|
enum ModuleRow: Hashable {
|
||||||
enum CopyOnTap: Int, Hashable, Comparable {
|
enum CopyOnTap: Int, Hashable, Comparable {
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfileCoordinator: View {
|
struct ProfileCoordinator: View {
|
||||||
struct Flow {
|
struct Flow {
|
||||||
|
|
|
@ -26,9 +26,9 @@
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfileEditView: View, Routable {
|
struct ProfileEditView: View, Routable {
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
|
|
||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ModuleListView: View, Routable {
|
struct ModuleListView: View, Routable {
|
||||||
static let generalModuleId = UUID()
|
static let generalModuleId = UUID()
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
|
|
||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfileSplitView: View, Routable {
|
struct ProfileSplitView: View, Routable {
|
||||||
let profileEditor: ProfileEditor
|
let profileEditor: ProfileEditor
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonAPI
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonAPI
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct VPNProviderContentModifier<Configuration, ProviderRows>: ViewModifier where Configuration: ProviderConfigurationIdentifiable & Codable, ProviderRows: View {
|
struct VPNProviderContentModifier<Configuration, ProviderRows>: ViewModifier where Configuration: ProviderConfigurationIdentifiable & Codable, ProviderRows: View {
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct VPNProviderServerCoordinator<Configuration>: View where Configuration: ProviderConfigurationIdentifiable & Codable {
|
struct VPNProviderServerCoordinator<Configuration>: View where Configuration: ProviderConfigurationIdentifiable & Codable {
|
||||||
|
|
||||||
|
|
|
@ -24,11 +24,11 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
import Combine
|
import CommonAPI
|
||||||
import CommonLibrary
|
import CommonLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct VPNProviderServerView<Configuration>: View where Configuration: ProviderConfigurationIdentifiable & Codable {
|
struct VPNProviderServerView<Configuration>: View where Configuration: ProviderConfigurationIdentifiable & Codable {
|
||||||
var apis: [APIMapper] = API.shared
|
var apis: [APIMapper] = API.shared
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonAPI
|
||||||
import CommonLibrary
|
import CommonLibrary
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
|
|
||||||
|
import CommonAPI
|
||||||
import CommonLibrary
|
import CommonLibrary
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
import CommonLibrary
|
import CommonLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct SettingsSectionGroup: View {
|
struct SettingsSectionGroup: View {
|
||||||
|
|
||||||
|
|
|
@ -23,10 +23,10 @@
|
||||||
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
|
|
||||||
@_exported import AppUI
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
@_exported import UILibrary
|
||||||
|
|
||||||
public final class AppUITV: AppUIConfiguring {
|
public final class AppUITV: UILibraryConfiguring {
|
||||||
public init() {
|
public init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ActiveProfileView: View {
|
struct ActiveProfileView: View {
|
||||||
let profile: Profile?
|
let profile: Profile?
|
||||||
|
|
|
@ -24,9 +24,9 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
|
||||||
|
|
||||||
struct ProfileListView: View {
|
struct ProfileListView: View {
|
||||||
|
|
||||||
|
|
|
@ -24,10 +24,10 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import AppLibrary
|
import AppLibrary
|
||||||
import AppUI
|
import CommonUtils
|
||||||
import PassepartoutKit
|
import PassepartoutKit
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UtilsLibrary
|
import UILibrary
|
||||||
|
|
||||||
// FIXME: #788, UI for TV
|
// FIXME: #788, UI for TV
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
//
|
||||||
|
// Utils+Pasteboard.swift
|
||||||
|
// Passepartout
|
||||||
|
//
|
||||||
|
// Created by Davide De Rosa on 11/2/24.
|
||||||
|
// Copyright (c) 2024 Davide De Rosa. All rights reserved.
|
||||||
|
//
|
||||||
|
// https://github.com/passepartoutvpn
|
||||||
|
//
|
||||||
|
// This file is part of Passepartout.
|
||||||
|
//
|
||||||
|
// Passepartout is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// Passepartout is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
extension Utils {
|
||||||
|
public static func copyToPasteboard(_ string: String) {
|
||||||
|
#if os(iOS)
|
||||||
|
let pb: UIPasteboard = .general
|
||||||
|
pb.string = string
|
||||||
|
#elseif os(macOS)
|
||||||
|
let pb: NSPasteboard = .general
|
||||||
|
pb.clearContents()
|
||||||
|
pb.setString(string, forType: .string)
|
||||||
|
#else
|
||||||
|
fatalError("Copy unavailable")
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,7 +38,7 @@ public struct LongContentView: View {
|
||||||
contentView
|
contentView
|
||||||
.toolbar {
|
.toolbar {
|
||||||
Button {
|
Button {
|
||||||
copyToPasteboard(content)
|
Utils.copyToPasteboard(content)
|
||||||
} label: {
|
} label: {
|
||||||
Image(systemName: copySystemImage ?? "doc.on.doc")
|
Image(systemName: copySystemImage ?? "doc.on.doc")
|
||||||
}
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue