diff --git a/.github/workflows/production.yml b/.github/workflows/production.yml index 7e9c2e08a..4eeb76585 100644 --- a/.github/workflows/production.yml +++ b/.github/workflows/production.yml @@ -1,5 +1,9 @@ name: production + + + +## DEPLOY TAG FOR WIZARD IS SET MANUAL IN THE HELM FILES -> TODO on: push: tags: @@ -47,4 +51,6 @@ jobs: echo ${{ secrets.KUBE_CONFIG }} | base64 --decode > ${HOME}/.kube/config cat ${HOME}/.kube/config - name: Upgrade production on cluster - run: helm upgrade threebotlogin helm_files -f helm_files/valuesProduction.yaml --set image.tag=production-${{ github.sha }} -n jimber + run: | + echo production-${{ github.sha }} + helm upgrade threebotlogin helm_files -f helm_files/valuesProduction.yaml --set images.login.tag=production-${{ github.sha }} -n jimber diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/Info.plist b/app/ios/Frameworks/Yggdrasil.xcframework/Info.plist new file mode 100644 index 000000000..7e35b0b71 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/Info.plist @@ -0,0 +1,40 @@ + + + + + AvailableLibraries + + + LibraryIdentifier + ios-arm64_x86_64-simulator + LibraryPath + Yggdrasil.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + LibraryIdentifier + ios-arm64 + LibraryPath + Yggdrasil.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + ios + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Headers b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Headers new file mode 120000 index 000000000..a177d2a6b --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Modules b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Modules new file mode 120000 index 000000000..5736f3186 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Modules @@ -0,0 +1 @@ +Versions/Current/Modules \ No newline at end of file diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Resources b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Resources new file mode 120000 index 000000000..953ee36f3 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Config.objc.h b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Config.objc.h new file mode 100644 index 000000000..f513debb8 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Config.objc.h @@ -0,0 +1,76 @@ +// Objective-C API for talking to github.com/yggdrasil-network/yggdrasil-go/src/config Go package. +// gobind -lang=objc github.com/yggdrasil-network/yggdrasil-go/src/config +// +// File is generated by gobind. Do not edit. + +#ifndef __Config_H__ +#define __Config_H__ + +@import Foundation; +#include "ref.h" +#include "Universe.objc.h" + + +@class ConfigMulticastInterfaceConfig; +@class ConfigNodeConfig; + +@interface ConfigMulticastInterfaceConfig : NSObject { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +@property (nonatomic) NSString* _Nonnull regex; +@property (nonatomic) BOOL beacon; +@property (nonatomic) BOOL listen; +// skipped field MulticastInterfaceConfig.Port with unsupported type: uint16 + +@end + +/** + * NodeConfig is the main configuration structure, containing configuration +options that are necessary for an Yggdrasil node to run. You will need to +supply one of these structs to the Yggdrasil core when starting a node. + */ +@interface ConfigNodeConfig : NSObject { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field NodeConfig.RWMutex with unsupported type: sync.RWMutex + +// skipped field NodeConfig.Peers with unsupported type: []string + +// skipped field NodeConfig.InterfacePeers with unsupported type: map[string][]string + +// skipped field NodeConfig.Listen with unsupported type: []string + +@property (nonatomic) NSString* _Nonnull adminListen; +// skipped field NodeConfig.MulticastInterfaces with unsupported type: []github.com/yggdrasil-network/yggdrasil-go/src/config.MulticastInterfaceConfig + +// skipped field NodeConfig.AllowedPublicKeys with unsupported type: []string + +@property (nonatomic) NSString* _Nonnull publicKey; +@property (nonatomic) NSString* _Nonnull privateKey; +@property (nonatomic) NSString* _Nonnull ifName; +// skipped field NodeConfig.IfMTU with unsupported type: uint64 + +@property (nonatomic) BOOL nodeInfoPrivacy; +// skipped field NodeConfig.NodeInfo with unsupported type: map[string]interface{} + +- (void)lock; +/** + * NewSigningKeys replaces the signing keypair in the NodeConfig with a new +signing keypair. The signing keys are used by the switch to derive the +structure of the spanning tree. + */ +- (void)newKeys; +- (void)rLock; +// skipped method NodeConfig.RLocker with unsupported parameter or return types + +- (void)rUnlock; +- (void)unlock; +@end + +#endif diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Mobile.objc.h b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Mobile.objc.h new file mode 100644 index 000000000..9036b46c1 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Mobile.objc.h @@ -0,0 +1,94 @@ +// Objective-C API for talking to github.com/yggdrasil-network/yggdrasil-go/contrib/mobile Go package. +// gobind -lang=objc github.com/yggdrasil-network/yggdrasil-go/contrib/mobile +// +// File is generated by gobind. Do not edit. + +#ifndef __Mobile_H__ +#define __Mobile_H__ + +@import Foundation; +#include "ref.h" +#include "Universe.objc.h" + +#include "Config.objc.h" + +@class MobileMobileLogger; +@class MobileYggdrasil; + +@interface MobileMobileLogger : NSObject { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +- (BOOL)write:(NSData* _Nullable)p0 n:(long* _Nullable)n error:(NSError* _Nullable* _Nullable)error; +@end + +/** + * Yggdrasil mobile package is meant to "plug the gap" for mobile support, as +Gomobile will not create headers for Swift/Obj-C etc if they have complex +(non-native) types. Therefore for iOS we will expose some nice simple +functions. Note that in the case of iOS we handle reading/writing to/from TUN +in Swift therefore we use the "dummy" TUN interface instead. + */ +@interface MobileYggdrasil : NSObject { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * GetAddressString gets the node's IPv6 address + */ +- (NSString* _Nonnull)getAddressString; +/** + * GetCoordsString gets the node's coordinates + */ +- (NSString* _Nonnull)getCoordsString; +- (NSString* _Nonnull)getDHTJSON; +/** + * GetMTU returns the configured node MTU. This must be called AFTER Start. + */ +- (long)getMTU; +- (NSString* _Nonnull)getPeersJSON; +/** + * GetPublicKeyString gets the node's public key in hex form + */ +- (NSString* _Nonnull)getPublicKeyString; +/** + * GetSubnetString gets the node's IPv6 subnet in CIDR notation + */ +- (NSString* _Nonnull)getSubnetString; +/** + * Recv waits for and reads a packet coming from Yggdrasil. It +will be a fully formed IPv6 packet + */ +- (NSData* _Nullable)recv:(NSError* _Nullable* _Nullable)error; +/** + * Send sends a packet to Yggdrasil. It should be a fully formed +IPv6 packet + */ +- (BOOL)send:(NSData* _Nullable)p0 error:(NSError* _Nullable* _Nullable)error; +/** + * StartAutoconfigure starts a node with a randomly generated config + */ +- (BOOL)startAutoconfigure:(NSError* _Nullable* _Nullable)error; +/** + * StartJSON starts a node with the given JSON config. You can get JSON config +(rather than HJSON) by using the GenerateConfigJSON() function + */ +- (BOOL)startJSON:(NSData* _Nullable)configjson error:(NSError* _Nullable* _Nullable)error; +/** + * Stop the mobile Yggdrasil instance + */ +- (BOOL)stop:(NSError* _Nullable* _Nullable)error; +@end + +/** + * GenerateConfigJSON generates mobile-friendly configuration in JSON format + */ +FOUNDATION_EXPORT NSData* _Nullable MobileGenerateConfigJSON(void); + +FOUNDATION_EXPORT NSString* _Nonnull MobileGetVersion(void); + +#endif diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Universe.objc.h b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Universe.objc.h new file mode 100644 index 000000000..019e7502d --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Universe.objc.h @@ -0,0 +1,29 @@ +// Objective-C API for talking to Go package. +// gobind -lang=objc +// +// File is generated by gobind. Do not edit. + +#ifndef __Universe_H__ +#define __Universe_H__ + +@import Foundation; +#include "ref.h" + +@protocol Universeerror; +@class Universeerror; + +@protocol Universeerror +- (NSString* _Nonnull)error; +@end + +@class Universeerror; + +@interface Universeerror : NSError { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (NSString* _Nonnull)error; +@end + +#endif diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Yggdrasil.h b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Yggdrasil.h new file mode 100644 index 000000000..971b9b7a7 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/Yggdrasil.h @@ -0,0 +1,15 @@ + +// Objective-C API for talking to the following Go packages +// +// github.com/yggdrasil-network/yggdrasil-go/contrib/mobile +// github.com/yggdrasil-network/yggdrasil-go/src/config +// +// File is generated by gomobile bind. Do not edit. +#ifndef __Yggdrasil_FRAMEWORK_H__ +#define __Yggdrasil_FRAMEWORK_H__ + +#include "Mobile.objc.h" +#include "Config.objc.h" +#include "Universe.objc.h" + +#endif diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/ref.h b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/ref.h new file mode 100644 index 000000000..b8036a4d8 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Headers/ref.h @@ -0,0 +1,35 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#ifndef __GO_REF_HDR__ +#define __GO_REF_HDR__ + +#include + +// GoSeqRef is an object tagged with an integer for passing back and +// forth across the language boundary. A GoSeqRef may represent either +// an instance of a Go object, or an Objective-C object passed to Go. +// The explicit allocation of a GoSeqRef is used to pin a Go object +// when it is passed to Objective-C. The Go seq package maintains a +// reference to the Go object in a map keyed by the refnum along with +// a reference count. When the reference count reaches zero, the Go +// seq package will clear the corresponding entry in the map. +@interface GoSeqRef : NSObject { +} +@property(readonly) int32_t refnum; +@property(strong) id obj; // NULL when representing a Go object. + +// new GoSeqRef object to proxy a Go object. The refnum must be +// provided from Go side. +- (instancetype)initWithRefnum:(int32_t)refnum obj:(id)obj; + +- (int32_t)incNum; + +@end + +@protocol goSeqRefInterface +-(GoSeqRef*) _ref; +@end + +#endif diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Modules/module.modulemap b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Modules/module.modulemap new file mode 100644 index 000000000..833822c25 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Modules/module.modulemap @@ -0,0 +1,9 @@ +framework module "Yggdrasil" { + header "ref.h" + header "Mobile.objc.h" + header "Config.objc.h" + header "Universe.objc.h" + header "Yggdrasil.h" + + export * +} \ No newline at end of file diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Resources/Info.plist b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Resources/Info.plist new file mode 100644 index 000000000..0d1a4b8ab --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Yggdrasil b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Yggdrasil new file mode 100644 index 000000000..f28d2b407 Binary files /dev/null and b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/A/Yggdrasil differ diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/Current b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/Current new file mode 120000 index 000000000..8c7e5a667 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Yggdrasil b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Yggdrasil new file mode 120000 index 000000000..82defbd4e --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64/Yggdrasil.framework/Yggdrasil @@ -0,0 +1 @@ +Versions/Current/Yggdrasil \ No newline at end of file diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Headers b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Headers new file mode 120000 index 000000000..a177d2a6b --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Modules b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Modules new file mode 120000 index 000000000..5736f3186 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Modules @@ -0,0 +1 @@ +Versions/Current/Modules \ No newline at end of file diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Resources b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Resources new file mode 120000 index 000000000..953ee36f3 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Config.objc.h b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Config.objc.h new file mode 100644 index 000000000..f513debb8 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Config.objc.h @@ -0,0 +1,76 @@ +// Objective-C API for talking to github.com/yggdrasil-network/yggdrasil-go/src/config Go package. +// gobind -lang=objc github.com/yggdrasil-network/yggdrasil-go/src/config +// +// File is generated by gobind. Do not edit. + +#ifndef __Config_H__ +#define __Config_H__ + +@import Foundation; +#include "ref.h" +#include "Universe.objc.h" + + +@class ConfigMulticastInterfaceConfig; +@class ConfigNodeConfig; + +@interface ConfigMulticastInterfaceConfig : NSObject { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +@property (nonatomic) NSString* _Nonnull regex; +@property (nonatomic) BOOL beacon; +@property (nonatomic) BOOL listen; +// skipped field MulticastInterfaceConfig.Port with unsupported type: uint16 + +@end + +/** + * NodeConfig is the main configuration structure, containing configuration +options that are necessary for an Yggdrasil node to run. You will need to +supply one of these structs to the Yggdrasil core when starting a node. + */ +@interface ConfigNodeConfig : NSObject { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +// skipped field NodeConfig.RWMutex with unsupported type: sync.RWMutex + +// skipped field NodeConfig.Peers with unsupported type: []string + +// skipped field NodeConfig.InterfacePeers with unsupported type: map[string][]string + +// skipped field NodeConfig.Listen with unsupported type: []string + +@property (nonatomic) NSString* _Nonnull adminListen; +// skipped field NodeConfig.MulticastInterfaces with unsupported type: []github.com/yggdrasil-network/yggdrasil-go/src/config.MulticastInterfaceConfig + +// skipped field NodeConfig.AllowedPublicKeys with unsupported type: []string + +@property (nonatomic) NSString* _Nonnull publicKey; +@property (nonatomic) NSString* _Nonnull privateKey; +@property (nonatomic) NSString* _Nonnull ifName; +// skipped field NodeConfig.IfMTU with unsupported type: uint64 + +@property (nonatomic) BOOL nodeInfoPrivacy; +// skipped field NodeConfig.NodeInfo with unsupported type: map[string]interface{} + +- (void)lock; +/** + * NewSigningKeys replaces the signing keypair in the NodeConfig with a new +signing keypair. The signing keys are used by the switch to derive the +structure of the spanning tree. + */ +- (void)newKeys; +- (void)rLock; +// skipped method NodeConfig.RLocker with unsupported parameter or return types + +- (void)rUnlock; +- (void)unlock; +@end + +#endif diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Mobile.objc.h b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Mobile.objc.h new file mode 100644 index 000000000..9036b46c1 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Mobile.objc.h @@ -0,0 +1,94 @@ +// Objective-C API for talking to github.com/yggdrasil-network/yggdrasil-go/contrib/mobile Go package. +// gobind -lang=objc github.com/yggdrasil-network/yggdrasil-go/contrib/mobile +// +// File is generated by gobind. Do not edit. + +#ifndef __Mobile_H__ +#define __Mobile_H__ + +@import Foundation; +#include "ref.h" +#include "Universe.objc.h" + +#include "Config.objc.h" + +@class MobileMobileLogger; +@class MobileYggdrasil; + +@interface MobileMobileLogger : NSObject { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +- (BOOL)write:(NSData* _Nullable)p0 n:(long* _Nullable)n error:(NSError* _Nullable* _Nullable)error; +@end + +/** + * Yggdrasil mobile package is meant to "plug the gap" for mobile support, as +Gomobile will not create headers for Swift/Obj-C etc if they have complex +(non-native) types. Therefore for iOS we will expose some nice simple +functions. Note that in the case of iOS we handle reading/writing to/from TUN +in Swift therefore we use the "dummy" TUN interface instead. + */ +@interface MobileYggdrasil : NSObject { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (nonnull instancetype)init; +/** + * GetAddressString gets the node's IPv6 address + */ +- (NSString* _Nonnull)getAddressString; +/** + * GetCoordsString gets the node's coordinates + */ +- (NSString* _Nonnull)getCoordsString; +- (NSString* _Nonnull)getDHTJSON; +/** + * GetMTU returns the configured node MTU. This must be called AFTER Start. + */ +- (long)getMTU; +- (NSString* _Nonnull)getPeersJSON; +/** + * GetPublicKeyString gets the node's public key in hex form + */ +- (NSString* _Nonnull)getPublicKeyString; +/** + * GetSubnetString gets the node's IPv6 subnet in CIDR notation + */ +- (NSString* _Nonnull)getSubnetString; +/** + * Recv waits for and reads a packet coming from Yggdrasil. It +will be a fully formed IPv6 packet + */ +- (NSData* _Nullable)recv:(NSError* _Nullable* _Nullable)error; +/** + * Send sends a packet to Yggdrasil. It should be a fully formed +IPv6 packet + */ +- (BOOL)send:(NSData* _Nullable)p0 error:(NSError* _Nullable* _Nullable)error; +/** + * StartAutoconfigure starts a node with a randomly generated config + */ +- (BOOL)startAutoconfigure:(NSError* _Nullable* _Nullable)error; +/** + * StartJSON starts a node with the given JSON config. You can get JSON config +(rather than HJSON) by using the GenerateConfigJSON() function + */ +- (BOOL)startJSON:(NSData* _Nullable)configjson error:(NSError* _Nullable* _Nullable)error; +/** + * Stop the mobile Yggdrasil instance + */ +- (BOOL)stop:(NSError* _Nullable* _Nullable)error; +@end + +/** + * GenerateConfigJSON generates mobile-friendly configuration in JSON format + */ +FOUNDATION_EXPORT NSData* _Nullable MobileGenerateConfigJSON(void); + +FOUNDATION_EXPORT NSString* _Nonnull MobileGetVersion(void); + +#endif diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Universe.objc.h b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Universe.objc.h new file mode 100644 index 000000000..019e7502d --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Universe.objc.h @@ -0,0 +1,29 @@ +// Objective-C API for talking to Go package. +// gobind -lang=objc +// +// File is generated by gobind. Do not edit. + +#ifndef __Universe_H__ +#define __Universe_H__ + +@import Foundation; +#include "ref.h" + +@protocol Universeerror; +@class Universeerror; + +@protocol Universeerror +- (NSString* _Nonnull)error; +@end + +@class Universeerror; + +@interface Universeerror : NSError { +} +@property(strong, readonly) _Nonnull id _ref; + +- (nonnull instancetype)initWithRef:(_Nonnull id)ref; +- (NSString* _Nonnull)error; +@end + +#endif diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Yggdrasil.h b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Yggdrasil.h new file mode 100644 index 000000000..971b9b7a7 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/Yggdrasil.h @@ -0,0 +1,15 @@ + +// Objective-C API for talking to the following Go packages +// +// github.com/yggdrasil-network/yggdrasil-go/contrib/mobile +// github.com/yggdrasil-network/yggdrasil-go/src/config +// +// File is generated by gomobile bind. Do not edit. +#ifndef __Yggdrasil_FRAMEWORK_H__ +#define __Yggdrasil_FRAMEWORK_H__ + +#include "Mobile.objc.h" +#include "Config.objc.h" +#include "Universe.objc.h" + +#endif diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/ref.h b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/ref.h new file mode 100644 index 000000000..b8036a4d8 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Headers/ref.h @@ -0,0 +1,35 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#ifndef __GO_REF_HDR__ +#define __GO_REF_HDR__ + +#include + +// GoSeqRef is an object tagged with an integer for passing back and +// forth across the language boundary. A GoSeqRef may represent either +// an instance of a Go object, or an Objective-C object passed to Go. +// The explicit allocation of a GoSeqRef is used to pin a Go object +// when it is passed to Objective-C. The Go seq package maintains a +// reference to the Go object in a map keyed by the refnum along with +// a reference count. When the reference count reaches zero, the Go +// seq package will clear the corresponding entry in the map. +@interface GoSeqRef : NSObject { +} +@property(readonly) int32_t refnum; +@property(strong) id obj; // NULL when representing a Go object. + +// new GoSeqRef object to proxy a Go object. The refnum must be +// provided from Go side. +- (instancetype)initWithRefnum:(int32_t)refnum obj:(id)obj; + +- (int32_t)incNum; + +@end + +@protocol goSeqRefInterface +-(GoSeqRef*) _ref; +@end + +#endif diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Modules/module.modulemap b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Modules/module.modulemap new file mode 100644 index 000000000..833822c25 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Modules/module.modulemap @@ -0,0 +1,9 @@ +framework module "Yggdrasil" { + header "ref.h" + header "Mobile.objc.h" + header "Config.objc.h" + header "Universe.objc.h" + header "Yggdrasil.h" + + export * +} \ No newline at end of file diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Resources/Info.plist b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Resources/Info.plist new file mode 100644 index 000000000..0d1a4b8ab --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Yggdrasil b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Yggdrasil new file mode 100644 index 000000000..f523ddf06 Binary files /dev/null and b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/A/Yggdrasil differ diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/Current b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/Current new file mode 120000 index 000000000..8c7e5a667 --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Yggdrasil b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Yggdrasil new file mode 120000 index 000000000..82defbd4e --- /dev/null +++ b/app/ios/Frameworks/Yggdrasil.xcframework/ios-arm64_x86_64-simulator/Yggdrasil.framework/Yggdrasil @@ -0,0 +1 @@ +Versions/Current/Yggdrasil \ No newline at end of file diff --git a/app/ios/Podfile.lock b/app/ios/Podfile.lock index 34704e099..3cc5c5012 100644 --- a/app/ios/Podfile.lock +++ b/app/ios/Podfile.lock @@ -132,4 +132,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 2262097366c615de59b03ca3bf748d7aaad51773 -COCOAPODS: 1.11.2 +COCOAPODS: 1.11.3 diff --git a/app/ios/Runner Network Extension/ConfigurationProxy.swift b/app/ios/Runner Network Extension/ConfigurationProxy.swift new file mode 100644 index 000000000..3aac9229c --- /dev/null +++ b/app/ios/Runner Network Extension/ConfigurationProxy.swift @@ -0,0 +1,171 @@ +// +// ConfigurationProxy.swift +// YggdrasilNetwork +// +// Created by Neil Alexander on 07/01/2019. +// + +import UIKit +import Yggdrasil +import NetworkExtension + +class ConfigurationProxy { + + private var json: Data? = nil + private var dict: [String: Any]? = nil + + init() { + self.json = MobileGenerateConfigJSON() + do { + try self.convertToDict() + } catch { + NSLog("ConfigurationProxy: Error deserialising JSON (\(error))") + } + self.fix() + } + + init(json: Data) throws { + self.json = json + try self.convertToDict() + self.fix() + } + + private func fix() { + self.set("AdminListen", to: "none") + self.set("IfName", to: "none") + self.set("IfMTU", to: 65535) + + if self.get("AutoStart") == nil { + self.set("AutoStart", to: ["WiFi": false, "Mobile": false] as [String: Bool]) + } + + let interfaces = self.get("MulticastInterfaces") as? [String] ?? [] + if interfaces.contains(where: { $0 == "lo0" }) { + self.add("lo0", in: "MulticastInterfaces") + } + } + + func get(_ key: String) -> Any? { + if let dict = self.dict { + if dict.keys.contains(key) { + return dict[key] + } + } + return nil + } + + func get(_ key: String, inSection section: String) -> Any? { + if let dict = self.get(section) as? [String: Any] { + if dict.keys.contains(key) { + return dict[key] + } + } + return nil + } + + func add(_ value: Any, in key: String) { + if self.dict != nil { + if self.dict![key] as? [Any] != nil { + var temp = self.dict![key] as? [Any] ?? [] + temp.append(value) + self.dict!.updateValue(temp, forKey: key) + } + } + } + + func remove(_ value: String, from key: String) { + if self.dict != nil { + if self.dict![key] as? [String] != nil { + var temp = self.dict![key] as? [String] ?? [] + if let index = temp.firstIndex(of: value) { + temp.remove(at: index) + } + self.dict!.updateValue(temp, forKey: key) + } + } + } + + func remove(index: Int, from key: String) { + if self.dict != nil { + if self.dict![key] as? [Any] != nil { + var temp = self.dict![key] as? [Any] ?? [] + temp.remove(at: index) + self.dict!.updateValue(temp, forKey: key) + } + } + } + + func set(_ key: String, to value: Any) { + if self.dict != nil { + self.dict![key] = value + } + } + + func set(_ key: String, inSection section: String, to value: Any?) { + if self.dict != nil { + if self.dict!.keys.contains(section), let value = value { + var temp = self.dict![section] as? [String: Any] ?? [:] + temp.updateValue(value, forKey: key) + self.dict!.updateValue(temp, forKey: section) + } + } + } + + func data() -> Data? { + do { + try self.convertToJson() + return self.json + } catch { + return nil + } + } + + func save(to manager: inout NETunnelProviderManager) throws { + self.fix() + if let data = self.data() { + let providerProtocol = NETunnelProviderProtocol() + providerProtocol.providerBundleIdentifier = "org.jimber.threebotlogin.staging.extension" + providerProtocol.providerConfiguration = [ "json": data ] + providerProtocol.serverAddress = "yggdrasil" + providerProtocol.username = self.get("EncryptionPublicKey") as? String ?? "(unknown public key)" + + let disconnectrule = NEOnDemandRuleDisconnect() + var rules: [NEOnDemandRule] = [disconnectrule] + + if self.get("WiFi", inSection: "AutoStart") as? Bool ?? false { + let wifirule = NEOnDemandRuleConnect() + wifirule.interfaceTypeMatch = .wiFi + rules.insert(wifirule, at: 0) + } + + if self.get("Mobile", inSection: "AutoStart") as? Bool ?? false { + let mobilerule = NEOnDemandRuleConnect() + mobilerule.interfaceTypeMatch = .cellular + rules.insert(mobilerule, at: 0) + } + + manager.onDemandRules = rules + manager.isOnDemandEnabled = rules.count > 1 + providerProtocol.disconnectOnSleep = rules.count > 1 + + manager.protocolConfiguration = providerProtocol + + manager.saveToPreferences(completionHandler: { (error:Error?) in + if let error = error { + print(error) + } else { + print("Save successfully") + NotificationCenter.default.post(name: NSNotification.Name.YggdrasilSettingsUpdated, object: self) + } + }) + } + } + + private func convertToDict() throws { + self.dict = try JSONSerialization.jsonObject(with: self.json!, options: []) as? [String: Any] + } + + private func convertToJson() throws { + self.json = try JSONSerialization.data(withJSONObject: self.dict as Any, options: .prettyPrinted) + } +} diff --git a/app/ios/Runner Network Extension/Extensions/NSExtension.swift b/app/ios/Runner Network Extension/Extensions/NSExtension.swift new file mode 100644 index 000000000..b733610c5 --- /dev/null +++ b/app/ios/Runner Network Extension/Extensions/NSExtension.swift @@ -0,0 +1,15 @@ +// +// NSExtension.swift +// Runner Network Extension +// +// Created by Robert Van Haecke on 24/04/2021. +// + +import UIKit + +extension Notification.Name { + static let YggdrasilSelfUpdated = Notification.Name("YggdrasilSelfUpdated") + static let YggdrasilPeersUpdated = Notification.Name("YggdrasilPeersUpdated") + static let YggdrasilSwitchPeersUpdated = Notification.Name("YggdrasilSwitchPeersUpdated") + static let YggdrasilSettingsUpdated = Notification.Name("YggdrasilSettingsUpdated") +} diff --git a/app/ios/Runner Network Extension/Info.plist b/app/ios/Runner Network Extension/Info.plist new file mode 100644 index 000000000..108135f36 --- /dev/null +++ b/app/ios/Runner Network Extension/Info.plist @@ -0,0 +1,31 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Runner Network Extension + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSExtension + + NSExtensionPointIdentifier + com.apple.networkextension.packet-tunnel + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).PacketTunnelProvider + + + diff --git a/app/ios/Runner Network Extension/PacketTunnelProvider.swift b/app/ios/Runner Network Extension/PacketTunnelProvider.swift new file mode 100644 index 000000000..52b493225 --- /dev/null +++ b/app/ios/Runner Network Extension/PacketTunnelProvider.swift @@ -0,0 +1,162 @@ +// +// PacketTunnelProvider.swift +// Runner Network Extension +// +// Created by Robert Van Haecke on 19/04/2021. +// + +import NetworkExtension +import Yggdrasil + +class PacketTunnelProvider: NEPacketTunnelProvider { + var yggdrasil: MobileYggdrasil = MobileYggdrasil() + var yggdrasilConfig: ConfigurationProxy? + var started: Bool = false + + override init() { + super.init() + } + + @objc func readPacketsFromTun() { + while(started) { + autoreleasepool { + self.packetFlow.readPackets { (packets: [Data], protocols: [NSNumber]) in + for packet in packets { + do { + try self.yggdrasil.send(packet) + } catch { + NSLog("readPacketsFromTun produced an error: " + error.localizedDescription) + } + } + } + } + } + } + + @objc func writePacketsToTun() { + while(started) { + autoreleasepool { + do { + let data = try self.yggdrasil.recv() + self.packetFlow.writePackets([data], withProtocols: [NSNumber](repeating: AF_INET6 as NSNumber, count: 1)) + } catch { + NSLog("writePacketsToTun produced an error: " + error.localizedDescription) + } + } + } + } + + func startYggdrasil() -> Error? { + var err: Error? = nil + + //Darwin.sleep(10) + + self.setTunnelNetworkSettings(nil) { (error: Error?) -> Void in + NSLog("Starting Yggdrasil") + + if let error = error { + NSLog("Failed to clear Yggdrasil tunnel network settings: " + error.localizedDescription) + err = error + } + if self.yggdrasilConfig == nil { + NSLog("No configuration proxy!") + return + } + if let config = self.yggdrasilConfig { + NSLog("Configuration loaded") + + do { + //let str = String(decoding: config.data()!, as: UTF8.self) + try self.yggdrasil.startJSON(config.data()) + } catch { + NSLog("Starting Yggdrasil process produced an error: " + error.localizedDescription) + return + } + + let address = self.yggdrasil.getAddressString() + let subnet = self.yggdrasil.getSubnetString() + + NSLog("Yggdrasil IPv6 address: " + address) + NSLog("Yggdrasil IPv6 subnet: " + subnet) + + let tunnelNetworkSettings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: address) + tunnelNetworkSettings.ipv6Settings = NEIPv6Settings(addresses: [address], networkPrefixLengths: [7]) + tunnelNetworkSettings.ipv6Settings?.includedRoutes = [NEIPv6Route(destinationAddress: "0200::", networkPrefixLength: 7)] + + NSLog("Setting tunnel network settings...") + + self.setTunnelNetworkSettings(tunnelNetworkSettings) { (error: Error?) -> Void in + NSLog("setTunnelNetworkSettings completed successfully") + if let error = error { + NSLog("Failed to set Yggdrasil tunnel network settings: " + error.localizedDescription) + err = error + } else { + NSLog("Yggdrasil tunnel settings set successfully") + + let readthread: Thread = Thread(target: self, selector: #selector(self.readPacketsFromTun), object: nil) + readthread.name = "TUN Packet Reader" + readthread.qualityOfService = .utility + + let writethread: Thread = Thread(target: self, selector: #selector(self.writePacketsToTun), object: nil) + writethread.name = "TUN Packet Writer" + writethread.qualityOfService = .utility + + self.started = true + + readthread.start() + writethread.start() + } + } + } + } + return err + } + + override func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void) { + if let conf = (self.protocolConfiguration as! NETunnelProviderProtocol).providerConfiguration { + if let json = conf["json"] as? Data { + do { + self.yggdrasilConfig = try ConfigurationProxy(json: json) + } catch { + NSLog("Error in Yggdrasil startTunnel: Configuration is invalid") + return + } + if let error = self.startYggdrasil() { + NSLog("Error in Yggdrasil startTunnel: " + error.localizedDescription) + } else { + NSLog("Yggdrasil completion handler called") + completionHandler(nil) + } + } + } + } + + override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) { + if (!self.started) { + return + } + + try? self.yggdrasil.stop() + + self.started = false + + super.stopTunnel(with: reason, completionHandler: completionHandler) + } + + override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)? = nil) { + let request = String(data: messageData, encoding: .utf8) + + switch request { + case "address": + completionHandler?(self.yggdrasil.getAddressString().data(using: .utf8)) + case "subnet": + completionHandler?(self.yggdrasil.getSubnetString().data(using: .utf8)) + case "coords": + completionHandler?(self.yggdrasil.getCoordsString().data(using: .utf8)) + case "peers": + completionHandler?(self.yggdrasil.getPeersJSON().data(using: .utf8)) + default: + completionHandler?(nil) + } + } +} diff --git a/app/ios/Runner Network Extension/Runner_Network_Extension.entitlements b/app/ios/Runner Network Extension/Runner_Network_Extension.entitlements new file mode 100644 index 000000000..ef548fd28 --- /dev/null +++ b/app/ios/Runner Network Extension/Runner_Network_Extension.entitlements @@ -0,0 +1,18 @@ + + + + + com.apple.developer.networking.networkextension + + packet-tunnel-provider + + com.apple.developer.networking.vpn.api + + allow-vpn + + com.apple.security.application-groups + + group.org.jimber.threebotlogin.staging + + + diff --git a/app/ios/Runner.xcodeproj/project.pbxproj b/app/ios/Runner.xcodeproj/project.pbxproj index 470eb2119..61b8bd9fb 100644 --- a/app/ios/Runner.xcodeproj/project.pbxproj +++ b/app/ios/Runner.xcodeproj/project.pbxproj @@ -3,42 +3,79 @@ archiveVersion = 1; classes = { }; - objectVersion = 55; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 250B5E7812A7EFA9BBF43132 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1381F27CECEC189C72CB5746 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 43FEC1C4A6AF78466FF663AD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C53A060B7EC8C0008D56739 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 7E0A524427BAADF50029DB8B /* Yggdrasil.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E0A524327BAADF40029DB8B /* Yggdrasil.xcframework */; }; + 7E75E6B72629E83C000C2EBB /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E75E6B62629E83C000C2EBB /* NetworkExtension.framework */; }; + 7E75E6D1262DCF29000C2EBB /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E75E6B62629E83C000C2EBB /* NetworkExtension.framework */; }; + 7E75E6D4262DCF29000C2EBB /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E75E6D3262DCF29000C2EBB /* PacketTunnelProvider.swift */; }; + 7E75E6D9262DCF29000C2EBB /* Runner Network Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 7E75E6D0262DCF29000C2EBB /* Runner Network Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 7E75E703262DD640000C2EBB /* ConfigurationProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E75E702262DD640000C2EBB /* ConfigurationProxy.swift */; }; + 7E75E7CA2634139E000C2EBB /* NSExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E75E7C92634139E000C2EBB /* NSExtension.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - DA00EA4E27EE0C8C003ECED6 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA00EA4D27EE0C8C003ECED6 /* NetworkExtension.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 7E75E6D7262DCF29000C2EBB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7E75E6CF262DCF29000C2EBB; + remoteInfo = "Runner Network Extension"; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ - D8526A6624ED375000188B2E /* CopyFiles */ = { + 7E75E6CA262DCE56000C2EBB /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 7E75E6D9262DCF29000C2EBB /* Runner Network Extension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; - dstSubfolderSpec = 7; + dstSubfolderSpec = 10; files = ( ); + name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0B8050713428BE7B6B97A1F7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 1381F27CECEC189C72CB5746 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1653057A97D4FD3B8827ABD1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 3C53A060B7EC8C0008D56739 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7D453988260C5B62007F55D0 /* flutter_sodium.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = flutter_sodium.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7E0A524327BAADF40029DB8B /* Yggdrasil.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Yggdrasil.xcframework; path = Frameworks/Yggdrasil.xcframework; sourceTree = ""; }; + 7E75E6B52629E83B000C2EBB /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; + 7E75E6B62629E83C000C2EBB /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; }; + 7E75E6D0262DCF29000C2EBB /* Runner Network Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Runner Network Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7E75E6D3262DCF29000C2EBB /* PacketTunnelProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacketTunnelProvider.swift; sourceTree = ""; }; + 7E75E6D5262DCF29000C2EBB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7E75E6D6262DCF29000C2EBB /* Runner_Network_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner_Network_Extension.entitlements; sourceTree = ""; }; + 7E75E702262DD640000C2EBB /* ConfigurationProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfigurationProxy.swift; sourceTree = ""; }; + 7E75E7C92634139E000C2EBB /* NSExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSExtension.swift; sourceTree = ""; }; + 93ABBA06A3FF048AED496837 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -46,27 +83,61 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B39D0D54AA3ED468905E3BFF /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - D8526A6424ED35BB00188B2E /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; - D8FC754824ED2B340008DC13 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; - DA00EA4D27EE0C8C003ECED6 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; }; - DAB4E14B28168AF2008B8507 /* yggdrasil_plugin.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = yggdrasil_plugin.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E923F43865F039387CDB94E1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + EBD3E09F2D71BF98AAC70C28 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 7E75E6CD262DCF29000C2EBB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7E75E6D1262DCF29000C2EBB /* NetworkExtension.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 43FEC1C4A6AF78466FF663AD /* Pods_Runner.framework in Frameworks */, - DA00EA4E27EE0C8C003ECED6 /* NetworkExtension.framework in Frameworks */, + 7E0A524427BAADF50029DB8B /* Yggdrasil.xcframework in Frameworks */, + 7E75E6B72629E83C000C2EBB /* NetworkExtension.framework in Frameworks */, + 250B5E7812A7EFA9BBF43132 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 7E75E6D2262DCF29000C2EBB /* Runner Network Extension */ = { + isa = PBXGroup; + children = ( + 7E75E7CC263413CF000C2EBB /* Extensions */, + 7E75E702262DD640000C2EBB /* ConfigurationProxy.swift */, + 7E75E6D3262DCF29000C2EBB /* PacketTunnelProvider.swift */, + 7E75E6D5262DCF29000C2EBB /* Info.plist */, + 7E75E6D6262DCF29000C2EBB /* Runner_Network_Extension.entitlements */, + ); + path = "Runner Network Extension"; + sourceTree = ""; + }; + 7E75E7CC263413CF000C2EBB /* Extensions */ = { + isa = PBXGroup; + children = ( + 7E75E7C92634139E000C2EBB /* NSExtension.swift */, + ); + path = Extensions; + sourceTree = ""; + }; + 9387A093EFFAB87EB553BAE1 /* Pods */ = { + isa = PBXGroup; + children = ( + EBD3E09F2D71BF98AAC70C28 /* Pods-Runner.debug.xcconfig */, + 93ABBA06A3FF048AED496837 /* Pods-Runner.release.xcconfig */, + 0B8050713428BE7B6B97A1F7 /* Pods-Runner.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -83,9 +154,10 @@ children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, + 7E75E6D2262DCF29000C2EBB /* Runner Network Extension */, 97C146EF1CF9000F007C117D /* Products */, - ED38A37C84C5DF965BF3695D /* Pods */, - BC2FDFA445F80258146A5741 /* Frameworks */, + 9387A093EFFAB87EB553BAE1 /* Pods */, + 9AADBE19F3C9D7253BD7FC7D /* Frameworks */, ); sourceTree = ""; }; @@ -93,6 +165,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 7E75E6D0262DCF29000C2EBB /* Runner Network Extension.appex */, ); name = Products; sourceTree = ""; @@ -100,13 +173,12 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( - D8FC754824ED2B340008DC13 /* Runner.entitlements */, + 7E75E6B52629E83B000C2EBB /* Runner.entitlements */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, - D8526A6424ED35BB00188B2E /* GoogleService-Info.plist */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, @@ -114,46 +186,54 @@ path = Runner; sourceTree = ""; }; - BC2FDFA445F80258146A5741 /* Frameworks */ = { + 9AADBE19F3C9D7253BD7FC7D /* Frameworks */ = { isa = PBXGroup; children = ( - DAB4E14B28168AF2008B8507 /* yggdrasil_plugin.framework */, - DA00EA4D27EE0C8C003ECED6 /* NetworkExtension.framework */, - 7D453988260C5B62007F55D0 /* flutter_sodium.framework */, - 3C53A060B7EC8C0008D56739 /* Pods_Runner.framework */, + 7E0A524327BAADF40029DB8B /* Yggdrasil.xcframework */, + 7E75E6B62629E83C000C2EBB /* NetworkExtension.framework */, + 1381F27CECEC189C72CB5746 /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; }; - ED38A37C84C5DF965BF3695D /* Pods */ = { - isa = PBXGroup; - children = ( - E923F43865F039387CDB94E1 /* Pods-Runner.debug.xcconfig */, - B39D0D54AA3ED468905E3BFF /* Pods-Runner.release.xcconfig */, - 1653057A97D4FD3B8827ABD1 /* Pods-Runner.profile.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 7E75E6CF262DCF29000C2EBB /* Runner Network Extension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7E75E6DA262DCF2A000C2EBB /* Build configuration list for PBXNativeTarget "Runner Network Extension" */; + buildPhases = ( + 7E75E6CC262DCF29000C2EBB /* Sources */, + 7E75E6CD262DCF29000C2EBB /* Frameworks */, + 7E75E6CE262DCF29000C2EBB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Runner Network Extension"; + productName = "Runner Network Extension"; + productReference = 7E75E6D0262DCF29000C2EBB /* Runner Network Extension.appex */; + productType = "com.apple.product-type.app-extension"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 1D5C3222B79A53570CF5530A /* [CP] Check Pods Manifest.lock */, + 712EF3076A3FDC3F68B0A8FC /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - D8526A6624ED375000188B2E /* CopyFiles */, - 542E63BC880F182266CA2C4E /* [CP] Embed Pods Frameworks */, + 7E75E6CA262DCE56000C2EBB /* Embed App Extensions */, + 1577792F4C138F0A6A12C487 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( + 7E75E6D8262DCF29000C2EBB /* PBXTargetDependency */, ); name = Runner; productName = Runner; @@ -166,9 +246,13 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; + LastSwiftUpdateCheck = 1240; + LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 7E75E6CF262DCF29000C2EBB = { + CreatedOnToolsVersion = 12.4; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -176,7 +260,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 13.0"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -189,11 +273,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 7E75E6CF262DCF29000C2EBB /* Runner Network Extension */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 7E75E6CE262DCF29000C2EBB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -208,26 +300,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1D5C3222B79A53570CF5530A /* [CP] Check Pods Manifest.lock */ = { + 1577792F4C138F0A6A12C487 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { @@ -244,21 +331,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 542E63BC880F182266CA2C4E /* [CP] Embed Pods Frameworks */ = { + 712EF3076A3FDC3F68B0A8FC /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -278,6 +370,16 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 7E75E6CC262DCF29000C2EBB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7E75E6D4262DCF29000C2EBB /* PacketTunnelProvider.swift in Sources */, + 7E75E7CA2634139E000C2EBB /* NSExtension.swift in Sources */, + 7E75E703262DD640000C2EBB /* ConfigurationProxy.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -289,6 +391,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 7E75E6D8262DCF29000C2EBB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 7E75E6CF262DCF29000C2EBB /* Runner Network Extension */; + targetProxy = 7E75E6D7262DCF29000C2EBB /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -340,9 +450,9 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_BITCODE = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + EXCLUDED_ARCHS = armv7; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -351,10 +461,11 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -364,21 +475,19 @@ isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 143; + CURRENT_PROJECT_VERSION = 162; DEVELOPMENT_TEAM = 5KWG4UBB25; ENABLE_BITCODE = NO; - EXCLUDED_ARCHS = ""; - FLUTTER_BUILD_NAME = 2.0.1; - FLUTTER_BUILD_NUMBER = 101; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -387,9 +496,8 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 3.6.0; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.jimber.threebot; + MARKETING_VERSION = 3.7.0; + PRODUCT_BUNDLE_IDENTIFIER = org.jimber.threebotlogin.staging; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -397,6 +505,108 @@ }; name = Profile; }; + 7E75E6DB262DCF2A000C2EBB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = "Runner Network Extension/Runner_Network_Extension.entitlements"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 5KWG4UBB25; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Frameworks", + ); + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "Runner Network Extension/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.jimber.threebotlogin.staging.extension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 7E75E6DC262DCF2A000C2EBB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = "Runner Network Extension/Runner_Network_Extension.entitlements"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 5KWG4UBB25; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Frameworks", + ); + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "Runner Network Extension/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.jimber.threebotlogin.staging.extension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 7E75E6DD262DCF2A000C2EBB /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = "Runner Network Extension/Runner_Network_Extension.entitlements"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 5KWG4UBB25; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Frameworks", + ); + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "Runner Network Extension/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = org.jimber.threebotlogin.staging.extension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -428,9 +638,9 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_BITCODE = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + EXCLUDED_ARCHS = armv7; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -445,10 +655,11 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -484,9 +695,9 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_BITCODE = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + EXCLUDED_ARCHS = armv7; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -495,12 +706,13 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -510,21 +722,19 @@ isa = XCBuildConfiguration; baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 143; + CURRENT_PROJECT_VERSION = 162; DEVELOPMENT_TEAM = 5KWG4UBB25; ENABLE_BITCODE = NO; - EXCLUDED_ARCHS = ""; - FLUTTER_BUILD_NAME = 2.0.1; - FLUTTER_BUILD_NUMBER = 101; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -533,9 +743,8 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 3.6.0; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.jimber.threebot; + MARKETING_VERSION = 3.7.0; + PRODUCT_BUNDLE_IDENTIFIER = org.jimber.threebotlogin.staging; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -548,21 +757,19 @@ isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 143; + CURRENT_PROJECT_VERSION = 162; DEVELOPMENT_TEAM = 5KWG4UBB25; ENABLE_BITCODE = NO; - EXCLUDED_ARCHS = ""; - FLUTTER_BUILD_NAME = 2.0.1; - FLUTTER_BUILD_NUMBER = 101; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -571,9 +778,8 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 3.6.0; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = org.jimber.threebot; + MARKETING_VERSION = 3.7.0; + PRODUCT_BUNDLE_IDENTIFIER = org.jimber.threebotlogin.staging; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -584,6 +790,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 7E75E6DA262DCF2A000C2EBB /* Build configuration list for PBXNativeTarget "Runner Network Extension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7E75E6DB262DCF2A000C2EBB /* Debug */, + 7E75E6DC262DCF2A000C2EBB /* Release */, + 7E75E6DD262DCF2A000C2EBB /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/app/ios/Runner/Info.plist b/app/ios/Runner/Info.plist index 030070edd..880e2aabc 100644 --- a/app/ios/Runner/Info.plist +++ b/app/ios/Runner/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - ThreeFold Connect + ThreeFold Connect Staging CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier diff --git a/app/ios/ex/Info.plist b/app/ios/ex/Info.plist new file mode 100644 index 000000000..3059459e1 --- /dev/null +++ b/app/ios/ex/Info.plist @@ -0,0 +1,13 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.networkextension.packet-tunnel + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).PacketTunnelProvider + + + diff --git a/app/ios/ex/PacketTunnelProvider.swift b/app/ios/ex/PacketTunnelProvider.swift new file mode 100644 index 000000000..117f7a650 --- /dev/null +++ b/app/ios/ex/PacketTunnelProvider.swift @@ -0,0 +1,36 @@ +// +// PacketTunnelProvider.swift +// ex +// +// Created by Lennert on 04/07/2022. +// + +import NetworkExtension + +class PacketTunnelProvider: NEPacketTunnelProvider { + + override func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void) { + // Add code here to start the process of connecting the tunnel. + } + + override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) { + // Add code here to start the process of stopping the tunnel. + completionHandler() + } + + override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) { + // Add code here to handle the message. + if let handler = completionHandler { + handler(messageData) + } + } + + override func sleep(completionHandler: @escaping () -> Void) { + // Add code here to get ready to sleep. + completionHandler() + } + + override func wake() { + // Add code here to wake up. + } +} diff --git a/app/ios/ex/ex.entitlements b/app/ios/ex/ex.entitlements new file mode 100644 index 000000000..f29aa7ec3 --- /dev/null +++ b/app/ios/ex/ex.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.org.jimber.threebotlogin.staging + + + diff --git a/helm_files/templates/persistantVolumeClaim.yaml b/helm_files/templates/persistantVolumeClaim.yaml index c27fcc1fd..d44dc4231 100755 --- a/helm_files/templates/persistantVolumeClaim.yaml +++ b/helm_files/templates/persistantVolumeClaim.yaml @@ -1,15 +1,12 @@ -#apiVersion: v1 -#kind: PersistentVolumeClaim -#metadata: -# labels: -# app: {{ template "releaseName" . }} -# name: {{ .Values.claims.data.name }} -#spec: -# storageClassName: {{ .Values.storage.className }} -# accessModes: -# - {{ .Values.claims.data.accessModes }} -# resources: -# requests: -# storage: {{ .Values.claims.data.storage }} -#status: {} -# \ No newline at end of file +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ .Values.claims.data.name }} + namespace: jimber +spec: + accessModes: + - {{ .Values.claims.data.accessModes }} + resources: + requests: + storage: {{ .Values.claims.data.storage }} + storageClassName: rook-cephfs \ No newline at end of file diff --git a/helm_files/values.yaml b/helm_files/values.yaml index 20e045704..21a2b4312 100755 --- a/helm_files/values.yaml +++ b/helm_files/values.yaml @@ -36,9 +36,9 @@ storage: claims: data: - name: threebotlogin-pvc - accessModes: ReadWriteOnce - storage: 700Mi + name: threebotlogin + accessModes: ReadWriteMany + storage: 2G acme: diff --git a/helm_files/valuesProduction.yaml b/helm_files/valuesProduction.yaml index 85cd815f9..2c9a337ab 100755 --- a/helm_files/valuesProduction.yaml +++ b/helm_files/valuesProduction.yaml @@ -6,7 +6,7 @@ images: tag: production-337f2c85635dc81a5e59756dcfc66303f6f6afd7 wizard: name: wizard-prod - tag: prodv1 + tag: latest ingress: diff --git a/helm_files/valuesStaging.yaml b/helm_files/valuesStaging.yaml index 8eeeed34a..965440423 100755 --- a/helm_files/valuesStaging.yaml +++ b/helm_files/valuesStaging.yaml @@ -10,7 +10,7 @@ images: tag: staging-2 wizard: name: wizard-prod - tag: prodv1 + tag: latest ingress: