diff --git a/AltStore/Browse/BrowseViewController.swift b/AltStore/Browse/BrowseViewController.swift index a23fbbe9..20a93105 100644 --- a/AltStore/Browse/BrowseViewController.swift +++ b/AltStore/Browse/BrowseViewController.swift @@ -78,7 +78,7 @@ private extension BrowseViewController NSSortDescriptor(keyPath: \StoreApp.name, ascending: true), NSSortDescriptor(keyPath: \StoreApp.bundleIdentifier, ascending: true)] fetchRequest.returnsObjectsAsFaults = false - fetchRequest.predicate = NSPredicate(format: "%K != %@", #keyPath(StoreApp.bundleIdentifier), StoreApp.altstoreAppID) + fetchRequest.predicate = NSPredicate(format: "%K != %@", #keyPath(StoreApp.sourceIdentifier), Source.altStoreIdentifier) let dataSource = RSTFetchedResultsCollectionViewPrefetchingDataSource(fetchRequest: fetchRequest, managedObjectContext: DatabaseManager.shared.viewContext) dataSource.cellConfigurationHandler = { (cell, app, indexPath) in diff --git a/AltStoreCore/Model/DatabaseManager.swift b/AltStoreCore/Model/DatabaseManager.swift index b91a7e8e..06891c37 100644 --- a/AltStoreCore/Model/DatabaseManager.swift +++ b/AltStoreCore/Model/DatabaseManager.swift @@ -222,7 +222,7 @@ private extension DatabaseManager let storeApp: StoreApp - if let app = StoreApp.first(satisfying: NSPredicate(format: "%K == %@", #keyPath(StoreApp.bundleIdentifier), StoreApp.altstoreAppID), in: context) + if let app = StoreApp.first(satisfying: NSPredicate(format: "%K == %@ AND %K == %@", #keyPath(StoreApp.bundleIdentifier), StoreApp.altstoreAppID, #keyPath(StoreApp.sourceIdentifier), Source.altStoreIdentifier), in: context) { storeApp = app } diff --git a/AltStoreCore/Model/InstalledApp.swift b/AltStoreCore/Model/InstalledApp.swift index f59d05d0..f53a3a1f 100644 --- a/AltStoreCore/Model/InstalledApp.swift +++ b/AltStoreCore/Model/InstalledApp.swift @@ -108,6 +108,10 @@ public class InstalledApp: NSManagedObject, InstalledAppProtocol public func update(resignedApp: ALTApplication, certificateSerialNumber: String?) { self.name = resignedApp.name + if storeApp != nil { + // This might break things; maybe only do this if the bundle ID is SideStore's? + self.name = storeApp!.name // If we don't do this, the name will always be SideStore in My Apps, even when using beta/nightly + } self.resignedBundleIdentifier = resignedApp.bundleIdentifier self.version = resignedApp.version @@ -178,7 +182,7 @@ public extension InstalledApp class func fetchAltStore(in context: NSManagedObjectContext) -> InstalledApp? { - let predicate = NSPredicate(format: "%K == %@", #keyPath(InstalledApp.bundleIdentifier), StoreApp.altstoreAppID) + let predicate = NSPredicate(format: "%K == %@ AND %K != nil AND %K == %@", #keyPath(InstalledApp.bundleIdentifier), StoreApp.altstoreAppID, #keyPath(InstalledApp.storeApp), #keyPath(InstalledApp.storeApp.sourceIdentifier), Source.altStoreIdentifier) print("Fetch 'AltStore' Predicate: \(String(describing: predicate))") let altStore = InstalledApp.first(satisfying: predicate, in: context) return altStore diff --git a/AltStoreCore/Model/Source.swift b/AltStoreCore/Model/Source.swift index 8f1a72a7..3a6c16e6 100644 --- a/AltStoreCore/Model/Source.swift +++ b/AltStoreCore/Model/Source.swift @@ -11,29 +11,37 @@ import UIKit public extension Source { - #if ALPHA - static let altStoreIdentifier = Bundle.Info.appbundleIdentifier - #else - static let altStoreIdentifier = Bundle.Info.appbundleIdentifier - #endif + static var altStoreIdentifier: String { + let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String + + if appVersion != nil { + if appVersion!.contains("beta") { + return Bundle.Info.appbundleIdentifier + ".Beta" + } + if appVersion!.contains("nightly") { + return Bundle.Info.appbundleIdentifier + ".Nightly" + } + } + + return Bundle.Info.appbundleIdentifier + } - #if STAGING + static let altStoreSourceBaseURL = "https://sidestore-apps.naturecodevoid.dev/" - #if ALPHA - static let altStoreSourceURL = URL(string: "https://apps.sidestore.io/")! - #else - static let altStoreSourceURL = URL(string: "https://apps.sidestore.io/")! - #endif - - #else - - #if ALPHA - static let altStoreSourceURL = URL(string: "https://apps.sidestore.io/")! - #else - static let altStoreSourceURL = URL(string: "https://apps.sidestore.io/")! - #endif - - #endif + static var altStoreSourceURL: URL { + let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String + + if appVersion != nil { + if appVersion!.contains("beta") { + return URL(string: altStoreSourceBaseURL + "beta")! + } + if appVersion!.contains("nightly") { + return URL(string: altStoreSourceBaseURL + "nightly")! + } + } + + return URL(string: altStoreSourceBaseURL)! + } } public struct AppPermissionFeed: Codable {