mirror of
https://github.com/SideStore/SideStore.git
synced 2026-04-09 04:05:39 +02:00
[AltStoreCore] Refactors core AltStore logic into AltStoreCore framework
AltStoreCore will contain all shared AltStore code between AltStore and any app extensions. Initially, it includes all AltStore model logic.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -2,14 +2,4 @@
|
|||||||
// Use this file to import your target's public headers that you would like to expose to Swift.
|
// Use this file to import your target's public headers that you would like to expose to Swift.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "ALTAppPermission.h"
|
|
||||||
#import "ALTPatreonBenefitType.h"
|
|
||||||
#import "ALTSourceUserInfoKey.h"
|
|
||||||
|
|
||||||
#import "NSAttributedString+Markdown.h"
|
#import "NSAttributedString+Markdown.h"
|
||||||
|
|
||||||
// Shared
|
|
||||||
#import "ALTConstants.h"
|
|
||||||
#import "ALTConnection.h"
|
|
||||||
#import "NSError+ALTServerError.h"
|
|
||||||
#import "CFNotificationName+AltStore.h"
|
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
|
||||||
import AppCenter
|
import AppCenter
|
||||||
import AppCenterAnalytics
|
import AppCenterAnalytics
|
||||||
import AppCenterCrashes
|
import AppCenterCrashes
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
import Nuke
|
import Nuke
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
import Nuke
|
import Nuke
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
|
||||||
class PermissionPopoverViewController: UIViewController
|
class PermissionPopoverViewController: UIViewController
|
||||||
{
|
{
|
||||||
var permission: AppPermission!
|
var permission: AppPermission!
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
class AppIDsViewController: UICollectionViewController
|
class AppIDsViewController: UICollectionViewController
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import UIKit
|
|||||||
import UserNotifications
|
import UserNotifications
|
||||||
import AVFoundation
|
import AVFoundation
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,9 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import AltSign
|
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
import AltSign
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
class RefreshAltStoreViewController: UIViewController
|
class RefreshAltStoreViewController: UIViewController
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
import Nuke
|
import Nuke
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
class AppBannerView: RSTNibView
|
class AppBannerView: RSTNibView
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
|
||||||
extension TimeInterval
|
extension TimeInterval
|
||||||
{
|
{
|
||||||
static let shortToastViewDuration = 4.0
|
static let shortToastViewDuration = 4.0
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
|
||||||
extension FileManager
|
extension FileManager
|
||||||
{
|
{
|
||||||
var altstoreSharedDirectory: URL? {
|
var altstoreSharedDirectory: URL? {
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
|
||||||
class LaunchViewController: RSTLaunchViewController
|
class LaunchViewController: RSTLaunchViewController
|
||||||
{
|
{
|
||||||
private var didFinishLaunching = false
|
private var didFinishLaunching = false
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import UIKit
|
|||||||
import UserNotifications
|
import UserNotifications
|
||||||
import MobileCoreServices
|
import MobileCoreServices
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
extension AppManager
|
extension AppManager
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
|
||||||
extension AppManager
|
extension AppManager
|
||||||
{
|
{
|
||||||
struct FetchSourcesError: LocalizedError, CustomNSError
|
struct FetchSourcesError: LocalizedError, CustomNSError
|
||||||
|
|||||||
@@ -9,9 +9,9 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import MobileCoreServices
|
import MobileCoreServices
|
||||||
|
|
||||||
import Roxas
|
import AltStoreCore
|
||||||
|
|
||||||
import AltSign
|
import AltSign
|
||||||
|
import Roxas
|
||||||
|
|
||||||
import Nuke
|
import Nuke
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import SafariServices
|
import SafariServices
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
import Nuke
|
import Nuke
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import Foundation
|
|||||||
import Roxas
|
import Roxas
|
||||||
import Network
|
import Network
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
enum AuthenticationError: LocalizedError
|
enum AuthenticationError: LocalizedError
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
extension BackupAppOperation
|
extension BackupAppOperation
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
@objc(DownloadAppOperation)
|
@objc(DownloadAppOperation)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,10 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import Roxas
|
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
|
import Roxas
|
||||||
|
|
||||||
@objc(FetchProvisioningProfilesOperation)
|
@objc(FetchProvisioningProfilesOperation)
|
||||||
class FetchProvisioningProfilesOperation: ResultOperation<[String: ALTProvisioningProfile]>
|
class FetchProvisioningProfilesOperation: ResultOperation<[String: ALTProvisioningProfile]>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
@objc(FetchSourceOperation)
|
@objc(FetchSourceOperation)
|
||||||
@@ -49,7 +50,7 @@ class FetchSourceOperation: ResultOperation<Source>
|
|||||||
{
|
{
|
||||||
let (data, _) = try Result((data, response), error).get()
|
let (data, _) = try Result((data, response), error).get()
|
||||||
|
|
||||||
let decoder = JSONDecoder()
|
let decoder = AltStoreCore.JSONDecoder()
|
||||||
decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
|
decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
|
||||||
let container = try decoder.singleValueContainer()
|
let container = try decoder.singleValueContainer()
|
||||||
let text = try container.decode(String.self)
|
let text = try container.decode(String.self)
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import Network
|
import Network
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import Foundation
|
|||||||
import CoreData
|
import CoreData
|
||||||
import Network
|
import Network
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
class OperationContext
|
class OperationContext
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
@objc(RefreshAppOperation)
|
@objc(RefreshAppOperation)
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
class RefreshGroup: NSObject
|
class RefreshGroup: NSObject
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
|
||||||
@objc(RemoveAppOperation)
|
@objc(RemoveAppOperation)
|
||||||
class RemoveAppOperation: ResultOperation<InstalledApp>
|
class RemoveAppOperation: ResultOperation<InstalledApp>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
@objc(ResignAppOperation)
|
@objc(ResignAppOperation)
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import Network
|
import Network
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
|
||||||
@objc(SendAppOperation)
|
@objc(SendAppOperation)
|
||||||
class SendAppOperation: ResultOperation<ServerConnection>
|
class SendAppOperation: ResultOperation<ServerConnection>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import Network
|
import Network
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
|
||||||
class ServerConnection
|
class ServerConnection
|
||||||
{
|
{
|
||||||
var server: Server
|
var server: Server
|
||||||
@@ -93,7 +95,7 @@ class ServerConnection
|
|||||||
{
|
{
|
||||||
let data = try self.process(data: data, error: error)
|
let data = try self.process(data: data, error: error)
|
||||||
|
|
||||||
let response = try JSONDecoder().decode(ServerResponse.self, from: data)
|
let response = try AltStoreCore.JSONDecoder().decode(ServerResponse.self, from: data)
|
||||||
completionHandler(.success(response))
|
completionHandler(.success(response))
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import Network
|
import Network
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
|
||||||
class ServerManager: NSObject
|
class ServerManager: NSObject
|
||||||
{
|
{
|
||||||
static let shared = ServerManager()
|
static let shared = ServerManager()
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import UIKit
|
|||||||
import SafariServices
|
import SafariServices
|
||||||
import AuthenticationServices
|
import AuthenticationServices
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
extension PatreonViewController
|
extension PatreonViewController
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
@objc(RefreshAttemptTableViewCell)
|
@objc(RefreshAttemptTableViewCell)
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ import UIKit
|
|||||||
import SafariServices
|
import SafariServices
|
||||||
import MessageUI
|
import MessageUI
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
|
|
||||||
extension SettingsViewController
|
extension SettingsViewController
|
||||||
{
|
{
|
||||||
fileprivate enum Section: Int, CaseIterable
|
fileprivate enum Section: Int, CaseIterable
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
|
import AltStoreCore
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
class SourcesViewController: UICollectionViewController
|
class SourcesViewController: UICollectionViewController
|
||||||
|
|||||||
27
AltStoreCore/AltStoreCore.h
Normal file
27
AltStoreCore/AltStoreCore.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// AltStoreCore.h
|
||||||
|
// AltStoreCore
|
||||||
|
//
|
||||||
|
// Created by Riley Testut on 9/3/20.
|
||||||
|
// Copyright © 2020 Riley Testut. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
//! Project version number for AltStoreCore.
|
||||||
|
FOUNDATION_EXPORT double AltStoreCoreVersionNumber;
|
||||||
|
|
||||||
|
//! Project version string for AltStoreCore.
|
||||||
|
FOUNDATION_EXPORT const unsigned char AltStoreCoreVersionString[];
|
||||||
|
|
||||||
|
// In this header, you should import all the public headers of your framework using statements like #import <AltStoreCore/PublicHeader.h>
|
||||||
|
|
||||||
|
#import <AltStoreCore/ALTAppPermission.h>
|
||||||
|
#import <AltStoreCore/ALTSourceUserInfoKey.h>
|
||||||
|
#import <AltStoreCore/ALTPatreonBenefitType.h>
|
||||||
|
|
||||||
|
// Shared
|
||||||
|
#import <AltStoreCore/ALTConstants.h>
|
||||||
|
#import <AltStoreCore/ALTConnection.h>
|
||||||
|
#import <AltStoreCore/NSError+ALTServerError.h>
|
||||||
|
#import <AltStoreCore/CFNotificationName+AltStore.h>
|
||||||
@@ -12,11 +12,11 @@ import KeychainAccess
|
|||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
@propertyWrapper
|
@propertyWrapper
|
||||||
struct KeychainItem<Value>
|
public struct KeychainItem<Value>
|
||||||
{
|
{
|
||||||
let key: String
|
public let key: String
|
||||||
|
|
||||||
var wrappedValue: Value? {
|
public var wrappedValue: Value? {
|
||||||
get {
|
get {
|
||||||
switch Value.self
|
switch Value.self
|
||||||
{
|
{
|
||||||
@@ -35,50 +35,50 @@ struct KeychainItem<Value>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init(key: String)
|
public init(key: String)
|
||||||
{
|
{
|
||||||
self.key = key
|
self.key = key
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Keychain
|
public class Keychain
|
||||||
{
|
{
|
||||||
static let shared = Keychain()
|
public static let shared = Keychain()
|
||||||
|
|
||||||
fileprivate let keychain = KeychainAccess.Keychain(service: "com.rileytestut.AltStore").accessibility(.afterFirstUnlock).synchronizable(true)
|
fileprivate let keychain = KeychainAccess.Keychain(service: "com.rileytestut.AltStore").accessibility(.afterFirstUnlock).synchronizable(true)
|
||||||
|
|
||||||
@KeychainItem(key: "appleIDEmailAddress")
|
@KeychainItem(key: "appleIDEmailAddress")
|
||||||
var appleIDEmailAddress: String?
|
public var appleIDEmailAddress: String?
|
||||||
|
|
||||||
@KeychainItem(key: "appleIDPassword")
|
@KeychainItem(key: "appleIDPassword")
|
||||||
var appleIDPassword: String?
|
public var appleIDPassword: String?
|
||||||
|
|
||||||
@KeychainItem(key: "signingCertificatePrivateKey")
|
@KeychainItem(key: "signingCertificatePrivateKey")
|
||||||
var signingCertificatePrivateKey: Data?
|
public var signingCertificatePrivateKey: Data?
|
||||||
|
|
||||||
@KeychainItem(key: "signingCertificateSerialNumber")
|
@KeychainItem(key: "signingCertificateSerialNumber")
|
||||||
var signingCertificateSerialNumber: String?
|
public var signingCertificateSerialNumber: String?
|
||||||
|
|
||||||
@KeychainItem(key: "signingCertificate")
|
@KeychainItem(key: "signingCertificate")
|
||||||
var signingCertificate: Data?
|
public var signingCertificate: Data?
|
||||||
|
|
||||||
@KeychainItem(key: "signingCertificatePassword")
|
@KeychainItem(key: "signingCertificatePassword")
|
||||||
var signingCertificatePassword: String?
|
public var signingCertificatePassword: String?
|
||||||
|
|
||||||
@KeychainItem(key: "patreonAccessToken")
|
@KeychainItem(key: "patreonAccessToken")
|
||||||
var patreonAccessToken: String?
|
public var patreonAccessToken: String?
|
||||||
|
|
||||||
@KeychainItem(key: "patreonRefreshToken")
|
@KeychainItem(key: "patreonRefreshToken")
|
||||||
var patreonRefreshToken: String?
|
public var patreonRefreshToken: String?
|
||||||
|
|
||||||
@KeychainItem(key: "patreonCreatorAccessToken")
|
@KeychainItem(key: "patreonCreatorAccessToken")
|
||||||
var patreonCreatorAccessToken: String?
|
public var patreonCreatorAccessToken: String?
|
||||||
|
|
||||||
private init()
|
private init()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
func reset()
|
public func reset()
|
||||||
{
|
{
|
||||||
self.appleIDEmailAddress = nil
|
self.appleIDEmailAddress = nil
|
||||||
self.appleIDPassword = nil
|
self.appleIDPassword = nil
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
extension CodingUserInfoKey
|
public extension CodingUserInfoKey
|
||||||
{
|
{
|
||||||
static let managedObjectContext = CodingUserInfoKey(rawValue: "managedObjectContext")!
|
static let managedObjectContext = CodingUserInfoKey(rawValue: "managedObjectContext")!
|
||||||
static let sourceURL = CodingUserInfoKey(rawValue: "sourceURL")!
|
static let sourceURL = CodingUserInfoKey(rawValue: "sourceURL")!
|
||||||
@@ -18,29 +18,29 @@ extension CodingUserInfoKey
|
|||||||
public final class JSONDecoder: Foundation.JSONDecoder
|
public final class JSONDecoder: Foundation.JSONDecoder
|
||||||
{
|
{
|
||||||
@DecoderItem(key: .managedObjectContext)
|
@DecoderItem(key: .managedObjectContext)
|
||||||
var managedObjectContext: NSManagedObjectContext?
|
public var managedObjectContext: NSManagedObjectContext?
|
||||||
|
|
||||||
@DecoderItem(key: .sourceURL)
|
@DecoderItem(key: .sourceURL)
|
||||||
var sourceURL: URL?
|
public var sourceURL: URL?
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Decoder
|
public extension Decoder
|
||||||
{
|
{
|
||||||
var managedObjectContext: NSManagedObjectContext? { self.userInfo[.managedObjectContext] as? NSManagedObjectContext }
|
var managedObjectContext: NSManagedObjectContext? { self.userInfo[.managedObjectContext] as? NSManagedObjectContext }
|
||||||
var sourceURL: URL? { self.userInfo[.sourceURL] as? URL }
|
var sourceURL: URL? { self.userInfo[.sourceURL] as? URL }
|
||||||
}
|
}
|
||||||
|
|
||||||
@propertyWrapper
|
@propertyWrapper
|
||||||
struct DecoderItem<Value>
|
public struct DecoderItem<Value>
|
||||||
{
|
{
|
||||||
let key: CodingUserInfoKey
|
public let key: CodingUserInfoKey
|
||||||
|
|
||||||
var wrappedValue: Value? {
|
public var wrappedValue: Value? {
|
||||||
get { fatalError("only works on instance properties of classes") }
|
get { fatalError("only works on instance properties of classes") }
|
||||||
set { fatalError("only works on instance properties of classes") }
|
set { fatalError("only works on instance properties of classes") }
|
||||||
}
|
}
|
||||||
|
|
||||||
init(key: CodingUserInfoKey)
|
public init(key: CodingUserInfoKey)
|
||||||
{
|
{
|
||||||
self.key = key
|
self.key = key
|
||||||
}
|
}
|
||||||
17
AltStoreCore/Extensions/UIApplication+AppExtension.swift
Normal file
17
AltStoreCore/Extensions/UIApplication+AppExtension.swift
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// UIApplication+AppExtension.swift
|
||||||
|
// DeltaCore
|
||||||
|
//
|
||||||
|
// Created by Riley Testut on 6/14/18.
|
||||||
|
// Copyright © 2018 Riley Testut. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
public extension UIApplication
|
||||||
|
{
|
||||||
|
// Cannot normally use UIApplication.shared from extensions, so we get around this by calling value(forKey:).
|
||||||
|
class var alt_shared: UIApplication? {
|
||||||
|
return UIApplication.value(forKey: "sharedApplication") as? UIApplication
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
extension UIColor
|
public extension UIColor
|
||||||
{
|
{
|
||||||
// Borrowed from https://stackoverflow.com/a/26341062
|
// Borrowed from https://stackoverflow.com/a/26341062
|
||||||
var hexString: String {
|
var hexString: String {
|
||||||
@@ -10,7 +10,7 @@ import Foundation
|
|||||||
|
|
||||||
import Roxas
|
import Roxas
|
||||||
|
|
||||||
extension UserDefaults
|
public extension UserDefaults
|
||||||
{
|
{
|
||||||
@NSManaged var firstLaunch: Date?
|
@NSManaged var firstLaunch: Date?
|
||||||
|
|
||||||
22
AltStoreCore/Info.plist
Normal file
22
AltStoreCore/Info.plist
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?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>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -12,9 +12,9 @@ import CoreData
|
|||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
@objc(Account)
|
@objc(Account)
|
||||||
class Account: NSManagedObject, Fetchable
|
public class Account: NSManagedObject, Fetchable
|
||||||
{
|
{
|
||||||
var localizedName: String {
|
public var localizedName: String {
|
||||||
var components = PersonNameComponents()
|
var components = PersonNameComponents()
|
||||||
components.givenName = self.firstName
|
components.givenName = self.firstName
|
||||||
components.familyName = self.lastName
|
components.familyName = self.lastName
|
||||||
@@ -24,30 +24,30 @@ class Account: NSManagedObject, Fetchable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Properties */
|
/* Properties */
|
||||||
@NSManaged var appleID: String
|
@NSManaged public var appleID: String
|
||||||
@NSManaged var identifier: String
|
@NSManaged public var identifier: String
|
||||||
|
|
||||||
@NSManaged var firstName: String
|
@NSManaged public var firstName: String
|
||||||
@NSManaged var lastName: String
|
@NSManaged public var lastName: String
|
||||||
|
|
||||||
@NSManaged var isActiveAccount: Bool
|
@NSManaged public var isActiveAccount: Bool
|
||||||
|
|
||||||
/* Relationships */
|
/* Relationships */
|
||||||
@NSManaged var teams: Set<Team>
|
@NSManaged public var teams: Set<Team>
|
||||||
|
|
||||||
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
||||||
{
|
{
|
||||||
super.init(entity: entity, insertInto: context)
|
super.init(entity: entity, insertInto: context)
|
||||||
}
|
}
|
||||||
|
|
||||||
init(_ account: ALTAccount, context: NSManagedObjectContext)
|
public init(_ account: ALTAccount, context: NSManagedObjectContext)
|
||||||
{
|
{
|
||||||
super.init(entity: Account.entity(), insertInto: context)
|
super.init(entity: Account.entity(), insertInto: context)
|
||||||
|
|
||||||
self.update(account: account)
|
self.update(account: account)
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(account: ALTAccount)
|
public func update(account: ALTAccount)
|
||||||
{
|
{
|
||||||
self.appleID = account.appleID
|
self.appleID = account.appleID
|
||||||
self.identifier = account.identifier
|
self.identifier = account.identifier
|
||||||
@@ -57,7 +57,7 @@ class Account: NSManagedObject, Fetchable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Account
|
public extension Account
|
||||||
{
|
{
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<Account>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<Account>
|
||||||
{
|
{
|
||||||
@@ -12,24 +12,24 @@ import CoreData
|
|||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
@objc(AppID)
|
@objc(AppID)
|
||||||
class AppID: NSManagedObject, Fetchable
|
public class AppID: NSManagedObject, Fetchable
|
||||||
{
|
{
|
||||||
/* Properties */
|
/* Properties */
|
||||||
@NSManaged var name: String
|
@NSManaged public var name: String
|
||||||
@NSManaged var identifier: String
|
@NSManaged public var identifier: String
|
||||||
@NSManaged var bundleIdentifier: String
|
@NSManaged public var bundleIdentifier: String
|
||||||
@NSManaged var features: [ALTFeature: Any]
|
@NSManaged public var features: [ALTFeature: Any]
|
||||||
@NSManaged var expirationDate: Date?
|
@NSManaged public var expirationDate: Date?
|
||||||
|
|
||||||
/* Relationships */
|
/* Relationships */
|
||||||
@NSManaged private(set) var team: Team?
|
@NSManaged public private(set) var team: Team?
|
||||||
|
|
||||||
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
||||||
{
|
{
|
||||||
super.init(entity: entity, insertInto: context)
|
super.init(entity: entity, insertInto: context)
|
||||||
}
|
}
|
||||||
|
|
||||||
init(_ appID: ALTAppID, team: Team, context: NSManagedObjectContext)
|
public init(_ appID: ALTAppID, team: Team, context: NSManagedObjectContext)
|
||||||
{
|
{
|
||||||
super.init(entity: AppID.entity(), insertInto: context)
|
super.init(entity: AppID.entity(), insertInto: context)
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ class AppID: NSManagedObject, Fetchable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension AppID
|
public extension AppID
|
||||||
{
|
{
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<AppID>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<AppID>
|
||||||
{
|
{
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
import CoreData
|
import CoreData
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
extension ALTAppPermissionType
|
public extension ALTAppPermissionType
|
||||||
{
|
{
|
||||||
var localizedShortName: String? {
|
var localizedShortName: String? {
|
||||||
switch self
|
switch self
|
||||||
@@ -43,14 +43,14 @@ extension ALTAppPermissionType
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc(AppPermission)
|
@objc(AppPermission)
|
||||||
class AppPermission: NSManagedObject, Decodable, Fetchable
|
public class AppPermission: NSManagedObject, Decodable, Fetchable
|
||||||
{
|
{
|
||||||
/* Properties */
|
/* Properties */
|
||||||
@NSManaged var type: ALTAppPermissionType
|
@NSManaged public var type: ALTAppPermissionType
|
||||||
@NSManaged var usageDescription: String
|
@NSManaged public var usageDescription: String
|
||||||
|
|
||||||
/* Relationships */
|
/* Relationships */
|
||||||
@NSManaged private(set) var app: StoreApp!
|
@NSManaged public private(set) var app: StoreApp!
|
||||||
|
|
||||||
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
||||||
{
|
{
|
||||||
@@ -63,7 +63,7 @@ class AppPermission: NSManagedObject, Decodable, Fetchable
|
|||||||
case usageDescription
|
case usageDescription
|
||||||
}
|
}
|
||||||
|
|
||||||
required init(from decoder: Decoder) throws
|
public required init(from decoder: Decoder) throws
|
||||||
{
|
{
|
||||||
guard let context = decoder.managedObjectContext else { preconditionFailure("Decoder must have non-nil NSManagedObjectContext.") }
|
guard let context = decoder.managedObjectContext else { preconditionFailure("Decoder must have non-nil NSManagedObjectContext.") }
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ class AppPermission: NSManagedObject, Decodable, Fetchable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension AppPermission
|
public extension AppPermission
|
||||||
{
|
{
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<AppPermission>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<AppPermission>
|
||||||
{
|
{
|
||||||
@@ -23,7 +23,7 @@ public class DatabaseManager
|
|||||||
|
|
||||||
private init()
|
private init()
|
||||||
{
|
{
|
||||||
self.persistentContainer = RSTPersistentContainer(name: "AltStore")
|
self.persistentContainer = RSTPersistentContainer(name: "AltStore", bundle: Bundle(for: DatabaseManager.self))
|
||||||
self.persistentContainer.preferredMergePolicy = MergePolicy()
|
self.persistentContainer.preferredMergePolicy = MergePolicy()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -98,7 +98,7 @@ public extension DatabaseManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension DatabaseManager
|
public extension DatabaseManager
|
||||||
{
|
{
|
||||||
func activeAccount(in context: NSManagedObjectContext = DatabaseManager.shared.viewContext) -> Account?
|
func activeAccount(in context: NSManagedObjectContext = DatabaseManager.shared.viewContext) -> Account?
|
||||||
{
|
{
|
||||||
@@ -12,9 +12,9 @@ import CoreData
|
|||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
// Free developer accounts are limited to only 3 active sideloaded apps at a time as of iOS 13.3.1.
|
// Free developer accounts are limited to only 3 active sideloaded apps at a time as of iOS 13.3.1.
|
||||||
let ALTActiveAppsLimit = 3
|
public let ALTActiveAppsLimit = 3
|
||||||
|
|
||||||
protocol InstalledAppProtocol: Fetchable
|
public protocol InstalledAppProtocol: Fetchable
|
||||||
{
|
{
|
||||||
var name: String { get }
|
var name: String { get }
|
||||||
var bundleIdentifier: String { get }
|
var bundleIdentifier: String { get }
|
||||||
@@ -27,36 +27,36 @@ protocol InstalledAppProtocol: Fetchable
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc(InstalledApp)
|
@objc(InstalledApp)
|
||||||
class InstalledApp: NSManagedObject, InstalledAppProtocol
|
public class InstalledApp: NSManagedObject, InstalledAppProtocol
|
||||||
{
|
{
|
||||||
/* Properties */
|
/* Properties */
|
||||||
@NSManaged var name: String
|
@NSManaged public var name: String
|
||||||
@NSManaged var bundleIdentifier: String
|
@NSManaged public var bundleIdentifier: String
|
||||||
@NSManaged var resignedBundleIdentifier: String
|
@NSManaged public var resignedBundleIdentifier: String
|
||||||
@NSManaged var version: String
|
@NSManaged public var version: String
|
||||||
|
|
||||||
@NSManaged var refreshedDate: Date
|
@NSManaged public var refreshedDate: Date
|
||||||
@NSManaged var expirationDate: Date
|
@NSManaged public var expirationDate: Date
|
||||||
@NSManaged var installedDate: Date
|
@NSManaged public var installedDate: Date
|
||||||
|
|
||||||
@NSManaged var isActive: Bool
|
@NSManaged public var isActive: Bool
|
||||||
|
|
||||||
@NSManaged var certificateSerialNumber: String?
|
@NSManaged public var certificateSerialNumber: String?
|
||||||
|
|
||||||
/* Relationships */
|
/* Relationships */
|
||||||
@NSManaged var storeApp: StoreApp?
|
@NSManaged public var storeApp: StoreApp?
|
||||||
@NSManaged var team: Team?
|
@NSManaged public var team: Team?
|
||||||
@NSManaged var appExtensions: Set<InstalledExtension>
|
@NSManaged public var appExtensions: Set<InstalledExtension>
|
||||||
|
|
||||||
var isSideloaded: Bool {
|
public var isSideloaded: Bool {
|
||||||
return self.storeApp == nil
|
return self.storeApp == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var appIDCount: Int {
|
public var appIDCount: Int {
|
||||||
return 1 + self.appExtensions.count
|
return 1 + self.appExtensions.count
|
||||||
}
|
}
|
||||||
|
|
||||||
var requiredActiveSlots: Int {
|
public var requiredActiveSlots: Int {
|
||||||
let requiredActiveSlots = UserDefaults.standard.activeAppLimitIncludesExtensions ? self.appIDCount : 1
|
let requiredActiveSlots = UserDefaults.standard.activeAppLimitIncludesExtensions ? self.appIDCount : 1
|
||||||
return requiredActiveSlots
|
return requiredActiveSlots
|
||||||
}
|
}
|
||||||
@@ -66,7 +66,7 @@ class InstalledApp: NSManagedObject, InstalledAppProtocol
|
|||||||
super.init(entity: entity, insertInto: context)
|
super.init(entity: entity, insertInto: context)
|
||||||
}
|
}
|
||||||
|
|
||||||
init(resignedApp: ALTApplication, originalBundleIdentifier: String, certificateSerialNumber: String?, context: NSManagedObjectContext)
|
public init(resignedApp: ALTApplication, originalBundleIdentifier: String, certificateSerialNumber: String?, context: NSManagedObjectContext)
|
||||||
{
|
{
|
||||||
super.init(entity: InstalledApp.entity(), insertInto: context)
|
super.init(entity: InstalledApp.entity(), insertInto: context)
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ class InstalledApp: NSManagedObject, InstalledAppProtocol
|
|||||||
self.update(resignedApp: resignedApp, certificateSerialNumber: certificateSerialNumber)
|
self.update(resignedApp: resignedApp, certificateSerialNumber: certificateSerialNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(resignedApp: ALTApplication, certificateSerialNumber: String?)
|
public func update(resignedApp: ALTApplication, certificateSerialNumber: String?)
|
||||||
{
|
{
|
||||||
self.name = resignedApp.name
|
self.name = resignedApp.name
|
||||||
|
|
||||||
@@ -95,14 +95,14 @@ class InstalledApp: NSManagedObject, InstalledAppProtocol
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(provisioningProfile: ALTProvisioningProfile)
|
public func update(provisioningProfile: ALTProvisioningProfile)
|
||||||
{
|
{
|
||||||
self.refreshedDate = provisioningProfile.creationDate
|
self.refreshedDate = provisioningProfile.creationDate
|
||||||
self.expirationDate = provisioningProfile.expirationDate
|
self.expirationDate = provisioningProfile.expirationDate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension InstalledApp
|
public extension InstalledApp
|
||||||
{
|
{
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<InstalledApp>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<InstalledApp>
|
||||||
{
|
{
|
||||||
@@ -199,7 +199,7 @@ extension InstalledApp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension InstalledApp
|
public extension InstalledApp
|
||||||
{
|
{
|
||||||
var openAppURL: URL {
|
var openAppURL: URL {
|
||||||
let openAppURL = URL(string: "altstore-" + self.bundleIdentifier + "://")!
|
let openAppURL = URL(string: "altstore-" + self.bundleIdentifier + "://")!
|
||||||
@@ -213,7 +213,7 @@ extension InstalledApp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension InstalledApp
|
public extension InstalledApp
|
||||||
{
|
{
|
||||||
class var appsDirectoryURL: URL {
|
class var appsDirectoryURL: URL {
|
||||||
let appsDirectoryURL = FileManager.default.applicationSupportDirectory.appendingPathComponent("Apps")
|
let appsDirectoryURL = FileManager.default.applicationSupportDirectory.appendingPathComponent("Apps")
|
||||||
@@ -12,27 +12,27 @@ import CoreData
|
|||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
@objc(InstalledExtension)
|
@objc(InstalledExtension)
|
||||||
class InstalledExtension: NSManagedObject, InstalledAppProtocol
|
public class InstalledExtension: NSManagedObject, InstalledAppProtocol
|
||||||
{
|
{
|
||||||
/* Properties */
|
/* Properties */
|
||||||
@NSManaged var name: String
|
@NSManaged public var name: String
|
||||||
@NSManaged var bundleIdentifier: String
|
@NSManaged public var bundleIdentifier: String
|
||||||
@NSManaged var resignedBundleIdentifier: String
|
@NSManaged public var resignedBundleIdentifier: String
|
||||||
@NSManaged var version: String
|
@NSManaged public var version: String
|
||||||
|
|
||||||
@NSManaged var refreshedDate: Date
|
@NSManaged public var refreshedDate: Date
|
||||||
@NSManaged var expirationDate: Date
|
@NSManaged public var expirationDate: Date
|
||||||
@NSManaged var installedDate: Date
|
@NSManaged public var installedDate: Date
|
||||||
|
|
||||||
/* Relationships */
|
/* Relationships */
|
||||||
@NSManaged var parentApp: InstalledApp?
|
@NSManaged public var parentApp: InstalledApp?
|
||||||
|
|
||||||
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
||||||
{
|
{
|
||||||
super.init(entity: entity, insertInto: context)
|
super.init(entity: entity, insertInto: context)
|
||||||
}
|
}
|
||||||
|
|
||||||
init(resignedAppExtension: ALTApplication, originalBundleIdentifier: String, context: NSManagedObjectContext)
|
public init(resignedAppExtension: ALTApplication, originalBundleIdentifier: String, context: NSManagedObjectContext)
|
||||||
{
|
{
|
||||||
super.init(entity: InstalledExtension.entity(), insertInto: context)
|
super.init(entity: InstalledExtension.entity(), insertInto: context)
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ class InstalledExtension: NSManagedObject, InstalledAppProtocol
|
|||||||
self.update(resignedAppExtension: resignedAppExtension)
|
self.update(resignedAppExtension: resignedAppExtension)
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(resignedAppExtension: ALTApplication)
|
public func update(resignedAppExtension: ALTApplication)
|
||||||
{
|
{
|
||||||
self.name = resignedAppExtension.name
|
self.name = resignedAppExtension.name
|
||||||
|
|
||||||
@@ -59,14 +59,14 @@ class InstalledExtension: NSManagedObject, InstalledAppProtocol
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(provisioningProfile: ALTProvisioningProfile)
|
public func update(provisioningProfile: ALTProvisioningProfile)
|
||||||
{
|
{
|
||||||
self.refreshedDate = provisioningProfile.creationDate
|
self.refreshedDate = provisioningProfile.creationDate
|
||||||
self.expirationDate = provisioningProfile.expirationDate
|
self.expirationDate = provisioningProfile.expirationDate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension InstalledExtension
|
public extension InstalledExtension
|
||||||
{
|
{
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<InstalledExtension>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<InstalledExtension>
|
||||||
{
|
{
|
||||||
@@ -10,27 +10,27 @@ import UIKit
|
|||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
@objc(NewsItem)
|
@objc(NewsItem)
|
||||||
class NewsItem: NSManagedObject, Decodable, Fetchable
|
public class NewsItem: NSManagedObject, Decodable, Fetchable
|
||||||
{
|
{
|
||||||
/* Properties */
|
/* Properties */
|
||||||
@NSManaged var identifier: String
|
@NSManaged public var identifier: String
|
||||||
@NSManaged var date: Date
|
@NSManaged public var date: Date
|
||||||
|
|
||||||
@NSManaged var title: String
|
@NSManaged public var title: String
|
||||||
@NSManaged var caption: String
|
@NSManaged public var caption: String
|
||||||
@NSManaged var tintColor: UIColor
|
@NSManaged public var tintColor: UIColor
|
||||||
@NSManaged var sortIndex: Int32
|
@NSManaged public var sortIndex: Int32
|
||||||
@NSManaged var isSilent: Bool
|
@NSManaged public var isSilent: Bool
|
||||||
|
|
||||||
@NSManaged var imageURL: URL?
|
@NSManaged public var imageURL: URL?
|
||||||
@NSManaged var externalURL: URL?
|
@NSManaged public var externalURL: URL?
|
||||||
|
|
||||||
@NSManaged var appID: String?
|
@NSManaged public var appID: String?
|
||||||
@NSManaged var sourceIdentifier: String?
|
@NSManaged public var sourceIdentifier: String?
|
||||||
|
|
||||||
/* Relationships */
|
/* Relationships */
|
||||||
@NSManaged var storeApp: StoreApp?
|
@NSManaged public var storeApp: StoreApp?
|
||||||
@NSManaged var source: Source?
|
@NSManaged public var source: Source?
|
||||||
|
|
||||||
private enum CodingKeys: String, CodingKey
|
private enum CodingKeys: String, CodingKey
|
||||||
{
|
{
|
||||||
@@ -50,7 +50,7 @@ class NewsItem: NSManagedObject, Decodable, Fetchable
|
|||||||
super.init(entity: entity, insertInto: context)
|
super.init(entity: entity, insertInto: context)
|
||||||
}
|
}
|
||||||
|
|
||||||
required init(from decoder: Decoder) throws
|
public required init(from decoder: Decoder) throws
|
||||||
{
|
{
|
||||||
guard let context = decoder.managedObjectContext else { preconditionFailure("Decoder must have non-nil NSManagedObjectContext.") }
|
guard let context = decoder.managedObjectContext else { preconditionFailure("Decoder must have non-nil NSManagedObjectContext.") }
|
||||||
|
|
||||||
@@ -82,7 +82,7 @@ class NewsItem: NSManagedObject, Decodable, Fetchable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension NewsItem
|
public extension NewsItem
|
||||||
{
|
{
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<NewsItem>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<NewsItem>
|
||||||
{
|
{
|
||||||
@@ -30,14 +30,14 @@ extension PatreonAPI
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc(PatreonAccount)
|
@objc(PatreonAccount)
|
||||||
class PatreonAccount: NSManagedObject, Fetchable
|
public class PatreonAccount: NSManagedObject, Fetchable
|
||||||
{
|
{
|
||||||
@NSManaged var identifier: String
|
@NSManaged public var identifier: String
|
||||||
|
|
||||||
@NSManaged var name: String
|
@NSManaged public var name: String
|
||||||
@NSManaged var firstName: String?
|
@NSManaged public var firstName: String?
|
||||||
|
|
||||||
@NSManaged var isPatron: Bool
|
@NSManaged public var isPatron: Bool
|
||||||
|
|
||||||
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
||||||
{
|
{
|
||||||
@@ -64,7 +64,7 @@ class PatreonAccount: NSManagedObject, Fetchable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension PatreonAccount
|
public extension PatreonAccount
|
||||||
{
|
{
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<PatreonAccount>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<PatreonAccount>
|
||||||
{
|
{
|
||||||
@@ -9,20 +9,20 @@
|
|||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
@objc(RefreshAttempt)
|
@objc(RefreshAttempt)
|
||||||
class RefreshAttempt: NSManagedObject, Fetchable
|
public class RefreshAttempt: NSManagedObject, Fetchable
|
||||||
{
|
{
|
||||||
@NSManaged var identifier: String
|
@NSManaged public var identifier: String
|
||||||
@NSManaged var date: Date
|
@NSManaged public var date: Date
|
||||||
|
|
||||||
@NSManaged var isSuccess: Bool
|
@NSManaged public var isSuccess: Bool
|
||||||
@NSManaged var errorDescription: String?
|
@NSManaged public var errorDescription: String?
|
||||||
|
|
||||||
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
||||||
{
|
{
|
||||||
super.init(entity: entity, insertInto: context)
|
super.init(entity: entity, insertInto: context)
|
||||||
}
|
}
|
||||||
|
|
||||||
init(identifier: String, result: Result<[String: Result<InstalledApp, Error>], Error>, context: NSManagedObjectContext)
|
public init(identifier: String, result: Result<[String: Result<InstalledApp, Error>], Error>, context: NSManagedObjectContext)
|
||||||
{
|
{
|
||||||
super.init(entity: RefreshAttempt.entity(), insertInto: context)
|
super.init(entity: RefreshAttempt.entity(), insertInto: context)
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ class RefreshAttempt: NSManagedObject, Fetchable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension RefreshAttempt
|
public extension RefreshAttempt
|
||||||
{
|
{
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<RefreshAttempt>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<RefreshAttempt>
|
||||||
{
|
{
|
||||||
@@ -9,11 +9,11 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
@objc(ALTSecureValueTransformer)
|
@objc(ALTSecureValueTransformer)
|
||||||
final class SecureValueTransformer: NSSecureUnarchiveFromDataTransformer
|
public final class SecureValueTransformer: NSSecureUnarchiveFromDataTransformer
|
||||||
{
|
{
|
||||||
static let name = NSValueTransformerName(rawValue: "ALTSecureValueTransformer")
|
public static let name = NSValueTransformerName(rawValue: "ALTSecureValueTransformer")
|
||||||
|
|
||||||
override static var allowedTopLevelClasses: [AnyClass] {
|
public override static var allowedTopLevelClasses: [AnyClass] {
|
||||||
let allowedClasses = super.allowedTopLevelClasses + [NSError.self]
|
let allowedClasses = super.allowedTopLevelClasses + [NSError.self]
|
||||||
return allowedClasses
|
return allowedClasses
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
extension Source
|
public extension Source
|
||||||
{
|
{
|
||||||
#if ALPHA
|
#if ALPHA
|
||||||
static let altStoreIdentifier = "com.rileytestut.AltStore.Alpha"
|
static let altStoreIdentifier = "com.rileytestut.AltStore.Alpha"
|
||||||
@@ -36,23 +36,23 @@ extension Source
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc(Source)
|
@objc(Source)
|
||||||
class Source: NSManagedObject, Fetchable, Decodable
|
public class Source: NSManagedObject, Fetchable, Decodable
|
||||||
{
|
{
|
||||||
/* Properties */
|
/* Properties */
|
||||||
@NSManaged var name: String
|
@NSManaged public var name: String
|
||||||
@NSManaged var identifier: String
|
@NSManaged public var identifier: String
|
||||||
@NSManaged var sourceURL: URL
|
@NSManaged public var sourceURL: URL
|
||||||
|
|
||||||
@NSManaged var error: NSError?
|
@NSManaged public var error: NSError?
|
||||||
|
|
||||||
/* Non-Core Data Properties */
|
/* Non-Core Data Properties */
|
||||||
var userInfo: [ALTSourceUserInfoKey: String]?
|
public var userInfo: [ALTSourceUserInfoKey: String]?
|
||||||
|
|
||||||
/* Relationships */
|
/* Relationships */
|
||||||
@objc(apps) @NSManaged private(set) var _apps: NSOrderedSet
|
@objc(apps) @NSManaged public private(set) var _apps: NSOrderedSet
|
||||||
@objc(newsItems) @NSManaged private(set) var _newsItems: NSOrderedSet
|
@objc(newsItems) @NSManaged public private(set) var _newsItems: NSOrderedSet
|
||||||
|
|
||||||
@nonobjc var apps: [StoreApp] {
|
@nonobjc public var apps: [StoreApp] {
|
||||||
get {
|
get {
|
||||||
return self._apps.array as! [StoreApp]
|
return self._apps.array as! [StoreApp]
|
||||||
}
|
}
|
||||||
@@ -61,7 +61,7 @@ class Source: NSManagedObject, Fetchable, Decodable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc var newsItems: [NewsItem] {
|
@nonobjc public var newsItems: [NewsItem] {
|
||||||
get {
|
get {
|
||||||
return self._newsItems.array as! [NewsItem]
|
return self._newsItems.array as! [NewsItem]
|
||||||
}
|
}
|
||||||
@@ -85,7 +85,7 @@ class Source: NSManagedObject, Fetchable, Decodable
|
|||||||
super.init(entity: entity, insertInto: context)
|
super.init(entity: entity, insertInto: context)
|
||||||
}
|
}
|
||||||
|
|
||||||
required init(from decoder: Decoder) throws
|
public required init(from decoder: Decoder) throws
|
||||||
{
|
{
|
||||||
guard let context = decoder.managedObjectContext else { preconditionFailure("Decoder must have non-nil NSManagedObjectContext.") }
|
guard let context = decoder.managedObjectContext else { preconditionFailure("Decoder must have non-nil NSManagedObjectContext.") }
|
||||||
guard let sourceURL = decoder.sourceURL else { preconditionFailure("Decoder must have non-nil sourceURL.") }
|
guard let sourceURL = decoder.sourceURL else { preconditionFailure("Decoder must have non-nil sourceURL.") }
|
||||||
@@ -147,7 +147,7 @@ class Source: NSManagedObject, Fetchable, Decodable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Source
|
public extension Source
|
||||||
{
|
{
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<Source>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<Source>
|
||||||
{
|
{
|
||||||
@@ -12,7 +12,7 @@ import CoreData
|
|||||||
import Roxas
|
import Roxas
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
extension StoreApp
|
public extension StoreApp
|
||||||
{
|
{
|
||||||
#if ALPHA
|
#if ALPHA
|
||||||
static let altstoreAppID = "com.rileytestut.AltStore.Alpha"
|
static let altstoreAppID = "com.rileytestut.AltStore.Alpha"
|
||||||
@@ -29,40 +29,40 @@ extension StoreApp
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc(StoreApp)
|
@objc(StoreApp)
|
||||||
class StoreApp: NSManagedObject, Decodable, Fetchable
|
public class StoreApp: NSManagedObject, Decodable, Fetchable
|
||||||
{
|
{
|
||||||
/* Properties */
|
/* Properties */
|
||||||
@NSManaged private(set) var name: String
|
@NSManaged public private(set) var name: String
|
||||||
@NSManaged private(set) var bundleIdentifier: String
|
@NSManaged public private(set) var bundleIdentifier: String
|
||||||
@NSManaged private(set) var subtitle: String?
|
@NSManaged public private(set) var subtitle: String?
|
||||||
|
|
||||||
@NSManaged private(set) var developerName: String
|
@NSManaged public private(set) var developerName: String
|
||||||
@NSManaged private(set) var localizedDescription: String
|
@NSManaged public private(set) var localizedDescription: String
|
||||||
@NSManaged private(set) var size: Int32
|
@NSManaged public private(set) var size: Int32
|
||||||
|
|
||||||
@NSManaged private(set) var iconURL: URL
|
@NSManaged public private(set) var iconURL: URL
|
||||||
@NSManaged private(set) var screenshotURLs: [URL]
|
@NSManaged public private(set) var screenshotURLs: [URL]
|
||||||
|
|
||||||
@NSManaged var version: String
|
@NSManaged public var version: String
|
||||||
@NSManaged private(set) var versionDate: Date
|
@NSManaged public private(set) var versionDate: Date
|
||||||
@NSManaged private(set) var versionDescription: String?
|
@NSManaged public private(set) var versionDescription: String?
|
||||||
|
|
||||||
@NSManaged private(set) var downloadURL: URL
|
@NSManaged public private(set) var downloadURL: URL
|
||||||
@NSManaged private(set) var tintColor: UIColor?
|
@NSManaged public private(set) var tintColor: UIColor?
|
||||||
@NSManaged private(set) var isBeta: Bool
|
@NSManaged public private(set) var isBeta: Bool
|
||||||
|
|
||||||
@NSManaged var sourceIdentifier: String?
|
@NSManaged public var sourceIdentifier: String?
|
||||||
|
|
||||||
@NSManaged var sortIndex: Int32
|
@NSManaged public var sortIndex: Int32
|
||||||
|
|
||||||
/* Relationships */
|
/* Relationships */
|
||||||
@NSManaged var installedApp: InstalledApp?
|
@NSManaged public var installedApp: InstalledApp?
|
||||||
@NSManaged var newsItems: Set<NewsItem>
|
@NSManaged public var newsItems: Set<NewsItem>
|
||||||
|
|
||||||
@NSManaged @objc(source) var _source: Source?
|
@NSManaged @objc(source) public var _source: Source?
|
||||||
@NSManaged @objc(permissions) var _permissions: NSOrderedSet
|
@NSManaged @objc(permissions) public var _permissions: NSOrderedSet
|
||||||
|
|
||||||
@nonobjc var source: Source? {
|
@nonobjc public var source: Source? {
|
||||||
set {
|
set {
|
||||||
self._source = newValue
|
self._source = newValue
|
||||||
self.sourceIdentifier = newValue?.identifier
|
self.sourceIdentifier = newValue?.identifier
|
||||||
@@ -72,7 +72,7 @@ class StoreApp: NSManagedObject, Decodable, Fetchable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc var permissions: [AppPermission] {
|
@nonobjc public var permissions: [AppPermission] {
|
||||||
return self._permissions.array as! [AppPermission]
|
return self._permissions.array as! [AppPermission]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,7 +100,7 @@ class StoreApp: NSManagedObject, Decodable, Fetchable
|
|||||||
case isBeta = "beta"
|
case isBeta = "beta"
|
||||||
}
|
}
|
||||||
|
|
||||||
required init(from decoder: Decoder) throws
|
public required init(from decoder: Decoder) throws
|
||||||
{
|
{
|
||||||
guard let context = decoder.managedObjectContext else { preconditionFailure("Decoder must have non-nil NSManagedObjectContext.") }
|
guard let context = decoder.managedObjectContext else { preconditionFailure("Decoder must have non-nil NSManagedObjectContext.") }
|
||||||
|
|
||||||
@@ -153,7 +153,7 @@ class StoreApp: NSManagedObject, Decodable, Fetchable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension StoreApp
|
public extension StoreApp
|
||||||
{
|
{
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<StoreApp>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<StoreApp>
|
||||||
{
|
{
|
||||||
@@ -11,7 +11,7 @@ import CoreData
|
|||||||
|
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
extension ALTTeamType
|
public extension ALTTeamType
|
||||||
{
|
{
|
||||||
var localizedDescription: String {
|
var localizedDescription: String {
|
||||||
switch self
|
switch self
|
||||||
@@ -25,34 +25,34 @@ extension ALTTeamType
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Team
|
public extension Team
|
||||||
{
|
{
|
||||||
static let maximumFreeAppIDs = 10
|
static let maximumFreeAppIDs = 10
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc(Team)
|
@objc(Team)
|
||||||
class Team: NSManagedObject, Fetchable
|
public class Team: NSManagedObject, Fetchable
|
||||||
{
|
{
|
||||||
/* Properties */
|
/* Properties */
|
||||||
@NSManaged var name: String
|
@NSManaged public var name: String
|
||||||
@NSManaged var identifier: String
|
@NSManaged public var identifier: String
|
||||||
@NSManaged var type: ALTTeamType
|
@NSManaged public var type: ALTTeamType
|
||||||
|
|
||||||
@NSManaged var isActiveTeam: Bool
|
@NSManaged public var isActiveTeam: Bool
|
||||||
|
|
||||||
/* Relationships */
|
/* Relationships */
|
||||||
@NSManaged private(set) var account: Account!
|
@NSManaged public private(set) var account: Account!
|
||||||
@NSManaged var installedApps: Set<InstalledApp>
|
@NSManaged public var installedApps: Set<InstalledApp>
|
||||||
@NSManaged private(set) var appIDs: Set<AppID>
|
@NSManaged public private(set) var appIDs: Set<AppID>
|
||||||
|
|
||||||
var altTeam: ALTTeam?
|
public var altTeam: ALTTeam?
|
||||||
|
|
||||||
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?)
|
||||||
{
|
{
|
||||||
super.init(entity: entity, insertInto: context)
|
super.init(entity: entity, insertInto: context)
|
||||||
}
|
}
|
||||||
|
|
||||||
init(_ team: ALTTeam, account: Account, context: NSManagedObjectContext)
|
public init(_ team: ALTTeam, account: Account, context: NSManagedObjectContext)
|
||||||
{
|
{
|
||||||
super.init(entity: Team.entity(), insertInto: context)
|
super.init(entity: Team.entity(), insertInto: context)
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ class Team: NSManagedObject, Fetchable
|
|||||||
self.update(team: team)
|
self.update(team: team)
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(team: ALTTeam)
|
public func update(team: ALTTeam)
|
||||||
{
|
{
|
||||||
self.altTeam = team
|
self.altTeam = team
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ class Team: NSManagedObject, Fetchable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Team
|
public extension Team
|
||||||
{
|
{
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<Team>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<Team>
|
||||||
{
|
{
|
||||||
@@ -16,9 +16,9 @@ extension PatreonAPI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Benefit: Hashable
|
public struct Benefit: Hashable
|
||||||
{
|
{
|
||||||
var type: ALTPatreonBenefitType
|
public var type: ALTPatreonBenefitType
|
||||||
|
|
||||||
init(response: PatreonAPI.BenefitResponse)
|
init(response: PatreonAPI.BenefitResponse)
|
||||||
{
|
{
|
||||||
@@ -16,9 +16,9 @@ extension PatreonAPI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Campaign
|
public struct Campaign
|
||||||
{
|
{
|
||||||
var identifier: String
|
public var identifier: String
|
||||||
|
|
||||||
init(response: PatreonAPI.CampaignResponse)
|
init(response: PatreonAPI.CampaignResponse)
|
||||||
{
|
{
|
||||||
@@ -71,11 +71,11 @@ extension PatreonAPI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class PatreonAPI: NSObject
|
public class PatreonAPI: NSObject
|
||||||
{
|
{
|
||||||
static let shared = PatreonAPI()
|
public static let shared = PatreonAPI()
|
||||||
|
|
||||||
var isAuthenticated: Bool {
|
public var isAuthenticated: Bool {
|
||||||
return Keychain.shared.patreonAccessToken != nil
|
return Keychain.shared.patreonAccessToken != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ class PatreonAPI: NSObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension PatreonAPI
|
public extension PatreonAPI
|
||||||
{
|
{
|
||||||
func authenticate(completion: @escaping (Result<PatreonAccount, Swift.Error>) -> Void)
|
func authenticate(completion: @escaping (Result<PatreonAccount, Swift.Error>) -> Void)
|
||||||
{
|
{
|
||||||
@@ -412,8 +412,8 @@ private extension PatreonAPI
|
|||||||
@available(iOS 13.0, *)
|
@available(iOS 13.0, *)
|
||||||
extension PatreonAPI: ASWebAuthenticationPresentationContextProviding
|
extension PatreonAPI: ASWebAuthenticationPresentationContextProviding
|
||||||
{
|
{
|
||||||
func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor
|
public func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor
|
||||||
{
|
{
|
||||||
return UIApplication.shared.keyWindow ?? UIWindow()
|
return UIApplication.alt_shared?.keyWindow ?? UIWindow()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -43,7 +43,7 @@ extension PatreonAPI
|
|||||||
|
|
||||||
extension Patron
|
extension Patron
|
||||||
{
|
{
|
||||||
enum Status: String, Decodable
|
public enum Status: String, Decodable
|
||||||
{
|
{
|
||||||
case active = "active_patron"
|
case active = "active_patron"
|
||||||
case declined = "declined_patron"
|
case declined = "declined_patron"
|
||||||
@@ -52,14 +52,14 @@ extension Patron
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Patron
|
public class Patron
|
||||||
{
|
{
|
||||||
var name: String
|
public var name: String
|
||||||
var identifier: String
|
public var identifier: String
|
||||||
|
|
||||||
var status: Status
|
public var status: Status
|
||||||
|
|
||||||
var benefits: Set<Benefit> = []
|
public var benefits: Set<Benefit> = []
|
||||||
|
|
||||||
init(response: PatreonAPI.PatronResponse)
|
init(response: PatreonAPI.PatronResponse)
|
||||||
{
|
{
|
||||||
@@ -34,12 +34,12 @@ extension PatreonAPI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Tier
|
public struct Tier
|
||||||
{
|
{
|
||||||
var name: String
|
public var name: String
|
||||||
var identifier: String
|
public var identifier: String
|
||||||
|
|
||||||
var benefits: [Benefit] = []
|
public var benefits: [Benefit] = []
|
||||||
|
|
||||||
init(response: PatreonAPI.TierResponse)
|
init(response: PatreonAPI.TierResponse)
|
||||||
{
|
{
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import AltSign
|
import AltSign
|
||||||
|
|
||||||
protocol AppProtocol
|
public protocol AppProtocol
|
||||||
{
|
{
|
||||||
var name: String { get }
|
var name: String { get }
|
||||||
var bundleIdentifier: String { get }
|
var bundleIdentifier: String { get }
|
||||||
@@ -18,21 +18,21 @@ protocol AppProtocol
|
|||||||
|
|
||||||
extension ALTApplication: AppProtocol
|
extension ALTApplication: AppProtocol
|
||||||
{
|
{
|
||||||
var url: URL {
|
public var url: URL {
|
||||||
return self.fileURL
|
return self.fileURL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension StoreApp: AppProtocol
|
extension StoreApp: AppProtocol
|
||||||
{
|
{
|
||||||
var url: URL {
|
public var url: URL {
|
||||||
return self.downloadURL
|
return self.downloadURL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension InstalledApp: AppProtocol
|
extension InstalledApp: AppProtocol
|
||||||
{
|
{
|
||||||
var url: URL {
|
public var url: URL {
|
||||||
return self.fileURL
|
return self.fileURL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,13 +8,13 @@
|
|||||||
|
|
||||||
import CoreData
|
import CoreData
|
||||||
|
|
||||||
typealias FetchRequest = NSFetchRequest<NSFetchRequestResult>
|
public typealias FetchRequest = NSFetchRequest<NSFetchRequestResult>
|
||||||
|
|
||||||
protocol Fetchable: NSManagedObject
|
public protocol Fetchable: NSManagedObject
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
extension Fetchable
|
public extension Fetchable
|
||||||
{
|
{
|
||||||
static func first(satisfying predicate: NSPredicate? = nil, sortedBy sortDescriptors: [NSSortDescriptor]? = nil, in context: NSManagedObjectContext,
|
static func first(satisfying predicate: NSPredicate? = nil, sortedBy sortDescriptors: [NSSortDescriptor]? = nil, in context: NSManagedObjectContext,
|
||||||
requestProperties: [PartialKeyPath<FetchRequest>: Any?] = [:]) -> Self?
|
requestProperties: [PartialKeyPath<FetchRequest>: Any?] = [:]) -> Self?
|
||||||
14
Podfile
14
Podfile
@@ -3,10 +3,9 @@ inhibit_all_warnings!
|
|||||||
target 'AltStore' do
|
target 'AltStore' do
|
||||||
platform :ios, '12.0'
|
platform :ios, '12.0'
|
||||||
|
|
||||||
use_modular_headers!
|
use_frameworks!
|
||||||
|
|
||||||
# Pods for AltStore
|
# Pods for AltStore
|
||||||
pod 'KeychainAccess', '~> 3.2.0'
|
|
||||||
pod 'Nuke', '~> 7.0'
|
pod 'Nuke', '~> 7.0'
|
||||||
pod 'AppCenter', '~> 3.1.0'
|
pod 'AppCenter', '~> 3.1.0'
|
||||||
pod 'Roxas', :path => 'Dependencies/Roxas'
|
pod 'Roxas', :path => 'Dependencies/Roxas'
|
||||||
@@ -24,6 +23,17 @@ target 'AltServer' do
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
target 'AltStoreCore' do
|
||||||
|
platform :ios, '12.0'
|
||||||
|
|
||||||
|
use_frameworks!
|
||||||
|
|
||||||
|
# Pods for AltServer
|
||||||
|
pod 'KeychainAccess', '~> 3.2.0'
|
||||||
|
pod 'Roxas', :path => 'Dependencies/Roxas'
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
target 'AltDaemon' do
|
target 'AltDaemon' do
|
||||||
platform :ios, '12.0'
|
platform :ios, '12.0'
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,6 @@ SPEC CHECKSUMS:
|
|||||||
Sparkle: 3f75576db8b0265adef36c43249d747f22d0b708
|
Sparkle: 3f75576db8b0265adef36c43249d747f22d0b708
|
||||||
STPrivilegedTask: 56c3397238a1ec07720fb877a044898373cd2c68
|
STPrivilegedTask: 56c3397238a1ec07720fb877a044898373cd2c68
|
||||||
|
|
||||||
PODFILE CHECKSUM: 8e139db2a0c0a1d2f4affc7b615b6ca0720633ed
|
PODFILE CHECKSUM: f76f10e8f2823d859ce9672d0b5d7054a5c24504
|
||||||
|
|
||||||
COCOAPODS: 1.9.3
|
COCOAPODS: 1.9.3
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
../../../Target Support Files/KeychainAccess/KeychainAccess-umbrella.h
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
../../../Target Support Files/KeychainAccess/KeychainAccess.modulemap
|
|
||||||
1
Pods/Headers/Public/Nuke/Nuke-umbrella.h
generated
1
Pods/Headers/Public/Nuke/Nuke-umbrella.h
generated
@@ -1 +0,0 @@
|
|||||||
../../../Target Support Files/Nuke/Nuke-umbrella.h
|
|
||||||
1
Pods/Headers/Public/Nuke/Nuke.modulemap
generated
1
Pods/Headers/Public/Nuke/Nuke.modulemap
generated
@@ -1 +0,0 @@
|
|||||||
../../../Target Support Files/Nuke/Nuke.modulemap
|
|
||||||
1
Pods/Headers/Public/Roxas/Roxas-library-umbrella.h
generated
Symbolic link
1
Pods/Headers/Public/Roxas/Roxas-library-umbrella.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../Target Support Files/Roxas-library/Roxas-library-umbrella.h
|
||||||
1
Pods/Headers/Public/Roxas/Roxas-library.modulemap
generated
Symbolic link
1
Pods/Headers/Public/Roxas/Roxas-library.modulemap
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../Target Support Files/Roxas-library/Roxas-library.modulemap
|
||||||
1
Pods/Headers/Public/Roxas/Roxas-umbrella.h
generated
1
Pods/Headers/Public/Roxas/Roxas-umbrella.h
generated
@@ -1 +0,0 @@
|
|||||||
../../../Target Support Files/Roxas/Roxas-umbrella.h
|
|
||||||
1
Pods/Headers/Public/Roxas/Roxas.modulemap
generated
1
Pods/Headers/Public/Roxas/Roxas.modulemap
generated
@@ -1 +0,0 @@
|
|||||||
../../../Target Support Files/Roxas/Roxas.modulemap
|
|
||||||
2
Pods/Manifest.lock
generated
2
Pods/Manifest.lock
generated
@@ -47,6 +47,6 @@ SPEC CHECKSUMS:
|
|||||||
Sparkle: 3f75576db8b0265adef36c43249d747f22d0b708
|
Sparkle: 3f75576db8b0265adef36c43249d747f22d0b708
|
||||||
STPrivilegedTask: 56c3397238a1ec07720fb877a044898373cd2c68
|
STPrivilegedTask: 56c3397238a1ec07720fb877a044898373cd2c68
|
||||||
|
|
||||||
PODFILE CHECKSUM: 8e139db2a0c0a1d2f4affc7b615b6ca0720633ed
|
PODFILE CHECKSUM: f76f10e8f2823d859ce9672d0b5d7054a5c24504
|
||||||
|
|
||||||
COCOAPODS: 1.9.3
|
COCOAPODS: 1.9.3
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user