Fix enum to objc core data for app permission

This commit is contained in:
Joe Mattiello
2023-03-04 04:00:00 -05:00
parent 452cf89c95
commit 1f2693bea6
13 changed files with 90 additions and 17 deletions

View File

@@ -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 = "<group>"; };
B34AFC1929B04EBB000F318E /* Dangerfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dangerfile.swift; sourceTree = "<group>"; };
B34AFC1A29B04EBB000F318E /* Project.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Project.swift; sourceTree = "<group>"; };
B34BA8E529B0FE8D0055A710 /* AppDelegate+BackgroundFetch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+BackgroundFetch.swift"; sourceTree = "<group>"; };
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 = "<group>"; };
B3C39607284F4C8400DA9E2F /* Build.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Build.xcconfig; sourceTree = "<group>"; };
@@ -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;

View File

@@ -291,6 +291,7 @@ let package = Package(
.target(
name: "SideWidget",
dependencies: [
"SideStoreAppKit",
"Shared",
"SideStoreCore",
"AltSign",

View File

@@ -0,0 +1,9 @@
//
// AppDelegate+BackgroundFetch.swift
// SideStore
//
// Created by Joseph Mattiello on 3/2/23.
// Copyright © 2023 SideStore. All rights reserved.
//
import Foundation

View File

@@ -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"))
}
}

View File

@@ -4,6 +4,8 @@
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.kernel.increased-memory-limit</key>
<true/>
<key>com.apple.developer.siri</key>
<true/>
<key>com.apple.security.application-groups</key>

View File

@@ -3,16 +3,18 @@
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>A72ZC8AJ5X.com.SideStore.SideStore</string>
<string>S32Z3HMYVQ.com.SideStore.SideStore</string>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.siri</key>
<true/>
<key>com.apple.developer.kernel.increased-memory-limit</key>
<true/>
<key>com.apple.developer.team-identifier</key>
<string>A72ZC8AJ5X</string>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.SideStore.SideStore</string>
<string>group.$(APP_GROUP_IDENTIFIER)</string>
</array>
<key>get-task-allow</key>
<true/>

View File

@@ -10,7 +10,9 @@ import UIKit
import RoxasUIKit
@objc
final class NavigationBar: UINavigationBar {
@objc
@IBInspectable var automaticallyAdjustsItemPositions: Bool = true
private let backgroundColorView = UIView()

View File

@@ -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<AnyKeyPath> {
print("keyPathsAffectingValue: \(String(describing: key))")
return Set<AnyKeyPath>([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 {

View File

@@ -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)
}
}

View File

@@ -23,6 +23,11 @@
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>INIntentsSupported</key>
<array>
<string>RefreshAllIntent</string>
<string>ViewAppIntent</string>
</array>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSExtension</key>