Files
SideStore/Shared/Extensions/Bundle+AltStore.swift
Riley Testut ee410605e8 Verifies downloaded app’s permissions match source
Renames source JSON permissions key to “appPermissions” in order to preserve backwards compatibility, since we’ve changed the schema for permissions.
2024-12-26 21:15:29 +05:30

75 lines
2.4 KiB
Swift

//
// Bundle+AltStore.swift
// AltStore
//
// Created by Riley Testut on 5/30/19.
// Copyright © 2019 Riley Testut. All rights reserved.
//
import Foundation
public extension Bundle
{
struct Info
{
public static let deviceID = "ALTDeviceID"
public static let serverID = "ALTServerID"
public static let certificateID = "ALTCertificateID"
public static let appGroups = "ALTAppGroups"
public static let altBundleID = "ALTBundleIdentifier"
public static let orgbundleIdentifier = "com.SideStore"
public static let appbundleIdentifier = orgbundleIdentifier + ".SideStore"
public static let devicePairingString = "ALTPairingFile"
public static let urlTypes = "CFBundleURLTypes"
public static let exportedUTIs = "UTExportedTypeDeclarations"
public static let backgroundModes = "UIBackgroundModes"
public static let untetherURL = "ALTFugu14UntetherURL"
public static let untetherRequired = "ALTFugu14UntetherRequired"
public static let untetherMinimumiOSVersion = "ALTFugu14UntetherMinimumVersion"
public static let untetherMaximumiOSVersion = "ALTFugu14UntetherMaximumVersion"
}
}
public extension Bundle
{
var infoPlistURL: URL {
let infoPlistURL = self.bundleURL.appendingPathComponent("Info.plist")
return infoPlistURL
}
var provisioningProfileURL: URL {
let provisioningProfileURL = self.bundleURL.appendingPathComponent("embedded.mobileprovision")
return provisioningProfileURL
}
var certificateURL: URL {
let certificateURL = self.bundleURL.appendingPathComponent("ALTCertificate.p12")
return certificateURL
}
var altstorePlistURL: URL {
let altstorePlistURL = self.bundleURL.appendingPathComponent("AltStore.plist")
return altstorePlistURL
}
}
public extension Bundle
{
static var baseAltStoreAppGroupID = "group." + Bundle.Info.appbundleIdentifier
var appGroups: [String] {
return self.infoDictionary?[Bundle.Info.appGroups] as? [String] ?? []
}
var altstoreAppGroup: String? {
let appGroup = self.appGroups.first { $0.contains(Bundle.baseAltStoreAppGroupID) }
return appGroup
}
var completeInfoDictionary: [String : Any]? {
let infoPlistURL = self.infoPlistURL
return NSDictionary(contentsOf: infoPlistURL) as? [String : Any]
}
}