From 6794a51c1225f0eaf1604649f5c0fa41898b47a8 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 28 May 2019 13:47:37 -0700 Subject: [PATCH] Lists connected devices --- AltServer/ALTDeviceManager.h | 21 +++ AltServer/ALTDeviceManager.mm | 96 +++++++++++ AltServer/AltServer-Bridging-Header.h | 5 + AltServer/Base.lproj/Main.storyboard | 27 ++- AltServer/ViewController.swift | 21 ++- AltStore.xcodeproj/project.pbxproj | 226 +++++++++++++++++++++++++- Dependencies/AltSign | 2 +- 7 files changed, 378 insertions(+), 20 deletions(-) create mode 100644 AltServer/ALTDeviceManager.h create mode 100644 AltServer/ALTDeviceManager.mm create mode 100644 AltServer/AltServer-Bridging-Header.h diff --git a/AltServer/ALTDeviceManager.h b/AltServer/ALTDeviceManager.h new file mode 100644 index 00000000..e75edb09 --- /dev/null +++ b/AltServer/ALTDeviceManager.h @@ -0,0 +1,21 @@ +// +// ALTDeviceManager.h +// AltServer +// +// Created by Riley Testut on 5/24/19. +// Copyright © 2019 Riley Testut. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface ALTDeviceManager : NSObject + +@property (class, nonatomic, readonly) ALTDeviceManager *sharedManager; + +@property (nonatomic, readonly) NSArray *connectedDevices; + +@end + +NS_ASSUME_NONNULL_END diff --git a/AltServer/ALTDeviceManager.mm b/AltServer/ALTDeviceManager.mm new file mode 100644 index 00000000..c692e8b5 --- /dev/null +++ b/AltServer/ALTDeviceManager.mm @@ -0,0 +1,96 @@ +// +// ALTDeviceManager.m +// AltServer +// +// Created by Riley Testut on 5/24/19. +// Copyright © 2019 Riley Testut. All rights reserved. +// + +#import "ALTDeviceManager.h" + +#include +#include + +@implementation ALTDeviceManager + ++ (ALTDeviceManager *)sharedManager +{ + static ALTDeviceManager *_manager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _manager = [[self alloc] init]; + }); + + return _manager; +} + +#pragma mark - Getters - + +- (NSArray *)connectedDevices +{ + int count = 0; + char **udids = NULL; + + if (idevice_get_device_list(&udids, &count) < 0) + { + fprintf(stderr, "ERROR: Unable to retrieve device list!\n"); + return @[]; + } + + NSMutableArray *connectedDevices = [NSMutableArray array]; + + for (int i = 0; i < count; i++) + { + char *udid = udids[i]; + + idevice_t device = NULL; + idevice_new(&device, udid); + + if (!device) + { + fprintf(stderr, "ERROR: No device with UDID %s attached.\n", udid); + continue; + } + + lockdownd_client_t client = NULL; + if (lockdownd_client_new(device, &client, "altserver") != LOCKDOWN_E_SUCCESS) + { + fprintf(stderr, "ERROR: Connecting to device failed!\n"); + + idevice_free(device); + + continue; + } + + char *device_name = NULL; + if (lockdownd_get_device_name(client, &device_name) != LOCKDOWN_E_SUCCESS || device_name == NULL) + { + fprintf(stderr, "ERROR: Could not get device name!\n"); + + lockdownd_client_free(client); + idevice_free(device); + + continue; + } + + lockdownd_client_free(client); + idevice_free(device); + + NSString *name = [NSString stringWithCString:device_name encoding:NSUTF8StringEncoding]; + NSString *identifier = [NSString stringWithCString:udid encoding:NSUTF8StringEncoding]; + + ALTDevice *altDevice = [[ALTDevice alloc] initWithName:name identifier:identifier]; + [connectedDevices addObject:altDevice]; + + if (device_name != NULL) + { + free(device_name); + } + } + + idevice_device_list_free(udids); + + return connectedDevices; +} + +@end diff --git a/AltServer/AltServer-Bridging-Header.h b/AltServer/AltServer-Bridging-Header.h new file mode 100644 index 00000000..f02ceeee --- /dev/null +++ b/AltServer/AltServer-Bridging-Header.h @@ -0,0 +1,5 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + +#import "ALTDeviceManager.h" diff --git a/AltServer/Base.lproj/Main.storyboard b/AltServer/Base.lproj/Main.storyboard index 36da48a6..71d4b3b4 100644 --- a/AltServer/Base.lproj/Main.storyboard +++ b/AltServer/Base.lproj/Main.storyboard @@ -1,7 +1,8 @@ - - + + - + + @@ -673,7 +674,7 @@ - + @@ -703,10 +704,26 @@ - + + + + + + + + diff --git a/AltServer/ViewController.swift b/AltServer/ViewController.swift index 9416ce7d..965a9697 100644 --- a/AltServer/ViewController.swift +++ b/AltServer/ViewController.swift @@ -10,18 +10,17 @@ import Cocoa class ViewController: NSViewController { - override func viewDidLoad() { + override func viewDidLoad() + { super.viewDidLoad() - - // Do any additional setup after loading the view. } - - override var representedObject: Any? { - didSet { - // Update the view, if already loaded. - } - } - - } +private extension ViewController +{ + @IBAction func listConnectedDevices(_ sender: NSButton) + { + let devices = ALTDeviceManager.shared.connectedDevices + print(devices) + } +} diff --git a/AltStore.xcodeproj/project.pbxproj b/AltStore.xcodeproj/project.pbxproj index 9faf12d4..6ba93774 100644 --- a/AltStore.xcodeproj/project.pbxproj +++ b/AltStore.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ BF458692229872EA00BD7491 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF458691229872EA00BD7491 /* ViewController.swift */; }; BF458694229872EA00BD7491 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BF458693229872EA00BD7491 /* Assets.xcassets */; }; BF458697229872EA00BD7491 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF458695229872EA00BD7491 /* Main.storyboard */; }; + BF4586C52298CDB800BD7491 /* ALTDeviceManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = BF4586C42298CDB800BD7491 /* ALTDeviceManager.mm */; }; BF4587F82298D3AB00BD7491 /* service.h in Headers */ = {isa = PBXBuildFile; fileRef = BF4587C82298D3A800BD7491 /* service.h */; }; BF4587F92298D3AB00BD7491 /* diagnostics_relay.c in Sources */ = {isa = PBXBuildFile; fileRef = BF4587C92298D3A800BD7491 /* diagnostics_relay.c */; }; BF4587FA2298D3AB00BD7491 /* diagnostics_relay.h in Headers */ = {isa = PBXBuildFile; fileRef = BF4587CA2298D3A800BD7491 /* diagnostics_relay.h */; }; @@ -73,8 +74,42 @@ BF4588472298D4B000BD7491 /* libimobiledevice.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BF45872B2298D31600BD7491 /* libimobiledevice.a */; }; BF45884A2298D55000BD7491 /* thread.c in Sources */ = {isa = PBXBuildFile; fileRef = BF4588482298D55000BD7491 /* thread.c */; }; BF45884B2298D55000BD7491 /* thread.h in Headers */ = {isa = PBXBuildFile; fileRef = BF4588492298D55000BD7491 /* thread.h */; }; + BF4588552298DC5400BD7491 /* openssl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF4588542298DC5400BD7491 /* openssl.framework */; }; + BF45886F2298DCDE00BD7491 /* Uid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF4588572298DCDC00BD7491 /* Uid.cpp */; }; + BF4588702298DCDE00BD7491 /* base64.c in Sources */ = {isa = PBXBuildFile; fileRef = BF4588582298DCDC00BD7491 /* base64.c */; }; + BF4588712298DCDE00BD7491 /* Date.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF4588592298DCDC00BD7491 /* Date.cpp */; }; + BF4588722298DCDE00BD7491 /* bplist.c in Sources */ = {isa = PBXBuildFile; fileRef = BF45885A2298DCDC00BD7491 /* bplist.c */; }; + BF4588732298DCDE00BD7491 /* Key.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF45885B2298DCDC00BD7491 /* Key.cpp */; }; + BF4588742298DCDE00BD7491 /* bytearray.c in Sources */ = {isa = PBXBuildFile; fileRef = BF45885C2298DCDD00BD7491 /* bytearray.c */; }; + BF4588752298DCDE00BD7491 /* Boolean.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF45885D2298DCDD00BD7491 /* Boolean.cpp */; }; + BF4588762298DCDE00BD7491 /* String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF45885E2298DCDD00BD7491 /* String.cpp */; }; + BF4588772298DCDE00BD7491 /* Integer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF45885F2298DCDD00BD7491 /* Integer.cpp */; }; + BF4588782298DCDE00BD7491 /* Dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF4588602298DCDD00BD7491 /* Dictionary.cpp */; }; + BF4588792298DCDE00BD7491 /* Data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF4588612298DCDD00BD7491 /* Data.cpp */; }; + BF45887A2298DCDE00BD7491 /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF4588622298DCDD00BD7491 /* Node.cpp */; }; + BF45887B2298DCDE00BD7491 /* plist.c in Sources */ = {isa = PBXBuildFile; fileRef = BF4588632298DCDD00BD7491 /* plist.c */; }; + BF45887C2298DCDE00BD7491 /* xplist.c in Sources */ = {isa = PBXBuildFile; fileRef = BF4588642298DCDD00BD7491 /* xplist.c */; }; + BF45887D2298DCDE00BD7491 /* Array.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF4588652298DCDD00BD7491 /* Array.cpp */; }; + BF45887E2298DCDE00BD7491 /* hashtable.h in Headers */ = {isa = PBXBuildFile; fileRef = BF4588662298DCDD00BD7491 /* hashtable.h */; }; + BF45887F2298DCDE00BD7491 /* plist.h in Headers */ = {isa = PBXBuildFile; fileRef = BF4588672298DCDD00BD7491 /* plist.h */; }; + BF4588802298DCDE00BD7491 /* Structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF4588682298DCDD00BD7491 /* Structure.cpp */; }; + BF4588812298DCDE00BD7491 /* bytearray.h in Headers */ = {isa = PBXBuildFile; fileRef = BF4588692298DCDD00BD7491 /* bytearray.h */; }; + BF4588822298DCDE00BD7491 /* hashtable.c in Sources */ = {isa = PBXBuildFile; fileRef = BF45886A2298DCDD00BD7491 /* hashtable.c */; }; + BF4588832298DCDE00BD7491 /* ptrarray.h in Headers */ = {isa = PBXBuildFile; fileRef = BF45886B2298DCDD00BD7491 /* ptrarray.h */; }; + BF4588842298DCDE00BD7491 /* Real.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF45886C2298DCDD00BD7491 /* Real.cpp */; }; + BF4588852298DCDE00BD7491 /* base64.h in Headers */ = {isa = PBXBuildFile; fileRef = BF45886D2298DCDD00BD7491 /* base64.h */; }; + BF4588862298DCDE00BD7491 /* ptrarray.c in Sources */ = {isa = PBXBuildFile; fileRef = BF45886E2298DCDE00BD7491 /* ptrarray.c */; }; + BF4588882298DD3F00BD7491 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = BF4588872298DD3F00BD7491 /* libxml2.tbd */; }; + BF4588902298DE0C00BD7491 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = BF45888A2298DE0B00BD7491 /* list.c */; }; + BF4588912298DE0C00BD7491 /* node_iterator.c in Sources */ = {isa = PBXBuildFile; fileRef = BF45888B2298DE0C00BD7491 /* node_iterator.c */; }; + BF4588922298DE0C00BD7491 /* node_list.c in Sources */ = {isa = PBXBuildFile; fileRef = BF45888C2298DE0C00BD7491 /* node_list.c */; }; + BF4588932298DE0C00BD7491 /* iterator.c in Sources */ = {isa = PBXBuildFile; fileRef = BF45888D2298DE0C00BD7491 /* iterator.c */; }; + BF4588942298DE0C00BD7491 /* cnary.c in Sources */ = {isa = PBXBuildFile; fileRef = BF45888E2298DE0C00BD7491 /* cnary.c */; }; + BF4588952298DE0C00BD7491 /* node.c in Sources */ = {isa = PBXBuildFile; fileRef = BF45888F2298DE0C00BD7491 /* node.c */; }; + BF4588972298DE6E00BD7491 /* libzip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF4588962298DE6E00BD7491 /* libzip.framework */; }; BF5AB3A82285FE7500DC914B /* AltSign.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF5AB3A72285FE6C00DC914B /* AltSign.framework */; }; BF5AB3A92285FE7500DC914B /* AltSign.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF5AB3A72285FE6C00DC914B /* AltSign.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BF9B63C6229DD44E002F0A62 /* AltSign.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF9B63C5229DD44D002F0A62 /* AltSign.framework */; }; BFB11692229322E400BB457C /* DatabaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB11691229322E400BB457C /* DatabaseManager.swift */; }; BFB1169B2293274D00BB457C /* JSONDecoder+ManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB1169A2293274D00BB457C /* JSONDecoder+ManagedObjectContext.swift */; }; BFB1169D22932DB100BB457C /* Apps.json in Resources */ = {isa = PBXBuildFile; fileRef = BFB1169C22932DB100BB457C /* Apps.json */; }; @@ -108,6 +143,16 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + BF9B6324229DBBED002F0A62 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; BFD247842284BB2C00981D42 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -130,6 +175,9 @@ BF458696229872EA00BD7491 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; BF458698229872EA00BD7491 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; BF458699229872EA00BD7491 /* AltServer.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AltServer.entitlements; sourceTree = ""; }; + BF4586C22298CDB800BD7491 /* AltServer-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AltServer-Bridging-Header.h"; sourceTree = ""; }; + BF4586C32298CDB800BD7491 /* ALTDeviceManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ALTDeviceManager.h; sourceTree = ""; }; + BF4586C42298CDB800BD7491 /* ALTDeviceManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ALTDeviceManager.mm; sourceTree = ""; }; BF45872B2298D31600BD7491 /* libimobiledevice.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libimobiledevice.a; sourceTree = BUILT_PRODUCTS_DIR; }; BF4587C82298D3A800BD7491 /* service.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = service.h; path = Dependencies/libimobiledevice/src/service.h; sourceTree = SOURCE_ROOT; }; BF4587C92298D3A800BD7491 /* diagnostics_relay.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = diagnostics_relay.c; path = Dependencies/libimobiledevice/src/diagnostics_relay.c; sourceTree = SOURCE_ROOT; }; @@ -192,7 +240,41 @@ BF4588422298D40000BD7491 /* libusbmuxd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = libusbmuxd.c; path = Dependencies/libusbmuxd/src/libusbmuxd.c; sourceTree = SOURCE_ROOT; }; BF4588482298D55000BD7491 /* thread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = thread.c; path = Dependencies/libusbmuxd/common/thread.c; sourceTree = SOURCE_ROOT; }; BF4588492298D55000BD7491 /* thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = thread.h; path = Dependencies/libusbmuxd/common/thread.h; sourceTree = SOURCE_ROOT; }; + BF4588542298DC5400BD7491 /* openssl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = openssl.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BF4588572298DCDC00BD7491 /* Uid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Uid.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/Uid.cpp; sourceTree = SOURCE_ROOT; }; + BF4588582298DCDC00BD7491 /* base64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = base64.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/base64.c; sourceTree = SOURCE_ROOT; }; + BF4588592298DCDC00BD7491 /* Date.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Date.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/Date.cpp; sourceTree = SOURCE_ROOT; }; + BF45885A2298DCDC00BD7491 /* bplist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bplist.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/bplist.c; sourceTree = SOURCE_ROOT; }; + BF45885B2298DCDC00BD7491 /* Key.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Key.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/Key.cpp; sourceTree = SOURCE_ROOT; }; + BF45885C2298DCDD00BD7491 /* bytearray.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bytearray.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/bytearray.c; sourceTree = SOURCE_ROOT; }; + BF45885D2298DCDD00BD7491 /* Boolean.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Boolean.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/Boolean.cpp; sourceTree = SOURCE_ROOT; }; + BF45885E2298DCDD00BD7491 /* String.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = String.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/String.cpp; sourceTree = SOURCE_ROOT; }; + BF45885F2298DCDD00BD7491 /* Integer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Integer.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/Integer.cpp; sourceTree = SOURCE_ROOT; }; + BF4588602298DCDD00BD7491 /* Dictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Dictionary.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/Dictionary.cpp; sourceTree = SOURCE_ROOT; }; + BF4588612298DCDD00BD7491 /* Data.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Data.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/Data.cpp; sourceTree = SOURCE_ROOT; }; + BF4588622298DCDD00BD7491 /* Node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Node.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/Node.cpp; sourceTree = SOURCE_ROOT; }; + BF4588632298DCDD00BD7491 /* plist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = plist.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/plist.c; sourceTree = SOURCE_ROOT; }; + BF4588642298DCDD00BD7491 /* xplist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xplist.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/xplist.c; sourceTree = SOURCE_ROOT; }; + BF4588652298DCDD00BD7491 /* Array.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Array.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/Array.cpp; sourceTree = SOURCE_ROOT; }; + BF4588662298DCDD00BD7491 /* hashtable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hashtable.h; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/hashtable.h; sourceTree = SOURCE_ROOT; }; + BF4588672298DCDD00BD7491 /* plist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plist.h; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/plist.h; sourceTree = SOURCE_ROOT; }; + BF4588682298DCDD00BD7491 /* Structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Structure.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/Structure.cpp; sourceTree = SOURCE_ROOT; }; + BF4588692298DCDD00BD7491 /* bytearray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bytearray.h; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/bytearray.h; sourceTree = SOURCE_ROOT; }; + BF45886A2298DCDD00BD7491 /* hashtable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hashtable.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/hashtable.c; sourceTree = SOURCE_ROOT; }; + BF45886B2298DCDD00BD7491 /* ptrarray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ptrarray.h; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/ptrarray.h; sourceTree = SOURCE_ROOT; }; + BF45886C2298DCDD00BD7491 /* Real.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Real.cpp; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/Real.cpp; sourceTree = SOURCE_ROOT; }; + BF45886D2298DCDD00BD7491 /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = base64.h; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/base64.h; sourceTree = SOURCE_ROOT; }; + BF45886E2298DCDE00BD7491 /* ptrarray.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ptrarray.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/src/ptrarray.c; sourceTree = SOURCE_ROOT; }; + BF4588872298DD3F00BD7491 /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/lib/libxml2.tbd; sourceTree = DEVELOPER_DIR; }; + BF45888A2298DE0B00BD7491 /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = list.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/libcnary/list.c; sourceTree = SOURCE_ROOT; }; + BF45888B2298DE0C00BD7491 /* node_iterator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = node_iterator.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/libcnary/node_iterator.c; sourceTree = SOURCE_ROOT; }; + BF45888C2298DE0C00BD7491 /* node_list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = node_list.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/libcnary/node_list.c; sourceTree = SOURCE_ROOT; }; + BF45888D2298DE0C00BD7491 /* iterator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = iterator.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/libcnary/iterator.c; sourceTree = SOURCE_ROOT; }; + BF45888E2298DE0C00BD7491 /* cnary.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cnary.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/libcnary/cnary.c; sourceTree = SOURCE_ROOT; }; + BF45888F2298DE0C00BD7491 /* node.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = node.c; path = Dependencies/AltSign/Dependencies/ldid/libplist/libcnary/node.c; sourceTree = SOURCE_ROOT; }; + BF4588962298DE6E00BD7491 /* libzip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = libzip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BF5AB3A72285FE6C00DC914B /* AltSign.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AltSign.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BF9B63C5229DD44D002F0A62 /* AltSign.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AltSign.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BFB11691229322E400BB457C /* DatabaseManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseManager.swift; sourceTree = ""; }; BFB1169A2293274D00BB457C /* JSONDecoder+ManagedObjectContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "JSONDecoder+ManagedObjectContext.swift"; sourceTree = ""; }; BFB1169C22932DB100BB457C /* Apps.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Apps.json; sourceTree = ""; }; @@ -228,6 +310,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BF9B63C6229DD44E002F0A62 /* AltSign.framework in Frameworks */, + BF4588972298DE6E00BD7491 /* libzip.framework in Frameworks */, + BF4588882298DD3F00BD7491 /* libxml2.tbd in Frameworks */, + BF4588552298DC5400BD7491 /* openssl.framework in Frameworks */, BF4588472298D4B000BD7491 /* libimobiledevice.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -249,10 +335,13 @@ children = ( BF45868F229872EA00BD7491 /* AppDelegate.swift */, BF458691229872EA00BD7491 /* ViewController.swift */, + BF4586C32298CDB800BD7491 /* ALTDeviceManager.h */, + BF4586C42298CDB800BD7491 /* ALTDeviceManager.mm */, BF458693229872EA00BD7491 /* Assets.xcassets */, BF458695229872EA00BD7491 /* Main.storyboard */, BF458698229872EA00BD7491 /* Info.plist */, BF458699229872EA00BD7491 /* AltServer.entitlements */, + BF4586C22298CDB800BD7491 /* AltServer-Bridging-Header.h */, ); path = AltServer; sourceTree = ""; @@ -260,6 +349,7 @@ BF45872C2298D31600BD7491 /* libimobiledevice */ = { isa = PBXGroup; children = ( + BF4588562298DC6D00BD7491 /* libplist */, BF4587972298D36400BD7491 /* libimobiledevice */, BF45883D2298D3E800BD7491 /* libusbmuxd */, ); @@ -349,6 +439,51 @@ name = libusbmuxd; sourceTree = ""; }; + BF4588562298DC6D00BD7491 /* libplist */ = { + isa = PBXGroup; + children = ( + BF4588892298DDEA00BD7491 /* libcnary */, + BF4588652298DCDD00BD7491 /* Array.cpp */, + BF4588582298DCDC00BD7491 /* base64.c */, + BF45886D2298DCDD00BD7491 /* base64.h */, + BF45885D2298DCDD00BD7491 /* Boolean.cpp */, + BF45885A2298DCDC00BD7491 /* bplist.c */, + BF45885C2298DCDD00BD7491 /* bytearray.c */, + BF4588692298DCDD00BD7491 /* bytearray.h */, + BF4588612298DCDD00BD7491 /* Data.cpp */, + BF4588592298DCDC00BD7491 /* Date.cpp */, + BF4588602298DCDD00BD7491 /* Dictionary.cpp */, + BF45886A2298DCDD00BD7491 /* hashtable.c */, + BF4588662298DCDD00BD7491 /* hashtable.h */, + BF45885F2298DCDD00BD7491 /* Integer.cpp */, + BF45885B2298DCDC00BD7491 /* Key.cpp */, + BF4588622298DCDD00BD7491 /* Node.cpp */, + BF4588632298DCDD00BD7491 /* plist.c */, + BF4588672298DCDD00BD7491 /* plist.h */, + BF45886E2298DCDE00BD7491 /* ptrarray.c */, + BF45886B2298DCDD00BD7491 /* ptrarray.h */, + BF45886C2298DCDD00BD7491 /* Real.cpp */, + BF45885E2298DCDD00BD7491 /* String.cpp */, + BF4588682298DCDD00BD7491 /* Structure.cpp */, + BF4588572298DCDC00BD7491 /* Uid.cpp */, + BF4588642298DCDD00BD7491 /* xplist.c */, + ); + name = libplist; + sourceTree = ""; + }; + BF4588892298DDEA00BD7491 /* libcnary */ = { + isa = PBXGroup; + children = ( + BF45888E2298DE0C00BD7491 /* cnary.c */, + BF45888D2298DE0C00BD7491 /* iterator.c */, + BF45888A2298DE0B00BD7491 /* list.c */, + BF45888B2298DE0C00BD7491 /* node_iterator.c */, + BF45888C2298DE0C00BD7491 /* node_list.c */, + BF45888F2298DE0C00BD7491 /* node.c */, + ); + name = libcnary; + sourceTree = ""; + }; BFB1169E22933DDC00BB457C /* Updates */ = { isa = PBXGroup; children = ( @@ -406,6 +541,10 @@ BFD247852284BB3300981D42 /* Frameworks */ = { isa = PBXGroup; children = ( + BF9B63C5229DD44D002F0A62 /* AltSign.framework */, + BF4588962298DE6E00BD7491 /* libzip.framework */, + BF4588872298DD3F00BD7491 /* libxml2.tbd */, + BF4588542298DC5400BD7491 /* openssl.framework */, BFD247862284BB3B00981D42 /* Roxas.framework */, BF5AB3A72285FE6C00DC914B /* AltSign.framework */, ); @@ -478,13 +617,16 @@ files = ( BF4588112298D3AB00BD7491 /* misagent.h in Headers */, BF4588042298D3AB00BD7491 /* lockdown.h in Headers */, + BF4588812298DCDE00BD7491 /* bytearray.h in Headers */, BF4588402298D3F800BD7491 /* collection.h in Headers */, BF45880B2298D3AB00BD7491 /* mobilesync.h in Headers */, BF4588002298D3AB00BD7491 /* restore.h in Headers */, BF4588332298D3C100BD7491 /* socket.h in Headers */, BF4588152298D3AB00BD7491 /* mobilebackup.h in Headers */, BF4588182298D3AB00BD7491 /* syslog_relay.h in Headers */, + BF4588832298DCDE00BD7491 /* ptrarray.h in Headers */, BF45881D2298D3AB00BD7491 /* file_relay.h in Headers */, + BF45887F2298DCDE00BD7491 /* plist.h in Headers */, BF4587FD2298D3AB00BD7491 /* sbservices.h in Headers */, BF4588362298D3C100BD7491 /* debug.h in Headers */, BF4588202298D3AB00BD7491 /* mobile_image_mounter.h in Headers */, @@ -493,6 +635,7 @@ BF45880E2298D3AB00BD7491 /* debugserver.h in Headers */, BF45884B2298D55000BD7491 /* thread.h in Headers */, BF4588102298D3AB00BD7491 /* heartbeat.h in Headers */, + BF4588852298DCDE00BD7491 /* base64.h in Headers */, BF4587FA2298D3AB00BD7491 /* diagnostics_relay.h in Headers */, BF4588192298D3AB00BD7491 /* webinspector.h in Headers */, BF4588342298D3C100BD7491 /* userpref.h in Headers */, @@ -501,6 +644,7 @@ BF4587FE2298D3AB00BD7491 /* mobilebackup2.h in Headers */, BF45881C2298D3AB00BD7491 /* afc.h in Headers */, BF45881A2298D3AB00BD7491 /* mobileactivation.h in Headers */, + BF45887E2298DCDE00BD7491 /* hashtable.h in Headers */, BF4588052298D3AB00BD7491 /* idevice.h in Headers */, BF4588012298D3AB00BD7491 /* installation_proxy.h in Headers */, BF4587F82298D3AB00BD7491 /* service.h in Headers */, @@ -519,6 +663,7 @@ BF458689229872EA00BD7491 /* Sources */, BF45868B229872EA00BD7491 /* Resources */, BF4588462298D4AA00BD7491 /* Frameworks */, + BF9B6324229DBBED002F0A62 /* Embed Frameworks */, ); buildRules = ( ); @@ -642,6 +787,7 @@ files = ( BF458692229872EA00BD7491 /* ViewController.swift in Sources */, BF458690229872EA00BD7491 /* AppDelegate.swift in Sources */, + BF4586C52298CDB800BD7491 /* ALTDeviceManager.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -651,35 +797,60 @@ files = ( BF45881B2298D3AB00BD7491 /* house_arrest.c in Sources */, BF4588232298D3AB00BD7491 /* mobilesync.c in Sources */, + BF4588762298DCDE00BD7491 /* String.cpp in Sources */, BF4588072298D3AB00BD7491 /* afc.c in Sources */, BF4588082298D3AB00BD7491 /* mobile_image_mounter.c in Sources */, + BF4588922298DE0C00BD7491 /* node_list.c in Sources */, + BF4588712298DCDE00BD7491 /* Date.cpp in Sources */, BF4588022298D3AB00BD7491 /* file_relay.c in Sources */, BF45880F2298D3AB00BD7491 /* debugserver.c in Sources */, BF4588162298D3AB00BD7491 /* restore.c in Sources */, + BF4588822298DCDE00BD7491 /* hashtable.c in Sources */, BF4588412298D3F800BD7491 /* collection.c in Sources */, BF4588372298D3C100BD7491 /* utils.c in Sources */, BF4588092298D3AB00BD7491 /* installation_proxy.c in Sources */, BF4587FF2298D3AB00BD7491 /* heartbeat.c in Sources */, BF4588222298D3AB00BD7491 /* mobileactivation.c in Sources */, + BF4588802298DCDE00BD7491 /* Structure.cpp in Sources */, + BF45887A2298DCDE00BD7491 /* Node.cpp in Sources */, + BF4588862298DCDE00BD7491 /* ptrarray.c in Sources */, BF4588212298D3AB00BD7491 /* idevice.c in Sources */, BF4587F92298D3AB00BD7491 /* diagnostics_relay.c in Sources */, + BF4588932298DE0C00BD7491 /* iterator.c in Sources */, + BF45886F2298DCDE00BD7491 /* Uid.cpp in Sources */, + BF45887D2298DCDE00BD7491 /* Array.cpp in Sources */, + BF4588742298DCDE00BD7491 /* bytearray.c in Sources */, + BF4588792298DCDE00BD7491 /* Data.cpp in Sources */, + BF45887C2298DCDE00BD7491 /* xplist.c in Sources */, + BF45887B2298DCDE00BD7491 /* plist.c in Sources */, BF4588062298D3AB00BD7491 /* webinspector.c in Sources */, + BF4588752298DCDE00BD7491 /* Boolean.cpp in Sources */, BF45880D2298D3AB00BD7491 /* mobilebackup.c in Sources */, + BF4588842298DCDE00BD7491 /* Real.cpp in Sources */, BF45883A2298D3C100BD7491 /* debug.c in Sources */, BF45884A2298D55000BD7491 /* thread.c in Sources */, BF4587FB2298D3AB00BD7491 /* notification_proxy.c in Sources */, + BF4588732298DCDE00BD7491 /* Key.cpp in Sources */, BF4588352298D3C100BD7491 /* userpref.c in Sources */, BF4588242298D3AB00BD7491 /* property_list_service.c in Sources */, BF45881E2298D3AB00BD7491 /* misagent.c in Sources */, + BF4588782298DCDE00BD7491 /* Dictionary.cpp in Sources */, + BF4588902298DE0C00BD7491 /* list.c in Sources */, BF4587FC2298D3AB00BD7491 /* sbservices.c in Sources */, BF4588392298D3C100BD7491 /* socket.c in Sources */, + BF4588912298DE0C00BD7491 /* node_iterator.c in Sources */, BF4588142298D3AB00BD7491 /* device_link_service.c in Sources */, BF4588172298D3AB00BD7491 /* screenshotr.c in Sources */, BF4588432298D40000BD7491 /* libusbmuxd.c in Sources */, BF4588032298D3AB00BD7491 /* syslog_relay.c in Sources */, + BF4588722298DCDE00BD7491 /* bplist.c in Sources */, + BF4588952298DE0C00BD7491 /* node.c in Sources */, + BF4588702298DCDE00BD7491 /* base64.c in Sources */, BF4588272298D3AB00BD7491 /* service.c in Sources */, BF4588262298D3AB00BD7491 /* lockdown.c in Sources */, + BF4588942298DE0C00BD7491 /* cnary.c in Sources */, BF45880C2298D3AB00BD7491 /* mobilebackup2.c in Sources */, + BF4588772298DCDE00BD7491 /* Integer.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -751,7 +922,26 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 6XVY5G3U44; - GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + HAVE_OPENSSL, + HAVE_STPNCPY, + HAVE_STPCPY, + HAVE_VASPRINTF, + HAVE_ASPRINTF, + "\"PACKAGE_STRING=\\\"AltServer 1.0\\\"\"", + ); + HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/ldid/libplist/include\"", + "\"$(SRCROOT)/Dependencies/libimobiledevice\"", + "\"$(SRCROOT)/Dependencies/libimobiledevice/include\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/OpenSSL/macos/include\"", + "\"$(SRCROOT)/Dependencies/libusbmuxd/include\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/lib\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/ldid/libplist/libcnary/include\"", + "\"${SDKROOT}/usr/include/libxml2\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/xcode\"", + ); INFOPLIST_FILE = AltServer/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -761,6 +951,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.AltServer; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_OBJC_BRIDGING_HEADER = "AltServer/AltServer-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; @@ -775,6 +966,26 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 6XVY5G3U44; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + HAVE_OPENSSL, + HAVE_STPNCPY, + HAVE_STPCPY, + HAVE_VASPRINTF, + HAVE_ASPRINTF, + "\"PACKAGE_STRING=\\\"AltServer 1.0\\\"\"", + ); + HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/ldid/libplist/include\"", + "\"$(SRCROOT)/Dependencies/libimobiledevice\"", + "\"$(SRCROOT)/Dependencies/libimobiledevice/include\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/OpenSSL/macos/include\"", + "\"$(SRCROOT)/Dependencies/libusbmuxd/include\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/lib\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/ldid/libplist/libcnary/include\"", + "\"${SDKROOT}/usr/include/libxml2\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/xcode\"", + ); INFOPLIST_FILE = AltServer/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -784,6 +995,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.AltServer; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_OBJC_BRIDGING_HEADER = "AltServer/AltServer-Bridging-Header.h"; SWIFT_VERSION = 5.0; }; name = Release; @@ -813,6 +1025,10 @@ "\"$(SRCROOT)/Dependencies/libimobiledevice/include\"", "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/OpenSSL/macos/include\"", "\"$(SRCROOT)/Dependencies/libusbmuxd/include\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/lib\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/ldid/libplist/libcnary/include\"", + "\"${SDKROOT}/usr/include/libxml2\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/xcode\"", ); MACOSX_DEPLOYMENT_TARGET = 10.14; PRODUCT_NAME = imobiledevice; @@ -846,6 +1062,10 @@ "\"$(SRCROOT)/Dependencies/libimobiledevice/include\"", "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/OpenSSL/macos/include\"", "\"$(SRCROOT)/Dependencies/libusbmuxd/include\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/lib\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/ldid/libplist/libcnary/include\"", + "\"${SDKROOT}/usr/include/libxml2\"", + "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/xcode\"", ); MACOSX_DEPLOYMENT_TARGET = 10.14; PRODUCT_NAME = imobiledevice; @@ -871,7 +1091,7 @@ CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; @@ -932,7 +1152,7 @@ CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; diff --git a/Dependencies/AltSign b/Dependencies/AltSign index 63a7c4cd..0862204b 160000 --- a/Dependencies/AltSign +++ b/Dependencies/AltSign @@ -1 +1 @@ -Subproject commit 63a7c4cd4e6c658bfa1d0f21533e7ebcb326378f +Subproject commit 0862204b83a95c51434bcfe3a980493208fdd064