mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
[AltServer] Uses GrandSlam Authentication
Uses Mail.app plug-in to retrieve the computer’s anisette data, which is necessary for GSA.
This commit is contained in:
19
AltPlugin/ALTPluginService.h
Normal file
19
AltPlugin/ALTPluginService.h
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// ALTPluginService.h
|
||||||
|
// AltPlugin
|
||||||
|
//
|
||||||
|
// Created by Riley Testut on 11/14/19.
|
||||||
|
// Copyright © 2019 Riley Testut. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface ALTPluginService : NSObject
|
||||||
|
|
||||||
|
+ (instancetype)sharedService;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
99
AltPlugin/ALTPluginService.m
Normal file
99
AltPlugin/ALTPluginService.m
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
//
|
||||||
|
// ALTPluginService.m
|
||||||
|
// AltPlugin
|
||||||
|
//
|
||||||
|
// Created by Riley Testut on 11/14/19.
|
||||||
|
// Copyright © 2019 Riley Testut. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "ALTPluginService.h"
|
||||||
|
|
||||||
|
#import <dlfcn.h>
|
||||||
|
|
||||||
|
#import "ALTAnisetteData.h"
|
||||||
|
|
||||||
|
@import AppKit;
|
||||||
|
|
||||||
|
@interface AKAppleIDSession : NSObject
|
||||||
|
- (id)appleIDHeadersForRequest:(id)arg1;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface AKDevice
|
||||||
|
+ (AKDevice *)currentDevice;
|
||||||
|
- (NSString *)uniqueDeviceIdentifier;
|
||||||
|
- (NSString *)serialNumber;
|
||||||
|
- (NSString *)serverFriendlyDescription;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface ALTPluginService ()
|
||||||
|
|
||||||
|
@property (nonatomic, readonly) NSISO8601DateFormatter *dateFormatter;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation ALTPluginService
|
||||||
|
|
||||||
|
+ (instancetype)sharedService
|
||||||
|
{
|
||||||
|
static ALTPluginService *_service = nil;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
_service = [[self alloc] init];
|
||||||
|
});
|
||||||
|
|
||||||
|
return _service;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)init
|
||||||
|
{
|
||||||
|
self = [super init];
|
||||||
|
if (self)
|
||||||
|
{
|
||||||
|
_dateFormatter = [[NSISO8601DateFormatter alloc] init];
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void)initialize
|
||||||
|
{
|
||||||
|
[[ALTPluginService sharedService] start];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)start
|
||||||
|
{
|
||||||
|
dlopen("/System/Library/PrivateFrameworks/AuthKit.framework/AuthKit", RTLD_NOW);
|
||||||
|
|
||||||
|
[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotification:) name:@"com.rileytestut.AltServer.FetchAnisetteData" object:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)receiveNotification:(NSNotification *)notification
|
||||||
|
{
|
||||||
|
NSString *requestUUID = notification.userInfo[@"requestUUID"];
|
||||||
|
|
||||||
|
NSMutableURLRequest* req = [[NSMutableURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:@"https://developerservices2.apple.com/services/QH65B2/listTeams.action?clientId=XABBG36SBA"]];
|
||||||
|
[req setHTTPMethod:@"POST"];
|
||||||
|
|
||||||
|
AKAppleIDSession *session = [[NSClassFromString(@"AKAppleIDSession") alloc] initWithIdentifier:@"com.apple.gs.xcode.auth"];
|
||||||
|
NSDictionary *headers = [session appleIDHeadersForRequest:req];
|
||||||
|
|
||||||
|
AKDevice *device = [NSClassFromString(@"AKDevice") currentDevice];
|
||||||
|
NSDate *date = [self.dateFormatter dateFromString:headers[@"X-Apple-I-Client-Time"]];
|
||||||
|
|
||||||
|
ALTAnisetteData *anisetteData = [[NSClassFromString(@"ALTAnisetteData") alloc] initWithMachineID:headers[@"X-Apple-I-MD-M"]
|
||||||
|
oneTimePassword:headers[@"X-Apple-I-MD"]
|
||||||
|
localUserID:headers[@"X-Apple-I-MD-LU"]
|
||||||
|
routingInfo:[headers[@"X-Apple-I-MD-RINFO"] longLongValue]
|
||||||
|
deviceUniqueIdentifier:device.uniqueDeviceIdentifier
|
||||||
|
deviceSerialNumber:device.serialNumber
|
||||||
|
deviceDescription:device.serverFriendlyDescription
|
||||||
|
date:date
|
||||||
|
locale:[NSLocale currentLocale]
|
||||||
|
timeZone:[NSTimeZone localTimeZone]];
|
||||||
|
|
||||||
|
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:anisetteData requiringSecureCoding:YES error:nil];
|
||||||
|
|
||||||
|
[[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"com.rileytestut.AltServer.AnisetteDataResponse" object:nil userInfo:@{@"requestUUID": requestUUID, @"anisetteData": data} deliverImmediately:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
62
AltPlugin/Info.plist
Normal file
62
AltPlugin/Info.plist
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
<key>NSHumanReadableCopyright</key>
|
||||||
|
<string>Copyright © 2019 Riley Testut. All rights reserved.</string>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string>ALTPluginService</string>
|
||||||
|
<key>Supported10.14PluginCompatibilityUUIDs</key>
|
||||||
|
<array>
|
||||||
|
<string># UUIDs for versions from 10.12 to 99.99.99</string>
|
||||||
|
<string># For mail version 10.0 (3226) on OS X Version 10.12 (build 16A319)</string>
|
||||||
|
<string>36CCB8BB-2207-455E-89BC-B9D6E47ABB5B</string>
|
||||||
|
<string># For mail version 10.1 (3251) on OS X Version 10.12.1 (build 16B2553a)</string>
|
||||||
|
<string>9054AFD9-2607-489E-8E63-8B09A749BC61</string>
|
||||||
|
<string># For mail version 10.2 (3259) on OS X Version 10.12.2 (build 16D12b)</string>
|
||||||
|
<string>1CD3B36A-0E3B-4A26-8F7E-5BDF96AAC97E</string>
|
||||||
|
<string># For mail version 10.3 (3273) on OS X Version 10.12.4 (build 16G1036)</string>
|
||||||
|
<string>21560BD9-A3CC-482E-9B99-95B7BF61EDC1</string>
|
||||||
|
<string># For mail version 11.0 (3441.0.1) on OS X Version 10.13 (build 17A315i)</string>
|
||||||
|
<string>C86CD990-4660-4E36-8CDA-7454DEB2E199</string>
|
||||||
|
<string># For mail version 12.0 (3445.100.39) on OS X Version 10.14.1 (build 18B45d)</string>
|
||||||
|
<string>A4343FAF-AE18-40D0-8A16-DFAE481AF9C1</string>
|
||||||
|
<string># For mail version 13.0 (3594.4.2) on OS X Version 10.15 (build 19A558d)</string>
|
||||||
|
<string>6EEA38FB-1A0B-469B-BB35-4C2E0EEA9053</string>
|
||||||
|
</array>
|
||||||
|
<key>Supported10.15PluginCompatibilityUUIDs</key>
|
||||||
|
<array>
|
||||||
|
<string># UUIDs for versions from 10.12 to 99.99.99</string>
|
||||||
|
<string># For mail version 10.0 (3226) on OS X Version 10.12 (build 16A319)</string>
|
||||||
|
<string>36CCB8BB-2207-455E-89BC-B9D6E47ABB5B</string>
|
||||||
|
<string># For mail version 10.1 (3251) on OS X Version 10.12.1 (build 16B2553a)</string>
|
||||||
|
<string>9054AFD9-2607-489E-8E63-8B09A749BC61</string>
|
||||||
|
<string># For mail version 10.2 (3259) on OS X Version 10.12.2 (build 16D12b)</string>
|
||||||
|
<string>1CD3B36A-0E3B-4A26-8F7E-5BDF96AAC97E</string>
|
||||||
|
<string># For mail version 10.3 (3273) on OS X Version 10.12.4 (build 16G1036)</string>
|
||||||
|
<string>21560BD9-A3CC-482E-9B99-95B7BF61EDC1</string>
|
||||||
|
<string># For mail version 11.0 (3441.0.1) on OS X Version 10.13 (build 17A315i)</string>
|
||||||
|
<string>C86CD990-4660-4E36-8CDA-7454DEB2E199</string>
|
||||||
|
<string># For mail version 12.0 (3445.100.39) on OS X Version 10.14.1 (build 18B45d)</string>
|
||||||
|
<string>A4343FAF-AE18-40D0-8A16-DFAE481AF9C1</string>
|
||||||
|
<string># For mail version 13.0 (3594.4.2) on OS X Version 10.15 (build 19A558d)</string>
|
||||||
|
<string>6EEA38FB-1A0B-469B-BB35-4C2E0EEA9053</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
69
AltServer/AnisetteDataManager.swift
Normal file
69
AltServer/AnisetteDataManager.swift
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
//
|
||||||
|
// AnisetteDataManager.swift
|
||||||
|
// AltServer
|
||||||
|
//
|
||||||
|
// Created by Riley Testut on 11/16/19.
|
||||||
|
// Copyright © 2019 Riley Testut. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import AltKit
|
||||||
|
|
||||||
|
class AnisetteDataManager: NSObject
|
||||||
|
{
|
||||||
|
static let shared = AnisetteDataManager()
|
||||||
|
|
||||||
|
private var anisetteDataCompletionHandlers: [String: (Result<ALTAnisetteData, Error>) -> Void] = [:]
|
||||||
|
private var anisetteDataTimers: [String: Timer] = [:]
|
||||||
|
|
||||||
|
private override init()
|
||||||
|
{
|
||||||
|
super.init()
|
||||||
|
|
||||||
|
DistributedNotificationCenter.default().addObserver(self, selector: #selector(AnisetteDataManager.handleAnisetteDataResponse(_:)), name: Notification.Name("com.rileytestut.AltServer.AnisetteDataResponse"), object: nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func requestAnisetteData(_ completion: @escaping (Result<ALTAnisetteData, Error>) -> Void)
|
||||||
|
{
|
||||||
|
let requestUUID = UUID().uuidString
|
||||||
|
self.anisetteDataCompletionHandlers[requestUUID] = completion
|
||||||
|
|
||||||
|
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (timer) in
|
||||||
|
self.finishRequest(forUUID: requestUUID, result: .failure(ALTServerError(.pluginNotFound)))
|
||||||
|
}
|
||||||
|
self.anisetteDataTimers[requestUUID] = timer
|
||||||
|
|
||||||
|
DistributedNotificationCenter.default().postNotificationName(Notification.Name("com.rileytestut.AltServer.FetchAnisetteData"), object: nil, userInfo: ["requestUUID": requestUUID], options: .deliverImmediately)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private extension AnisetteDataManager
|
||||||
|
{
|
||||||
|
@objc func handleAnisetteDataResponse(_ notification: Notification)
|
||||||
|
{
|
||||||
|
guard let userInfo = notification.userInfo, let requestUUID = userInfo["requestUUID"] as? String else { return }
|
||||||
|
|
||||||
|
if
|
||||||
|
let archivedAnisetteData = userInfo["anisetteData"] as? Data,
|
||||||
|
let anisetteData = try? NSKeyedUnarchiver.unarchivedObject(ofClass: ALTAnisetteData.self, from: archivedAnisetteData)
|
||||||
|
{
|
||||||
|
self.finishRequest(forUUID: requestUUID, result: .success(anisetteData))
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.finishRequest(forUUID: requestUUID, result: .failure(ALTServerError(.invalidAnisetteData)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func finishRequest(forUUID requestUUID: String, result: Result<ALTAnisetteData, Error>)
|
||||||
|
{
|
||||||
|
let completionHandler = self.anisetteDataCompletionHandlers[requestUUID]
|
||||||
|
self.anisetteDataCompletionHandlers[requestUUID] = nil
|
||||||
|
|
||||||
|
let timer = self.anisetteDataTimers[requestUUID]
|
||||||
|
self.anisetteDataTimers[requestUUID] = nil
|
||||||
|
|
||||||
|
timer?.invalidate()
|
||||||
|
completionHandler?(result)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -100,11 +100,7 @@ private extension AppDelegate
|
|||||||
|
|
||||||
let alert = NSAlert()
|
let alert = NSAlert()
|
||||||
alert.messageText = NSLocalizedString("Please enter your Apple ID and password.", comment: "")
|
alert.messageText = NSLocalizedString("Please enter your Apple ID and password.", comment: "")
|
||||||
alert.informativeText = NSLocalizedString("""
|
alert.informativeText = NSLocalizedString("Your Apple ID and password are not saved and are only sent to Apple for authentication.", comment: "")
|
||||||
Your Apple ID and password are not saved and are only sent to Apple for authentication.
|
|
||||||
|
|
||||||
If you have two-factor authentication enabled, please create an app-specific password for use with AltStore at https://appleid.apple.com.
|
|
||||||
""", comment: "")
|
|
||||||
|
|
||||||
let textFieldSize = NSSize(width: 300, height: 22)
|
let textFieldSize = NSSize(width: 300, height: 22)
|
||||||
|
|
||||||
@@ -157,7 +153,7 @@ If you have two-factor authentication enabled, please create an app-specific pas
|
|||||||
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil)
|
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil)
|
||||||
UNUserNotificationCenter.current().add(request)
|
UNUserNotificationCenter.current().add(request)
|
||||||
|
|
||||||
case .failure(InstallError.cancelled):
|
case .failure(InstallError.cancelled), .failure(ALTAppleAPIError.requiresTwoFactorAuthentication):
|
||||||
// Ignore
|
// Ignore
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import Cocoa
|
import Cocoa
|
||||||
import UserNotifications
|
import UserNotifications
|
||||||
|
import ObjectiveC
|
||||||
|
|
||||||
#if STAGING
|
#if STAGING
|
||||||
private let appURL = URL(string: "https://f000.backblazeb2.com/file/altstore-staging/altstore.ipa")!
|
private let appURL = URL(string: "https://f000.backblazeb2.com/file/altstore-staging/altstore.ipa")!
|
||||||
@@ -55,118 +56,129 @@ extension ALTDeviceManager
|
|||||||
try? FileManager.default.removeItem(at: destinationDirectoryURL)
|
try? FileManager.default.removeItem(at: destinationDirectoryURL)
|
||||||
}
|
}
|
||||||
|
|
||||||
self.authenticate(appleID: appleID, password: password) { (result) in
|
AnisetteDataManager.shared.requestAnisetteData { (result) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let account = try result.get()
|
let anisetteData = try result.get()
|
||||||
|
|
||||||
self.fetchTeam(for: account) { (result) in
|
self.authenticate(appleID: appleID, password: password, anisetteData: anisetteData) { (result) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let team = try result.get()
|
let (account, session) = try result.get()
|
||||||
|
|
||||||
self.register(device, team: team) { (result) in
|
self.fetchTeam(for: account, session: session) { (result) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let device = try result.get()
|
let team = try result.get()
|
||||||
|
|
||||||
self.fetchCertificate(for: team) { (result) in
|
self.register(device, team: team, session: session) { (result) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let certificate = try result.get()
|
let device = try result.get()
|
||||||
|
|
||||||
let content = UNMutableNotificationContent()
|
self.fetchCertificate(for: team, session: session) { (result) in
|
||||||
content.title = String(format: NSLocalizedString("Installing AltStore to %@...", comment: ""), device.name)
|
|
||||||
content.body = NSLocalizedString("This may take a few seconds.", comment: "")
|
|
||||||
|
|
||||||
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil)
|
|
||||||
UNUserNotificationCenter.current().add(request)
|
|
||||||
|
|
||||||
self.downloadApp { (result) in
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let fileURL = try result.get()
|
let certificate = try result.get()
|
||||||
|
|
||||||
try FileManager.default.createDirectory(at: destinationDirectoryURL, withIntermediateDirectories: true, attributes: nil)
|
let content = UNMutableNotificationContent()
|
||||||
|
content.title = String(format: NSLocalizedString("Installing AltStore to %@...", comment: ""), device.name)
|
||||||
|
content.body = NSLocalizedString("This may take a few seconds.", comment: "")
|
||||||
|
|
||||||
let appBundleURL = try FileManager.default.unzipAppBundle(at: fileURL, toDirectory: destinationDirectoryURL)
|
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil)
|
||||||
|
UNUserNotificationCenter.current().add(request)
|
||||||
|
|
||||||
do
|
self.downloadApp { (result) in
|
||||||
{
|
|
||||||
try FileManager.default.removeItem(at: fileURL)
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
print("Failed to remove downloaded .ipa.", error)
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let application = ALTApplication(fileURL: appBundleURL) else { throw ALTError(.invalidApp) }
|
|
||||||
|
|
||||||
self.registerAppID(name: "AltStore", identifier: "com.rileytestut.AltStore", team: team) { (result) in
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let appID = try result.get()
|
let fileURL = try result.get()
|
||||||
|
|
||||||
self.updateFeatures(for: appID, app: application, team: team) { (result) in
|
try FileManager.default.createDirectory(at: destinationDirectoryURL, withIntermediateDirectories: true, attributes: nil)
|
||||||
|
|
||||||
|
let appBundleURL = try FileManager.default.unzipAppBundle(at: fileURL, toDirectory: destinationDirectoryURL)
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
try FileManager.default.removeItem(at: fileURL)
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
print("Failed to remove downloaded .ipa.", error)
|
||||||
|
}
|
||||||
|
|
||||||
|
guard let application = ALTApplication(fileURL: appBundleURL) else { throw ALTError(.invalidApp) }
|
||||||
|
|
||||||
|
self.registerAppID(name: "AltStore", identifier: "com.rileytestut.AltStore", team: team, session: session) { (result) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let appID = try result.get()
|
let appID = try result.get()
|
||||||
|
|
||||||
self.fetchProvisioningProfile(for: appID, team: team) { (result) in
|
self.updateFeatures(for: appID, app: application, team: team, session: session) { (result) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let provisioningProfile = try result.get()
|
let appID = try result.get()
|
||||||
|
|
||||||
self.install(application, to: device, team: team, appID: appID, certificate: certificate, profile: provisioningProfile) { (result) in
|
self.fetchProvisioningProfile(for: appID, team: team, session: session) { (result) in
|
||||||
finish(result.error, title: "Failed to Install AltStore")
|
do
|
||||||
|
{
|
||||||
|
let provisioningProfile = try result.get()
|
||||||
|
|
||||||
|
self.install(application, to: device, team: team, appID: appID, certificate: certificate, profile: provisioningProfile) { (result) in
|
||||||
|
finish(result.error, title: "Failed to Install AltStore")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
finish(error, title: "Failed to Fetch Provisioning Profile")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
finish(error, title: "Failed to Fetch Provisioning Profile")
|
finish(error, title: "Failed to Update App ID")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
finish(error, title: "Failed to Update App ID")
|
finish(error, title: "Failed to Register App")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
finish(error, title: "Failed to Register App")
|
finish(error, title: "Failed to Download AltStore")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
finish(error, title: "Failed to Download AltStore")
|
finish(error, title: "Failed to Fetch Certificate")
|
||||||
return
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
finish(error, title: "Failed to Fetch Certificate")
|
finish(error, title: "Failed to Register Device")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
finish(error, title: "Failed to Register Device")
|
finish(error, title: "Failed to Fetch Team")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
finish(error, title: "Failed to Fetch Team")
|
finish(error, title: "Failed to Authenticate")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
finish(error, title: "Failed to Authenticate")
|
finish(error, title: "Failed to Fetch Anisette Data")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -188,15 +200,57 @@ extension ALTDeviceManager
|
|||||||
downloadTask.resume()
|
downloadTask.resume()
|
||||||
}
|
}
|
||||||
|
|
||||||
func authenticate(appleID: String, password: String, completionHandler: @escaping (Result<ALTAccount, Error>) -> Void)
|
func authenticate(appleID: String, password: String, anisetteData: ALTAnisetteData, completionHandler: @escaping (Result<(ALTAccount, ALTAppleAPISession), Error>) -> Void)
|
||||||
{
|
{
|
||||||
ALTAppleAPI.shared.authenticate(appleID: appleID, password: password) { (account, error) in
|
func handleVerificationCode(_ completionHandler: @escaping (String?) -> Void)
|
||||||
let result = Result(account, error)
|
{
|
||||||
completionHandler(result)
|
DispatchQueue.main.async {
|
||||||
|
let alert = NSAlert()
|
||||||
|
alert.messageText = NSLocalizedString("Two-Factor Authentication Enabled", comment: "")
|
||||||
|
alert.informativeText = NSLocalizedString("Please enter the 6-digit verification code that was sent to your Apple devices.", comment: "")
|
||||||
|
|
||||||
|
let textField = NSTextField(frame: NSRect(x: 0, y: 0, width: 300, height: 22))
|
||||||
|
textField.delegate = self
|
||||||
|
textField.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
textField.placeholderString = NSLocalizedString("123456", comment: "")
|
||||||
|
alert.accessoryView = textField
|
||||||
|
alert.window.initialFirstResponder = textField
|
||||||
|
|
||||||
|
alert.addButton(withTitle: NSLocalizedString("Continue", comment: ""))
|
||||||
|
alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
|
||||||
|
|
||||||
|
self.securityCodeAlert = alert
|
||||||
|
self.securityCodeTextField = textField
|
||||||
|
self.validate()
|
||||||
|
|
||||||
|
NSRunningApplication.current.activate(options: .activateIgnoringOtherApps)
|
||||||
|
|
||||||
|
let response = alert.runModal()
|
||||||
|
if response == .alertFirstButtonReturn
|
||||||
|
{
|
||||||
|
let code = textField.stringValue
|
||||||
|
completionHandler(code)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
completionHandler(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ALTAppleAPI.shared.authenticate(appleID: appleID, password: password, anisetteData: anisetteData, verificationHandler: handleVerificationCode) { (account, session, error) in
|
||||||
|
if let account = account, let session = session
|
||||||
|
{
|
||||||
|
completionHandler(.success((account, session)))
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
completionHandler(.failure(error ?? ALTAppleAPIError(.unknown)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchTeam(for account: ALTAccount, completionHandler: @escaping (Result<ALTTeam, Error>) -> Void)
|
func fetchTeam(for account: ALTAccount, session: ALTAppleAPISession, completionHandler: @escaping (Result<ALTTeam, Error>) -> Void)
|
||||||
{
|
{
|
||||||
func finish(_ result: Result<ALTTeam, Error>)
|
func finish(_ result: Result<ALTTeam, Error>)
|
||||||
{
|
{
|
||||||
@@ -242,7 +296,7 @@ To prevent this from happening, feel free to try again with another Apple ID to
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ALTAppleAPI.shared.fetchTeams(for: account) { (teams, error) in
|
ALTAppleAPI.shared.fetchTeams(for: account, session: session) { (teams, error) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let teams = try Result(teams, error).get()
|
let teams = try Result(teams, error).get()
|
||||||
@@ -271,9 +325,9 @@ To prevent this from happening, feel free to try again with another Apple ID to
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchCertificate(for team: ALTTeam, completionHandler: @escaping (Result<ALTCertificate, Error>) -> Void)
|
func fetchCertificate(for team: ALTTeam, session: ALTAppleAPISession, completionHandler: @escaping (Result<ALTCertificate, Error>) -> Void)
|
||||||
{
|
{
|
||||||
ALTAppleAPI.shared.fetchCertificates(for: team) { (certificates, error) in
|
ALTAppleAPI.shared.fetchCertificates(for: team, session: session) { (certificates, error) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let certificates = try Result(certificates, error).get()
|
let certificates = try Result(certificates, error).get()
|
||||||
@@ -308,11 +362,11 @@ To prevent this from happening, feel free to try again with another Apple ID to
|
|||||||
|
|
||||||
if let certificate = certificates.first
|
if let certificate = certificates.first
|
||||||
{
|
{
|
||||||
ALTAppleAPI.shared.revoke(certificate, for: team) { (success, error) in
|
ALTAppleAPI.shared.revoke(certificate, for: team, session: session) { (success, error) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
try Result(success, error).get()
|
try Result(success, error).get()
|
||||||
self.fetchCertificate(for: team, completionHandler: completionHandler)
|
self.fetchCertificate(for: team, session: session, completionHandler: completionHandler)
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@@ -322,13 +376,13 @@ To prevent this from happening, feel free to try again with another Apple ID to
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ALTAppleAPI.shared.addCertificate(machineName: "AltStore", to: team) { (certificate, error) in
|
ALTAppleAPI.shared.addCertificate(machineName: "AltStore", to: team, session: session) { (certificate, error) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let certificate = try Result(certificate, error).get()
|
let certificate = try Result(certificate, error).get()
|
||||||
guard let privateKey = certificate.privateKey else { throw InstallError.missingPrivateKey }
|
guard let privateKey = certificate.privateKey else { throw InstallError.missingPrivateKey }
|
||||||
|
|
||||||
ALTAppleAPI.shared.fetchCertificates(for: team) { (certificates, error) in
|
ALTAppleAPI.shared.fetchCertificates(for: team, session: session) { (certificates, error) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let certificates = try Result(certificates, error).get()
|
let certificates = try Result(certificates, error).get()
|
||||||
@@ -361,11 +415,11 @@ To prevent this from happening, feel free to try again with another Apple ID to
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerAppID(name appName: String, identifier: String, team: ALTTeam, completionHandler: @escaping (Result<ALTAppID, Error>) -> Void)
|
func registerAppID(name appName: String, identifier: String, team: ALTTeam, session: ALTAppleAPISession, completionHandler: @escaping (Result<ALTAppID, Error>) -> Void)
|
||||||
{
|
{
|
||||||
let bundleID = "com.\(team.identifier).\(identifier)"
|
let bundleID = "com.\(team.identifier).\(identifier)"
|
||||||
|
|
||||||
ALTAppleAPI.shared.fetchAppIDs(for: team) { (appIDs, error) in
|
ALTAppleAPI.shared.fetchAppIDs(for: team, session: session) { (appIDs, error) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let appIDs = try Result(appIDs, error).get()
|
let appIDs = try Result(appIDs, error).get()
|
||||||
@@ -376,7 +430,7 @@ To prevent this from happening, feel free to try again with another Apple ID to
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ALTAppleAPI.shared.addAppID(withName: appName, bundleIdentifier: bundleID, team: team) { (appID, error) in
|
ALTAppleAPI.shared.addAppID(withName: appName, bundleIdentifier: bundleID, team: team, session: session) { (appID, error) in
|
||||||
completionHandler(Result(appID, error))
|
completionHandler(Result(appID, error))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -388,7 +442,7 @@ To prevent this from happening, feel free to try again with another Apple ID to
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateFeatures(for appID: ALTAppID, app: ALTApplication, team: ALTTeam, completionHandler: @escaping (Result<ALTAppID, Error>) -> Void)
|
func updateFeatures(for appID: ALTAppID, app: ALTApplication, team: ALTTeam, session: ALTAppleAPISession, completionHandler: @escaping (Result<ALTAppID, Error>) -> Void)
|
||||||
{
|
{
|
||||||
let requiredFeatures = app.entitlements.compactMap { (entitlement, value) -> (ALTFeature, Any)? in
|
let requiredFeatures = app.entitlements.compactMap { (entitlement, value) -> (ALTFeature, Any)? in
|
||||||
guard let feature = ALTFeature(entitlement: entitlement) else { return nil }
|
guard let feature = ALTFeature(entitlement: entitlement) else { return nil }
|
||||||
@@ -405,14 +459,14 @@ To prevent this from happening, feel free to try again with another Apple ID to
|
|||||||
let appID = appID.copy() as! ALTAppID
|
let appID = appID.copy() as! ALTAppID
|
||||||
appID.features = features
|
appID.features = features
|
||||||
|
|
||||||
ALTAppleAPI.shared.update(appID, team: team) { (appID, error) in
|
ALTAppleAPI.shared.update(appID, team: team, session: session) { (appID, error) in
|
||||||
completionHandler(Result(appID, error))
|
completionHandler(Result(appID, error))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func register(_ device: ALTDevice, team: ALTTeam, completionHandler: @escaping (Result<ALTDevice, Error>) -> Void)
|
func register(_ device: ALTDevice, team: ALTTeam, session: ALTAppleAPISession, completionHandler: @escaping (Result<ALTDevice, Error>) -> Void)
|
||||||
{
|
{
|
||||||
ALTAppleAPI.shared.fetchDevices(for: team) { (devices, error) in
|
ALTAppleAPI.shared.fetchDevices(for: team, session: session) { (devices, error) in
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
let devices = try Result(devices, error).get()
|
let devices = try Result(devices, error).get()
|
||||||
@@ -423,7 +477,7 @@ To prevent this from happening, feel free to try again with another Apple ID to
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ALTAppleAPI.shared.registerDevice(name: device.name, identifier: device.identifier, team: team) { (device, error) in
|
ALTAppleAPI.shared.registerDevice(name: device.name, identifier: device.identifier, team: team, session: session) { (device, error) in
|
||||||
completionHandler(Result(device, error))
|
completionHandler(Result(device, error))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -435,9 +489,9 @@ To prevent this from happening, feel free to try again with another Apple ID to
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchProvisioningProfile(for appID: ALTAppID, team: ALTTeam, completionHandler: @escaping (Result<ALTProvisioningProfile, Error>) -> Void)
|
func fetchProvisioningProfile(for appID: ALTAppID, team: ALTTeam, session: ALTAppleAPISession, completionHandler: @escaping (Result<ALTProvisioningProfile, Error>) -> Void)
|
||||||
{
|
{
|
||||||
ALTAppleAPI.shared.fetchProvisioningProfile(for: appID, team: team) { (profile, error) in
|
ALTAppleAPI.shared.fetchProvisioningProfile(for: appID, team: team, session: session) { (profile, error) in
|
||||||
completionHandler(Result(profile, error))
|
completionHandler(Result(profile, error))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -489,3 +543,45 @@ To prevent this from happening, feel free to try again with another Apple ID to
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var securityCodeAlertKey = 0
|
||||||
|
private var securityCodeTextFieldKey = 0
|
||||||
|
|
||||||
|
extension ALTDeviceManager: NSTextFieldDelegate
|
||||||
|
{
|
||||||
|
var securityCodeAlert: NSAlert? {
|
||||||
|
get { return objc_getAssociatedObject(self, &securityCodeAlertKey) as? NSAlert }
|
||||||
|
set { objc_setAssociatedObject(self, &securityCodeAlertKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
|
||||||
|
}
|
||||||
|
|
||||||
|
var securityCodeTextField: NSTextField? {
|
||||||
|
get { return objc_getAssociatedObject(self, &securityCodeTextFieldKey) as? NSTextField }
|
||||||
|
set { objc_setAssociatedObject(self, &securityCodeTextFieldKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
|
||||||
|
}
|
||||||
|
|
||||||
|
public func controlTextDidChange(_ obj: Notification)
|
||||||
|
{
|
||||||
|
self.validate()
|
||||||
|
}
|
||||||
|
|
||||||
|
public func controlTextDidEndEditing(_ obj: Notification)
|
||||||
|
{
|
||||||
|
self.validate()
|
||||||
|
}
|
||||||
|
|
||||||
|
private func validate()
|
||||||
|
{
|
||||||
|
guard let code = self.securityCodeTextField?.stringValue.trimmingCharacters(in: .whitespacesAndNewlines) else { return }
|
||||||
|
|
||||||
|
if code.count == 6
|
||||||
|
{
|
||||||
|
self.securityCodeAlert?.buttons.first?.isEnabled = true
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.securityCodeAlert?.buttons.first?.isEnabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
self.securityCodeAlert?.layout()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -116,6 +116,7 @@
|
|||||||
BF54E8212315EF0D000AE0D8 /* ALTPatreonBenefitType.m in Sources */ = {isa = PBXBuildFile; fileRef = BF54E8202315EF0D000AE0D8 /* ALTPatreonBenefitType.m */; };
|
BF54E8212315EF0D000AE0D8 /* ALTPatreonBenefitType.m in Sources */ = {isa = PBXBuildFile; fileRef = BF54E8202315EF0D000AE0D8 /* ALTPatreonBenefitType.m */; };
|
||||||
BF5AB3A82285FE7500DC914B /* AltSign.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF5AB3A72285FE6C00DC914B /* AltSign.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, ); }; };
|
BF5AB3A92285FE7500DC914B /* AltSign.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF5AB3A72285FE6C00DC914B /* AltSign.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
|
BF5C5FCF237DF69100EDD0C6 /* ALTPluginService.m in Sources */ = {isa = PBXBuildFile; fileRef = BF5C5FCE237DF69100EDD0C6 /* ALTPluginService.m */; };
|
||||||
BF6F439223644C6E00A0B879 /* RefreshAltStoreViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6F439123644C6E00A0B879 /* RefreshAltStoreViewController.swift */; };
|
BF6F439223644C6E00A0B879 /* RefreshAltStoreViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6F439123644C6E00A0B879 /* RefreshAltStoreViewController.swift */; };
|
||||||
BF74989B23621C0700CED65F /* ForwardingNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF74989A23621C0700CED65F /* ForwardingNavigationController.swift */; };
|
BF74989B23621C0700CED65F /* ForwardingNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF74989A23621C0700CED65F /* ForwardingNavigationController.swift */; };
|
||||||
BF770E5122BB1CF6002A40FE /* InstallAppOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF770E5022BB1CF6002A40FE /* InstallAppOperation.swift */; };
|
BF770E5122BB1CF6002A40FE /* InstallAppOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF770E5022BB1CF6002A40FE /* InstallAppOperation.swift */; };
|
||||||
@@ -136,6 +137,7 @@
|
|||||||
BFB1169B2293274D00BB457C /* JSONDecoder+ManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB1169A2293274D00BB457C /* JSONDecoder+ManagedObjectContext.swift */; };
|
BFB1169B2293274D00BB457C /* JSONDecoder+ManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB1169A2293274D00BB457C /* JSONDecoder+ManagedObjectContext.swift */; };
|
||||||
BFB3645A2325985F00CD0EB1 /* FindServerOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB364592325985F00CD0EB1 /* FindServerOperation.swift */; };
|
BFB3645A2325985F00CD0EB1 /* FindServerOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB364592325985F00CD0EB1 /* FindServerOperation.swift */; };
|
||||||
BFB4323F22DE852000B7F8BC /* UpdateCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BFB4323E22DE852000B7F8BC /* UpdateCollectionViewCell.xib */; };
|
BFB4323F22DE852000B7F8BC /* UpdateCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BFB4323E22DE852000B7F8BC /* UpdateCollectionViewCell.xib */; };
|
||||||
|
BFB49AAA23834CF900D542D9 /* ALTAnisetteData.m in Sources */ = {isa = PBXBuildFile; fileRef = BFB49AA823834CF900D542D9 /* ALTAnisetteData.m */; };
|
||||||
BFB6B21B23186D640022A802 /* NewsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB6B21A23186D640022A802 /* NewsItem.swift */; };
|
BFB6B21B23186D640022A802 /* NewsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB6B21A23186D640022A802 /* NewsItem.swift */; };
|
||||||
BFB6B21E231870160022A802 /* NewsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB6B21D231870160022A802 /* NewsViewController.swift */; };
|
BFB6B21E231870160022A802 /* NewsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB6B21D231870160022A802 /* NewsViewController.swift */; };
|
||||||
BFB6B220231870B00022A802 /* NewsCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB6B21F231870B00022A802 /* NewsCollectionViewCell.swift */; };
|
BFB6B220231870B00022A802 /* NewsCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB6B21F231870B00022A802 /* NewsCollectionViewCell.swift */; };
|
||||||
@@ -143,6 +145,7 @@
|
|||||||
BFBBE2DD22931B20002097FA /* AltStore.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = BFBBE2DB22931B20002097FA /* AltStore.xcdatamodeld */; };
|
BFBBE2DD22931B20002097FA /* AltStore.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = BFBBE2DB22931B20002097FA /* AltStore.xcdatamodeld */; };
|
||||||
BFBBE2DF22931F73002097FA /* StoreApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFBBE2DE22931F73002097FA /* StoreApp.swift */; };
|
BFBBE2DF22931F73002097FA /* StoreApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFBBE2DE22931F73002097FA /* StoreApp.swift */; };
|
||||||
BFBBE2E122931F81002097FA /* InstalledApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFBBE2E022931F81002097FA /* InstalledApp.swift */; };
|
BFBBE2E122931F81002097FA /* InstalledApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFBBE2E022931F81002097FA /* InstalledApp.swift */; };
|
||||||
|
BFBFFB252380C71600993A4A /* AltPlugin.mailbundle in Resources */ = {isa = PBXBuildFile; fileRef = BF5C5FC5237DF5AE00EDD0C6 /* AltPlugin.mailbundle */; };
|
||||||
BFC1F38D22AEE3A4003AC21A /* DownloadAppOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC1F38C22AEE3A4003AC21A /* DownloadAppOperation.swift */; };
|
BFC1F38D22AEE3A4003AC21A /* DownloadAppOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC1F38C22AEE3A4003AC21A /* DownloadAppOperation.swift */; };
|
||||||
BFD2476E2284B9A500981D42 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFD2476D2284B9A500981D42 /* AppDelegate.swift */; };
|
BFD2476E2284B9A500981D42 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFD2476D2284B9A500981D42 /* AppDelegate.swift */; };
|
||||||
BFD247752284B9A500981D42 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BFD247732284B9A500981D42 /* Main.storyboard */; };
|
BFD247752284B9A500981D42 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BFD247732284B9A500981D42 /* Main.storyboard */; };
|
||||||
@@ -202,6 +205,7 @@
|
|||||||
BFE338DD22F0E7F3002E24B9 /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE338DC22F0E7F3002E24B9 /* Source.swift */; };
|
BFE338DD22F0E7F3002E24B9 /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE338DC22F0E7F3002E24B9 /* Source.swift */; };
|
||||||
BFE338DF22F0EADB002E24B9 /* FetchSourceOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE338DE22F0EADB002E24B9 /* FetchSourceOperation.swift */; };
|
BFE338DF22F0EADB002E24B9 /* FetchSourceOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE338DE22F0EADB002E24B9 /* FetchSourceOperation.swift */; };
|
||||||
BFE338E822F10E56002E24B9 /* LaunchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE338E722F10E56002E24B9 /* LaunchViewController.swift */; };
|
BFE338E822F10E56002E24B9 /* LaunchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE338E722F10E56002E24B9 /* LaunchViewController.swift */; };
|
||||||
|
BFE48975238007CE003239E0 /* AnisetteDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE48974238007CE003239E0 /* AnisetteDataManager.swift */; };
|
||||||
BFE60738231ADF49002B0E8E /* Settings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BFE60737231ADF49002B0E8E /* Settings.storyboard */; };
|
BFE60738231ADF49002B0E8E /* Settings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BFE60737231ADF49002B0E8E /* Settings.storyboard */; };
|
||||||
BFE6073A231ADF82002B0E8E /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE60739231ADF82002B0E8E /* SettingsViewController.swift */; };
|
BFE6073A231ADF82002B0E8E /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE60739231ADF82002B0E8E /* SettingsViewController.swift */; };
|
||||||
BFE6073C231AE1E7002B0E8E /* SettingsHeaderFooterView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BFE6073B231AE1E7002B0E8E /* SettingsHeaderFooterView.xib */; };
|
BFE6073C231AE1E7002B0E8E /* SettingsHeaderFooterView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BFE6073B231AE1E7002B0E8E /* SettingsHeaderFooterView.xib */; };
|
||||||
@@ -243,6 +247,13 @@
|
|||||||
remoteGlobalIDString = BF45872A2298D31600BD7491;
|
remoteGlobalIDString = BF45872A2298D31600BD7491;
|
||||||
remoteInfo = libimobiledevice;
|
remoteInfo = libimobiledevice;
|
||||||
};
|
};
|
||||||
|
BFBFFB262380C72F00993A4A /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = BFD247622284B9A500981D42 /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = BF5C5FC4237DF5AE00EDD0C6;
|
||||||
|
remoteInfo = AltPlugin;
|
||||||
|
};
|
||||||
/* End PBXContainerItemProxy section */
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
@@ -268,6 +279,15 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
BF5C5FE9237E438C00EDD0C6 /* CopyFiles */ = {
|
||||||
|
isa = PBXCopyFilesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
dstPath = "";
|
||||||
|
dstSubfolderSpec = 10;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
BFD247842284BB2C00981D42 /* Embed Frameworks */ = {
|
BFD247842284BB2C00981D42 /* Embed Frameworks */ = {
|
||||||
isa = PBXCopyFilesBuildPhase;
|
isa = PBXCopyFilesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@@ -400,6 +420,10 @@
|
|||||||
BF54E81F2315EF0D000AE0D8 /* ALTPatreonBenefitType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ALTPatreonBenefitType.h; sourceTree = "<group>"; };
|
BF54E81F2315EF0D000AE0D8 /* ALTPatreonBenefitType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ALTPatreonBenefitType.h; sourceTree = "<group>"; };
|
||||||
BF54E8202315EF0D000AE0D8 /* ALTPatreonBenefitType.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ALTPatreonBenefitType.m; sourceTree = "<group>"; };
|
BF54E8202315EF0D000AE0D8 /* ALTPatreonBenefitType.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ALTPatreonBenefitType.m; sourceTree = "<group>"; };
|
||||||
BF5AB3A72285FE6C00DC914B /* AltSign.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AltSign.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
BF5AB3A72285FE6C00DC914B /* AltSign.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AltSign.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
BF5C5FC5237DF5AE00EDD0C6 /* AltPlugin.mailbundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AltPlugin.mailbundle; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
BF5C5FC7237DF5AE00EDD0C6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
BF5C5FCD237DF69100EDD0C6 /* ALTPluginService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ALTPluginService.h; sourceTree = "<group>"; };
|
||||||
|
BF5C5FCE237DF69100EDD0C6 /* ALTPluginService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ALTPluginService.m; sourceTree = "<group>"; };
|
||||||
BF6F439123644C6E00A0B879 /* RefreshAltStoreViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefreshAltStoreViewController.swift; sourceTree = "<group>"; };
|
BF6F439123644C6E00A0B879 /* RefreshAltStoreViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefreshAltStoreViewController.swift; sourceTree = "<group>"; };
|
||||||
BF74989A23621C0700CED65F /* ForwardingNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForwardingNavigationController.swift; sourceTree = "<group>"; };
|
BF74989A23621C0700CED65F /* ForwardingNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForwardingNavigationController.swift; sourceTree = "<group>"; };
|
||||||
BF770E5022BB1CF6002A40FE /* InstallAppOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstallAppOperation.swift; sourceTree = "<group>"; };
|
BF770E5022BB1CF6002A40FE /* InstallAppOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstallAppOperation.swift; sourceTree = "<group>"; };
|
||||||
@@ -422,6 +446,8 @@
|
|||||||
BFB1169C22932DB100BB457C /* apps.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = apps.json; sourceTree = "<group>"; };
|
BFB1169C22932DB100BB457C /* apps.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = apps.json; sourceTree = "<group>"; };
|
||||||
BFB364592325985F00CD0EB1 /* FindServerOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindServerOperation.swift; sourceTree = "<group>"; };
|
BFB364592325985F00CD0EB1 /* FindServerOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FindServerOperation.swift; sourceTree = "<group>"; };
|
||||||
BFB4323E22DE852000B7F8BC /* UpdateCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UpdateCollectionViewCell.xib; sourceTree = "<group>"; };
|
BFB4323E22DE852000B7F8BC /* UpdateCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UpdateCollectionViewCell.xib; sourceTree = "<group>"; };
|
||||||
|
BFB49AA823834CF900D542D9 /* ALTAnisetteData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ALTAnisetteData.m; path = "Dependencies/AltSign/AltSign/Model/Apple API/ALTAnisetteData.m"; sourceTree = SOURCE_ROOT; };
|
||||||
|
BFB49AA923834CF900D542D9 /* ALTAnisetteData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ALTAnisetteData.h; path = "Dependencies/AltSign/AltSign/Model/Apple API/ALTAnisetteData.h"; sourceTree = SOURCE_ROOT; };
|
||||||
BFB6B21A23186D640022A802 /* NewsItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewsItem.swift; sourceTree = "<group>"; };
|
BFB6B21A23186D640022A802 /* NewsItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewsItem.swift; sourceTree = "<group>"; };
|
||||||
BFB6B21D231870160022A802 /* NewsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewsViewController.swift; sourceTree = "<group>"; };
|
BFB6B21D231870160022A802 /* NewsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewsViewController.swift; sourceTree = "<group>"; };
|
||||||
BFB6B21F231870B00022A802 /* NewsCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewsCollectionViewCell.swift; sourceTree = "<group>"; };
|
BFB6B21F231870B00022A802 /* NewsCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewsCollectionViewCell.swift; sourceTree = "<group>"; };
|
||||||
@@ -491,6 +517,7 @@
|
|||||||
BFE338DC22F0E7F3002E24B9 /* Source.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Source.swift; sourceTree = "<group>"; };
|
BFE338DC22F0E7F3002E24B9 /* Source.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Source.swift; sourceTree = "<group>"; };
|
||||||
BFE338DE22F0EADB002E24B9 /* FetchSourceOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchSourceOperation.swift; sourceTree = "<group>"; };
|
BFE338DE22F0EADB002E24B9 /* FetchSourceOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchSourceOperation.swift; sourceTree = "<group>"; };
|
||||||
BFE338E722F10E56002E24B9 /* LaunchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchViewController.swift; sourceTree = "<group>"; };
|
BFE338E722F10E56002E24B9 /* LaunchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchViewController.swift; sourceTree = "<group>"; };
|
||||||
|
BFE48974238007CE003239E0 /* AnisetteDataManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnisetteDataManager.swift; sourceTree = "<group>"; };
|
||||||
BFE60737231ADF49002B0E8E /* Settings.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Settings.storyboard; sourceTree = "<group>"; };
|
BFE60737231ADF49002B0E8E /* Settings.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Settings.storyboard; sourceTree = "<group>"; };
|
||||||
BFE60739231ADF82002B0E8E /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
|
BFE60739231ADF82002B0E8E /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
|
||||||
BFE6073B231AE1E7002B0E8E /* SettingsHeaderFooterView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SettingsHeaderFooterView.xib; sourceTree = "<group>"; };
|
BFE6073B231AE1E7002B0E8E /* SettingsHeaderFooterView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SettingsHeaderFooterView.xib; sourceTree = "<group>"; };
|
||||||
@@ -639,6 +666,7 @@
|
|||||||
children = (
|
children = (
|
||||||
BF45868F229872EA00BD7491 /* AppDelegate.swift */,
|
BF45868F229872EA00BD7491 /* AppDelegate.swift */,
|
||||||
BF458695229872EA00BD7491 /* Main.storyboard */,
|
BF458695229872EA00BD7491 /* Main.storyboard */,
|
||||||
|
BFE48974238007CE003239E0 /* AnisetteDataManager.swift */,
|
||||||
BF703195229F36FF006E110F /* Devices */,
|
BF703195229F36FF006E110F /* Devices */,
|
||||||
BFD52BDC22A0A659000B7ED1 /* Connections */,
|
BFD52BDC22A0A659000B7ED1 /* Connections */,
|
||||||
BF055B4A233B528B0086DEA9 /* Extensions */,
|
BF055B4A233B528B0086DEA9 /* Extensions */,
|
||||||
@@ -787,6 +815,18 @@
|
|||||||
name = libcnary;
|
name = libcnary;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
BF5C5FC6237DF5AE00EDD0C6 /* AltPlugin */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
BF5C5FCD237DF69100EDD0C6 /* ALTPluginService.h */,
|
||||||
|
BF5C5FCE237DF69100EDD0C6 /* ALTPluginService.m */,
|
||||||
|
BFB49AA923834CF900D542D9 /* ALTAnisetteData.h */,
|
||||||
|
BFB49AA823834CF900D542D9 /* ALTAnisetteData.m */,
|
||||||
|
BF5C5FC7237DF5AE00EDD0C6 /* Info.plist */,
|
||||||
|
);
|
||||||
|
path = AltPlugin;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
BF703194229F36F6006E110F /* Resources */ = {
|
BF703194229F36F6006E110F /* Resources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -863,6 +903,7 @@
|
|||||||
BF45868E229872EA00BD7491 /* AltServer */,
|
BF45868E229872EA00BD7491 /* AltServer */,
|
||||||
BF1E315122A0616100370A3C /* AltKit */,
|
BF1E315122A0616100370A3C /* AltKit */,
|
||||||
BF45872C2298D31600BD7491 /* libimobiledevice */,
|
BF45872C2298D31600BD7491 /* libimobiledevice */,
|
||||||
|
BF5C5FC6237DF5AE00EDD0C6 /* AltPlugin */,
|
||||||
BFD247852284BB3300981D42 /* Frameworks */,
|
BFD247852284BB3300981D42 /* Frameworks */,
|
||||||
BFD2476B2284B9A500981D42 /* Products */,
|
BFD2476B2284B9A500981D42 /* Products */,
|
||||||
4460E048E3AC1C9708C4FA33 /* Pods */,
|
4460E048E3AC1C9708C4FA33 /* Pods */,
|
||||||
@@ -876,6 +917,7 @@
|
|||||||
BF45868D229872EA00BD7491 /* AltServer.app */,
|
BF45868D229872EA00BD7491 /* AltServer.app */,
|
||||||
BF45872B2298D31600BD7491 /* libimobiledevice.a */,
|
BF45872B2298D31600BD7491 /* libimobiledevice.a */,
|
||||||
BF1E315022A0616100370A3C /* libAltKit.a */,
|
BF1E315022A0616100370A3C /* libAltKit.a */,
|
||||||
|
BF5C5FC5237DF5AE00EDD0C6 /* AltPlugin.mailbundle */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1186,6 +1228,24 @@
|
|||||||
productReference = BF45872B2298D31600BD7491 /* libimobiledevice.a */;
|
productReference = BF45872B2298D31600BD7491 /* libimobiledevice.a */;
|
||||||
productType = "com.apple.product-type.library.static";
|
productType = "com.apple.product-type.library.static";
|
||||||
};
|
};
|
||||||
|
BF5C5FC4237DF5AE00EDD0C6 /* AltPlugin */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = BF5C5FC8237DF5AE00EDD0C6 /* Build configuration list for PBXNativeTarget "AltPlugin" */;
|
||||||
|
buildPhases = (
|
||||||
|
BF5C5FC1237DF5AE00EDD0C6 /* Sources */,
|
||||||
|
BF5C5FC2237DF5AE00EDD0C6 /* Frameworks */,
|
||||||
|
BF5C5FC3237DF5AE00EDD0C6 /* Resources */,
|
||||||
|
BF5C5FE9237E438C00EDD0C6 /* CopyFiles */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = AltPlugin;
|
||||||
|
productName = AltPlugin;
|
||||||
|
productReference = BF5C5FC5237DF5AE00EDD0C6 /* AltPlugin.mailbundle */;
|
||||||
|
productType = "com.apple.product-type.bundle";
|
||||||
|
};
|
||||||
BFD247692284B9A500981D42 /* AltStore */ = {
|
BFD247692284B9A500981D42 /* AltStore */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = BFD2477E2284B9A700981D42 /* Build configuration list for PBXNativeTarget "AltStore" */;
|
buildConfigurationList = BFD2477E2284B9A700981D42 /* Build configuration list for PBXNativeTarget "AltStore" */;
|
||||||
@@ -1213,7 +1273,7 @@
|
|||||||
BFD247622284B9A500981D42 /* Project object */ = {
|
BFD247622284B9A500981D42 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 1020;
|
LastSwiftUpdateCheck = 1120;
|
||||||
LastUpgradeCheck = 1020;
|
LastUpgradeCheck = 1020;
|
||||||
ORGANIZATIONNAME = "Riley Testut";
|
ORGANIZATIONNAME = "Riley Testut";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
@@ -1235,6 +1295,10 @@
|
|||||||
BF45872A2298D31600BD7491 = {
|
BF45872A2298D31600BD7491 = {
|
||||||
CreatedOnToolsVersion = 10.2.1;
|
CreatedOnToolsVersion = 10.2.1;
|
||||||
};
|
};
|
||||||
|
BF5C5FC4237DF5AE00EDD0C6 = {
|
||||||
|
CreatedOnToolsVersion = 11.2;
|
||||||
|
LastSwiftMigration = 1120;
|
||||||
|
};
|
||||||
BFD247692284B9A500981D42 = {
|
BFD247692284B9A500981D42 = {
|
||||||
CreatedOnToolsVersion = 10.2.1;
|
CreatedOnToolsVersion = 10.2.1;
|
||||||
LastSwiftMigration = 1020;
|
LastSwiftMigration = 1020;
|
||||||
@@ -1266,6 +1330,7 @@
|
|||||||
BF45868C229872EA00BD7491 /* AltServer */,
|
BF45868C229872EA00BD7491 /* AltServer */,
|
||||||
BF1E314F22A0616100370A3C /* AltKit */,
|
BF1E314F22A0616100370A3C /* AltKit */,
|
||||||
BF45872A2298D31600BD7491 /* libimobiledevice */,
|
BF45872A2298D31600BD7491 /* libimobiledevice */,
|
||||||
|
BF5C5FC4237DF5AE00EDD0C6 /* AltPlugin */,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
@@ -1275,6 +1340,7 @@
|
|||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
BFBFFB252380C71600993A4A /* AltPlugin.mailbundle in Resources */,
|
||||||
BF458694229872EA00BD7491 /* Assets.xcassets in Resources */,
|
BF458694229872EA00BD7491 /* Assets.xcassets in Resources */,
|
||||||
BF458697229872EA00BD7491 /* Main.storyboard in Resources */,
|
BF458697229872EA00BD7491 /* Main.storyboard in Resources */,
|
||||||
);
|
);
|
||||||
@@ -1389,6 +1455,7 @@
|
|||||||
BF458690229872EA00BD7491 /* AppDelegate.swift in Sources */,
|
BF458690229872EA00BD7491 /* AppDelegate.swift in Sources */,
|
||||||
BF4586C52298CDB800BD7491 /* ALTDeviceManager.mm in Sources */,
|
BF4586C52298CDB800BD7491 /* ALTDeviceManager.mm in Sources */,
|
||||||
BF0241AA22F29CCD00129732 /* UserDefaults+AltServer.swift in Sources */,
|
BF0241AA22F29CCD00129732 /* UserDefaults+AltServer.swift in Sources */,
|
||||||
|
BFE48975238007CE003239E0 /* AnisetteDataManager.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@@ -1453,6 +1520,15 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
BF5C5FC1237DF5AE00EDD0C6 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
BFB49AAA23834CF900D542D9 /* ALTAnisetteData.m in Sources */,
|
||||||
|
BF5C5FCF237DF69100EDD0C6 /* ALTPluginService.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
BFD247662284B9A500981D42 /* Sources */ = {
|
BFD247662284B9A500981D42 /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@@ -1558,6 +1634,11 @@
|
|||||||
target = BF45872A2298D31600BD7491 /* libimobiledevice */;
|
target = BF45872A2298D31600BD7491 /* libimobiledevice */;
|
||||||
targetProxy = BF4588442298D48B00BD7491 /* PBXContainerItemProxy */;
|
targetProxy = BF4588442298D48B00BD7491 /* PBXContainerItemProxy */;
|
||||||
};
|
};
|
||||||
|
BFBFFB272380C72F00993A4A /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
target = BF5C5FC4237DF5AE00EDD0C6 /* AltPlugin */;
|
||||||
|
targetProxy = BFBFFB262380C72F00993A4A /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
/* End PBXTargetDependency section */
|
/* End PBXTargetDependency section */
|
||||||
|
|
||||||
/* Begin PBXVariantGroup section */
|
/* Begin PBXVariantGroup section */
|
||||||
@@ -1795,6 +1876,63 @@
|
|||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
BF5C5FC9237DF5AE00EDD0C6 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "-";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
DEVELOPMENT_TEAM = "";
|
||||||
|
INFOPLIST_FILE = AltPlugin/Info.plist;
|
||||||
|
INSTALL_PATH = "$(HOME)/Library/Mail/Bundles/";
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
"/Users/Riley/Library/Developer/Xcode/DerivedData/AltStore-bhqnkrahfutztzeudtxhcxccgtlo/Build/Products/Debug",
|
||||||
|
);
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.14;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.AltPlugin;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = macosx;
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
WRAPPER_EXTENSION = mailbundle;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
BF5C5FCA237DF5AE00EDD0C6 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "-";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
DEVELOPMENT_TEAM = "";
|
||||||
|
INFOPLIST_FILE = AltPlugin/Info.plist;
|
||||||
|
INSTALL_PATH = "$(HOME)/Library/Mail/Bundles/";
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
"/Users/Riley/Library/Developer/Xcode/DerivedData/AltStore-bhqnkrahfutztzeudtxhcxccgtlo/Build/Products/Debug",
|
||||||
|
);
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.14;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.AltPlugin;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = macosx;
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
WRAPPER_EXTENSION = mailbundle;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
BFD2477C2284B9A700981D42 /* Debug */ = {
|
BFD2477C2284B9A700981D42 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
@@ -1996,6 +2134,15 @@
|
|||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
|
BF5C5FC8237DF5AE00EDD0C6 /* Build configuration list for PBXNativeTarget "AltPlugin" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
BF5C5FC9237DF5AE00EDD0C6 /* Debug */,
|
||||||
|
BF5C5FCA237DF5AE00EDD0C6 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
BFD247652284B9A500981D42 /* Build configuration list for PBXProject "AltStore" */ = {
|
BFD247652284B9A500981D42 /* Build configuration list for PBXProject "AltStore" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
|
|||||||
67
AltStore.xcodeproj/xcshareddata/xcschemes/AltPlugin.xcscheme
Normal file
67
AltStore.xcodeproj/xcshareddata/xcschemes/AltPlugin.xcscheme
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1120"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "BF5C5FC4237DF5AE00EDD0C6"
|
||||||
|
BuildableName = "AltPlugin.mailbundle"
|
||||||
|
BlueprintName = "AltPlugin"
|
||||||
|
ReferencedContainer = "container:AltStore.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "1"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "BF5C5FC4237DF5AE00EDD0C6"
|
||||||
|
BuildableName = "AltPlugin.mailbundle"
|
||||||
|
BlueprintName = "AltPlugin"
|
||||||
|
ReferencedContainer = "container:AltStore.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
2
Dependencies/AltSign
vendored
2
Dependencies/AltSign
vendored
Submodule Dependencies/AltSign updated: a66bcc7abb...72c4418bc6
Reference in New Issue
Block a user