From 1f2693bea617195be6675a7c4114cef828b593d0 Mon Sep 17 00:00:00 2001 From: Joe Mattiello Date: Sat, 4 Mar 2023 04:00:00 -0500 Subject: [PATCH] Fix enum to objc core data for app permission --- SideStore.xcodeproj/project.pbxproj | 19 +++++++-- SideStoreApp/Package.swift | 1 + .../AppDelegate+BackgroundFetch.swift | 9 +++++ .../Sources/SideStore/AppDelegate.swift | 4 +- .../Resources/SideStore.entitlements | 2 + .../Sources/SideStore/Resources/tempEnt.plist | 6 ++- .../Components/NavigationBar.swift | 2 + .../SideStoreCore/Model/AppPermission.swift | 37 ++++++++++++++---- .../Types/ALTAppPermission.swift | 22 +++++++++-- .../Contents.json | 0 .../Group 23_120.png | Bin .../Group 23_180.png | Bin .../Sources/SideWidget/Resources/Info.plist | 5 +++ 13 files changed, 90 insertions(+), 17 deletions(-) create mode 100644 SideStoreApp/Sources/SideStore/AppDelegate+BackgroundFetch.swift rename SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/{AltStore.imageset => SideStore.imageset}/Contents.json (100%) rename SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/{AltStore.imageset => SideStore.imageset}/Group 23_120.png (100%) rename SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/{AltStore.imageset => SideStore.imageset}/Group 23_180.png (100%) diff --git a/SideStore.xcodeproj/project.pbxproj b/SideStore.xcodeproj/project.pbxproj index 009d9907..0f02677a 100644 --- a/SideStore.xcodeproj/project.pbxproj +++ b/SideStore.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 53; + objectVersion = 55; objects = { /* Begin PBXBuildFile section */ @@ -29,6 +29,8 @@ B34AFC1329B032DF000F318E /* WidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B34AFC0B29B032DF000F318E /* WidgetView.swift */; }; B34AFC1429B032DF000F318E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B34AFC0D29B032DF000F318E /* Assets.xcassets */; }; B34AFC1629B032DF000F318E /* SideWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = B34AFC1029B032DF000F318E /* SideWidget.swift */; }; + B34BA8E629B0FE8D0055A710 /* AppDelegate+BackgroundFetch.swift in Sources */ = {isa = PBXBuildFile; fileRef = B34BA8E529B0FE8D0055A710 /* AppDelegate+BackgroundFetch.swift */; }; + B34BA8EC29B332FF0055A710 /* SideStoreAppKit in Frameworks */ = {isa = PBXBuildFile; productRef = B34BA8EB29B332FF0055A710 /* SideStoreAppKit */; }; B3C40F5229B05B4200C93D50 /* SideWidget in Frameworks */ = {isa = PBXBuildFile; productRef = B3C40F5129B05B4200C93D50 /* SideWidget */; }; B3C40F5329B06A0000C93D50 /* PatchApp.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B34AFBD929B0324C000F318E /* PatchApp.storyboard */; }; B3C40F5429B06A2B00C93D50 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B34AFBE629B0324C000F318E /* LaunchScreen.storyboard */; }; @@ -88,6 +90,7 @@ B34AFC1029B032DF000F318E /* SideWidget.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SideWidget.swift; sourceTree = ""; }; B34AFC1929B04EBB000F318E /* Dangerfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dangerfile.swift; sourceTree = ""; }; B34AFC1A29B04EBB000F318E /* Project.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Project.swift; sourceTree = ""; }; + B34BA8E529B0FE8D0055A710 /* AppDelegate+BackgroundFetch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+BackgroundFetch.swift"; sourceTree = ""; }; B39575F4284F29E20080B4FF /* Roxas.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Roxas.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B3C39606284F4C8400DA9E2F /* CodeSigning.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeSigning.xcconfig; sourceTree = ""; }; B3C39607284F4C8400DA9E2F /* Build.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Build.xcconfig; sourceTree = ""; }; @@ -113,6 +116,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + B34BA8EC29B332FF0055A710 /* SideStoreAppKit in Frameworks */, B3C40F5229B05B4200C93D50 /* SideWidget in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -134,6 +138,7 @@ children = ( B34AFBD729B0324C000F318E /* Resources */, B34AFBF529B0324C000F318E /* AppDelegate.swift */, + B34BA8E529B0FE8D0055A710 /* AppDelegate+BackgroundFetch.swift */, B34AFBF629B0324C000F318E /* LaunchViewController.swift */, B34AFBF729B0324C000F318E /* SceneDelegate.swift */, ); @@ -315,6 +320,7 @@ name = SideWidgetExtension; packageProductDependencies = ( B3C40F5129B05B4200C93D50 /* SideWidget */, + B34BA8EB29B332FF0055A710 /* SideStoreAppKit */, ); productName = AltWidgetExtension; productReference = BF989167250AABF3002ACF50 /* SideWidgetExtension.appex */; @@ -371,7 +377,7 @@ }; }; buildConfigurationList = BFD247652284B9A500981D42 /* Build configuration list for PBXProject "SideStore" */; - compatibilityVersion = "Xcode 9.3"; + compatibilityVersion = "Xcode 13.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -445,6 +451,7 @@ B34AFBFA29B03251000F318E /* AppDelegate.swift in Sources */, B34AFBF829B03251000F318E /* LaunchViewController.swift in Sources */, B34AFBF929B03251000F318E /* SceneDelegate.swift in Sources */, + B34BA8E629B0FE8D0055A710 /* AppDelegate+BackgroundFetch.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -674,7 +681,7 @@ CODE_SIGN_ENTITLEMENTS = SideStoreApp/Sources/SideStore/Resources/SideStore.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; + DEVELOPMENT_TEAM = S32Z3HMYVQ; ENABLE_BITCODE = NO; INFOPLIST_FILE = SideStoreApp/Sources/SideStore/Resources/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; @@ -702,7 +709,7 @@ CODE_SIGN_ENTITLEMENTS = SideStoreApp/Sources/SideStore/Resources/SideStore.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = "$(DEVELOPMENT_TEAM)"; + DEVELOPMENT_TEAM = S32Z3HMYVQ; ENABLE_BITCODE = NO; INFOPLIST_FILE = SideStoreApp/Sources/SideStore/Resources/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 14.0; @@ -757,6 +764,10 @@ isa = XCSwiftPackageProductDependency; productName = SideStoreAppKit; }; + B34BA8EB29B332FF0055A710 /* SideStoreAppKit */ = { + isa = XCSwiftPackageProductDependency; + productName = SideStoreAppKit; + }; B3C40F5129B05B4200C93D50 /* SideWidget */ = { isa = XCSwiftPackageProductDependency; productName = SideWidget; diff --git a/SideStoreApp/Package.swift b/SideStoreApp/Package.swift index e73621ed..202e4c9a 100644 --- a/SideStoreApp/Package.swift +++ b/SideStoreApp/Package.swift @@ -291,6 +291,7 @@ let package = Package( .target( name: "SideWidget", dependencies: [ + "SideStoreAppKit", "Shared", "SideStoreCore", "AltSign", diff --git a/SideStoreApp/Sources/SideStore/AppDelegate+BackgroundFetch.swift b/SideStoreApp/Sources/SideStore/AppDelegate+BackgroundFetch.swift new file mode 100644 index 00000000..578224e2 --- /dev/null +++ b/SideStoreApp/Sources/SideStore/AppDelegate+BackgroundFetch.swift @@ -0,0 +1,9 @@ +// +// AppDelegate+BackgroundFetch.swift +// SideStore +// +// Created by Joseph Mattiello on 3/2/23. +// Copyright © 2023 SideStore. All rights reserved. +// + +import Foundation diff --git a/SideStoreApp/Sources/SideStore/AppDelegate.swift b/SideStoreApp/Sources/SideStore/AppDelegate.swift index fbcb92ab..c0991758 100644 --- a/SideStoreApp/Sources/SideStore/AppDelegate.swift +++ b/SideStoreApp/Sources/SideStore/AppDelegate.swift @@ -10,13 +10,13 @@ import AVFoundation import Intents import UIKit import UserNotifications +import os.log import AltSign import SideStoreCore import SideStoreAppKit import EmotionalDamage import RoxasUIKit -import os.log @UIApplicationMain final class AppDelegate: SideStoreAppDelegate { @@ -53,6 +53,8 @@ final class AppDelegate: SideStoreAppDelegate { os_log("Failed to start DatabaseManager. Error: %@", type: .error , error.localizedDescription) } else { os_log("Started DatabaseManager.", type: .info) + let transformer = ALTAppPermissionTypeTransformer() + ValueTransformer.setValueTransformer(transformer, forName: NSValueTransformerName(rawValue: "ALTAppPermissionTypeTransformer")) } } diff --git a/SideStoreApp/Sources/SideStore/Resources/SideStore.entitlements b/SideStoreApp/Sources/SideStore/Resources/SideStore.entitlements index 2a941d95..34601f90 100644 --- a/SideStoreApp/Sources/SideStore/Resources/SideStore.entitlements +++ b/SideStoreApp/Sources/SideStore/Resources/SideStore.entitlements @@ -4,6 +4,8 @@ aps-environment development + com.apple.developer.kernel.increased-memory-limit + com.apple.developer.siri com.apple.security.application-groups diff --git a/SideStoreApp/Sources/SideStore/Resources/tempEnt.plist b/SideStoreApp/Sources/SideStore/Resources/tempEnt.plist index a7b3b7dc..f7ee88c2 100644 --- a/SideStoreApp/Sources/SideStore/Resources/tempEnt.plist +++ b/SideStoreApp/Sources/SideStore/Resources/tempEnt.plist @@ -3,16 +3,18 @@ application-identifier - A72ZC8AJ5X.com.SideStore.SideStore + S32Z3HMYVQ.com.SideStore.SideStore aps-environment development com.apple.developer.siri + com.apple.developer.kernel.increased-memory-limit + com.apple.developer.team-identifier A72ZC8AJ5X com.apple.security.application-groups - group.com.SideStore.SideStore + group.$(APP_GROUP_IDENTIFIER) get-task-allow diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/NavigationBar.swift b/SideStoreApp/Sources/SideStoreAppKit/Components/NavigationBar.swift index a390655a..871664db 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Components/NavigationBar.swift +++ b/SideStoreApp/Sources/SideStoreAppKit/Components/NavigationBar.swift @@ -10,7 +10,9 @@ import UIKit import RoxasUIKit +@objc final class NavigationBar: UINavigationBar { + @objc @IBInspectable var automaticallyAdjustsItemPositions: Bool = true private let backgroundColorView = UIView() diff --git a/SideStoreApp/Sources/SideStoreCore/Model/AppPermission.swift b/SideStoreApp/Sources/SideStoreCore/Model/AppPermission.swift index eb5cbc67..ff5fffe1 100644 --- a/SideStoreApp/Sources/SideStoreCore/Model/AppPermission.swift +++ b/SideStoreApp/Sources/SideStoreCore/Model/AppPermission.swift @@ -68,9 +68,30 @@ public extension ALTAppPermissionType { } @objc(AppPermission) -public class AppPermission: NSManagedObject, Decodable, Fetchable { +public class AppPermission: NSManagedObject, Decodable, Fetchable, NSKeyValueObservingCustomization { + public static func keyPathsAffectingValue(for key: AnyKeyPath) -> Set { + print("keyPathsAffectingValue: \(String(describing: key))") + return Set([key]) + } + + public static func automaticallyNotifiesObservers(for key: AnyKeyPath) -> Bool { + print("automaticallyNotifiesObservers: \(String(describing: key))") + return true + } + /* Properties */ - @NSManaged public var type: ALTAppPermissionType + @objc(type) + @NSManaged public var _type: String + @nonobjc + public var type: ALTAppPermissionType { + get { + ALTAppPermissionType(rawValue: _type) + } + set { + _type = newValue.stringValue + } + } + @NSManaged public var usageDescription: String /* Relationships */ @@ -95,11 +116,13 @@ public class AppPermission: NSManagedObject, Decodable, Fetchable { usageDescription = try container.decode(String.self, forKey: .usageDescription) let rawType = try container.decode(String.self, forKey: .type) - guard let type = ALTAppPermissionType(rawValue: rawType) else { - throw DecodingError.dataCorrupted( - DecodingError.Context(codingPath: [CodingKeys.type], - debugDescription: "Invalid value for `ALTAppPermissionType` \"\(rawType)\"")) - } +// guard + let type = ALTAppPermissionType(rawValue: rawType) +// else { +// throw DecodingError.dataCorrupted( +// DecodingError.Context(codingPath: [CodingKeys.type], +// debugDescription: "Invalid value for `ALTAppPermissionType` \"\(rawType)\"")) +// } self.type = type } catch { if let context = managedObjectContext { diff --git a/SideStoreApp/Sources/SideStoreCore/Types/ALTAppPermission.swift b/SideStoreApp/Sources/SideStoreCore/Types/ALTAppPermission.swift index fa39f1b3..4f2b0f85 100644 --- a/SideStoreApp/Sources/SideStoreCore/Types/ALTAppPermission.swift +++ b/SideStoreApp/Sources/SideStoreCore/Types/ALTAppPermission.swift @@ -27,8 +27,9 @@ public enum ALTAppPermissionType: Int, CaseIterable { case faceID case siri case motion + case null - public init?(rawValue: String) { + public init(rawValue: String) { switch rawValue { case "photos": self = .photos case "camera": self = .camera @@ -47,7 +48,7 @@ public enum ALTAppPermissionType: Int, CaseIterable { case "faceID", "faceid": self = .faceID case "siri": self = .siri case "motion": self = .motion - default: return nil + default: self = .null } } @@ -87,6 +88,21 @@ public enum ALTAppPermissionType: Int, CaseIterable { return "siri" case .motion: return "motion" - } + case .null: + return "" + } } } + +@objc +public final class ALTAppPermissionTypeTransformer: ValueTransformer { + public override func transformedValue(_ value: Any?) -> Any? { + guard let enumValue = value as? ALTAppPermissionType else { return "" } + return enumValue.rawValue + } + + public override func reverseTransformedValue(_ value: Any?) -> Any? { + guard let rawValue = value as? String else { return ALTAppPermissionType.null } + return ALTAppPermissionType(rawValue: rawValue) + } +} diff --git a/SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/AltStore.imageset/Contents.json b/SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/SideStore.imageset/Contents.json similarity index 100% rename from SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/AltStore.imageset/Contents.json rename to SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/SideStore.imageset/Contents.json diff --git a/SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/AltStore.imageset/Group 23_120.png b/SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/SideStore.imageset/Group 23_120.png similarity index 100% rename from SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/AltStore.imageset/Group 23_120.png rename to SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/SideStore.imageset/Group 23_120.png diff --git a/SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/AltStore.imageset/Group 23_180.png b/SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/SideStore.imageset/Group 23_180.png similarity index 100% rename from SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/AltStore.imageset/Group 23_180.png rename to SideStoreApp/Sources/SideWidget/Resources/Assets.xcassets/SideStore.imageset/Group 23_180.png diff --git a/SideStoreApp/Sources/SideWidget/Resources/Info.plist b/SideStoreApp/Sources/SideWidget/Resources/Info.plist index 39acef97..7078498c 100644 --- a/SideStoreApp/Sources/SideWidget/Resources/Info.plist +++ b/SideStoreApp/Sources/SideWidget/Resources/Info.plist @@ -23,6 +23,11 @@ $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString $(MARKETING_VERSION) + INIntentsSupported + + RefreshAllIntent + ViewAppIntent + CFBundleVersion 1 NSExtension