Merge branch 'unify-ios-macos'
This commit is contained in:
commit
6c84217a0f
2
.env.mac
2
.env.mac
|
@ -2,5 +2,5 @@ PLATFORM="mac"
|
||||||
MATCH_PLATFORM="macos"
|
MATCH_PLATFORM="macos"
|
||||||
DELIVER_PLATFORM="osx"
|
DELIVER_PLATFORM="osx"
|
||||||
GYM_SCHEME="Passepartout-macOS"
|
GYM_SCHEME="Passepartout-macOS"
|
||||||
BUNDLE_CONTEXT="macos"
|
BUNDLE_CONTEXT="ios"
|
||||||
APP_ROOT="Passepartout/App/macOS"
|
APP_ROOT="Passepartout/App/macOS"
|
||||||
|
|
|
@ -28,11 +28,14 @@
|
||||||
|
|
||||||
CFG_TEAM_ID = DTDYD63ZX9
|
CFG_TEAM_ID = DTDYD63ZX9
|
||||||
CFG_APP_IOS_ID = com.algoritmico.ios.Passepartout
|
CFG_APP_IOS_ID = com.algoritmico.ios.Passepartout
|
||||||
CFG_APP_MACOS_ID = com.algoritmico.macos.Passepartout
|
//CFG_APP_MACOS_ID = com.algoritmico.macos.Passepartout
|
||||||
CFG_APP_LAUNCHER_ID = com.algoritmico.macos.Passepartout.Launcher
|
//CFG_APP_LAUNCHER_ID = com.algoritmico.macos.Passepartout.Launcher
|
||||||
|
CFG_APP_MACOS_ID = com.algoritmico.ios.Passepartout
|
||||||
|
CFG_APP_LAUNCHER_ID = com.algoritmico.ios.Passepartout.Launcher
|
||||||
CFG_GROUP_ID = com.algoritmico.Passepartout
|
CFG_GROUP_ID = com.algoritmico.Passepartout
|
||||||
CFG_APPSTORE_IOS_ID = 1433648537
|
CFG_APPSTORE_IOS_ID = 1433648537
|
||||||
CFG_APPSTORE_MACOS_ID = 1433645014
|
//CFG_APPSTORE_MACOS_ID = 1433645014
|
||||||
|
CFG_APPSTORE_MACOS_ID = 1433648537
|
||||||
CFG_COPYRIGHT = Copyright © 2021 Davide De Rosa. All rights reserved.
|
CFG_COPYRIGHT = Copyright © 2021 Davide De Rosa. All rights reserved.
|
||||||
|
|
||||||
#include? "Secret.xcconfig"
|
#include? "Secret.xcconfig"
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
0E294AA225AE2B0B00CB4908 /* Descriptible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E294A8225AE29D100CB4908 /* Descriptible.swift */; };
|
0E294AA225AE2B0B00CB4908 /* Descriptible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E294A8225AE29D100CB4908 /* Descriptible.swift */; };
|
||||||
0E2AC24522EC3AC10037B4B0 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0E2AC24422EC3AC10037B4B0 /* Settings.bundle */; };
|
0E2AC24522EC3AC10037B4B0 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0E2AC24422EC3AC10037B4B0 /* Settings.bundle */; };
|
||||||
0E2B494020FCFF990094784C /* Theme+Titles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E2B493F20FCFF990094784C /* Theme+Titles.swift */; };
|
0E2B494020FCFF990094784C /* Theme+Titles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E2B493F20FCFF990094784C /* Theme+Titles.swift */; };
|
||||||
0E2EB063236D8E1E0079DB53 /* AppConstants+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E2EB062236D8E1E0079DB53 /* AppConstants+App.swift */; };
|
|
||||||
0E3152AD223F9EF500F61841 /* PassepartoutCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E31529D223F9EF500F61841 /* PassepartoutCore.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
0E3152AD223F9EF500F61841 /* PassepartoutCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E31529D223F9EF500F61841 /* PassepartoutCore.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
0E3152B0223F9EF500F61841 /* PassepartoutCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E31529B223F9EF400F61841 /* PassepartoutCore.framework */; };
|
0E3152B0223F9EF500F61841 /* PassepartoutCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E31529B223F9EF400F61841 /* PassepartoutCore.framework */; };
|
||||||
0E3152B1223F9EF500F61841 /* PassepartoutCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0E31529B223F9EF400F61841 /* PassepartoutCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
0E3152B1223F9EF500F61841 /* PassepartoutCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0E31529B223F9EF400F61841 /* PassepartoutCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
|
@ -104,13 +103,10 @@
|
||||||
0E52037D259F593B00CBAB56 /* SwiftGen+Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F9C259F41690022DFB8 /* SwiftGen+Strings.swift */; };
|
0E52037D259F593B00CBAB56 /* SwiftGen+Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F9C259F41690022DFB8 /* SwiftGen+Strings.swift */; };
|
||||||
0E52037E259F593B00CBAB56 /* SwiftGen+Segues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569FA5259F41690022DFB8 /* SwiftGen+Segues.swift */; };
|
0E52037E259F593B00CBAB56 /* SwiftGen+Segues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569FA5259F41690022DFB8 /* SwiftGen+Segues.swift */; };
|
||||||
0E52037F259F593B00CBAB56 /* Theme+Views.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F9A259F41690022DFB8 /* Theme+Views.swift */; };
|
0E52037F259F593B00CBAB56 /* Theme+Views.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F9A259F41690022DFB8 /* Theme+Views.swift */; };
|
||||||
0E520380259F593B00CBAB56 /* AppConstants+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569FA3259F41690022DFB8 /* AppConstants+App.swift */; };
|
|
||||||
0E520381259F593B00CBAB56 /* NSTextView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F94259F41690022DFB8 /* NSTextView+Search.swift */; };
|
0E520381259F593B00CBAB56 /* NSTextView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F94259F41690022DFB8 /* NSTextView+Search.swift */; };
|
||||||
0E520382259F593B00CBAB56 /* SwiftGen+Scenes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F9D259F41690022DFB8 /* SwiftGen+Scenes.swift */; };
|
0E520382259F593B00CBAB56 /* SwiftGen+Scenes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F9D259F41690022DFB8 /* SwiftGen+Scenes.swift */; };
|
||||||
0E520383259F593B00CBAB56 /* SwiftGen+Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F98259F41690022DFB8 /* SwiftGen+Assets.swift */; };
|
0E520383259F593B00CBAB56 /* SwiftGen+Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F98259F41690022DFB8 /* SwiftGen+Assets.swift */; };
|
||||||
0E520384259F593B00CBAB56 /* Donation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F99259F41690022DFB8 /* Donation.swift */; };
|
|
||||||
0E520385259F593B00CBAB56 /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = 0E569FA4259F41690022DFB8 /* Credits.html */; };
|
0E520385259F593B00CBAB56 /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = 0E569FA4259F41690022DFB8 /* Credits.html */; };
|
||||||
0E520386259F593B00CBAB56 /* ProductManager+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F9E259F41690022DFB8 /* ProductManager+App.swift */; };
|
|
||||||
0E520387259F593B00CBAB56 /* TextInputViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F97259F41690022DFB8 /* TextInputViewController.swift */; };
|
0E520387259F593B00CBAB56 /* TextInputViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F97259F41690022DFB8 /* TextInputViewController.swift */; };
|
||||||
0E520388259F593B00CBAB56 /* HostImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F93259F41690022DFB8 /* HostImporter.swift */; };
|
0E520388259F593B00CBAB56 /* HostImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E569F93259F41690022DFB8 /* HostImporter.swift */; };
|
||||||
0E52038F259F593F00CBAB56 /* App.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0E569F8D259F41690022DFB8 /* App.strings */; };
|
0E52038F259F593F00CBAB56 /* App.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0E569F8D259F41690022DFB8 /* App.strings */; };
|
||||||
|
@ -208,7 +204,6 @@
|
||||||
0EB60FDA2111136E00AD27F3 /* UITextView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB60FD92111136E00AD27F3 /* UITextView+Search.swift */; };
|
0EB60FDA2111136E00AD27F3 /* UITextView+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB60FD92111136E00AD27F3 /* UITextView+Search.swift */; };
|
||||||
0EB67D6B2184581E00BA6200 /* ImportedHostsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB67D6A2184581E00BA6200 /* ImportedHostsViewController.swift */; };
|
0EB67D6B2184581E00BA6200 /* ImportedHostsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB67D6A2184581E00BA6200 /* ImportedHostsViewController.swift */; };
|
||||||
0EBE3A79213C4E5500BFA2F5 /* OrganizerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBE3A78213C4E5400BFA2F5 /* OrganizerViewController.swift */; };
|
0EBE3A79213C4E5500BFA2F5 /* OrganizerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBE3A78213C4E5400BFA2F5 /* OrganizerViewController.swift */; };
|
||||||
0ECA7E2225967BB90095F369 /* ProductManager+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECA7E2125967BB90095F369 /* ProductManager+App.swift */; };
|
|
||||||
0ECC60DE2256B68A0020BEAC /* SwiftGen+Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECC60DD2256B6890020BEAC /* SwiftGen+Assets.swift */; };
|
0ECC60DE2256B68A0020BEAC /* SwiftGen+Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECC60DD2256B6890020BEAC /* SwiftGen+Assets.swift */; };
|
||||||
0ECEB10A224FECEA00E9E551 /* DataUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECEB109224FECEA00E9E551 /* DataUnit.swift */; };
|
0ECEB10A224FECEA00E9E551 /* DataUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECEB109224FECEA00E9E551 /* DataUnit.swift */; };
|
||||||
0ECEE45020E1182E00A6BB43 /* Theme+Cells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECEE44F20E1182E00A6BB43 /* Theme+Cells.swift */; };
|
0ECEE45020E1182E00A6BB43 /* Theme+Cells.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECEE44F20E1182E00A6BB43 /* Theme+Cells.swift */; };
|
||||||
|
@ -377,7 +372,6 @@
|
||||||
0E2C54C4230056EF00F59453 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Core.strings"; sourceTree = "<group>"; };
|
0E2C54C4230056EF00F59453 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Core.strings"; sourceTree = "<group>"; };
|
||||||
0E2C54C52300570200F59453 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/App.strings"; sourceTree = "<group>"; };
|
0E2C54C52300570200F59453 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/App.strings"; sourceTree = "<group>"; };
|
||||||
0E2D11B9217DBEDE0096822C /* ConnectionService+Configurations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ConnectionService+Configurations.swift"; sourceTree = "<group>"; };
|
0E2D11B9217DBEDE0096822C /* ConnectionService+Configurations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ConnectionService+Configurations.swift"; sourceTree = "<group>"; };
|
||||||
0E2EB062236D8E1E0079DB53 /* AppConstants+App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppConstants+App.swift"; sourceTree = "<group>"; };
|
|
||||||
0E31529B223F9EF400F61841 /* PassepartoutCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PassepartoutCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
0E31529B223F9EF400F61841 /* PassepartoutCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PassepartoutCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
0E31529D223F9EF500F61841 /* PassepartoutCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PassepartoutCore.h; sourceTree = "<group>"; };
|
0E31529D223F9EF500F61841 /* PassepartoutCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PassepartoutCore.h; sourceTree = "<group>"; };
|
||||||
0E31529E223F9EF500F61841 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
0E31529E223F9EF500F61841 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
@ -472,13 +466,10 @@
|
||||||
0E569F94259F41690022DFB8 /* NSTextView+Search.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSTextView+Search.swift"; sourceTree = "<group>"; };
|
0E569F94259F41690022DFB8 /* NSTextView+Search.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSTextView+Search.swift"; sourceTree = "<group>"; };
|
||||||
0E569F97259F41690022DFB8 /* TextInputViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextInputViewController.swift; sourceTree = "<group>"; };
|
0E569F97259F41690022DFB8 /* TextInputViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextInputViewController.swift; sourceTree = "<group>"; };
|
||||||
0E569F98259F41690022DFB8 /* SwiftGen+Assets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Assets.swift"; sourceTree = "<group>"; };
|
0E569F98259F41690022DFB8 /* SwiftGen+Assets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Assets.swift"; sourceTree = "<group>"; };
|
||||||
0E569F99259F41690022DFB8 /* Donation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Donation.swift; sourceTree = "<group>"; };
|
|
||||||
0E569F9A259F41690022DFB8 /* Theme+Views.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Theme+Views.swift"; sourceTree = "<group>"; };
|
0E569F9A259F41690022DFB8 /* Theme+Views.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Theme+Views.swift"; sourceTree = "<group>"; };
|
||||||
0E569F9C259F41690022DFB8 /* SwiftGen+Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Strings.swift"; sourceTree = "<group>"; };
|
0E569F9C259F41690022DFB8 /* SwiftGen+Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Strings.swift"; sourceTree = "<group>"; };
|
||||||
0E569F9D259F41690022DFB8 /* SwiftGen+Scenes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Scenes.swift"; sourceTree = "<group>"; };
|
0E569F9D259F41690022DFB8 /* SwiftGen+Scenes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Scenes.swift"; sourceTree = "<group>"; };
|
||||||
0E569F9E259F41690022DFB8 /* ProductManager+App.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ProductManager+App.swift"; sourceTree = "<group>"; };
|
|
||||||
0E569FA1259F41690022DFB8 /* Theme.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = "<group>"; };
|
0E569FA1259F41690022DFB8 /* Theme.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = "<group>"; };
|
||||||
0E569FA3259F41690022DFB8 /* AppConstants+App.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AppConstants+App.swift"; sourceTree = "<group>"; };
|
|
||||||
0E569FA4259F41690022DFB8 /* Credits.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Credits.html; sourceTree = "<group>"; };
|
0E569FA4259F41690022DFB8 /* Credits.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = Credits.html; sourceTree = "<group>"; };
|
||||||
0E569FA5259F41690022DFB8 /* SwiftGen+Segues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Segues.swift"; sourceTree = "<group>"; };
|
0E569FA5259F41690022DFB8 /* SwiftGen+Segues.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Segues.swift"; sourceTree = "<group>"; };
|
||||||
0E569FA6259F41690022DFB8 /* Macros.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Macros.swift; sourceTree = "<group>"; };
|
0E569FA6259F41690022DFB8 /* Macros.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Macros.swift; sourceTree = "<group>"; };
|
||||||
|
@ -546,7 +537,6 @@
|
||||||
0EBE3AA4213DC1B000BFA2F5 /* ProviderConnectionProfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProviderConnectionProfile.swift; sourceTree = "<group>"; };
|
0EBE3AA4213DC1B000BFA2F5 /* ProviderConnectionProfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProviderConnectionProfile.swift; sourceTree = "<group>"; };
|
||||||
0EBE8D2E25C076F900798607 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/App.strings; sourceTree = "<group>"; };
|
0EBE8D2E25C076F900798607 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/App.strings; sourceTree = "<group>"; };
|
||||||
0EC7F20420E24308004EA58E /* DebugLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugLog.swift; sourceTree = "<group>"; };
|
0EC7F20420E24308004EA58E /* DebugLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugLog.swift; sourceTree = "<group>"; };
|
||||||
0ECA7E2125967BB90095F369 /* ProductManager+App.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ProductManager+App.swift"; sourceTree = "<group>"; };
|
|
||||||
0ECC60DD2256B6890020BEAC /* SwiftGen+Assets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Assets.swift"; sourceTree = "<group>"; };
|
0ECC60DD2256B6890020BEAC /* SwiftGen+Assets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SwiftGen+Assets.swift"; sourceTree = "<group>"; };
|
||||||
0ECEB105224FE51400E9E551 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
0ECEB105224FE51400E9E551 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||||
0ECEB106224FE51400E9E551 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Organizer.storyboard; sourceTree = "<group>"; };
|
0ECEB106224FE51400E9E551 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Organizer.storyboard; sourceTree = "<group>"; };
|
||||||
|
@ -873,13 +863,10 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
0E569FA4259F41690022DFB8 /* Credits.html */,
|
0E569FA4259F41690022DFB8 /* Credits.html */,
|
||||||
0E569FA3259F41690022DFB8 /* AppConstants+App.swift */,
|
|
||||||
0E569F99259F41690022DFB8 /* Donation.swift */,
|
|
||||||
0E569F93259F41690022DFB8 /* HostImporter.swift */,
|
0E569F93259F41690022DFB8 /* HostImporter.swift */,
|
||||||
0E569F8F259F41690022DFB8 /* IssueReporter.swift */,
|
0E569F8F259F41690022DFB8 /* IssueReporter.swift */,
|
||||||
0E569FA6259F41690022DFB8 /* Macros.swift */,
|
0E569FA6259F41690022DFB8 /* Macros.swift */,
|
||||||
0E569F94259F41690022DFB8 /* NSTextView+Search.swift */,
|
0E569F94259F41690022DFB8 /* NSTextView+Search.swift */,
|
||||||
0E569F9E259F41690022DFB8 /* ProductManager+App.swift */,
|
|
||||||
0E569F98259F41690022DFB8 /* SwiftGen+Assets.swift */,
|
0E569F98259F41690022DFB8 /* SwiftGen+Assets.swift */,
|
||||||
0E569F9D259F41690022DFB8 /* SwiftGen+Scenes.swift */,
|
0E569F9D259F41690022DFB8 /* SwiftGen+Scenes.swift */,
|
||||||
0E569FA5259F41690022DFB8 /* SwiftGen+Segues.swift */,
|
0E569FA5259F41690022DFB8 /* SwiftGen+Segues.swift */,
|
||||||
|
@ -1065,11 +1052,9 @@
|
||||||
0EDE8DEC20C93E3B004C739C /* Global */ = {
|
0EDE8DEC20C93E3B004C739C /* Global */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
0E2EB062236D8E1E0079DB53 /* AppConstants+App.swift */,
|
|
||||||
0E3262D8235EE8DA00B5E470 /* HostImporter.swift */,
|
0E3262D8235EE8DA00B5E470 /* HostImporter.swift */,
|
||||||
0EFD943D215BE10800529B64 /* IssueReporter.swift */,
|
0EFD943D215BE10800529B64 /* IssueReporter.swift */,
|
||||||
0E4FD7F020D58618002221FF /* Macros.swift */,
|
0E4FD7F020D58618002221FF /* Macros.swift */,
|
||||||
0ECA7E2125967BB90095F369 /* ProductManager+App.swift */,
|
|
||||||
0ECC60DD2256B6890020BEAC /* SwiftGen+Assets.swift */,
|
0ECC60DD2256B6890020BEAC /* SwiftGen+Assets.swift */,
|
||||||
0EDE8DE320C89028004C739C /* SwiftGen+Scenes.swift */,
|
0EDE8DE320C89028004C739C /* SwiftGen+Scenes.swift */,
|
||||||
0EF56BBA2185AC8500B0C8AB /* SwiftGen+Segues.swift */,
|
0EF56BBA2185AC8500B0C8AB /* SwiftGen+Segues.swift */,
|
||||||
|
@ -1912,13 +1897,10 @@
|
||||||
0E520346259F58FE00CBAB56 /* TrustedNetworksViewController.swift in Sources */,
|
0E520346259F58FE00CBAB56 /* TrustedNetworksViewController.swift in Sources */,
|
||||||
0E520338259F58F500CBAB56 /* ProviderServiceView.swift in Sources */,
|
0E520338259F58F500CBAB56 /* ProviderServiceView.swift in Sources */,
|
||||||
0E520347259F58FE00CBAB56 /* ProxyViewController.swift in Sources */,
|
0E520347259F58FE00CBAB56 /* ProxyViewController.swift in Sources */,
|
||||||
0E520380259F593B00CBAB56 /* AppConstants+App.swift in Sources */,
|
|
||||||
0E52037B259F593B00CBAB56 /* IssueReporter.swift in Sources */,
|
0E52037B259F593B00CBAB56 /* IssueReporter.swift in Sources */,
|
||||||
0E520335259F58F500CBAB56 /* HostServiceView.swift in Sources */,
|
0E520335259F58F500CBAB56 /* HostServiceView.swift in Sources */,
|
||||||
0E520384259F593B00CBAB56 /* Donation.swift in Sources */,
|
|
||||||
0E520333259F58F500CBAB56 /* OrganizerProfileTableView.swift in Sources */,
|
0E520333259F58F500CBAB56 /* OrganizerProfileTableView.swift in Sources */,
|
||||||
0E52037F259F593B00CBAB56 /* Theme+Views.swift in Sources */,
|
0E52037F259F593B00CBAB56 /* Theme+Views.swift in Sources */,
|
||||||
0E520386259F593B00CBAB56 /* ProductManager+App.swift in Sources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -2006,7 +1988,6 @@
|
||||||
0ED31C2C20CF2D6F0027975F /* ProviderPoolViewController.swift in Sources */,
|
0ED31C2C20CF2D6F0027975F /* ProviderPoolViewController.swift in Sources */,
|
||||||
0E2B494020FCFF990094784C /* Theme+Titles.swift in Sources */,
|
0E2B494020FCFF990094784C /* Theme+Titles.swift in Sources */,
|
||||||
0E05C5D520D1645F006EE732 /* SettingTableViewCell.swift in Sources */,
|
0E05C5D520D1645F006EE732 /* SettingTableViewCell.swift in Sources */,
|
||||||
0E2EB063236D8E1E0079DB53 /* AppConstants+App.swift in Sources */,
|
|
||||||
0E89DFCE213EEDFA00741BA1 /* WizardProviderViewController.swift in Sources */,
|
0E89DFCE213EEDFA00741BA1 /* WizardProviderViewController.swift in Sources */,
|
||||||
0E1D72B2213BFFCF00BA1586 /* ProviderPresetViewController.swift in Sources */,
|
0E1D72B2213BFFCF00BA1586 /* ProviderPresetViewController.swift in Sources */,
|
||||||
0E6BE13F20CFBAB300A6DD36 /* DebugLogViewController.swift in Sources */,
|
0E6BE13F20CFBAB300A6DD36 /* DebugLogViewController.swift in Sources */,
|
||||||
|
@ -2017,7 +1998,6 @@
|
||||||
0E57F63E20C83FC5008323CF /* ServiceViewController.swift in Sources */,
|
0E57F63E20C83FC5008323CF /* ServiceViewController.swift in Sources */,
|
||||||
0E36D24D2240234B006AF062 /* ShortcutsAddViewController.swift in Sources */,
|
0E36D24D2240234B006AF062 /* ShortcutsAddViewController.swift in Sources */,
|
||||||
0E57F63C20C83FC5008323CF /* AppDelegate.swift in Sources */,
|
0E57F63C20C83FC5008323CF /* AppDelegate.swift in Sources */,
|
||||||
0ECA7E2225967BB90095F369 /* ProductManager+App.swift in Sources */,
|
|
||||||
0ED31C2920CF2A340027975F /* AccountViewController.swift in Sources */,
|
0ED31C2920CF2A340027975F /* AccountViewController.swift in Sources */,
|
||||||
0E158ADA20E11B0B00C85A82 /* EndpointViewController.swift in Sources */,
|
0E158ADA20E11B0B00C85A82 /* EndpointViewController.swift in Sources */,
|
||||||
0E1D72B4213C118500BA1586 /* ConfigurationViewController.swift in Sources */,
|
0E1D72B4213C118500BA1586 /* ConfigurationViewController.swift in Sources */,
|
||||||
|
@ -2363,7 +2343,7 @@
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_MACOS_ID)";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_MACOS_ID)";
|
||||||
PRODUCT_NAME = Passepartout;
|
PRODUCT_NAME = Passepartout;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "match Development com.algoritmico.macos.Passepartout macos";
|
PROVISIONING_PROFILE_SPECIFIER = "match Development com.algoritmico.ios.Passepartout macos";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
|
@ -2390,7 +2370,7 @@
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_MACOS_ID)";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_MACOS_ID)";
|
||||||
PRODUCT_NAME = Passepartout;
|
PRODUCT_NAME = Passepartout;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "match Development com.algoritmico.macos.Passepartout macos";
|
PROVISIONING_PROFILE_SPECIFIER = "match Development com.algoritmico.ios.Passepartout macos";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
|
@ -2416,7 +2396,7 @@
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_MACOS_ID).Tunnel";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_MACOS_ID).Tunnel";
|
||||||
PRODUCT_NAME = PassepartoutTunnel;
|
PRODUCT_NAME = PassepartoutTunnel;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "match Development com.algoritmico.macos.Passepartout.Tunnel macos";
|
PROVISIONING_PROFILE_SPECIFIER = "match Development com.algoritmico.ios.Passepartout.Tunnel macos";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
@ -2442,7 +2422,7 @@
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_MACOS_ID).Tunnel";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_MACOS_ID).Tunnel";
|
||||||
PRODUCT_NAME = PassepartoutTunnel;
|
PRODUCT_NAME = PassepartoutTunnel;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "match Development com.algoritmico.macos.Passepartout.Tunnel macos";
|
PROVISIONING_PROFILE_SPECIFIER = "match Development com.algoritmico.ios.Passepartout.Tunnel macos";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
@ -2471,7 +2451,7 @@
|
||||||
);
|
);
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.macos.PassepartoutCore;
|
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.ios.PassepartoutCore;
|
||||||
PRODUCT_NAME = PassepartoutCore;
|
PRODUCT_NAME = PassepartoutCore;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
@ -2502,7 +2482,7 @@
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.macos.PassepartoutCore;
|
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.ios.PassepartoutCore;
|
||||||
PRODUCT_NAME = PassepartoutCore;
|
PRODUCT_NAME = PassepartoutCore;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
@ -2699,7 +2679,6 @@
|
||||||
);
|
);
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.ios.Passepartout.Tests;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
@ -2719,7 +2698,6 @@
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.ios.Passepartout.Tests;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
@ -2741,7 +2719,6 @@
|
||||||
);
|
);
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.macos.Passepartout.Tests;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
@ -2762,7 +2739,6 @@
|
||||||
"@loader_path/../Frameworks",
|
"@loader_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.macos.Passepartout.Tests;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
@ -2788,7 +2764,7 @@
|
||||||
);
|
);
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.macos.Passepartout.Launcher;
|
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_LAUNCHER_ID)";
|
||||||
PRODUCT_NAME = PassepartoutLauncher;
|
PRODUCT_NAME = PassepartoutLauncher;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
@ -2815,7 +2791,7 @@
|
||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.algoritmico.macos.Passepartout.Launcher;
|
PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_APP_LAUNCHER_ID)";
|
||||||
PRODUCT_NAME = PassepartoutLauncher;
|
PRODUCT_NAME = PassepartoutLauncher;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
|
|
@ -162,7 +162,9 @@ extension UISplitViewController {
|
||||||
|
|
||||||
extension AppDelegate {
|
extension AppDelegate {
|
||||||
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
|
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
|
||||||
guard (try? ProductManager.shared.isEligible(forFeature: .siriShortcuts)) ?? false else {
|
do {
|
||||||
|
try ProductManager.shared.verifyEligible(forFeature: .siriShortcuts)
|
||||||
|
} catch {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
guard let interaction = userActivity.interaction else {
|
guard let interaction = userActivity.interaction else {
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
//
|
|
||||||
// AppConstants+App.swift
|
|
||||||
// Passepartout
|
|
||||||
//
|
|
||||||
// Created by Davide De Rosa on 11/2/19.
|
|
||||||
// Copyright (c) 2021 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 Foundation
|
|
||||||
import PassepartoutCore
|
|
||||||
|
|
||||||
extension AppConstants {
|
|
||||||
struct Rating {
|
|
||||||
static let eventCount = 3
|
|
||||||
}
|
|
||||||
|
|
||||||
struct InApp {
|
|
||||||
static var isBetaFullVersion: Bool {
|
|
||||||
return ProcessInfo.processInfo.environment["FULL_VERSION"] != nil
|
|
||||||
}
|
|
||||||
|
|
||||||
static let lastFullVersionBuild = 2016
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,99 +0,0 @@
|
||||||
//
|
|
||||||
// ProductManager+App.swift
|
|
||||||
// Passepartout
|
|
||||||
//
|
|
||||||
// Created by Davide De Rosa on 4/6/19.
|
|
||||||
// Copyright (c) 2021 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 Foundation
|
|
||||||
import PassepartoutCore
|
|
||||||
import TunnelKit
|
|
||||||
import SwiftyBeaver
|
|
||||||
|
|
||||||
private let log = SwiftyBeaver.self
|
|
||||||
|
|
||||||
extension ProductManager {
|
|
||||||
static let shared = ProductManager(
|
|
||||||
Configuration(
|
|
||||||
isBetaFullVersion: AppConstants.InApp.isBetaFullVersion,
|
|
||||||
lastFullVersionBuild: AppConstants.InApp.lastFullVersionBuild
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
public func reviewPurchases() {
|
|
||||||
let service = TransientStore.shared.service
|
|
||||||
reloadReceipt(andNotify: false)
|
|
||||||
let isFullVersion = (try? isEligible(forFeature: .fullVersion)) ?? false
|
|
||||||
var anyRefund = false
|
|
||||||
|
|
||||||
// review features and potentially revert them if they were used (Siri is handled in AppDelegate)
|
|
||||||
|
|
||||||
log.debug("Checking 'Trusted networks'")
|
|
||||||
if isCancelledPurchase(.fullVersion) || (!isFullVersion && isCancelledPurchase(.trustedNetworks)) {
|
|
||||||
|
|
||||||
// reset trusted networks for ALL profiles (must load first)
|
|
||||||
for key in service.allProfileKeys() {
|
|
||||||
guard let profile = service.profile(withKey: key) else {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
#if os(iOS)
|
|
||||||
if profile.trustedNetworks.includesMobile || !profile.trustedNetworks.includedWiFis.isEmpty {
|
|
||||||
profile.trustedNetworks.includesMobile = false
|
|
||||||
profile.trustedNetworks.includedWiFis.removeAll()
|
|
||||||
anyRefund = true
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if !profile.trustedNetworks.includedWiFis.isEmpty {
|
|
||||||
profile.trustedNetworks.includedWiFis.removeAll()
|
|
||||||
anyRefund = true
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if anyRefund {
|
|
||||||
log.debug("\tRefunded")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.debug("Checking providers")
|
|
||||||
for name in service.providerNames() {
|
|
||||||
guard let metadata = InfrastructureFactory.shared.metadata(forName: name) else {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if isCancelledPurchase(.fullVersion) || (!isFullVersion && isCancelledPurchase(metadata.product)) {
|
|
||||||
service.removeProfile(ProfileKey(name))
|
|
||||||
log.debug("\tRefunded provider: \(name)")
|
|
||||||
anyRefund = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
guard anyRefund else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
// save reverts and remove fraud VPN profile
|
|
||||||
TransientStore.shared.serialize(withProfiles: true)
|
|
||||||
VPN.shared.uninstall(completionHandler: nil)
|
|
||||||
|
|
||||||
NotificationCenter.default.post(name: ProductManager.didReviewPurchases, object: nil)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -242,13 +242,13 @@ class OrganizerViewController: UITableViewController, StrongTableHost {
|
||||||
|
|
||||||
private func addShortcuts() {
|
private func addShortcuts() {
|
||||||
do {
|
do {
|
||||||
guard try ProductManager.shared.isEligible(forFeature: .siriShortcuts) else {
|
try ProductManager.shared.verifyEligible(forFeature: .siriShortcuts)
|
||||||
presentPurchaseScreen(forProduct: .siriShortcuts)
|
} catch ProductError.beta {
|
||||||
return
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
presentBetaFeatureUnavailable("Siri")
|
presentBetaFeatureUnavailable("Siri")
|
||||||
return
|
return
|
||||||
|
} catch {
|
||||||
|
presentPurchaseScreen(forProduct: .siriShortcuts)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
perform(segue: StoryboardSegue.Organizer.siriShortcutsSegueIdentifier)
|
perform(segue: StoryboardSegue.Organizer.siriShortcutsSegueIdentifier)
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,15 +71,15 @@ class WizardProviderViewController: UITableViewController, StrongTableHost {
|
||||||
selectedMetadata = metadata
|
selectedMetadata = metadata
|
||||||
|
|
||||||
do {
|
do {
|
||||||
guard try ProductManager.shared.isEligible(forProvider: metadata) else {
|
try ProductManager.shared.verifyEligible(forProvider: metadata)
|
||||||
guard purchaseIfNecessary else {
|
} catch ProductError.beta {
|
||||||
return
|
presentBetaFeatureUnavailable("Providers")
|
||||||
}
|
return
|
||||||
presentPurchaseScreen(forProduct: metadata.product, delegate: self)
|
} catch {
|
||||||
|
guard purchaseIfNecessary else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} catch {
|
presentPurchaseScreen(forProduct: metadata.product, delegate: self)
|
||||||
presentBetaFeatureUnavailable("Providers")
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -378,19 +378,19 @@ class ServiceViewController: UIViewController, StrongTableHost {
|
||||||
|
|
||||||
private func trustMobileNetwork(cell: ToggleTableViewCell) {
|
private func trustMobileNetwork(cell: ToggleTableViewCell) {
|
||||||
do {
|
do {
|
||||||
guard try ProductManager.shared.isEligible(forFeature: .trustedNetworks) else {
|
try ProductManager.shared.verifyEligible(forFeature: .trustedNetworks)
|
||||||
delay {
|
} catch ProductError.beta {
|
||||||
cell.setOn(false, animated: true)
|
|
||||||
}
|
|
||||||
presentPurchaseScreen(forProduct: .trustedNetworks)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
delay {
|
delay {
|
||||||
cell.setOn(false, animated: true)
|
cell.setOn(false, animated: true)
|
||||||
}
|
}
|
||||||
presentBetaFeatureUnavailable("Trusted networks")
|
presentBetaFeatureUnavailable("Trusted networks")
|
||||||
return
|
return
|
||||||
|
} catch {
|
||||||
|
delay {
|
||||||
|
cell.setOn(false, animated: true)
|
||||||
|
}
|
||||||
|
presentPurchaseScreen(forProduct: .trustedNetworks)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if #available(iOS 12, *) {
|
if #available(iOS 12, *) {
|
||||||
|
@ -403,13 +403,13 @@ class ServiceViewController: UIViewController, StrongTableHost {
|
||||||
|
|
||||||
private func trustCurrentWiFi() {
|
private func trustCurrentWiFi() {
|
||||||
do {
|
do {
|
||||||
guard try ProductManager.shared.isEligible(forFeature: .trustedNetworks) else {
|
try ProductManager.shared.verifyEligible(forFeature: .trustedNetworks)
|
||||||
presentPurchaseScreen(forProduct: .trustedNetworks)
|
} catch ProductError.beta {
|
||||||
return
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
presentBetaFeatureUnavailable("Trusted networks")
|
presentBetaFeatureUnavailable("Trusted networks")
|
||||||
return
|
return
|
||||||
|
} catch {
|
||||||
|
presentPurchaseScreen(forProduct: .trustedNetworks)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if #available(iOS 13, *) {
|
if #available(iOS 13, *) {
|
||||||
|
@ -461,19 +461,19 @@ class ServiceViewController: UIViewController, StrongTableHost {
|
||||||
|
|
||||||
private func toggleTrustWiFi(cell: ToggleTableViewCell, at row: Int) {
|
private func toggleTrustWiFi(cell: ToggleTableViewCell, at row: Int) {
|
||||||
do {
|
do {
|
||||||
guard try ProductManager.shared.isEligible(forFeature: .trustedNetworks) else {
|
try ProductManager.shared.verifyEligible(forFeature: .trustedNetworks)
|
||||||
delay {
|
} catch ProductError.beta {
|
||||||
cell.setOn(false, animated: true)
|
|
||||||
}
|
|
||||||
presentPurchaseScreen(forProduct: .trustedNetworks)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
delay {
|
delay {
|
||||||
cell.setOn(false, animated: true)
|
cell.setOn(false, animated: true)
|
||||||
}
|
}
|
||||||
presentBetaFeatureUnavailable("Trusted networks")
|
presentBetaFeatureUnavailable("Trusted networks")
|
||||||
return
|
return
|
||||||
|
} catch {
|
||||||
|
delay {
|
||||||
|
cell.setOn(false, animated: true)
|
||||||
|
}
|
||||||
|
presentPurchaseScreen(forProduct: .trustedNetworks)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if cell.isOn {
|
if cell.isOn {
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Passepartout, OpenVPN für iOS
|
Passepartout, OpenVPN Client
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Passepartout, OpenVPN για iOS
|
Passepartout, OpenVPN Client
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Passepartout, OpenVPN for iOS
|
Passepartout, OpenVPN Client
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Passepartout, OpenVPN para iOS
|
Passepartout, Client OpenVPN
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Passepartout, OpenVPN pour iOS
|
Passepartout, Client OpenVPN
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Passepartout, OpenVPN per iOS
|
Passepartout, Client OpenVPN
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Passepartout, OpenVPN voor iOS
|
Passepartout, OpenVPN Client
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Passepartout, OpenVPN dla iOS
|
Passepartout, Klient OpenVPN
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Passepartout, OpenVPN para iOS
|
Passepartout, Client OpenVPN
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Passepartout, OpenVPN для iOS
|
Passepartout, OpenVPN клиент
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Passepartout, OpenVPN för iOS
|
Passepartout, OpenVPN Klient
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
//
|
|
||||||
// AppConstants+App.swift
|
|
||||||
// Passepartout
|
|
||||||
//
|
|
||||||
// Created by Davide De Rosa on 11/4/19.
|
|
||||||
// Copyright (c) 2021 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 Foundation
|
|
||||||
import PassepartoutCore
|
|
||||||
|
|
||||||
extension AppConstants {
|
|
||||||
struct Rating {
|
|
||||||
static let eventCount = 10
|
|
||||||
}
|
|
||||||
|
|
||||||
struct InApp {
|
|
||||||
static var isBetaFullVersion: Bool {
|
|
||||||
guard !ProcessInfo.processInfo.arguments.contains("FULL_VERSION") else {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
static let lastFullVersionBuild = 0
|
|
||||||
|
|
||||||
static let limitedNumberOfHosts = 2
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
//
|
|
||||||
// InApp.swift
|
|
||||||
// Passepartout
|
|
||||||
//
|
|
||||||
// Created by Davide De Rosa on 8/16/19.
|
|
||||||
// Copyright (c) 2021 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 Foundation
|
|
||||||
|
|
||||||
enum Donation: String {
|
|
||||||
case tiny = "com.algoritmico.macos.Passepartout.donations.Tiny"
|
|
||||||
|
|
||||||
case small = "com.algoritmico.macos.Passepartout.donations.Small"
|
|
||||||
|
|
||||||
case medium = "com.algoritmico.macos.Passepartout.donations.Medium"
|
|
||||||
|
|
||||||
case big = "com.algoritmico.macos.Passepartout.donations.Big"
|
|
||||||
|
|
||||||
case huge = "com.algoritmico.macos.Passepartout.donations.Huge"
|
|
||||||
|
|
||||||
case maxi = "com.algoritmico.macos.Passepartout.donations.Maxi"
|
|
||||||
|
|
||||||
static let all: [Donation] = [
|
|
||||||
.tiny,
|
|
||||||
.small,
|
|
||||||
.medium,
|
|
||||||
.big,
|
|
||||||
.huge,
|
|
||||||
.maxi
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
//
|
|
||||||
// ProductManager+App.swift
|
|
||||||
// Passepartout
|
|
||||||
//
|
|
||||||
// Created by Davide De Rosa on 12/25/20.
|
|
||||||
// Copyright (c) 2021 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 Foundation
|
|
||||||
import PassepartoutCore
|
|
||||||
|
|
||||||
extension ProductManager {
|
|
||||||
static let shared = ProductManager(
|
|
||||||
Configuration(
|
|
||||||
isBetaFullVersion: AppConstants.InApp.isBetaFullVersion,
|
|
||||||
lastFullVersionBuild: AppConstants.InApp.lastFullVersionBuild
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -38,7 +38,7 @@ class AppDelegate: NSObject {
|
||||||
|
|
||||||
extension AppDelegate: NSApplicationDelegate {
|
extension AppDelegate: NSApplicationDelegate {
|
||||||
func applicationDidFinishLaunching(_ aNotification: Notification) {
|
func applicationDidFinishLaunching(_ aNotification: Notification) {
|
||||||
let mainAppIdentifier = "com.algoritmico.macos.Passepartout" // XXX: hardcoded
|
let mainAppIdentifier = "com.algoritmico.ios.Passepartout" // XXX: hardcoded
|
||||||
let runningApps = NSWorkspace.shared.runningApplications
|
let runningApps = NSWorkspace.shared.runningApplications
|
||||||
let isRunning = !runningApps.filter { $0.bundleIdentifier == mainAppIdentifier }.isEmpty
|
let isRunning = !runningApps.filter { $0.bundleIdentifier == mainAppIdentifier }.isEmpty
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/de-DE/apple_tv_privacy_policy.txt
|
|
@ -1 +0,0 @@
|
||||||
mullvad,protonvpn,nordvpn,pia,windscribe,expressvpn,tunnelbear,vyprvpn,netflix,gratis,anonym,proxy
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/de-DE/keywords.txt
|
|
@ -1 +0,0 @@
|
||||||
https://passepartoutvpn.app
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/de-DE/marketing_url.txt
|
|
@ -1 +0,0 @@
|
||||||
Passepartout, OpenVPN für Mac
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/de-DE/name.txt
|
|
@ -1 +0,0 @@
|
||||||
https://passepartoutvpn.app/privacy/
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/de-DE/privacy_url.txt
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/de-DE/promotional_text.txt
|
|
@ -1 +0,0 @@
|
||||||
Verbinde .ovpn & VPN Anbieter
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/de-DE/subtitle.txt
|
|
@ -1 +0,0 @@
|
||||||
https://www.reddit.com/r/passepartout
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/de-DE/support_url.txt
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/el/apple_tv_privacy_policy.txt
|
|
@ -1 +0,0 @@
|
||||||
mullvad,protonvpn,nordvpn,pia,windscribe,expressvpn,tunnelbear,vyprvpn,netflix,δωρεάν,ανώνυμο
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/el/keywords.txt
|
|
@ -1 +0,0 @@
|
||||||
https://passepartoutvpn.app
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/el/marketing_url.txt
|
|
@ -1 +0,0 @@
|
||||||
Passepartout, OpenVPN για Mac
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/el/name.txt
|
|
@ -1 +0,0 @@
|
||||||
https://passepartoutvpn.app/privacy/
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/el/privacy_url.txt
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/el/promotional_text.txt
|
|
@ -1 +0,0 @@
|
||||||
Σύνδεση .ovpn & VPN παρόχους
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/el/subtitle.txt
|
|
@ -1 +0,0 @@
|
||||||
https://www.reddit.com/r/passepartout
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/el/support_url.txt
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/en-US/apple_tv_privacy_policy.txt
|
|
@ -1 +0,0 @@
|
||||||
mullvad,protonvpn,nordvpn,pia,windscribe,expressvpn,tunnelbear,vyprvpn,netflix,free,anonymous,proxy
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/en-US/keywords.txt
|
|
@ -1 +0,0 @@
|
||||||
https://passepartoutvpn.app
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/en-US/marketing_url.txt
|
|
@ -1 +0,0 @@
|
||||||
Passepartout, OpenVPN for Mac
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/en-US/name.txt
|
|
@ -1 +0,0 @@
|
||||||
https://passepartoutvpn.app/privacy/
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/en-US/privacy_url.txt
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/en-US/promotional_text.txt
|
|
@ -1 +0,0 @@
|
||||||
Connect .ovpn & VPN providers
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/en-US/subtitle.txt
|
|
@ -1 +0,0 @@
|
||||||
https://www.reddit.com/r/passepartout
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/en-US/support_url.txt
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/es-MX/apple_tv_privacy_policy.txt
|
|
@ -1 +0,0 @@
|
||||||
mullvad,protonvpn,nordvpn,pia,windscribe,expressvpn,tunnelbear,cliente,netflix,gratuito,anónimo
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/es-MX/keywords.txt
|
|
@ -1 +0,0 @@
|
||||||
https://passepartoutvpn.app
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/es-MX/marketing_url.txt
|
|
@ -1 +0,0 @@
|
||||||
Passepartout, OpenVPN para Mac
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/es-MX/name.txt
|
|
@ -1 +0,0 @@
|
||||||
https://passepartoutvpn.app/privacy/
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/es-MX/privacy_url.txt
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/es-MX/promotional_text.txt
|
|
@ -1 +0,0 @@
|
||||||
Conecta .ovpn & proveedor VPN
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/es-MX/subtitle.txt
|
|
@ -1 +0,0 @@
|
||||||
https://www.reddit.com/r/passepartout
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/es-MX/support_url.txt
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/fr-FR/apple_tv_privacy_policy.txt
|
|
@ -1 +0,0 @@
|
||||||
mullvad,protonvpn,nordvpn,pia,windscribe,expressvpn,tunnelbear,vyprvpn,netflix,libre,anonyme,proxy
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/fr-FR/keywords.txt
|
|
@ -1 +0,0 @@
|
||||||
https://passepartoutvpn.app
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/fr-FR/marketing_url.txt
|
|
@ -1 +0,0 @@
|
||||||
Passepartout, OpenVPN pour Mac
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/fr-FR/name.txt
|
|
@ -1 +0,0 @@
|
||||||
https://passepartoutvpn.app/privacy/
|
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/fr-FR/privacy_url.txt
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../iOS/fastlane/metadata/fr-FR/promotional_text.txt
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue