diff --git a/AltStore/Settings/SettingsViewController.swift b/AltStore/Settings/SettingsViewController.swift index a1c9d5c1..b94c12f4 100644 --- a/AltStore/Settings/SettingsViewController.swift +++ b/AltStore/Settings/SettingsViewController.swift @@ -949,7 +949,7 @@ extension SettingsViewController // Option 2: Discord alertController.addAction(UIAlertAction(title: "Discord", style: .default) { _ in - if let discordURL = URL(string: "https://discord.gg/sidestore") { + if let discordURL = URL(string: "https://discord.gg/sidestore-949183273383395328") { let safariViewController = SFSafariViewController(url: discordURL) safariViewController.preferredControlTintColor = .altPrimary self.present(safariViewController, animated: true, completion: nil) diff --git a/AltStoreCore/Model/Migrations/Policies/v17-to-v17_1/ReleaseTrack17To17_1MigrationPolicy.swift b/AltStoreCore/Model/Migrations/Policies/v17-to-v17_1/ReleaseTrack17To17_1MigrationPolicy.swift index a4b19089..f9c58ec5 100644 --- a/AltStoreCore/Model/Migrations/Policies/v17-to-v17_1/ReleaseTrack17To17_1MigrationPolicy.swift +++ b/AltStoreCore/Model/Migrations/Policies/v17-to-v17_1/ReleaseTrack17To17_1MigrationPolicy.swift @@ -32,12 +32,26 @@ class ReleaseTrack17To17_1MigrationPolicy: NSEntityMigrationPolicy { // set initial values copied from source as-is to satisfy unique constraints // (will be updated by StoreApp and Source migration policy in its createRelationship() method) - if let appBundle = storeApp.value(forKey: #keyPath(StoreApp.bundleIdentifier)) as? String{ + let appBundle = storeApp.value(forKey: #keyPath(StoreApp.bundleIdentifier)) as? String + let sourceID = storeApp.value(forKey: #keyPath(StoreApp.sourceIdentifier)) as? String + + if let appBundle { dInstance.setValue(appBundle, forKey: #keyPath(ReleaseTrack._appBundleID)) } - if let sourceID = storeApp.value(forKey: #keyPath(StoreApp.sourceIdentifier)) as? String { + if let sourceID { dInstance.setValue(sourceID, forKey: #keyPath(ReleaseTrack._sourceID)) } + + if let releases = dInstance.value(forKey: #keyPath(ReleaseTrack._releases)) as? NSOrderedSet { + for case let version as NSManagedObject in releases { + if let appBundle { + version.setValue(appBundle, forKey: #keyPath(AppVersion.appBundleID)) + } + if let sourceID { + version.setValue(sourceID, forKey: #keyPath(AppVersion.sourceID)) + } + } + } } } diff --git a/README.md b/README.md index acbc94e6..685bacf8 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Why iOS 15? Targeting such a recent version of iOS allows us to accelerate devel SideStore is a just regular, sandboxed iOS application. The AltStore app target contains the vast majority of SideStore's functionality, including all the logic for downloading and updating apps through SideStore. SideStore makes heavy use of standard iOS frameworks and technologies most iOS developers are familiar with. ### EM Proxy -[SideServer mobile](https://github.com/jkcoxson/em_proxy) powers the defining feature of SideStore: untethered app installation. By levaraging an App Store app with additional entitlements (WireGuard) to create the VPN tunnel for us, it allows SideStore to take advantage of [Jitterbug](https://github.com/osy/Jitterbug)'s loopback method without requiring a paid developer account. +[SideServer mobile](https://github.com/jkcoxson/em_proxy) powers the defining feature of SideStore: untethered app installation. By leveraging an App Store app with additional entitlements (WireGuard or StosVPN) to create the VPN tunnel for us, it allows SideStore to take advantage of [Jitterbug](https://github.com/osy/Jitterbug)'s loopback method without requiring a paid developer account. ### Minimuxer [Minimuxer](https://github.com/jkcoxson/minimuxer) is a lockdown muxer that can run inside iOS’s sandbox. It replicates Apple’s usbmuxd protocol on MacOS to “discover” devices to interface with wireguard On-Device.