From 85024fca950ec366a95e9140ba725d5f873a074d Mon Sep 17 00:00:00 2001 From: Fouad Raheb Date: Tue, 30 Mar 2021 14:45:54 +0300 Subject: [PATCH 1/3] Release 1.3.5 - Added Preferences Bundle, Appearance Settings --- AppData.xcodeproj/project.pbxproj | 567 +++++++++++++++--- .../xcschemes/AppDataPrefs.xcscheme | 67 +++ AppData/AppData-Prefix.pch | 1 + AppData/AppData.mm | 42 +- AppData/AppData.xm | 34 +- .../Classes/Controller/ADDataViewController.m | 30 +- .../Controller/Cells/ADActionsBarView.m | 22 +- .../Cells/ADExpandableSectionHeaderView.m | 11 +- .../Cells/ADTitleSectionHeaderView.h | 5 +- .../Cells/ADTitleSectionHeaderView.m | 48 +- .../Controller/DataSource/ADMainDataSource.h | 2 - .../Controller/DataSource/ADMainDataSource.m | 81 +-- .../Controller/DataSource/ADMoreDataSource.m | 5 +- AppData/Classes/Helpers/ADAppearance.h | 39 ++ AppData/Classes/Helpers/ADAppearance.m | 126 ++++ AppData/Classes/Helpers/ADHelper.h | 16 +- AppData/Classes/Helpers/ADHelper.m | 56 +- AppData/Classes/Helpers/ADSettings.h | 48 ++ AppData/Classes/Helpers/ADSettings.m | 133 ++++ AppData/Classes/Model/ADAppData.m | 4 +- AppData/Classes/{Helpers => Tools}/ADTCC.h | 0 AppData/Classes/{Helpers => Tools}/ADTCC.m | 0 .../Classes/{Helpers => Tools}/ADTerminator.h | 0 .../Classes/{Helpers => Tools}/ADTerminator.m | 0 AppData/Package/DEBIAN/control | 6 +- .../Resources.bundle/AppDataIcon@3x.png | Bin 1950 -> 2373 bytes .../Resources.bundle/AppDataIconWhite@2x.png | Bin 1911 -> 2271 bytes .../Resources.bundle/AppDataIconWhite@3x.png | Bin 1942 -> 2307 bytes .../Resources.bundle/ChevronLeft@2x.png | Bin 0 -> 712 bytes .../Resources.bundle/ChevronLeft@3x.png | Bin 0 -> 975 bytes .../Resources.bundle/ChevronRight@2x.png | Bin 0 -> 732 bytes .../Resources.bundle/ChevronRight@3x.png | Bin 0 -> 989 bytes .../AppDataPrefs.bundle/AppData@2x.png | Bin 0 -> 1025 bytes .../AppDataPrefs.bundle/AppData@3x.png | Bin 0 -> 1197 bytes .../AppDataPrefs.bundle/AppDataPrefs | Bin 0 -> 232720 bytes .../AppDataPrefs.bundle/Info.plist | Bin 0 -> 815 bytes .../Preferences/AppData.plist | 84 --- .../Preferences/AppData@2x.png | Bin 30466 -> 0 bytes .../Preferences/AppData@3x.png | Bin 3067 -> 0 bytes .../Preferences/AppDataPrefs.plist | 19 + AppDataPrefs/ADPreferencesController.h | 16 + AppDataPrefs/ADPreferencesController.m | 185 ++++++ AppDataPrefs/Classes/ADPrefsHelper.h | 18 + AppDataPrefs/Classes/ADPrefsHelper.m | 34 ++ .../Classes/Cells/ADHeaderTableViewCell.h | 17 + .../Classes/Cells/ADHeaderTableViewCell.m | 73 +++ .../Classes/Cells/ADSwitchTableViewCell.h | 17 + .../Classes/Cells/ADSwitchTableViewCell.m | 58 ++ .../ADSelectListTableViewController.h | 18 + .../ADSelectListTableViewController.m | 73 +++ AppDataPrefs/Info.plist | 24 + AppDataPrefs/Resources/AppData@2x.png | Bin 0 -> 3200 bytes AppDataPrefs/Resources/AppData@3x.png | Bin 0 -> 3153 bytes PackageInfo/changelog.json | 9 + 54 files changed, 1606 insertions(+), 382 deletions(-) create mode 100644 AppData.xcodeproj/xcshareddata/xcschemes/AppDataPrefs.xcscheme create mode 100644 AppData/Classes/Helpers/ADAppearance.h create mode 100644 AppData/Classes/Helpers/ADAppearance.m create mode 100644 AppData/Classes/Helpers/ADSettings.h create mode 100644 AppData/Classes/Helpers/ADSettings.m rename AppData/Classes/{Helpers => Tools}/ADTCC.h (100%) rename AppData/Classes/{Helpers => Tools}/ADTCC.m (100%) rename AppData/Classes/{Helpers => Tools}/ADTerminator.h (100%) rename AppData/Classes/{Helpers => Tools}/ADTerminator.m (100%) create mode 100644 AppData/Package/Library/Application Support/AppData/Resources.bundle/ChevronLeft@2x.png create mode 100644 AppData/Package/Library/Application Support/AppData/Resources.bundle/ChevronLeft@3x.png create mode 100644 AppData/Package/Library/Application Support/AppData/Resources.bundle/ChevronRight@2x.png create mode 100644 AppData/Package/Library/Application Support/AppData/Resources.bundle/ChevronRight@3x.png create mode 100644 AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/AppData@2x.png create mode 100644 AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/AppData@3x.png create mode 100755 AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/AppDataPrefs create mode 100644 AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/Info.plist delete mode 100755 AppData/Package/Library/PreferenceLoader/Preferences/AppData.plist delete mode 100644 AppData/Package/Library/PreferenceLoader/Preferences/AppData@2x.png delete mode 100644 AppData/Package/Library/PreferenceLoader/Preferences/AppData@3x.png create mode 100644 AppData/Package/Library/PreferenceLoader/Preferences/AppDataPrefs.plist create mode 100644 AppDataPrefs/ADPreferencesController.h create mode 100644 AppDataPrefs/ADPreferencesController.m create mode 100644 AppDataPrefs/Classes/ADPrefsHelper.h create mode 100644 AppDataPrefs/Classes/ADPrefsHelper.m create mode 100644 AppDataPrefs/Classes/Cells/ADHeaderTableViewCell.h create mode 100644 AppDataPrefs/Classes/Cells/ADHeaderTableViewCell.m create mode 100644 AppDataPrefs/Classes/Cells/ADSwitchTableViewCell.h create mode 100644 AppDataPrefs/Classes/Cells/ADSwitchTableViewCell.m create mode 100644 AppDataPrefs/Classes/Controllers/ADSelectListTableViewController.h create mode 100644 AppDataPrefs/Classes/Controllers/ADSelectListTableViewController.m create mode 100644 AppDataPrefs/Info.plist create mode 100644 AppDataPrefs/Resources/AppData@2x.png create mode 100644 AppDataPrefs/Resources/AppData@3x.png diff --git a/AppData.xcodeproj/project.pbxproj b/AppData.xcodeproj/project.pbxproj index 4d20f4c..1afc697 100644 --- a/AppData.xcodeproj/project.pbxproj +++ b/AppData.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -38,6 +38,19 @@ A4BB5DD024A9E184004A3132 /* ADDataPresentationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A4BB5DCE24A9E184004A3132 /* ADDataPresentationManager.m */; }; A4BB5DD324A9E1D1004A3132 /* ADDataViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A4BB5DD124A9E1D1004A3132 /* ADDataViewController.h */; }; A4BB5DD424A9E1D1004A3132 /* ADDataViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A4BB5DD224A9E1D1004A3132 /* ADDataViewController.m */; }; + A4C5FD54261233B1005FD2D8 /* ADPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD53261233B0005FD2D8 /* ADPreferencesController.m */; }; + A4C5FD5726123481005FD2D8 /* ADSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = A4C5FD5526123481005FD2D8 /* ADSettings.h */; }; + A4C5FD5826123481005FD2D8 /* ADSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD5626123481005FD2D8 /* ADSettings.m */; }; + A4C5FD5926123483005FD2D8 /* ADSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD5626123481005FD2D8 /* ADSettings.m */; }; + A4C5FD702612376F005FD2D8 /* ADSelectListTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD632612376E005FD2D8 /* ADSelectListTableViewController.m */; }; + A4C5FD722612376F005FD2D8 /* ADHeaderTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD692612376F005FD2D8 /* ADHeaderTableViewCell.m */; }; + A4C5FD742612376F005FD2D8 /* ADPrefsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD6B2612376F005FD2D8 /* ADPrefsHelper.m */; }; + A4C5FD7D26123D40005FD2D8 /* ADSwitchTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD7B26123D40005FD2D8 /* ADSwitchTableViewCell.m */; }; + A4C5FD7F26124090005FD2D8 /* Preferences.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4C5FD7E26124090005FD2D8 /* Preferences.framework */; platformFilter = ios; }; + A4C5FD8A26125556005FD2D8 /* ADAppearance.h in Headers */ = {isa = PBXBuildFile; fileRef = A4C5FD8826125556005FD2D8 /* ADAppearance.h */; }; + A4C5FD8B26125556005FD2D8 /* ADAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD8926125556005FD2D8 /* ADAppearance.m */; }; + A4C5FD8E26131EC4005FD2D8 /* AppData@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A4C5FD8C26131EC4005FD2D8 /* AppData@2x.png */; }; + A4C5FD8F26131EC4005FD2D8 /* AppData@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = A4C5FD8D26131EC4005FD2D8 /* AppData@3x.png */; }; A4E969D62578EC8600D8043A /* ADTCC.m in Sources */ = {isa = PBXBuildFile; fileRef = A4E969D22578EC8600D8043A /* ADTCC.m */; }; A4E969D72578EC8600D8043A /* ADTCC.h in Headers */ = {isa = PBXBuildFile; fileRef = A4E969D32578EC8600D8043A /* ADTCC.h */; }; A4E969D82578EC8600D8043A /* ADTerminator.m in Sources */ = {isa = PBXBuildFile; fileRef = A4E969D42578EC8600D8043A /* ADTerminator.m */; }; @@ -47,15 +60,19 @@ A4E96A112579410200D8043A /* ADActionsBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = A4E96A0F2579410200D8043A /* ADActionsBarView.m */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + A4C5FD862612419B005FD2D8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A4BB5D7B24A86EEA004A3132 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A4C5FD46261231D4005FD2D8; + remoteInfo = AppDataPrefs; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ A4277BCA24AA38DF003AFD4D /* ADHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ADHelper.h; sourceTree = ""; }; A4277BCB24AA38DF003AFD4D /* ADHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ADHelper.m; sourceTree = ""; }; - A4277C1224AC79B8003AFD4D /* Resources.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Resources.bundle; sourceTree = ""; }; - A4277C1524AC79B8003AFD4D /* AppData.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = AppData.dylib; sourceTree = ""; }; - A4277C1624AC79B8003AFD4D /* AppData.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = AppData.plist; sourceTree = ""; }; - A4277C1924AC79B8003AFD4D /* AppData@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AppData@3x.png"; sourceTree = ""; }; - A4277C1A24AC79B8003AFD4D /* AppData@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AppData@2x.png"; sourceTree = ""; }; - A4277C1B24AC79B8003AFD4D /* AppData.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = AppData.plist; sourceTree = ""; }; A4277C2024ACB50C003AFD4D /* AppData-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AppData-Prefix.pch"; sourceTree = ""; }; A4277C2124ACB50C003AFD4D /* Headers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Headers.h; sourceTree = ""; }; A4277C2424ACB51B003AFD4D /* PackageInfo */ = {isa = PBXFileReference; lastKnownFileType = text; path = PackageInfo; sourceTree = SOURCE_ROOT; }; @@ -75,7 +92,6 @@ A4BB5D8824A86EEA004A3132 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; A4BB5D8A24A86EEA004A3132 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; A4BB5D8C24A86EEA004A3132 /* CydiaSubstrate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CydiaSubstrate.framework; path = Library/Frameworks/CydiaSubstrate.framework; sourceTree = DEVELOPER_DIR; }; - A4BB5D9124A86EEA004A3132 /* control */ = {isa = PBXFileReference; lastKnownFileType = text; path = control; sourceTree = ""; }; A4BB5D9424A86EEA004A3132 /* AppData.xm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; path = AppData.xm; sourceTree = ""; }; A4BB5D9524A86EEA004A3132 /* AppData.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AppData.mm; sourceTree = ""; }; A4BB5DB124A8C12C004A3132 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; @@ -91,6 +107,26 @@ A4BB5DCE24A9E184004A3132 /* ADDataPresentationManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ADDataPresentationManager.m; sourceTree = ""; }; A4BB5DD124A9E1D1004A3132 /* ADDataViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ADDataViewController.h; sourceTree = ""; }; A4BB5DD224A9E1D1004A3132 /* ADDataViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ADDataViewController.m; sourceTree = ""; }; + A4C5FD47261231D4005FD2D8 /* AppDataPrefs.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AppDataPrefs.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + A4C5FD49261231D4005FD2D8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A4C5FD52261233B0005FD2D8 /* ADPreferencesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADPreferencesController.h; sourceTree = ""; }; + A4C5FD53261233B0005FD2D8 /* ADPreferencesController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADPreferencesController.m; sourceTree = ""; }; + A4C5FD5526123481005FD2D8 /* ADSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADSettings.h; sourceTree = ""; }; + A4C5FD5626123481005FD2D8 /* ADSettings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADSettings.m; sourceTree = ""; }; + A4C5FD5E2612376E005FD2D8 /* ADSelectListTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADSelectListTableViewController.h; sourceTree = ""; }; + A4C5FD632612376E005FD2D8 /* ADSelectListTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADSelectListTableViewController.m; sourceTree = ""; }; + A4C5FD662612376F005FD2D8 /* ADHeaderTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADHeaderTableViewCell.h; sourceTree = ""; }; + A4C5FD692612376F005FD2D8 /* ADHeaderTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADHeaderTableViewCell.m; sourceTree = ""; }; + A4C5FD6B2612376F005FD2D8 /* ADPrefsHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADPrefsHelper.m; sourceTree = ""; }; + A4C5FD6C2612376F005FD2D8 /* ADPrefsHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADPrefsHelper.h; sourceTree = ""; }; + A4C5FD7926123916005FD2D8 /* Package */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Package; sourceTree = ""; }; + A4C5FD7B26123D40005FD2D8 /* ADSwitchTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADSwitchTableViewCell.m; sourceTree = ""; }; + A4C5FD7C26123D40005FD2D8 /* ADSwitchTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADSwitchTableViewCell.h; sourceTree = ""; }; + A4C5FD7E26124090005FD2D8 /* Preferences.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Preferences.framework; path = ../theos/vendor/lib/Preferences.framework; sourceTree = ""; }; + A4C5FD8826125556005FD2D8 /* ADAppearance.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ADAppearance.h; sourceTree = ""; }; + A4C5FD8926125556005FD2D8 /* ADAppearance.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ADAppearance.m; sourceTree = ""; }; + A4C5FD8C26131EC4005FD2D8 /* AppData@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AppData@2x.png"; sourceTree = ""; }; + A4C5FD8D26131EC4005FD2D8 /* AppData@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AppData@3x.png"; sourceTree = ""; }; A4E969D22578EC8600D8043A /* ADTCC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADTCC.m; sourceTree = ""; }; A4E969D32578EC8600D8043A /* ADTCC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ADTCC.h; sourceTree = ""; }; A4E969D42578EC8600D8043A /* ADTerminator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ADTerminator.m; sourceTree = ""; }; @@ -115,87 +151,34 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A4C5FD44261231D4005FD2D8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A4C5FD7F26124090005FD2D8 /* Preferences.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ A4277BC924AA38C6003AFD4D /* Helpers */ = { isa = PBXGroup; children = ( + A4C5FD5526123481005FD2D8 /* ADSettings.h */, + A4C5FD5626123481005FD2D8 /* ADSettings.m */, A4277BCA24AA38DF003AFD4D /* ADHelper.h */, A4277BCB24AA38DF003AFD4D /* ADHelper.m */, - A4E969D32578EC8600D8043A /* ADTCC.h */, - A4E969D22578EC8600D8043A /* ADTCC.m */, - A4E969D52578EC8600D8043A /* ADTerminator.h */, - A4E969D42578EC8600D8043A /* ADTerminator.m */, + A4C5FD8826125556005FD2D8 /* ADAppearance.h */, + A4C5FD8926125556005FD2D8 /* ADAppearance.m */, ); path = Helpers; sourceTree = ""; }; - A4277C0F24AC79B8003AFD4D /* Library */ = { - isa = PBXGroup; - children = ( - A4277C1024AC79B8003AFD4D /* Application Support */, - A4277C1324AC79B8003AFD4D /* MobileSubstrate */, - A4277C1724AC79B8003AFD4D /* PreferenceLoader */, - ); - path = Library; - sourceTree = ""; - }; - A4277C1024AC79B8003AFD4D /* Application Support */ = { - isa = PBXGroup; - children = ( - A4277C1124AC79B8003AFD4D /* AppData */, - ); - path = "Application Support"; - sourceTree = ""; - }; - A4277C1124AC79B8003AFD4D /* AppData */ = { - isa = PBXGroup; - children = ( - A4277C1224AC79B8003AFD4D /* Resources.bundle */, - ); - path = AppData; - sourceTree = ""; - }; - A4277C1324AC79B8003AFD4D /* MobileSubstrate */ = { - isa = PBXGroup; - children = ( - A4277C1424AC79B8003AFD4D /* DynamicLibraries */, - ); - path = MobileSubstrate; - sourceTree = ""; - }; - A4277C1424AC79B8003AFD4D /* DynamicLibraries */ = { - isa = PBXGroup; - children = ( - A4277C1524AC79B8003AFD4D /* AppData.dylib */, - A4277C1624AC79B8003AFD4D /* AppData.plist */, - ); - path = DynamicLibraries; - sourceTree = ""; - }; - A4277C1724AC79B8003AFD4D /* PreferenceLoader */ = { - isa = PBXGroup; - children = ( - A4277C1824AC79B8003AFD4D /* Preferences */, - ); - path = PreferenceLoader; - sourceTree = ""; - }; - A4277C1824AC79B8003AFD4D /* Preferences */ = { - isa = PBXGroup; - children = ( - A4277C1924AC79B8003AFD4D /* AppData@3x.png */, - A4277C1A24AC79B8003AFD4D /* AppData@2x.png */, - A4277C1B24AC79B8003AFD4D /* AppData.plist */, - ); - path = Preferences; - sourceTree = ""; - }; A4277C1C24ACB4E2003AFD4D /* Supporting Files */ = { isa = PBXGroup; children = ( - A4BB5D8F24A86EEA004A3132 /* Package */, + A4C5FD7926123916005FD2D8 /* Package */, A4277C2424ACB51B003AFD4D /* PackageInfo */, A4277C2024ACB50C003AFD4D /* AppData-Prefix.pch */, A4277C2124ACB50C003AFD4D /* Headers.h */, @@ -249,6 +232,7 @@ isa = PBXGroup; children = ( A4BB5D8E24A86EEA004A3132 /* AppData */, + A4C5FD48261231D4005FD2D8 /* AppDataPrefs */, A4BB5D8724A86EEA004A3132 /* Frameworks */, A4BB5D8624A86EEA004A3132 /* Products */, ); @@ -258,6 +242,7 @@ isa = PBXGroup; children = ( A4BB5D8524A86EEA004A3132 /* AppData.dylib */, + A4C5FD47261231D4005FD2D8 /* AppDataPrefs.bundle */, ); name = Products; sourceTree = ""; @@ -265,6 +250,7 @@ A4BB5D8724A86EEA004A3132 /* Frameworks */ = { isa = PBXGroup; children = ( + A4C5FD7E26124090005FD2D8 /* Preferences.framework */, A4E969DA2578F44900D8043A /* CoreLocation.framework */, A4277C6124AD01DB003AFD4D /* QuartzCore.framework */, A4BB5DBD24A8CB16004A3132 /* CoreGraphics.framework */, @@ -289,27 +275,11 @@ path = AppData; sourceTree = ""; }; - A4BB5D8F24A86EEA004A3132 /* Package */ = { - isa = PBXGroup; - children = ( - A4277C0F24AC79B8003AFD4D /* Library */, - A4BB5D9024A86EEA004A3132 /* DEBIAN */, - ); - path = Package; - sourceTree = ""; - }; - A4BB5D9024A86EEA004A3132 /* DEBIAN */ = { - isa = PBXGroup; - children = ( - A4BB5D9124A86EEA004A3132 /* control */, - ); - path = DEBIAN; - sourceTree = ""; - }; A4BB5DA024A8734E004A3132 /* Classes */ = { isa = PBXGroup; children = ( A4277BC924AA38C6003AFD4D /* Helpers */, + A4C5FD5A261236A3005FD2D8 /* Tools */, A4BB5DD624A9FE65004A3132 /* Presentation */, A4BB5DD524A9FE58004A3132 /* Model */, A4BB5DC424A9DBB2004A3132 /* Controller */, @@ -350,6 +320,69 @@ path = Presentation; sourceTree = ""; }; + A4C5FD48261231D4005FD2D8 /* AppDataPrefs */ = { + isa = PBXGroup; + children = ( + A4C5FD52261233B0005FD2D8 /* ADPreferencesController.h */, + A4C5FD53261233B0005FD2D8 /* ADPreferencesController.m */, + A4C5FD502612339A005FD2D8 /* Classes */, + A4C5FD512612339A005FD2D8 /* Resources */, + A4C5FD49261231D4005FD2D8 /* Info.plist */, + ); + path = AppDataPrefs; + sourceTree = ""; + }; + A4C5FD502612339A005FD2D8 /* Classes */ = { + isa = PBXGroup; + children = ( + A4C5FD642612376E005FD2D8 /* Cells */, + A4C5FD5B2612376E005FD2D8 /* Controllers */, + A4C5FD6C2612376F005FD2D8 /* ADPrefsHelper.h */, + A4C5FD6B2612376F005FD2D8 /* ADPrefsHelper.m */, + ); + path = Classes; + sourceTree = ""; + }; + A4C5FD512612339A005FD2D8 /* Resources */ = { + isa = PBXGroup; + children = ( + A4C5FD8C26131EC4005FD2D8 /* AppData@2x.png */, + A4C5FD8D26131EC4005FD2D8 /* AppData@3x.png */, + ); + path = Resources; + sourceTree = ""; + }; + A4C5FD5A261236A3005FD2D8 /* Tools */ = { + isa = PBXGroup; + children = ( + A4E969D32578EC8600D8043A /* ADTCC.h */, + A4E969D22578EC8600D8043A /* ADTCC.m */, + A4E969D52578EC8600D8043A /* ADTerminator.h */, + A4E969D42578EC8600D8043A /* ADTerminator.m */, + ); + path = Tools; + sourceTree = ""; + }; + A4C5FD5B2612376E005FD2D8 /* Controllers */ = { + isa = PBXGroup; + children = ( + A4C5FD5E2612376E005FD2D8 /* ADSelectListTableViewController.h */, + A4C5FD632612376E005FD2D8 /* ADSelectListTableViewController.m */, + ); + path = Controllers; + sourceTree = ""; + }; + A4C5FD642612376E005FD2D8 /* Cells */ = { + isa = PBXGroup; + children = ( + A4C5FD7C26123D40005FD2D8 /* ADSwitchTableViewCell.h */, + A4C5FD7B26123D40005FD2D8 /* ADSwitchTableViewCell.m */, + A4C5FD662612376F005FD2D8 /* ADHeaderTableViewCell.h */, + A4C5FD692612376F005FD2D8 /* ADHeaderTableViewCell.m */, + ); + path = Cells; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -364,6 +397,7 @@ A4E969D92578EC8600D8043A /* ADTerminator.h in Headers */, A4E969D72578EC8600D8043A /* ADTCC.h in Headers */, A4277C2224ACB50C003AFD4D /* AppData-Prefix.pch in Headers */, + A4C5FD8A26125556005FD2D8 /* ADAppearance.h in Headers */, A4BB5DC724A9DBCD004A3132 /* ADDataPresentationAnimator.h in Headers */, A4BB5DCB24A9E157004A3132 /* ADDataPresentationController.h in Headers */, A4BB5DD324A9E1D1004A3132 /* ADDataViewController.h in Headers */, @@ -372,6 +406,7 @@ A429A01F24BEDAD8005F586C /* ADMainDataSource.h in Headers */, A4277BCC24AA38DF003AFD4D /* ADHelper.h in Headers */, A4E96A102579410200D8043A /* ADActionsBarView.h in Headers */, + A4C5FD5726123481005FD2D8 /* ADSettings.h in Headers */, A4277C2924ACB55F003AFD4D /* NRFileManager.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -387,18 +422,37 @@ A4BB5D8024A86EEA004A3132 /* Sources */, A4BB5D8124A86EEA004A3132 /* Frameworks */, A4BB5D8224A86EEA004A3132 /* Headers */, + A4C5FD4F261231F8005FD2D8 /* Copy Preferences Bundle */, A4BB5D8324A86EEA004A3132 /* ShellScript */, A4277BD324ABCD78003AFD4D /* Update to Repo */, ); buildRules = ( ); dependencies = ( + A4C5FD872612419B005FD2D8 /* PBXTargetDependency */, ); name = AppData; productName = AppData; productReference = A4BB5D8524A86EEA004A3132 /* AppData.dylib */; productType = "com.apple.product-type.library.dynamic"; }; + A4C5FD46261231D4005FD2D8 /* AppDataPrefs */ = { + isa = PBXNativeTarget; + buildConfigurationList = A4C5FD4E261231D4005FD2D8 /* Build configuration list for PBXNativeTarget "AppDataPrefs" */; + buildPhases = ( + A4C5FD43261231D4005FD2D8 /* Sources */, + A4C5FD44261231D4005FD2D8 /* Frameworks */, + A4C5FD45261231D4005FD2D8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AppDataPrefs; + productName = AppDataPrefs; + productReference = A4C5FD47261231D4005FD2D8 /* AppDataPrefs.bundle */; + productType = "com.apple.product-type.bundle"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -410,6 +464,9 @@ A4BB5D8424A86EEA004A3132 = { CreatedOnToolsVersion = 11.5; }; + A4C5FD46261231D4005FD2D8 = { + CreatedOnToolsVersion = 11.7; + }; }; }; buildConfigurationList = A4BB5D7E24A86EEA004A3132 /* Build configuration list for PBXProject "AppData" */; @@ -426,10 +483,23 @@ projectRoot = ""; targets = ( A4BB5D8424A86EEA004A3132 /* AppData */, + A4C5FD46261231D4005FD2D8 /* AppDataPrefs */, ); }; /* End PBXProject section */ +/* Begin PBXResourcesBuildPhase section */ + A4C5FD45261231D4005FD2D8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A4C5FD8E26131EC4005FD2D8 /* AppData@2x.png in Resources */, + A4C5FD8F26131EC4005FD2D8 /* AppData@3x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + /* Begin PBXShellScriptBuildPhase section */ A4277BD324ABCD78003AFD4D /* Update to Repo */ = { isa = PBXShellScriptBuildPhase; @@ -483,6 +553,24 @@ shellPath = /bin/sh; shellScript = "# Load MonkeyDevDeviceIP and MonkeyDevDevicePort\nsource ~/.bash_profile;\n\n/opt/MonkeyDev/bin/md --xcbp\n"; }; + A4C5FD4F261231F8005FD2D8 /* Copy Preferences Bundle */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Copy Preferences Bundle"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "BUNDLE_NAME=\"AppDataPrefs\"\nBUNDLE_PATH=\"$SRCROOT/LatestBuild/$BUNDLE_NAME.bundle\"\nPACKAGE_BUNDLE_DIR=\"$SRCROOT/$PROJECT_NAME/Package/Library/PreferenceBundles\"\n\nif [ -d \"$BUNDLE_PATH\" ]; then\n rsync -avhqz --delete \"$BUNDLE_PATH\" \"$PACKAGE_BUNDLE_DIR\"\n \n EXECUTABLE_PATH=\"$PACKAGE_BUNDLE_DIR/$BUNDLE_NAME.bundle/$BUNDLE_NAME\"\n if [ -f \"$EXECUTABLE_PATH\" ]; then\n echo \"Signing Excutable: $EXECUTABLE_PATH\"\n ldid -S \"$EXECUTABLE_PATH\"\n else\n echo \"warning: Not Signing - Executable not found at path: $BUNDLE_PATH\"\n fi \nelse\n echo \"warning: Bundle does not exist at path $BUNDLE_PATH\"\nfi\n\n"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -503,13 +591,36 @@ A4BB5DCC24A9E157004A3132 /* ADDataPresentationController.m in Sources */, A4277BCD24AA38DF003AFD4D /* ADHelper.m in Sources */, A4BB5DD024A9E184004A3132 /* ADDataPresentationManager.m in Sources */, + A4C5FD5826123481005FD2D8 /* ADSettings.m in Sources */, + A4C5FD8B26125556005FD2D8 /* ADAppearance.m in Sources */, A4BB5DBA24A8C41C004A3132 /* ADAppData.m in Sources */, A4BB5DC824A9DBCD004A3132 /* ADDataPresentationAnimator.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; + A4C5FD43261231D4005FD2D8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A4C5FD54261233B1005FD2D8 /* ADPreferencesController.m in Sources */, + A4C5FD702612376F005FD2D8 /* ADSelectListTableViewController.m in Sources */, + A4C5FD742612376F005FD2D8 /* ADPrefsHelper.m in Sources */, + A4C5FD7D26123D40005FD2D8 /* ADSwitchTableViewCell.m in Sources */, + A4C5FD722612376F005FD2D8 /* ADHeaderTableViewCell.m in Sources */, + A4C5FD5926123483005FD2D8 /* ADSettings.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + A4C5FD872612419B005FD2D8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A4C5FD46261231D4005FD2D8 /* AppDataPrefs */; + targetProxy = A4C5FD862612419B005FD2D8 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ A4277BD424ABD03F003AFD4D /* ReleaseRepo */ = { isa = XCBuildConfiguration; @@ -739,6 +850,269 @@ }; name = Debug; }; + A4C5FD4A261231D4005FD2D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + arm64e, + arm64, + ); + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = NO; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = GYQ6RCPJ93; + ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = AppDataPrefs/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.fouadraheb.AppDataPrefs; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; + SUPPORTS_MACCATALYST = NO; + VALID_ARCHS = "arm64e arm64"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + A4C5FD4B261231D4005FD2D8 /* ReleaseRepoInfo */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + arm64e, + arm64, + ); + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = NO; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = GYQ6RCPJ93; + ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = AppDataPrefs/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.fouadraheb.AppDataPrefs; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; + SUPPORTS_MACCATALYST = NO; + VALID_ARCHS = "arm64e arm64"; + WRAPPER_EXTENSION = bundle; + }; + name = ReleaseRepoInfo; + }; + A4C5FD4C261231D4005FD2D8 /* ReleaseRepo */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + arm64e, + arm64, + ); + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = NO; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = GYQ6RCPJ93; + ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = AppDataPrefs/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.fouadraheb.AppDataPrefs; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; + SUPPORTS_MACCATALYST = NO; + VALID_ARCHS = "arm64e arm64"; + WRAPPER_EXTENSION = bundle; + }; + name = ReleaseRepo; + }; + A4C5FD4D261231D4005FD2D8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + arm64e, + arm64, + ); + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = GYQ6RCPJ93; + ENABLE_BITCODE = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = AppDataPrefs/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.fouadraheb.AppDataPrefs; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; + SUPPORTS_MACCATALYST = NO; + VALID_ARCHS = "arm64e arm64"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -764,6 +1138,17 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + A4C5FD4E261231D4005FD2D8 /* Build configuration list for PBXNativeTarget "AppDataPrefs" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A4C5FD4A261231D4005FD2D8 /* Release */, + A4C5FD4B261231D4005FD2D8 /* ReleaseRepoInfo */, + A4C5FD4C261231D4005FD2D8 /* ReleaseRepo */, + A4C5FD4D261231D4005FD2D8 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = A4BB5D7B24A86EEA004A3132 /* Project object */; diff --git a/AppData.xcodeproj/xcshareddata/xcschemes/AppDataPrefs.xcscheme b/AppData.xcodeproj/xcshareddata/xcschemes/AppDataPrefs.xcscheme new file mode 100644 index 0000000..c367d01 --- /dev/null +++ b/AppData.xcodeproj/xcshareddata/xcschemes/AppDataPrefs.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AppData/AppData-Prefix.pch b/AppData/AppData-Prefix.pch index f44c656..2d3f692 100644 --- a/AppData/AppData-Prefix.pch +++ b/AppData/AppData-Prefix.pch @@ -11,6 +11,7 @@ #import "Headers.h" #import "ADHelper.h" +#import "ADSettings.h" #ifdef DEBUG #define NSLog(...) NSLog(@"[AppData]: %@", [NSString stringWithFormat:__VA_ARGS__]) diff --git a/AppData/AppData.mm b/AppData/AppData.mm index ecc671b..40d258c 100644 --- a/AppData/AppData.mm +++ b/AppData/AppData.mm @@ -22,7 +22,7 @@ #define _LOGOS_RETURN_RETAINED #endif -@class SBIconView; @class SBIconImageView; @class SBFolderIcon; @class SBApplication; @class SBUIAppIconForceTouchControllerDataProvider; @class SBUIAppIconForceTouchController; +@class SBUIAppIconForceTouchControllerDataProvider; @class SBSApplicationShortcutItem; @class SBIconImageView; @class SBApplication; @class SBFolderIcon; @class SBIconView; @class SBUIAppIconForceTouchController; static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$SBFolderIcon(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("SBFolderIcon"); } return _klass; } #line 3 "/Users/fouad/Projects/AppData/AppData/AppData.xm" @@ -54,7 +54,7 @@ static void _logos_method$SHARED_HOOKS$SBIconImageView$appDataPreferencesChanged(_LOGOS_SELF_TYPE_NORMAL SBIconImageView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) { - if ([ADHelper swipeUpEnabled]) { + if ([ADSettings swipeUpEnabled]) { if (![self.gestureRecognizers containsObject:self.adSwipeGestureRecognizer]) { [self addGestureRecognizer:self.adSwipeGestureRecognizer]; } @@ -80,7 +80,7 @@ static NSString * _logos_method$SHARED_HOOKS$SBApplication$displayName(_LOGOS_SELF_TYPE_NORMAL SBApplication* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) { if ([self respondsToSelector:@selector(bundleIdentifier)]) { - NSString *customAppName = [ADHelper customAppNameForBundleIdentifier:self.bundleIdentifier]; + NSString *customAppName = [ADSettings customAppNameForBundleIdentifier:self.bundleIdentifier]; return customAppName ? : _logos_orig$SHARED_HOOKS$SBApplication$displayName(self, _cmd); } return _logos_orig$SHARED_HOOKS$SBApplication$displayName(self, _cmd); @@ -92,12 +92,12 @@ #pragma mark - ForceTouch Menu -static void (*_logos_orig$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$)(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL, NSArray *); static void _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL, NSArray *); static void (*_logos_meta_orig$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL, SBSApplicationShortcutItem *, NSString *, SBIconView *); static void _logos_meta_method$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL, SBSApplicationShortcutItem *, NSString *, SBIconView *); static BOOL _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$ad_isFolderIcon(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL); +static void (*_logos_orig$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$)(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL, NSArray *); static void _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL, NSArray *); static void (*_logos_meta_orig$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL, SBSApplicationShortcutItem *, NSString *, SBIconView *); static void _logos_meta_method$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL, SBSApplicationShortcutItem *, NSString *, SBIconView *); static BOOL _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$ad_isFolderIcon(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL); static BOOL (*_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut)(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); static BOOL _logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); static NSUInteger (*_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection)(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); static NSUInteger _logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); static void _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd, NSArray * items) { - if ([ADHelper forceTouchMenuEnabled] && ![self ad_isFolderIcon]) { + if ([ADSettings forceTouchMenuEnabled] && ![self ad_isFolderIcon]) { NSMutableArray *newItems = [NSMutableArray arrayWithArray:items?:@[]]; SBSApplicationShortcutItem *shortcutItem = [ADHelper applicationShortcutItem]; if (shortcutItem) { @@ -131,12 +131,36 @@ +static BOOL _logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) { + if ([self respondsToSelector:@selector(type)] + && [self.type respondsToSelector:@selector(isEqualToString:)] + && [self.type isEqualToString:kSBApplicationShortcutItemType]) { + return YES; + } + return _logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut(self, _cmd); +} + + +static NSUInteger _logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) { + if ([self respondsToSelector:@selector(type)] + && [self.type respondsToSelector:@selector(isEqualToString:)] + && [self.type isEqualToString:kSBApplicationShortcutItemType]) { + return 2; + } + return _logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection(self, _cmd); +} + + + + + + static id (*_logos_orig$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider$applicationShortcutItems)(_LOGOS_SELF_TYPE_NORMAL SBUIAppIconForceTouchControllerDataProvider* _LOGOS_SELF_CONST, SEL); static id _logos_method$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider$applicationShortcutItems(_LOGOS_SELF_TYPE_NORMAL SBUIAppIconForceTouchControllerDataProvider* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchController$appIconForceTouchShortcutViewController$activateApplicationShortcutItem$)(_LOGOS_SELF_TYPE_NORMAL SBUIAppIconForceTouchController* _LOGOS_SELF_CONST, SEL, id, SBSApplicationShortcutItem *); static void _logos_method$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchController$appIconForceTouchShortcutViewController$activateApplicationShortcutItem$(_LOGOS_SELF_TYPE_NORMAL SBUIAppIconForceTouchController* _LOGOS_SELF_CONST, SEL, id, SBSApplicationShortcutItem *); static id _logos_method$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider$applicationShortcutItems(_LOGOS_SELF_TYPE_NORMAL SBUIAppIconForceTouchControllerDataProvider* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) { - if ([ADHelper forceTouchMenuEnabled]) { + if ([ADSettings forceTouchMenuEnabled]) { NSMutableArray *newItems = [NSMutableArray arrayWithArray:_logos_orig$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider$applicationShortcutItems(self, _cmd)?:@[]]; SBSApplicationShortcutItem *shortcutItem = [ADHelper applicationShortcutItem]; if (shortcutItem) { @@ -171,13 +195,11 @@ -static __attribute__((constructor)) void _logosLocalCtor_27b85f3b(int __unused argc, char __unused **argv, char __unused **envp) { - [[ADHelper sharedInstance] initialize]; - +static __attribute__((constructor)) void _logosLocalCtor_b2edea14(int __unused argc, char __unused **argv, char __unused **envp) { {Class _logos_class$SHARED_HOOKS$SBIconImageView = objc_getClass("SBIconImageView"); MSHookMessageEx(_logos_class$SHARED_HOOKS$SBIconImageView, @selector(initWithFrame:), (IMP)&_logos_method$SHARED_HOOKS$SBIconImageView$initWithFrame$, (IMP*)&_logos_orig$SHARED_HOOKS$SBIconImageView$initWithFrame$);{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'v'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$SHARED_HOOKS$SBIconImageView, @selector(appDataPreferencesChanged), (IMP)&_logos_method$SHARED_HOOKS$SBIconImageView$appDataPreferencesChanged, _typeEncoding); }{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'v'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; memcpy(_typeEncoding + i, @encode(UIGestureRecognizer *), strlen(@encode(UIGestureRecognizer *))); i += strlen(@encode(UIGestureRecognizer *)); _typeEncoding[i] = '\0'; class_addMethod(_logos_class$SHARED_HOOKS$SBIconImageView, @selector(appDataDidSwipeUp:), (IMP)&_logos_method$SHARED_HOOKS$SBIconImageView$appDataDidSwipeUp$, _typeEncoding); }{ class_addMethod(_logos_class$SHARED_HOOKS$SBIconImageView, @selector(adSwipeGestureRecognizer), (IMP)&_logos_method$SHARED_HOOKS$SBIconImageView$adSwipeGestureRecognizer$, [[NSString stringWithFormat:@"%s@:", @encode(UISwipeGestureRecognizer *)] UTF8String]);class_addMethod(_logos_class$SHARED_HOOKS$SBIconImageView, @selector(setAdSwipeGestureRecognizer:), (IMP)&_logos_method$SHARED_HOOKS$SBIconImageView$setAdSwipeGestureRecognizer$, [[NSString stringWithFormat:@"v@:%s", @encode(UISwipeGestureRecognizer *)] UTF8String]);} Class _logos_class$SHARED_HOOKS$SBApplication = objc_getClass("SBApplication"); MSHookMessageEx(_logos_class$SHARED_HOOKS$SBApplication, @selector(displayName), (IMP)&_logos_method$SHARED_HOOKS$SBApplication$displayName, (IMP*)&_logos_orig$SHARED_HOOKS$SBApplication$displayName);} if (@available(iOS 13, *)) { - {Class _logos_class$IOS13_AND_NEWER_HOOKS$SBIconView = objc_getClass("SBIconView"); Class _logos_metaclass$IOS13_AND_NEWER_HOOKS$SBIconView = object_getClass(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView); MSHookMessageEx(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(setApplicationShortcutItems:), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$, (IMP*)&_logos_orig$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$);MSHookMessageEx(_logos_metaclass$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(activateShortcut:withBundleIdentifier:forIconView:), (IMP)&_logos_meta_method$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$, (IMP*)&_logos_meta_orig$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$);{ char _typeEncoding[1024]; unsigned int i = 0; memcpy(_typeEncoding + i, @encode(BOOL), strlen(@encode(BOOL))); i += strlen(@encode(BOOL)); _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(ad_isFolderIcon), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$ad_isFolderIcon, _typeEncoding); }} + {Class _logos_class$IOS13_AND_NEWER_HOOKS$SBIconView = objc_getClass("SBIconView"); Class _logos_metaclass$IOS13_AND_NEWER_HOOKS$SBIconView = object_getClass(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView); MSHookMessageEx(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(setApplicationShortcutItems:), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$, (IMP*)&_logos_orig$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$);MSHookMessageEx(_logos_metaclass$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(activateShortcut:withBundleIdentifier:forIconView:), (IMP)&_logos_meta_method$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$, (IMP*)&_logos_meta_orig$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$);{ char _typeEncoding[1024]; unsigned int i = 0; memcpy(_typeEncoding + i, @encode(BOOL), strlen(@encode(BOOL))); i += strlen(@encode(BOOL)); _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(ad_isFolderIcon), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$ad_isFolderIcon, _typeEncoding); }Class _logos_class$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem = objc_getClass("SBSApplicationShortcutItem"); MSHookMessageEx(_logos_class$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem, @selector(sbh_isSystemShortcut), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut, (IMP*)&_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut);MSHookMessageEx(_logos_class$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem, @selector(sbh_shortcutSection), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection, (IMP*)&_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection);} } else { {Class _logos_class$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider = objc_getClass("SBUIAppIconForceTouchControllerDataProvider"); MSHookMessageEx(_logos_class$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider, @selector(applicationShortcutItems), (IMP)&_logos_method$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider$applicationShortcutItems, (IMP*)&_logos_orig$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider$applicationShortcutItems);Class _logos_class$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchController = objc_getClass("SBUIAppIconForceTouchController"); MSHookMessageEx(_logos_class$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchController, @selector(appIconForceTouchShortcutViewController:activateApplicationShortcutItem:), (IMP)&_logos_method$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchController$appIconForceTouchShortcutViewController$activateApplicationShortcutItem$, (IMP*)&_logos_orig$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchController$appIconForceTouchShortcutViewController$activateApplicationShortcutItem$);} } diff --git a/AppData/AppData.xm b/AppData/AppData.xm index ab7a094..7b78fef 100644 --- a/AppData/AppData.xm +++ b/AppData/AppData.xm @@ -28,7 +28,7 @@ %new - (void)appDataPreferencesChanged { - if ([ADHelper swipeUpEnabled]) { + if ([ADSettings swipeUpEnabled]) { if (![self.gestureRecognizers containsObject:self.adSwipeGestureRecognizer]) { [self addGestureRecognizer:self.adSwipeGestureRecognizer]; } @@ -54,7 +54,7 @@ - (NSString *)displayName { if ([self respondsToSelector:@selector(bundleIdentifier)]) { - NSString *customAppName = [ADHelper customAppNameForBundleIdentifier:self.bundleIdentifier]; + NSString *customAppName = [ADSettings customAppNameForBundleIdentifier:self.bundleIdentifier]; return customAppName ? : %orig; } return %orig; @@ -71,7 +71,7 @@ %hook SBIconView - (void)setApplicationShortcutItems:(NSArray *)items { - if ([ADHelper forceTouchMenuEnabled] && ![self ad_isFolderIcon]) { + if ([ADSettings forceTouchMenuEnabled] && ![self ad_isFolderIcon]) { NSMutableArray *newItems = [NSMutableArray arrayWithArray:items?:@[]]; SBSApplicationShortcutItem *shortcutItem = [ADHelper applicationShortcutItem]; if (shortcutItem) { @@ -102,6 +102,30 @@ %end +%hook SBSApplicationShortcutItem + +// iOS 13 +- (BOOL)sbh_isSystemShortcut { + if ([self respondsToSelector:@selector(type)] + && [self.type respondsToSelector:@selector(isEqualToString:)] + && [self.type isEqualToString:kSBApplicationShortcutItemType]) { + return YES; + } + return %orig; +} + +// iOS 14 +- (NSUInteger)sbh_shortcutSection { + if ([self respondsToSelector:@selector(type)] + && [self.type respondsToSelector:@selector(isEqualToString:)] + && [self.type isEqualToString:kSBApplicationShortcutItemType]) { + return 2; + } + return %orig; +} + +%end + %end @@ -110,7 +134,7 @@ %hook SBUIAppIconForceTouchControllerDataProvider - (id)applicationShortcutItems { - if ([ADHelper forceTouchMenuEnabled]) { + if ([ADSettings forceTouchMenuEnabled]) { NSMutableArray *newItems = [NSMutableArray arrayWithArray:%orig?:@[]]; SBSApplicationShortcutItem *shortcutItem = [ADHelper applicationShortcutItem]; if (shortcutItem) { @@ -146,8 +170,6 @@ %ctor { - [[ADHelper sharedInstance] initialize]; - %init(SHARED_HOOKS); if (@available(iOS 13, *)) { diff --git a/AppData/Classes/Controller/ADDataViewController.m b/AppData/Classes/Controller/ADDataViewController.m index ea2c01d..490f25c 100644 --- a/AppData/Classes/Controller/ADDataViewController.m +++ b/AppData/Classes/Controller/ADDataViewController.m @@ -343,6 +343,7 @@ - (void)addSubviewsToContainer:(UIView *)containerView { // Create Table View self.tableView = [self createTableViewWithDataSource:self.mainDataSource]; + [self.tableView registerClass:ADTitleSectionHeaderView.class forHeaderFooterViewReuseIdentifier:ADTitleSectionHeaderView.reuseIdentifier]; [containerView addSubview:self.tableView]; self.moreTableView = [self createTableViewWithDataSource:self.moreDataSource]; @@ -357,31 +358,23 @@ - (void)viewDidLayoutSubviews { [self layoutTableViews]; // Apply blur effect to contentView - if (@available(iOS 13.0, *)) { - if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) { - self.contentView.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleSystemThinMaterial]; - } else { - self.contentView.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - } - } else { - self.contentView.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; - } - + self.contentView.effect = [UIBlurEffect effectWithStyle:[ADAppearance.sharedInstance blurEffectStyle]]; + // Apply text colors - UIColor *primaryLabelColor = [UIColor whiteColor]; - UIColor *secondaryLabelsColor = [UIColor colorWithRed:0.922 green:0.922 blue:0.961 alpha:0.6]; - if (@available(iOS 13.0, *)) { - if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) { - primaryLabelColor = [UIColor blackColor]; - secondaryLabelsColor = [UIColor colorWithRed:0.235294 green:0.235294 blue:0.262745 alpha:0.65]; - } - } + UIColor *primaryLabelColor = [ADAppearance.sharedInstance primaryTextColor]; + UIColor *secondaryLabelsColor = [ADAppearance.sharedInstance secondaryTextColor]; + // secondaryLabelsColor = [UIColor colorWithRed:0.922 green:0.922 blue:0.961 alpha:0.6]; + // secondaryLabelsColor = [UIColor colorWithRed:0.235294 green:0.235294 blue:0.262745 alpha:0.65]; Light + [self.nameLabel setTitleColor:primaryLabelColor forState:UIControlStateNormal]; [self.identifierLabel setTitleColor:secondaryLabelsColor forState:UIControlStateNormal]; self.versionLabel.textColor = secondaryLabelsColor; [self.identifierCopyButton setTintColor:secondaryLabelsColor]; [self.nameEditButton setTintColor:secondaryLabelsColor]; [self.appStoreButton setTintColor:secondaryLabelsColor]; + + self.tableView.separatorColor = [ADAppearance.sharedInstance tableSeparatorColor]; + self.moreTableView.separatorColor = [ADAppearance.sharedInstance tableSeparatorColor]; } - (void)traitCollectionDidChange:(UITraitCollection *)collection { @@ -391,7 +384,6 @@ - (void)traitCollectionDidChange:(UITraitCollection *)collection { - (UITableView *)createTableViewWithDataSource:(id)dataSource { UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; - tableView.separatorColor = [UIColor colorWithRed:0.329 green:0.329 blue:0.345 alpha:0.6]; tableView.showsVerticalScrollIndicator = NO; tableView.backgroundColor = [UIColor clearColor]; tableView.delegate = dataSource; diff --git a/AppData/Classes/Controller/Cells/ADActionsBarView.m b/AppData/Classes/Controller/Cells/ADActionsBarView.m index 8f3d1d2..abd58be 100644 --- a/AppData/Classes/Controller/Cells/ADActionsBarView.m +++ b/AppData/Classes/Controller/Cells/ADActionsBarView.m @@ -62,7 +62,7 @@ - (void)addItemWithTitle:(NSString *)title detail:(NSString *)detail image:(UIIm [activityContainerView.widthAnchor constraintEqualToAnchor:view.actionImageView.widthAnchor].active = YES; [activityContainerView.heightAnchor constraintEqualToAnchor:view.actionImageView.heightAnchor].active = YES; - view.activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + view.activityIndicatorView = [ADAppearance.sharedInstance activityIndicatorView]; view.activityIndicatorView.userInteractionEnabled = NO; view.activityIndicatorView.translatesAutoresizingMaskIntoConstraints = NO; [view.activityIndicatorView hidesWhenStopped]; @@ -173,22 +173,10 @@ @implementation ADActionButton - (void)layoutSubviews { [super layoutSubviews]; - - if (@available(iOS 13.0, *)) { - if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) { - self.nameLabel.textColor = [UIColor blackColor]; - self.actionImageView.tintColor = [UIColor colorWithRed:0.235294 green:0.235294 blue:0.262745 alpha:0.70]; - self.detailLabel.textColor = [UIColor colorWithRed:0.235294 green:0.235294 blue:0.262745 alpha:0.5]; - } else { - self.nameLabel.textColor = [UIColor whiteColor]; - self.actionImageView.tintColor = [UIColor colorWithRed:0.557 green:0.557 blue:0.577 alpha:1.0]; - self.detailLabel.textColor = [UIColor lightGrayColor]; - } - } else { - self.nameLabel.textColor = [UIColor whiteColor]; - self.actionImageView.tintColor = [UIColor colorWithRed:0.557 green:0.557 blue:0.577 alpha:1.0]; - self.detailLabel.textColor = [UIColor lightGrayColor]; - } + + self.nameLabel.textColor = [ADAppearance.sharedInstance primaryTextColor]; + self.detailLabel.textColor = [ADAppearance.sharedInstance secondaryTextColor]; + self.actionImageView.tintColor = [ADAppearance.sharedInstance actionsBarIconTintColor]; } @end diff --git a/AppData/Classes/Controller/Cells/ADExpandableSectionHeaderView.m b/AppData/Classes/Controller/Cells/ADExpandableSectionHeaderView.m index e9c8ee8..5c8e4f1 100644 --- a/AppData/Classes/Controller/Cells/ADExpandableSectionHeaderView.m +++ b/AppData/Classes/Controller/Cells/ADExpandableSectionHeaderView.m @@ -73,15 +73,8 @@ - (void)setIsExpanded:(BOOL)isExpanded { - (void)layoutSubviews { [super layoutSubviews]; - if (@available(iOS 13.0, *)) { - if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) { - self.titleLabel.textColor = [UIColor colorWithRed:0.427 green:0.427 blue:0.427 alpha:1.0]; - } else { - self.titleLabel.textColor = [UIColor colorWithRed:0.557 green:0.557 blue:0.577 alpha:1.0]; - } - } else { - self.titleLabel.textColor = [UIColor colorWithRed:0.557 green:0.557 blue:0.577 alpha:1.0]; - } + + self.titleLabel.textColor = [ADAppearance.sharedInstance tableHeaderTextColor]; self.chevronImageView.tintColor = self.titleLabel.textColor; } diff --git a/AppData/Classes/Controller/Cells/ADTitleSectionHeaderView.h b/AppData/Classes/Controller/Cells/ADTitleSectionHeaderView.h index 82864bb..a7221ee 100644 --- a/AppData/Classes/Controller/Cells/ADTitleSectionHeaderView.h +++ b/AppData/Classes/Controller/Cells/ADTitleSectionHeaderView.h @@ -16,10 +16,11 @@ @interface ADTitleSectionHeaderView : UITableViewHeaderFooterView -@property (nonatomic, strong) UILabel *titleLabel; - @property (nonatomic) __weak id delegate; + (NSString *)reuseIdentifier; +- (void)configureBackHeaderWithTitle:(NSString *)title; +- (void)configureHeaderWithTitle:(NSString *)title; + @end diff --git a/AppData/Classes/Controller/Cells/ADTitleSectionHeaderView.m b/AppData/Classes/Controller/Cells/ADTitleSectionHeaderView.m index e922ee5..34c0055 100644 --- a/AppData/Classes/Controller/Cells/ADTitleSectionHeaderView.m +++ b/AppData/Classes/Controller/Cells/ADTitleSectionHeaderView.m @@ -8,7 +8,11 @@ #import "ADTitleSectionHeaderView.h" @interface ADTitleSectionHeaderView () +@property (nonatomic, strong) UILabel *titleLabel; @property (nonatomic, strong) UIImageView *backImageView; + +@property (nonatomic, strong) NSLayoutConstraint *titleLabelHeightConstraint; +@property (nonatomic, strong) NSLayoutConstraint *titleLabelTopConstraint; @end @implementation ADTitleSectionHeaderView @@ -46,15 +50,17 @@ - (void)initialize { [self.backImageView.centerYAnchor constraintEqualToAnchor:self.centerYAnchor].active = YES; self.titleLabel = [[UILabel alloc] init]; - self.titleLabel.font = [UIFont systemFontOfSize:13]; - self.titleLabel.text = @"MORE INFO"; + self.titleLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleFootnote]; + self.titleLabel.textAlignment = NSTextAlignmentCenter; [self addSubview:self.titleLabel]; self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO; - [self.titleLabel.topAnchor constraintEqualToAnchor:self.contentView.topAnchor].active = YES; - [self.titleLabel.bottomAnchor constraintEqualToAnchor:self.contentView.bottomAnchor].active = YES; - [self.titleLabel.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor].active = YES; - [self.titleLabel.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor].active = YES; + self.titleLabelTopConstraint = [self.titleLabel.topAnchor constraintEqualToAnchor:self.contentView.topAnchor constant:1.33]; + self.titleLabelTopConstraint.active = YES; + self.titleLabelHeightConstraint = [self.titleLabel.heightAnchor constraintEqualToConstant:18]; + self.titleLabelHeightConstraint.active = YES; + [self.titleLabel.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor constant:16].active = YES; + [self.titleLabel.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor constant:-16].active = YES; } - (UIImage *)makeThumbnailOfSize:(CGSize)size ofImage:(UIImage *)image { @@ -66,21 +72,31 @@ - (UIImage *)makeThumbnailOfSize:(CGSize)size ofImage:(UIImage *)image { } - (void)didTapHeaderView:(UITapGestureRecognizer *)gesture { - [self.delegate titleSectionHeaderViewDidTapBackButton]; + if (self.delegate) { + [self.delegate titleSectionHeaderViewDidTapBackButton]; + } +} + +- (void)configureHeaderWithTitle:(NSString *)title { + self.backImageView.hidden = YES; + self.titleLabel.text = title; + self.titleLabel.textAlignment = NSTextAlignmentNatural; + self.titleLabelTopConstraint.constant = 1.33; + self.titleLabelHeightConstraint.constant = 18; +} + +- (void)configureBackHeaderWithTitle:(NSString *)title { + self.backImageView.hidden = NO; + self.titleLabel.text = title; + self.titleLabel.textAlignment = NSTextAlignmentCenter; + self.titleLabelTopConstraint.constant = 0; + self.titleLabelHeightConstraint.constant = 35; } - (void)layoutSubviews { [super layoutSubviews]; - if (@available(iOS 13.0, *)) { - if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) { - self.titleLabel.textColor = [UIColor colorWithRed:0.427 green:0.427 blue:0.427 alpha:1.0]; - } else { - self.titleLabel.textColor = [UIColor colorWithRed:0.557 green:0.557 blue:0.557 alpha:1.0]; - } - } else { - self.titleLabel.textColor = [UIColor colorWithRed:0.557 green:0.557 blue:0.557 alpha:1.0]; - } + self.titleLabel.textColor = [ADAppearance.sharedInstance tableHeaderTextColor]; self.backImageView.tintColor = self.titleLabel.textColor; } diff --git a/AppData/Classes/Controller/DataSource/ADMainDataSource.h b/AppData/Classes/Controller/DataSource/ADMainDataSource.h index 62e599a..20830f2 100644 --- a/AppData/Classes/Controller/DataSource/ADMainDataSource.h +++ b/AppData/Classes/Controller/DataSource/ADMainDataSource.h @@ -17,6 +17,4 @@ - (instancetype)initWithAppData:(ADAppData *)data dataViewController:(ADDataViewController *)dataViewController; -+ (void)applyStylesToCell:(UITableViewCell *)cell; - @end diff --git a/AppData/Classes/Controller/DataSource/ADMainDataSource.m b/AppData/Classes/Controller/DataSource/ADMainDataSource.m index 925aabb..5cf33bf 100644 --- a/AppData/Classes/Controller/DataSource/ADMainDataSource.m +++ b/AppData/Classes/Controller/DataSource/ADMainDataSource.m @@ -9,6 +9,7 @@ #import "ADAppData.h" #import "ADDataViewController.h" #import "ADActionsBarView.h" +#import "ADTitleSectionHeaderView.h" @implementation ADMainDataSource @@ -60,12 +61,12 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"InfoCellIdentifier"]; cell.backgroundColor = [UIColor clearColor]; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.textLabel.font = [UIFont systemFontOfSize:15]; cell.detailTextLabel.font = [UIFont systemFontOfSize:13]; cell.detailTextLabel.lineBreakMode = NSLineBreakByTruncatingMiddle; } - [self.class applyStylesToCell:cell]; + cell.accessoryView = [ADAppearance.sharedInstance tableCellChevronImageView]; + [ADAppearance applyStylesToCell:cell]; if ([self isContainersSection:indexPath.section]) { if (indexPath.row == 0) { @@ -153,18 +154,18 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N NSInteger itemIndex = 1; [weakActionsBar showLoadingIndicatorForItemAtIndex:itemIndex]; [weakActionsBar setDetail:@"Clearing..." forItemAtIndex:itemIndex]; - DISPATCH_AFTER(0.5, { - [self.appData clearAppCachesWithCompletion:^{ - [weakActionsBar hideLoadingIndicatorForItemAtIndex:itemIndex]; - [weakActionsBar setDetail:@"Cleared!" forItemAtIndex:itemIndex]; - [[UINotificationFeedbackGenerator new] notificationOccurred:UINotificationFeedbackTypeSuccess]; - DISPATCH_AFTER(0.5, { - [self.appData getCachesDirectorySizeWithCompletion:^(NSString *formattedSize) { - [weakActionsBar setDetail:formattedSize forItemAtIndex:itemIndex]; - }]; - }); - }]; - }); +// DISPATCH_AFTER(0.5, { +// [self.appData clearAppCachesWithCompletion:^{ +// [weakActionsBar hideLoadingIndicatorForItemAtIndex:itemIndex]; +// [weakActionsBar setDetail:@"Cleared!" forItemAtIndex:itemIndex]; +// [[UINotificationFeedbackGenerator new] notificationOccurred:UINotificationFeedbackTypeSuccess]; +// DISPATCH_AFTER(0.5, { +// [self.appData getCachesDirectorySizeWithCompletion:^(NSString *formattedSize) { +// [weakActionsBar setDetail:formattedSize forItemAtIndex:itemIndex]; +// }]; +// }); +// }]; +// }); }]; // Clear App Data @@ -254,10 +255,10 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"MoreInfoCellIdentifier"]; cell.backgroundColor = [UIColor clearColor]; - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; } - [self.class applyStylesToCell:cell]; + cell.accessoryView = [ADAppearance.sharedInstance tableCellChevronImageView]; cell.textLabel.text = @"More Info"; + [ADAppearance applyStylesToCell:cell]; return cell; } } @@ -275,7 +276,17 @@ - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)ce } } -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + NSString *title = [self titleForHeaderInSection:section]; + if (title) { + ADTitleSectionHeaderView *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:ADTitleSectionHeaderView.reuseIdentifier]; + [header configureHeaderWithTitle:[title uppercaseString]]; + return header; + } + return nil; +} + +- (NSString *)titleForHeaderInSection:(NSInteger)section { if ([self isContainersSection:section]) { return self.appData.isApplication ? @"Containers" : nil; } else if ([self isAppGroupsSection:section]) { @@ -406,42 +417,6 @@ - (nullable UITargetedPreview *)tableView:(UITableView *)tableView previewForDis return [self tableView:tableView previewForHighlightingContextMenuWithConfiguration:configuration]; } -#pragma mark - Styles - -+ (void)applyStylesToCell:(UITableViewCell *)cell { - if (@available(iOS 13.0, *)) { - if (cell.traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) { - [self applyLightStylesToCell:cell]; - } else { - [self applyDarkStylesToCell:cell]; - } - } else { - [self applyDarkStylesToCell:cell]; - } -} - -+ (void)applyLightStylesToCell:(UITableViewCell *)cell { - cell.detailTextLabel.textColor = [UIColor colorWithRed:0.235294 green:0.235294 blue:0.262745 alpha:0.70]; - cell.textLabel.textColor = [UIColor blackColor]; - - if (cell.selectionStyle != UITableViewCellSelectionStyleNone) { - UIView *backgroundView = [[UIView alloc] init]; - backgroundView.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.35]; - cell.selectedBackgroundView = backgroundView; - } -} - -+ (void)applyDarkStylesToCell:(UITableViewCell *)cell { - cell.detailTextLabel.textColor = [UIColor colorWithRed:0.922 green:0.922 blue:0.961 alpha:0.6]; - cell.textLabel.textColor = [UIColor whiteColor]; - - if (cell.selectionStyle != UITableViewCellSelectionStyleNone) { - UIView *backgroundView = [[UIView alloc] init]; - backgroundView.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.15]; - cell.selectedBackgroundView = backgroundView; - } -} - #pragma mark - Helpers - (void)showDestructiveConfirmationAlertWithTitle:(NSString *)title message:(NSString *)message confirmTitle:(NSString *)confirmTitle confirmHandler:(void(^)())confirmHandler { diff --git a/AppData/Classes/Controller/DataSource/ADMoreDataSource.m b/AppData/Classes/Controller/DataSource/ADMoreDataSource.m index 6eb2f3a..2c82ecd 100644 --- a/AppData/Classes/Controller/DataSource/ADMoreDataSource.m +++ b/AppData/Classes/Controller/DataSource/ADMoreDataSource.m @@ -66,7 +66,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.textLabel.font = [UIFont systemFontOfSize:15]; cell.detailTextLabel.font = [UIFont systemFontOfSize:13]; } - [ADMainDataSource applyStylesToCell:cell]; + [ADAppearance applyStylesToCell:cell]; if (indexPath.row == 0) { cell.textLabel.text = @"Internal Version"; cell.detailTextLabel.text = [NSString stringWithFormat:@"%@",self.appData.internalVersion]; @@ -87,7 +87,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.accessoryType = UITableViewCellAccessoryNone; cell.textLabel.font = [UIFont systemFontOfSize:15]; } - [ADMainDataSource applyStylesToCell:cell]; + [ADAppearance applyStylesToCell:cell]; if (indexPath.section == 1) { cell.textLabel.text = [NSString stringWithFormat:@"%@",[self.appData.urlSchemes objectAtIndex:indexPath.row]]; } else if (indexPath.section == 2) { @@ -140,6 +140,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { if (section == 0) { ADTitleSectionHeaderView *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:ADTitleSectionHeaderView.reuseIdentifier]; + [header configureBackHeaderWithTitle:@"MORE INFO"]; header.delegate = self; return header; } else { diff --git a/AppData/Classes/Helpers/ADAppearance.h b/AppData/Classes/Helpers/ADAppearance.h new file mode 100644 index 0000000..8071787 --- /dev/null +++ b/AppData/Classes/Helpers/ADAppearance.h @@ -0,0 +1,39 @@ +// +// ADAppearance.h +// AppData +// +// Created by Fouad Raheb on 3/29/21. +// + +#import +#import + +typedef NS_ENUM(NSInteger, ADAppearanceStyle) { + ADAppearanceStyleDark = 0, + ADAppearanceStyleLight = 1, + ADAppearanceStyleAutomatic = 2, +}; + +@interface ADAppearance : NSObject + ++ (instancetype)sharedInstance; + +- (UIBlurEffectStyle)blurEffectStyle; + +- (UIColor *)primaryTextColor; +- (UIColor *)secondaryTextColor; + +- (UIColor *)actionsBarIconTintColor; + +- (UIColor *)tableSeparatorColor; +- (UIColor *)tableHeaderTextColor; +- (UIView *)tableCellSelectedBackgroundView; +- (UIImageView *)tableCellChevronImageView; + +- (UIActivityIndicatorView *)activityIndicatorView; + +#pragma mark - Styles Helpers + ++ (void)applyStylesToCell:(UITableViewCell *)cell; + +@end diff --git a/AppData/Classes/Helpers/ADAppearance.m b/AppData/Classes/Helpers/ADAppearance.m new file mode 100644 index 0000000..33c411a --- /dev/null +++ b/AppData/Classes/Helpers/ADAppearance.m @@ -0,0 +1,126 @@ +// +// ADAppearance.m +// AppData +// +// Created by Fouad Raheb on 3/29/21. +// + +#import "ADAppearance.h" + +@interface ADAppearance () +@property (nonatomic, assign) ADAppearanceStyle currentStyle; +@end + +@implementation ADAppearance + ++ (instancetype)sharedInstance { + static dispatch_once_t p = 0; + __strong static ADAppearance *_sharedInstance = nil; + dispatch_once(&p, ^{ + _sharedInstance = [[self alloc] init]; + [_sharedInstance initialize]; + }); + return _sharedInstance; +} + +- (void)initialize { + self.currentStyle = [ADSettings appearanceStyle]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDataAppearanceChanged:) name:kAppDataAppearancePreferencesChangedNotification object:nil]; +} + +- (void)appDataAppearanceChanged:(NSNotification *)notification { + self.currentStyle = [ADSettings appearanceStyle]; +} + +- (BOOL)isDarkStyle { + if (self.currentStyle == ADAppearanceStyleAutomatic) { + if (@available(iOS 13.0, *)) { + return [UITraitCollection currentTraitCollection].userInterfaceStyle == UIUserInterfaceStyleDark; + } + } + return self.currentStyle == ADAppearanceStyleDark; +} + +#pragma mark - Colors + +- (UIBlurEffectStyle)blurEffectStyle { + if (self.isDarkStyle) { + return UIBlurEffectStyleDark; + } else { + if (@available(iOS 13.0, *)) { + return UIBlurEffectStyleSystemThinMaterialLight; + } else { + return UIBlurEffectStyleLight; + } + } +} + +- (UIColor *)primaryTextColor { + return self.isDarkStyle ? [UIColor whiteColor] : [UIColor blackColor]; +} + +- (UIColor *)secondaryTextColor { + return self.isDarkStyle + ? [UIColor colorWithRed:0.922 green:0.922 blue:0.961 alpha:0.6] + : [UIColor colorWithRed:0.235294 green:0.235294 blue:0.262745 alpha:0.75]; +} + +- (UIColor *)actionsBarIconTintColor { + return self.isDarkStyle + ? [UIColor colorWithRed:0.557 green:0.557 blue:0.577 alpha:1.0] + : [UIColor colorWithRed:0.235294 green:0.235294 blue:0.262745 alpha:0.70]; +} + +- (UIColor *)tableSeparatorColor { + return [UIColor colorWithRed:0.329 green:0.329 blue:0.345 alpha:0.6]; +} + +- (UIColor *)tableHeaderTextColor { + return self.isDarkStyle + ? [UIColor colorWithRed:0.557 green:0.557 blue:0.577 alpha:1.0] + : [UIColor colorWithRed:0.39 green:0.39 blue:0.39 alpha:1.0]; +} + +- (UIView *)tableCellSelectedBackgroundView { + UIView *backgroundView = [[UIView alloc] init]; + backgroundView.backgroundColor = self.isDarkStyle ? [[UIColor grayColor] colorWithAlphaComponent:0.15] : [[UIColor grayColor] colorWithAlphaComponent:0.35]; + return backgroundView; +} + +- (UIImageView *)tableCellChevronImageView { + UIImage *image = nil; + if ([UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft) { + image = [[ADHelper imageNamed:@"ChevronLeft"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } else { + image = [[ADHelper imageNamed:@"ChevronRight"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } + UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; + imageView.frame = CGRectMake(0, 0, 10.5, 13.36); + imageView.tintColor = self.isDarkStyle ? [UIColor colorWithRed:0.66 green:0.66 blue:0.66 alpha:0.5] : [[UIColor grayColor] colorWithAlphaComponent:0.6]; + return imageView; +} + +- (UIActivityIndicatorView *)activityIndicatorView { + UIActivityIndicatorView *activityIndicatorView = nil; + if (@available(iOS 13.0, *)) { + activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleMedium]; + } else { + activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + } + activityIndicatorView.color = [self secondaryTextColor]; + return activityIndicatorView; +} + +#pragma mark - Styles Helpers + ++ (void)applyStylesToCell:(UITableViewCell *)cell { + cell.textLabel.textColor = [ADAppearance.sharedInstance primaryTextColor]; + cell.detailTextLabel.textColor = [ADAppearance.sharedInstance secondaryTextColor]; + + if (cell.selectionStyle != UITableViewCellSelectionStyleNone) { + cell.selectedBackgroundView = [ADAppearance.sharedInstance tableCellSelectedBackgroundView]; + } +} + +@end diff --git a/AppData/Classes/Helpers/ADHelper.h b/AppData/Classes/Helpers/ADHelper.h index 9dc0e8f..f6cbefa 100644 --- a/AppData/Classes/Helpers/ADHelper.h +++ b/AppData/Classes/Helpers/ADHelper.h @@ -7,28 +7,14 @@ #import -#define kAppDataSwipeUpPreferencesChangedNotification @"com.fouadraheb.appdata.swipeup-preferences-changed" - -#define kSwipeUpEnabled @"SwipeUpEnabled" -#define kForceTouchMenuEnabled @"ForceTouchMenuEnabled" -#define kCustomAppNames @"CustomAppNames" - -#define kSBApplicationShortcutItemType @"com.fouadraheb.appdata" +#define kSBApplicationShortcutItemType @"com.fouadraheb.appdata" @interface ADHelper : NSObject + (instancetype)sharedInstance; -- (void)initialize; - + (UIImage *)imageNamed:(NSString *)imageName; -+ (BOOL)swipeUpEnabled; -+ (BOOL)forceTouchMenuEnabled; - -+ (NSString *)customAppNameForBundleIdentifier:(NSString *)identifier; -+ (void)setCustomAppName:(NSString *)name forBundleIdentifier:(NSString *)bundleIdentifier; - + (void)openDirectoryAtURL:(NSURL *)url fromController:(UIViewController *)controller; + (SBSApplicationShortcutItem *)applicationShortcutItem; diff --git a/AppData/Classes/Helpers/ADHelper.m b/AppData/Classes/Helpers/ADHelper.m index 09b9fc7..3016e91 100644 --- a/AppData/Classes/Helpers/ADHelper.m +++ b/AppData/Classes/Helpers/ADHelper.m @@ -9,32 +9,19 @@ @interface ADHelper () @property (nonatomic, strong) NSBundle *resoucesBundle; -@property (nonatomic, strong) NSUserDefaults *userDefaults; @end @implementation ADHelper + (instancetype)sharedInstance { static dispatch_once_t p = 0; - __strong static id _sharedObject = nil; + __strong static ADHelper *_sharedInstance = nil; dispatch_once(&p, ^{ - _sharedObject = [[self alloc] init]; + _sharedInstance = [[self alloc] init]; + // Create resources bundle + _sharedInstance.resoucesBundle = [NSBundle bundleWithPath:@"/Library/Application Support/AppData/Resources.bundle"]; }); - return _sharedObject; -} - -- (void)initialize { - // Create resources bundle - self.resoucesBundle = [NSBundle bundleWithPath:@"/Library/Application Support/AppData/Resources.bundle"]; - - // Load tweak preferences - self.userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.fouadraheb.appdata"]; - [self.userDefaults registerDefaults:@{ - kSwipeUpEnabled : @(YES), - kForceTouchMenuEnabled : @(NO) - }]; - - [self.userDefaults addObserver:self forKeyPath:kSwipeUpEnabled options:NSKeyValueObservingOptionNew context:NULL]; + return _sharedInstance; } #pragma mark - Resources @@ -43,39 +30,6 @@ + (UIImage *)imageNamed:(NSString *)imageName { return [UIImage imageNamed:imageName inBundle:ADHelper.sharedInstance.resoucesBundle]; } -#pragma mark - Preferences - -- (void)observeValueForKeyPath:(NSString *) keyPath ofObject:(id) object change:(NSDictionary *) change context:(void *) context { - if ([keyPath isEqualToString:kSwipeUpEnabled]) { - [[NSNotificationCenter defaultCenter] postNotificationName:kAppDataSwipeUpPreferencesChangedNotification object:nil]; - } -} - -+ (BOOL)swipeUpEnabled { - return [[ADHelper.sharedInstance.userDefaults objectForKey:kSwipeUpEnabled] boolValue]; -} - -+ (BOOL)forceTouchMenuEnabled { - return [[ADHelper.sharedInstance.userDefaults objectForKey:kForceTouchMenuEnabled] boolValue]; -} - -+ (NSString *)customAppNameForBundleIdentifier:(NSString *)identifier { - return [[ADHelper.sharedInstance.userDefaults dictionaryForKey:kCustomAppNames] objectForKey:identifier]; -} - -+ (void)setCustomAppName:(NSString *)name forBundleIdentifier:(NSString *)bundleIdentifier { - if (!bundleIdentifier) return; - - NSDictionary *dictionary = [ADHelper.sharedInstance.userDefaults dictionaryForKey:kCustomAppNames]; - NSMutableDictionary *mutableDictionary = dictionary ? [dictionary mutableCopy] : [NSMutableDictionary new]; - if (name) { - [mutableDictionary setObject:name forKey:bundleIdentifier]; - } else { - [mutableDictionary removeObjectForKey:bundleIdentifier]; - } - [ADHelper.sharedInstance.userDefaults setObject:mutableDictionary forKey:kCustomAppNames]; -} - #pragma mark - Helpers + (void)openDirectoryAtURL:(NSURL *)url fromController:(UIViewController *)controller { diff --git a/AppData/Classes/Helpers/ADSettings.h b/AppData/Classes/Helpers/ADSettings.h new file mode 100644 index 0000000..203245a --- /dev/null +++ b/AppData/Classes/Helpers/ADSettings.h @@ -0,0 +1,48 @@ +// +// ADSettings.m +// AppData +// +// Created by Fouad Raheb on 3/29/21. +// + +#import +#import "ADAppearance.h" + +// Keys +#define kSwipeUpEnabled @"SwipeUpEnabled" +#define kForceTouchMenuEnabled @"ForceTouchMenuEnabled" +#define kAppearance @"kAppearance" + +#define kCustomAppNames @"CustomAppNames" + +// Notification +#define kAppDataSwipeUpPreferencesChangedNotification @"com.fouadraheb.appdata.swipeup-preferences-changed" +#define kAppDataAppearancePreferencesChangedNotification @"com.fouadraheb.appdata.appearance-preferences-changed" + +@interface ADSettings : NSObject + +@property (nonatomic, strong) NSUserDefaults *userDefaults; + ++ (instancetype)sharedInstance; + ++ (id)objectForKey:(NSString *)key; ++ (BOOL)boolForKey:(NSString *)key; ++ (NSInteger)integerForKey:(NSString *)key; ++ (void)setObject:(id)object forKey:(NSString *)key; ++ (void)setInteger:(NSInteger)integer forKey:(NSString *)key; + +#pragma mark - Activation ++ (BOOL)swipeUpEnabled; ++ (BOOL)forceTouchMenuEnabled; + +#pragma mark - App Names ++ (NSString *)customAppNameForBundleIdentifier:(NSString *)identifier; ++ (void)setCustomAppName:(NSString *)name forBundleIdentifier:(NSString *)bundleIdentifier; + +#pragma mark - Appearance ++ (ADAppearanceStyle)appearanceStyle; ++ (NSArray *)appearanceValues; ++ (NSArray *)appearanceTitles; ++ (NSString *)titleForAppearanceStyle:(ADAppearanceStyle)style; + +@end diff --git a/AppData/Classes/Helpers/ADSettings.m b/AppData/Classes/Helpers/ADSettings.m new file mode 100644 index 0000000..1637395 --- /dev/null +++ b/AppData/Classes/Helpers/ADSettings.m @@ -0,0 +1,133 @@ +// +// ADSettings.m +// AppData +// +// Created by Fouad Raheb on 3/29/21. +// + +#import "ADSettings.h" + +@implementation ADSettings + ++ (instancetype)sharedInstance { + static dispatch_once_t p = 0; + __strong static ADSettings *_sharedInstance = nil; + dispatch_once(&p, ^{ + _sharedInstance = [[self alloc] init]; + [_sharedInstance initialize]; + }); + return _sharedInstance; +} + +- (void)initialize { + // Load tweak preferences + self.userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.fouadraheb.appdata"]; + [self.userDefaults registerDefaults:self.class.defaultsDictionary]; + [self.userDefaults addObserver:self forKeyPath:kSwipeUpEnabled options:NSKeyValueObservingOptionNew context:NULL]; + [self.userDefaults addObserver:self forKeyPath:kAppearance options:NSKeyValueObservingOptionNew context:NULL]; +} + +- (void)observeValueForKeyPath:(NSString *) keyPath ofObject:(id) object change:(NSDictionary *) change context:(void *) context { + if ([keyPath isEqualToString:kSwipeUpEnabled]) { + [[NSNotificationCenter defaultCenter] postNotificationName:kAppDataSwipeUpPreferencesChangedNotification object:nil]; + } else if ([keyPath isEqualToString:kAppearance]) { + [[NSNotificationCenter defaultCenter] postNotificationName:kAppDataAppearancePreferencesChangedNotification object:nil]; + } +} + ++ (NSDictionary *)defaultsDictionary { + return @{ + kSwipeUpEnabled: @(YES), + kForceTouchMenuEnabled: @(NO), + kAppearance: @(ADAppearanceStyleDark) + }; +} + ++ (id)objectForKey:(NSString *)key { + return [[self.sharedInstance userDefaults] objectForKey:key]; +} + ++ (BOOL)boolForKey:(NSString *)key { + return [[self.sharedInstance userDefaults] boolForKey:key]; +} + ++ (NSInteger)integerForKey:(NSString *)key { + return [[self.sharedInstance userDefaults] integerForKey:key]; +} + ++ (void)setObject:(id)object forKey:(NSString *)key { + return [[self.sharedInstance userDefaults] setObject:object forKey:key]; +} + ++ (void)setInteger:(NSInteger)integer forKey:(NSString *)key { + return [[self.sharedInstance userDefaults] setInteger:integer forKey:key]; +} + +#pragma mark - Activation + ++ (BOOL)swipeUpEnabled { + return [self boolForKey:kSwipeUpEnabled]; +} + ++ (BOOL)forceTouchMenuEnabled { + return [self boolForKey:kForceTouchMenuEnabled]; +} + +#pragma mark - Appearance + ++ (ADAppearanceStyle)appearanceStyle { + ADAppearanceStyle currentValue = [ADSettings integerForKey:kAppearance]; + if (@available(iOS 13.0, *)) { } else { // iOS 12 or older + if (currentValue == ADAppearanceStyleAutomatic) { + [ADSettings setInteger:ADAppearanceStyleDark forKey:kAppearance]; + return ADAppearanceStyleDark; + } + } + return currentValue; +} + ++ (NSArray *)appearanceValues { + if (@available(iOS 13.0, *)) { + return @[[NSString stringWithFormat:@"%td",ADAppearanceStyleDark], [NSString stringWithFormat:@"%td",ADAppearanceStyleLight], [NSString stringWithFormat:@"%td",ADAppearanceStyleAutomatic]]; + } else { + return @[[NSString stringWithFormat:@"%td",ADAppearanceStyleDark], [NSString stringWithFormat:@"%td",ADAppearanceStyleLight]]; + } +} + ++ (NSArray *)appearanceTitles { + if (@available(iOS 13.0, *)) { + return @[[self titleForAppearanceStyle:ADAppearanceStyleDark], [self titleForAppearanceStyle:ADAppearanceStyleLight], [self titleForAppearanceStyle:ADAppearanceStyleAutomatic]]; + } else { + return @[[self titleForAppearanceStyle:ADAppearanceStyleDark], [self titleForAppearanceStyle:ADAppearanceStyleLight]]; + } +} + ++ (NSString *)titleForAppearanceStyle:(ADAppearanceStyle)style { + switch (style) { + case ADAppearanceStyleDark: return @"Dark"; + case ADAppearanceStyleLight: return @"Light"; + case ADAppearanceStyleAutomatic: return @"Automatic"; + default: return @"N/A"; + } +} + +#pragma mark - Custom App Names + ++ (NSString *)customAppNameForBundleIdentifier:(NSString *)identifier { + return [[ADSettings.sharedInstance.userDefaults dictionaryForKey:kCustomAppNames] objectForKey:identifier]; +} + ++ (void)setCustomAppName:(NSString *)name forBundleIdentifier:(NSString *)bundleIdentifier { + if (!bundleIdentifier) return; + + NSDictionary *dictionary = [ADSettings.sharedInstance.userDefaults dictionaryForKey:kCustomAppNames]; + NSMutableDictionary *mutableDictionary = dictionary ? [dictionary mutableCopy] : [NSMutableDictionary new]; + if (name) { + [mutableDictionary setObject:name forKey:bundleIdentifier]; + } else { + [mutableDictionary removeObjectForKey:bundleIdentifier]; + } + [ADSettings.sharedInstance.userDefaults setObject:mutableDictionary forKey:kCustomAppNames]; +} + +@end diff --git a/AppData/Classes/Model/ADAppData.m b/AppData/Classes/Model/ADAppData.m index 98246b6..b1a5d19 100644 --- a/AppData/Classes/Model/ADAppData.m +++ b/AppData/Classes/Model/ADAppData.m @@ -163,11 +163,11 @@ - (BOOL)isApplication { #pragma mark - Icon Name - (NSString *)customIconName { - return [ADHelper customAppNameForBundleIdentifier:self.bundleIdentifier]; + return [ADSettings customAppNameForBundleIdentifier:self.bundleIdentifier]; } - (void)setCustomIconName:(NSString *)name { - [ADHelper setCustomAppName:name forBundleIdentifier:self.bundleIdentifier]; + [ADSettings setCustomAppName:name forBundleIdentifier:self.bundleIdentifier]; if (self.iconView && [self.iconView respondsToSelector:@selector(_updateLabel)]) { [self.iconView _updateLabel]; } diff --git a/AppData/Classes/Helpers/ADTCC.h b/AppData/Classes/Tools/ADTCC.h similarity index 100% rename from AppData/Classes/Helpers/ADTCC.h rename to AppData/Classes/Tools/ADTCC.h diff --git a/AppData/Classes/Helpers/ADTCC.m b/AppData/Classes/Tools/ADTCC.m similarity index 100% rename from AppData/Classes/Helpers/ADTCC.m rename to AppData/Classes/Tools/ADTCC.m diff --git a/AppData/Classes/Helpers/ADTerminator.h b/AppData/Classes/Tools/ADTerminator.h similarity index 100% rename from AppData/Classes/Helpers/ADTerminator.h rename to AppData/Classes/Tools/ADTerminator.h diff --git a/AppData/Classes/Helpers/ADTerminator.m b/AppData/Classes/Tools/ADTerminator.m similarity index 100% rename from AppData/Classes/Helpers/ADTerminator.m rename to AppData/Classes/Tools/ADTerminator.m diff --git a/AppData/Package/DEBIAN/control b/AppData/Package/DEBIAN/control index f84a08b..ef98239 100644 --- a/AppData/Package/DEBIAN/control +++ b/AppData/Package/DEBIAN/control @@ -1,13 +1,13 @@ Package: com.fouadraheb.appdata Name: AppData -Version: 1.3.4 +Version: 1.3.5 Description: View & Manage Applications Data from your Home Screen Section: Tweaks -Depends: firmware (>= 11.0), mobilesubstrate (>= 0.9.5000), preferenceloader +Depends: firmware (>= 11.0), mobilesubstrate, preferenceloader Conflicts: Architecture: iphoneos-arm Author: Fouad Raheb Maintainer: Fouad Raheb Depiction: https://apt.fouadraheb.com/package/com.fouadraheb.appdata SileoDepiction: https://apt.fouadraheb.com/package/com.fouadraheb.appdata/sileo -Icon: file:///Library/PreferenceLoader/Preferences/AppData@3x.png +Icon: file:///Library/PreferenceBundles/AppDataPrefs.bundle/AppData@3x.png diff --git a/AppData/Package/Library/Application Support/AppData/Resources.bundle/AppDataIcon@3x.png b/AppData/Package/Library/Application Support/AppData/Resources.bundle/AppDataIcon@3x.png index 681ce94c293f5144681b52bbda642a5af337ef47..de160f0f62afae26204154f46f4cee6128945e47 100644 GIT binary patch delta 812 zcmbQoe^h9K1rvMjM5`WkGd%;{WCH^u1#?S1Lo*X&QzIP(BLgD?eFH;%V*_17Q!7&g zD`Sg|Z?7@h8tNJt>lzz`7#dj_nOPYdX&V?@85k%jROA*|`KFd6rX-dmx+IpQ+A0A} zKvz78xl+Z*GTFk^FwI2QB+)2I*CZ|3Qa8~cF;O?o)Huo5($p-`(#&%5TxKm5Q^RC4 zAT-fUGB-}sH83+V)wMK8Hq$juv@}UGOiVE~GPIcdn%PIcAS1sdzc?emz{({*ximL5 zuf#DgIkmVXzo^(w!KNrB&B`e;9m>kdw41z<*~-X9A0!UsDL_~d75I$WY{IgUak4P0 znJY0qP*Nx^aV;ycD$hvG!x|Km&#~yT7#ZprPCmq1Q(y4&*EF!Z*TkN z9WoGTduSf{M51N$1mh(##s%D~?lp?Gdb<>fGp>|6>NRoEM+bZF%_?PbKh-_{d1x;5 z;&2pb5;*coU|FaGKhFVk1E!M;k5$*RKVV)_&wolfiFwYPxSExAjoVmUxbHM6*t}xP zu~l5w?o)4=EC2CO&44z zZZLkdKZd)avcu4#<#y|3?U~vqS{2@iKIs-ea;gs*Ma;(>r2(7JhG9 zF_TG2uvuGu!KWUh+)l~VthZ-Aa%|t~vv8A!aia0|mOYR9OoQ)yaG1H{@d1&wtBR^S hnKsCRE#DaQm%(R;b#A5X)NKqv;OXk;vd$@?2>`3GA)o*N delta 469 zcmX>qG>?CR1rr;?M5`WkQ#~`?WJ42E1#?S1Lo;I&OG_OEBLhPVeFF=9Lt|Y-GbQk^Hr90jFW@dBkP4z4HOv|7+pMF978H@y}fff_fUX<+rwsYJ>`JzSmu7c$`C=9 ztP@&oB8^XUl9V6Dbh6I+VP&a&cAE9S6q6I5_;YV3ZSPPxA}r9X)xcZ8aPEL;hWm@` z@_%v><;8ckq>>o-^p-sA|8?c8INwGFJ7d=uznRV`D|Yp~Z%LGIRI2AnG8Syv7al0k zekAd|1M8HYVAX)~VxIKdu8wnr+e4oOh9+%O<5JqHblOMZ)RnB>CXZVF;#KmWITc$3 zoH!JZ+;8UiZv$p;ZvzRmL^}fsFbkbH)V>|004V&>`(>j3(&sY4E0Tma*Sa{q@njFr z`oyy?XR*RHAMI0HdU&?aRcrddb!O4yKJkB*cQ&rKykB@I=6%cb+jf7KdVJx!!N~jA sZIN^Ww@%~DyZqeFpZ-NR2%P^SKH*~|huSqCLk1x5boFyt=akR{0H0g33IG5A diff --git a/AppData/Package/Library/Application Support/AppData/Resources.bundle/AppDataIconWhite@2x.png b/AppData/Package/Library/Application Support/AppData/Resources.bundle/AppDataIconWhite@2x.png index 610d398a03b1b537b340e4659e7250541371cb9e..0528c66bc9677acf523804fea53ad0868125b6a2 100644 GIT binary patch delta 874 zcma)3TSydP6kc;T7c?;~D@fb6m9_NO|1$r~&Y+RDLKn*lyOB}<{4#g6%6`9?0|AE+dn7pri2|WG+k+v7xe(MN_1MY_o}X0jkN^?a|*@aJ$#>}H=z2$xk3fj|X27>I%Z5mkVhBn6lb1BRhn zr($RMWJGl+Q4T2N7+@|)AOM*JR6|g?$~BEM!5WD5t&{>>BqF6iQ$+~~GGTymBmsmN z#s<!t&vj(G%Bb-RS^cNY>SmJg_0oU<^ICj2+wFX%98t!b(Y{l10rTr&;=P{s#zDEX-=#lVjXm?v{GDR(f^#;>xq~}wWd;6u802m zFYCS&I5EmWR@Bwd_`L9rRyW0tgauMUf>-khCK;+ z?p^0I+dF3+-E$y@J?m(`u+Abq*M=&-_Y2>;6Yt$U_G0VeEnTSLwbZhEdK9G$IpVIa zFB$Hb+L@X?XV={NzRzpx9&~4vIp$`J#N}-t_808;k1Xq%bfNKWQu>Y=u9pw{$qrXj zV^Vf7{Y&S`zOEW~d+U=yobjlsZ=LDB-qdl=_kKx3$?iv)Q+?W$Bbg|&X;LWb&4&dO zr$3Ee`EYgixz61>ZRBx$*t>D;=^FQ; zTQkqr4it-fJBsqvp*^)9%bv*iI6jyVI&+sES&b9)clc{^@8KT~hbwW#t7|VS9k$Ic LS{%GoxPIqP*M%g? delta 639 zcmcaF_?>Tp1rr;?M5`WkQ#~`?WJ42E1#?S1Lo;I&OG_OEBLhPVeFF=9Lt|Y-Gbq4U`lrato|{Q%e$45=#;%_cMvIfFvg|SE{5Xnj5Di zC#UKfnwlEunk1$g>spwb8SAE+m>C!v8wk*xVP;@p zl=XCR42d}WcBVaFlYvNkp@aFwo006YUl?}1c1n`CW7GOk;n9M52fb(P_@RDk)ogQz zM~nErx(7{avtT@`wEpCDy$`=kGr4R1lY25FoqmTuWQ%B&{%}Bc2j_#2|9F-yn9@?f zZxd;i%Y3S^CHldsOS#?`dbDi*3$3Z=Z#&?{F!?)sVh{U<#a!=O9ilsDujGw86tR27 zp+12W-M||UX6tA0aZdig-&z{LDq6QpEJWPw=jZ%?sU{)f+gi$Fgr+IPFee*4I_Fy1;*mQWdV+=c-NJYD@< J);T3K0RV9l;JN?+ diff --git a/AppData/Package/Library/Application Support/AppData/Resources.bundle/AppDataIconWhite@3x.png b/AppData/Package/Library/Application Support/AppData/Resources.bundle/AppDataIconWhite@3x.png index bc1a439947fbe2ea50ce8770200460052315b427..8feba950abc631a9161cd1f78824a84401b7507e 100644 GIT binary patch delta 908 zcma)3X-HI26xL>@{1G*+WKd0$HIQECZf{K^M{RR~R@+SPyYIawO2?XK8AzsC4PlGD zQW2&8ltC65wh|Z>Vq{^I5d}igN=61n1VN3}kBErQk8{4Wedlma-N>Dz56VM^71gRW zJ~0^r4k7kPN-`2D5pa?RLk#^8`3VF_Pz9(Gx$WJ<*i-}{0R%2ZSS47+I1v&RLa(Q+ zs6@>%ET%JyWiZP~^+p-~EI#DemY`Ft$XwHaq-h*bs4<{169HY68PS`yE<)7wiw;vs?+2^is(6!VXH?`WmI=%f`T=q3-z}vDmtAh;0_AdSN_r!${Ll51Yox<(!7n%L)hcCT?r+6(vKsK8fWoOrd~9f&$DyMH%7@E>YQXxCum z>r*Q+GB3F1iNEV}QY0%_o-`a)f5=|B%H7g)=|aQx23H#&5qYp8?`2`ms>5&QG%q@_ z{Z4sbeq(C*WNY1#vjwy2JIZpmc5k{tjA#4rpYyf9@4hi`YLNP-|ICzl{^3j8<#;P5 ODho1mGtLAGtG)w^zc(EK delta 668 zcmZn`n#MoDf{Be`qE(N&sh*i`vZ0Bog1M!hp_#FXrKOI7k%6IwzJZ0lp|P%^nU#rw zm66fLx7Qda&tT$_Ft#!>&^9o(GB8k5sK_m_@=YyCOi3(BoZQbO$^w#{#9XOjYG7%U z3a#tfHD|VQ6S+X>6)%Zk%kUYhq!Zs+(w;ma3baYHnbh zY?)$Wn3$?G`4UU0G7%~#d$GP>}xqwM@avq!L0EO? z)_8l%46A)Yw@Tj>%`R!xNR8OKt?7n({j6A%R<-vpJLP}rJ(hWUE7I|f&{-~Z_k@Wv z)^2O^ke#?wxZ}^+i&;z)wfyznvIrb*EcjdrX3dd8roe18;!g!PRM#KP z+K_Cn(?@c`wL7#fz7cBw5Vd2+rmamkPHf0ZWfh!u)Q{QGB10`q;Owr)cP*QK?n<6~ z;mM01UNcJn`rTjW(q4LKgJ-z+e(j5;H3sW;-QnBcl;A1XA^4p2bn$)DgTe~DWM4fjg#!U diff --git a/AppData/Package/Library/Application Support/AppData/Resources.bundle/ChevronLeft@2x.png b/AppData/Package/Library/Application Support/AppData/Resources.bundle/ChevronLeft@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f27802d061e65d167cc0e574951fca4ed636e742 GIT binary patch literal 712 zcmeAS@N?(olHy`uVBq!ia0vp^Qb4T4!3HE9lTY#iDaPU;cPEB*=VV?2ITfi9o@u_m z3|c@o2LlVE6ayIC6~X~oQX4&n*d zV{i1RO+LCn;gNoq{qrW~{)c;?i0>_!G4pi6IRoR)BlUms6%JQ%xzBKBd@}jyj+X6* zonlWa##lCLlm)hZI&p1Y$5FRc0fHCR1ZHmZ*LG4>+3k>W$Zlyz$OIXtiH5(ICPZ8S!ZIxm=2_pkI})cUTviR)%9$~PU!eYYVx;m`-C`!GAFS=E zwO6*C;mUZxE;H>cQOgGF!3HEno(S#$QjEnx?oJHr&dIz4aw<|IJkxxA z8MJ_G4h9xRDF#-M5+Jr?l!mk27&RD}!QxB|4DFc=EKoImKpF&Y05M1pgl1mA2vrRf zTfhWYt-gR6&Nc>VQ@e5A5=e0tctjR6FeqApFr(`QUi!V zv?S2Bjtyep>VR~Jr;B4q2J4$?3%#2iC5|oUVLz3?7Va}^n~A|14zIQB08`kr9Rc|OIZs*$&Zu8n}gX*Do zG70A^!love9%|#;;BKSswSg^>pKpWUyj?JUHI(XzYyU`+z6Z6g+x?I~M{B!B$`%!Io zPt~u@2L|!~{~O9Dhy%kn0~Ee*r|;KpEfhJXZ@x(7q(U=~(MH3lshv|8S07FJZhq(M zHQA|wGkMgS4<+fA3)&K!(BQ~GStk(bf?S?(mRlXHKvYxa?PCHvr2?+q`{?G{?TKDl0j z_1Qm0vntnu`Uw0+CSsvdDqU%;v3>8G8O-CnR(Dc>H1vdf2@`ruf)&rJO`S# z`NnyV#+~(N&t%91R*eHFYLKZhFy;&DX!B=E^^{jB@(_b^Eyk=7r%)>^KW;xq*St;OXk;vd$@?2>`$l Bgf##F literal 0 HcmV?d00001 diff --git a/AppData/Package/Library/Application Support/AppData/Resources.bundle/ChevronRight@2x.png b/AppData/Package/Library/Application Support/AppData/Resources.bundle/ChevronRight@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b777ee2e31cb9493762d1b858c987a03034e7c7b GIT binary patch literal 732 zcmeAS@N?(olHy`uVBq!ia0vp^Qb4T4!3HE9lTY#iDaPU;cPEB*=VV?2ITfi9o@u_m z3|c@o2LlVE6ay9;2QGRv8% zT{&Z&+oD6VyH{<`krU`F;OE>C+PTE^MQ)D$hUw`q!VEpVHwew`fAcy|t*L7RgXoRA zr27opwI-M_YhR3v`#){=OKFp{6Ykz9-;+9-=Vo*5`Dinh526BgH+lD@)-tI^%%56j z*&uUd>#ikt9aXpW$NIKxRs6DB=;ev%YbqajzPTBlcK;hJ5A@;x|J#)|~y7J`(6`xc= zdTT9o7?)b4hb(>aaYn; zBs(VZwr`xzcyw#y46OvU3nDWPp7_GNURm=qkup^Q;z@xL)FP$9mV@D@dAC#;OXk;vd$@?2>=tu B^+^B# literal 0 HcmV?d00001 diff --git a/AppData/Package/Library/Application Support/AppData/Resources.bundle/ChevronRight@3x.png b/AppData/Package/Library/Application Support/AppData/Resources.bundle/ChevronRight@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..25e508255e0e5416462d8603338ae3d068921a89 GIT binary patch literal 989 zcmeAS@N?(olHy`uVBq!ia0vp^>OgGF!3HEno(S#$QjEnx?oJHr&dIz4aw<|IJkxxA z8MJ_G4h9xRDF#-M5+Jr?l!mk27&RD}!QxB|4DFc=EKoImKpF&Y05M1pgl1mA2vrRf zTfhWYt-gR6&Nc>VQ@e5A5=e0tctjR6FeqApFr(`QUi!V zv?S2B>9%seyMc7Fr;B4q2J4&Y`rgikB5mr6eAuMYX1HGVNs^4<5j)K?`EcT8jTwLW z>KM*$(zwCHrrYG1(lIOMW*3{Fnv&MPYCj2?W88Xk=PzKFD=T}~`2FVI$3^*SpX2L4 z@aTM;t^Yt&Y6IW?MbkF^5Xv!r?VVepd&FwfZkgBqni)fLS)=cdWS@!h2dYcy4`aw$R zqX5wA+6|k<^4uRNylI{uxYsry$D!h;a|Z8}kncIhclsQvd+xssEKqG-kec^ZA!9xB z$yXgu-kpBA|F*8%HFIEy|Np;EpK&cPxYI$w{dU?yZ|6XfW6PZlBw{3*6eLy3?4aNL16HRRf?iCEm3!`E^h-tkhNDc|T$|R?X~JugrysYx z-1F`k!*8X{^6iQ0=M!R;Y~ADJC*It8`tcm8#p@@sFZstlbFBrBbtT_xHqD0X_fM|5 z{j~5L)8h9aDe0M8K~kKr1%XoWCr#ddvPhqK(fJAE%KtuTs(gq2;*M51ay|H}Zp6FW z=G??$<>$wlgZ?+3QSu6texvf=g7w2M*_l66LUOkBK9PLNxbnVwu=~lZ{<(G&nJWHv zoyjrMGP~t+{{(Z;es{OHcu()V$w2X@o;@EXhhMX_ZuhX8$hDGjcUAbCDfd^k2K>$2 z<@}%fokYCdVQ&4(o)h8icakc1YzvHhD*EHR=nux5mzIRKPGXu440{GoS3j3^P60v508YDUyt1ezWet?dzfsWqdQ6qw)li{ynKM@g? z6;YW{A(J|JkWP~G5<9gILV%rsHUjQtNo}e}Cus(?SFxSOZu6LC&^7|P_5*|UK=1`H z{z_j3UjT!5goi~tXrPt@GL~|%fo2lFTfMgiH;b`@y{T_cS78o8y#>HxOqh?q65Bww_Q883JOJV8 zEyy*fvIC%s1eKsW2KsXtSY7}^y#@zO_6vVDIB5Kb==;-ea8U0)_04CG!9kO6Jso6l z(AKp7nT7`a`b_j0dni|32`WJ)s05Xu5>$dpPzfqQmhL=th)%7#c-3f-D^6Z1IY1@rGP{ix)Mzx&x-(R_ zVG6santKc%HBXP6CtRG!SHNW_FE^A^!~( literal 0 HcmV?d00001 diff --git a/AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/AppData@3x.png b/AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/AppData@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7244a32ea88d780c764486d22879624b1d4f025f GIT binary patch literal 1197 zcmeAS@N?(olHy`uU|?}hck&EiP+-!&y15?6=k@e(2?EmLAk4uABnwa6%mGrI1s;*b z3=E1EAk64G%`gEdD3j^p9|EMAfEWaHfLH@cYXgPtuNj?P45Ya|T^vK++_3kKP84DL z@chET$V|15=eORlwq{wXpk)}qlKxstDud-XPtYQzD(~pKU!_yBC%YbTZ1P@v|GHOZ{Nl(XSV_oZ`teUUNFS_{_ zI(FUMkuu%xRM7s`x)~a)S+C`=Y*znVbm_#5^G`o?%c!wUe39YSuD@ZU-4VV0r=DiJ zeSLOlVt1#3T3k<7dqV!vlB&K6yY4UAt#zY7`cSW(|KC#|=g55DvgrBzgzDQD zPa6jOolzlngYTeS^c3T!(D_b5TxA^JChxdCKXrD1{`qH9a_qRI|2J4P{>+e)zY5#L9fzOZdisC541>Zixxl6$^BeVe5>i9LIv&=~5iHzb zt-RZf|JO%1Q{#2ByjM^Aw8}g@YVxj~tLDuAy>!;kke8<)6sJF)KI?-_K^N> zCKEz`1iw80;Qmwtu4ubU4&f^o?7Ei8BXP{lF(7}<_D}nJdpV4E%q;xQJV$QDGNo0k zeYe(LTw}I!S)2CXJL|th$Ub~_>D{y7i3xkp1`C$g|F(b4v3*LpdHieX-#2*o#Xqlq z&2fEq9&4fa*L9ht&9B!kcr5j5;*KM#dWD_dF^`0{2NwMO=le)#I!Gu!11g@!4Oeiz z;jk_+b^QN-_+Qo^V6qSZC5yM$_IpbgN&u6^RmIJ&)1!7QSs9%rUir@3p4uNr-R~WWmDzNDdh{p3cdvwhe{i?n%D?NK@Eooy&n#|j zJip!Oo${TXVWF?Pe<`*4uR19v|4_}fRB=hvraipTn?f!-UjHYuT(9)+Hv+^Rh{`mT6*0=RRYp>j!AN{ND__iHf)jz`cHhzuSX0x;X z*Pff2CzI-Yo^?K~Nq0+SJA79{t?lz${)O@k1s~k_I3C4(k2@t-r()Q`5;!NjM&RT8 z9Sfs5=GIOzJ`}T8{r%G;8O@FH#y=S*AK6*8_`AT-_nQnArCEOcUUxKw_p8u5haWel zBs-bLzn&Tq`}W15)Xoy6qF;`FoYyK&Zw~4!QEGC#RL#CO=Dd{sM%(Qdo6~?gD*moq zBfO!`IPm13k6Jr)HvaCIn!eP>=l8DAa_tN=H|d@q3XguaJo%q~<*xW9>%Rh*#lJ-? zH!2Wke%3Jq=$Ct6sw@9*eUooD*|*r`%sz!*v$pM7b literal 0 HcmV?d00001 diff --git a/AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/AppDataPrefs b/AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/AppDataPrefs new file mode 100755 index 0000000000000000000000000000000000000000..d6de945411dfe9e95359d48c70e8c0d6f80f303f GIT binary patch literal 232720 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 +RD4twu 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 literal 0 HcmV?d00001 diff --git a/AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/Info.plist b/AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..69c034b24074aea8f7d62bc30c67280234f7b4a3 GIT binary patch literal 815 zcmYjO%Wl&^6!i?R^6a#QmcA&Yly{9CPy;K}#4SXSG{g=q5Y?L4lVrr$Gx$-ckYK@v z1v@?fwGu*z74QS)C)mOgi6tABj8j|fY|cIRoHM#}rzIE-BTf5>h5_8Oci;X4eFqO6 zK63O}KN=VuI(}k!TKs zEf!Z~73xzj z_Lj^vY$H@PYjSFb3d~9jhv90YESF0ivWPv()@?M=DA&o;m{V3o}E`9Uz6$B96P#ZY#=B_J!N - - - - entry - - cell - PSLinkCell - icon - AppData.png - label - AppData - - items - - - cell - PSGroupCell - isStaticText - - footerText - The popup can be activated by either swiping up on the app icon or through a button in the force touch menu - label - Activation - - - cell - PSSwitchCell - defaults - com.fouadraheb.appdata - key - SwipeUpEnabled - default - - label - Swipe Up - PostNotification - com.fouadraheb.appdata.preferences-changed - - - cell - PSSwitchCell - defaults - com.fouadraheb.appdata - key - ForceTouchMenuEnabled - default - - label - Force Touch Menu - PostNotification - com.fouadraheb.appdata.preferences-changed - - - cell - PSGroupCell - label - Info - footerText - - Copy the app bundle Identifier by tapping it -- Edit app icon name by tapping it -- Filza is required to open folders -- Clearing Caches will delete the app's "Caches" and "Tmp" folders -- Clearing app data will delete Library/Documents/Tmp folders and reset permissions - - - cell - PSGroupCell - label - Developer - footerText - Source code on github.com/FouadRaheb/AppData - - - cell - PSLinkCell - label - Fouad Raheb - - - title - AppData - - diff --git a/AppData/Package/Library/PreferenceLoader/Preferences/AppData@2x.png b/AppData/Package/Library/PreferenceLoader/Preferences/AppData@2x.png deleted file mode 100644 index d23631e8aa25d2b2ff485d72d67ed157aa4d0610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30466 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 diff --git a/AppData/Package/Library/PreferenceLoader/Preferences/AppData@3x.png b/AppData/Package/Library/PreferenceLoader/Preferences/AppData@3x.png deleted file mode 100644 index 062e69940dfeba597af17036ac2cc8eac5ca6a78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3067 zcmcIm3v3hj88=t4X$Hw?v;WzSL#puT zq*?O${C&Uw_x----O8*5^Ag8S9BVR}5;M}BZupyLd`FLj*YcD9^ueDo!Sn*nWO~VF zd`G0cM;4n*qd!wT`Fg%}VeCB3wZSC{@yHLLjGRfk&(<6FCW;H4~W;=Ai*U&;=yy_XRXQY)2z@d3bM#aTJL_ z^fEh|YB)slU0H}j4FQBUGnhzPX@up>BxA91+^YyhkT#sK;iLs48Qx0p6ote-DD)PR zWZvzZ8}kMK+0jy65Arx(RaIrKvY6G77biK6!wCwfC=4Pntva9!VJx5}4_I&lO$;eP zT~PywVNobiD|9;wnMOnK2jgY~S}aX4VR%>w;-r}{LK*5RtW-n@_@5osj915srnFZarF>}k{EXwtO)rc>5)Vn_<$eU)*zOQ z^V1c1Fr7o_8JZzxL0EYR)X>DCLEaGpg06-#4(gai~u*mMGE60Gb|%|NqB7mSC||2zUW}?%?SE9?_G{>(Gh}zdL?JIk=&#EPC<>;o!yt zC)#cJ4;yiCPzQ!R6|NzpO|@8Q=Lp_-k!KFSTWE^0QZz|mQVC7MjRF^pjpbNOqOBaD ztfVXgVMc_7PkF2@R+a?;MVl_$;e{?Jn8Xnu&QwqM+>I|!FUd)LzU7)+o~&`>RE#mUK&zFYRfrYW1= z-^@DyZn!o(CbTEuH>D{zSOJaOnmz8+SW4U^xwC)N{c!_=4=a# zE^lh}eA3uq8`;OFY;U^wuk71D+1cz?`znroIa1l;t2laS)arHXyBcfW`7Yt@J>Be* zmgP^cYJ0WeQs_pge?#Y(n~B6hDYv}7Z?klN<;fd~YkC%<`;ynp>X)WEuD197t#WdA z((fy(PZZ^L-fd3V7&hN2Ur2E?KTrCq`_0AKo#LPV&x*8!JEh8wXHT53J9##9cH^!yc|BVTH#GA{?BDiWX$oT4yX}*ccGcLg zjysrptZedgixy>0LzE9c5Z+7rytn7#AH831?0=*5_)@H8l6U1VwtY{veN=y7+={lZ z>l(U_jT=#3m-BA@KDk%T+U)$eX>Llczu!zO__Ub+cIB1{r;Dq>wP4qja~GvE`t{bW zcKKTCIx<`7!rtw^zH4uM@qt@A|GVnGrhUbedbYe>H{sHf zQ`v{lcCtTRnsvfb)_vC6v}$$V{+&gA4V&t#_+9P4xm$jrarW}U^Tz9WM%n`B?m5M^ F{{=~&S(pF- diff --git a/AppData/Package/Library/PreferenceLoader/Preferences/AppDataPrefs.plist b/AppData/Package/Library/PreferenceLoader/Preferences/AppDataPrefs.plist new file mode 100644 index 0000000..3efadf5 --- /dev/null +++ b/AppData/Package/Library/PreferenceLoader/Preferences/AppDataPrefs.plist @@ -0,0 +1,19 @@ + + + + + entry + + bundle + AppDataPrefs + cell + PSLinkCell + icon + AppData.png + label + AppData + isController + + + + diff --git a/AppDataPrefs/ADPreferencesController.h b/AppDataPrefs/ADPreferencesController.h new file mode 100644 index 0000000..3227f06 --- /dev/null +++ b/AppDataPrefs/ADPreferencesController.h @@ -0,0 +1,16 @@ +// +// ADPreferencesController.m +// AppDataPrefs +// +// Created by Fouad Raheb on 3/29/21. +// + +#import +#import + +@interface PSViewController : UIViewController +@end + +@interface ADPreferencesController : PSViewController + +@end diff --git a/AppDataPrefs/ADPreferencesController.m b/AppDataPrefs/ADPreferencesController.m new file mode 100644 index 0000000..f05585c --- /dev/null +++ b/AppDataPrefs/ADPreferencesController.m @@ -0,0 +1,185 @@ +// +// ADPreferencesController.m +// AppDataPrefs +// +// Created by Fouad Raheb on 3/29/21. +// + +#import "ADPreferencesController.h" +#import "ADSettings.h" + +#import "ADSwitchTableViewCell.h" +#import "ADHeaderTableViewCell.h" +#import "ADSelectListTableViewController.h" + +@interface ADPreferencesInfoViewController : UITableViewController +@end + +@interface ADPreferencesController () +@property (nonatomic, strong) UITableView *tableView; +@end + +@implementation ADPreferencesController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; + self.tableView.delegate = self; + self.tableView.dataSource = self; + [self.view addSubview:self.tableView]; + self.tableView.translatesAutoresizingMaskIntoConstraints = NO; + [self.tableView.topAnchor constraintEqualToAnchor:self.view.topAnchor].active = YES; + [self.tableView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor].active = YES; + [self.tableView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor].active = YES; + [self.tableView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor].active = YES; + + [self.tableView registerClass:[ADHeaderTableViewCell class] forCellReuseIdentifier:ADHeaderTableViewCell.reuseIdentifier]; + [self.tableView registerClass:[ADSwitchTableViewCell class] forCellReuseIdentifier:ADSwitchTableViewCell.reuseIdentifier]; + + self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 5; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + switch (section) { + case 0: return 1; + case 1: return 2; + case 2: return 1; + case 3: return 1; + case 4: return 2; + default: return 0; + } +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath { + if (indexPath.section == 0) { + ADHeaderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ADHeaderTableViewCell.reuseIdentifier]; + cell.titleLabel.text = @"AppData"; + cell.detailLabel.text = @"View & Manage Apps Data from Homescreen"; + return cell; + } else if (indexPath.section == 1) { + if (indexPath.row == 0) { + ADSwitchTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ADSwitchTableViewCell.reuseIdentifier]; + [cell configureWithTitle:@"Swipe Up" switchKey:kSwipeUpEnabled]; + return cell; + } else if (indexPath.row == 1) { + ADSwitchTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ADSwitchTableViewCell.reuseIdentifier]; + [cell configureWithTitle:@"Force Touch Menu" switchKey:kForceTouchMenuEnabled]; + return cell; + } + } else if (indexPath.section == 2) { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AppearanceCellIdentifier"]; + if (!cell) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"AppearanceCellIdentifier"]; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.textLabel.text = @"Appearance"; + } + cell.detailTextLabel.text = [ADSettings titleForAppearanceStyle:[ADSettings integerForKey:kAppearance]]; + return cell; + } else if (indexPath.section == 3) { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"InfoCellIdentifier"]; + if (!cell) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"InfoCellIdentifier"]; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.textLabel.text = @"Info"; + } + return cell; + } else if (indexPath.section == 4) { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DeveloperCellIdentifier"]; + if (!cell) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"DeveloperCellIdentifier"]; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + } + if (indexPath.row == 0) { + cell.textLabel.text = @"Fouad Raheb"; + cell.detailTextLabel.text = @"Twitter"; + } else if (indexPath.row == 1) { + cell.textLabel.text = @"Source Code"; + cell.detailTextLabel.text = @"GitHub"; + } + return cell; + } + return nil; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + switch (section) { + case 1: return @"Activation"; + case 2: return nil; + case 4: return @"Developer"; + default: return nil; + } +} + +- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section { + switch (section) { + case 1: return @"The popup can be activated by either swiping up on the app icon or through a button in the force touch menu"; + default: return nil; + } +} + +#pragma mark - UITableViewDelegate + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + switch (indexPath.section) { + case 1: return ADSwitchTableViewCell.height; + default: return UITableViewAutomaticDimension; + } +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + if (indexPath.section == 2) { + UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; + ADSelectListTableViewController *listController = [[ADSelectListTableViewController alloc] initWithStyle:UITableViewStyleGrouped + title:@"Appearance" + items:[ADSettings appearanceTitles] + values:[ADSettings appearanceValues] + currentValue:[NSString stringWithFormat:@"%td",[ADSettings appearanceStyle]] + popViewOnSelect:YES + changeBlock:^(NSString *value) { + [ADSettings setInteger:[value integerValue] forKey:kAppearance]; + cell.detailTextLabel.text = [ADSettings titleForAppearanceStyle:[value integerValue]]; + }]; + [self.navigationController pushViewController:listController animated:YES]; + } else if (indexPath.section == 3) { + [self.navigationController pushViewController:[ADPreferencesInfoViewController new] animated:YES]; + } else if (indexPath.section == 4) { + if (indexPath.item == 0) { + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://twitter.com/FouadRaheb"] options:@{} completionHandler:nil]; + } else if (indexPath.item == 1) { + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://github.com/FouadRaheb/AppData"] options:@{} completionHandler:nil]; + } + } +} + +@end + +@implementation ADPreferencesInfoViewController + +- (instancetype)initWithStyle:(UITableViewStyle)style { + if (self = [super initWithStyle:UITableViewStyleGrouped]) { + self.title = @"Info"; + } + return self; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section { + return @"- Copy the app bundle Identifier by tapping it\n\ +- Edit app icon name by tapping it\n\ +- Filza is required to open folders\n\ +- Clearing Caches will delete the app's \"Caches\" and \"Tmp\" folders\n\ +- Clearing app data will delete Library/Documents/Tmp folders and reset permissions"; +} + +@end diff --git a/AppDataPrefs/Classes/ADPrefsHelper.h b/AppDataPrefs/Classes/ADPrefsHelper.h new file mode 100644 index 0000000..1f8d014 --- /dev/null +++ b/AppDataPrefs/Classes/ADPrefsHelper.h @@ -0,0 +1,18 @@ +// +// ADPrefsHelper.h +// AppDataPrefs +// +// Created by Fouad Raheb on 3/29/21. +// + +#import +#import + +@interface ADPrefsHelper : NSObject ++ (UIImage *)imageNamed:(NSString *)imageName; +@end + +// Private +@interface UIImage () ++ (UIImage *)imageNamed:(NSString *)name inBundle:(NSBundle *)bundle; +@end diff --git a/AppDataPrefs/Classes/ADPrefsHelper.m b/AppDataPrefs/Classes/ADPrefsHelper.m new file mode 100644 index 0000000..37a69e2 --- /dev/null +++ b/AppDataPrefs/Classes/ADPrefsHelper.m @@ -0,0 +1,34 @@ +// +// ADPrefsHelper.h +// AppDataPrefs +// +// Created by Fouad Raheb on 3/29/21. +// + +#import "ADPrefsHelper.h" +#import + +@interface ADPrefsHelper () +@property (nonatomic, strong) NSBundle *prefsBundle; +@end + +@implementation ADPrefsHelper + ++ (instancetype)sharedInstance { + static dispatch_once_t p = 0; + __strong static ADPrefsHelper *_sharedInstance = nil; + dispatch_once(&p, ^{ + _sharedInstance = [[self alloc] init]; + + _sharedInstance.prefsBundle = [NSBundle bundleForClass:self.class]; + }); + return _sharedInstance; +} + +#pragma mark - Resources + ++ (UIImage *)imageNamed:(NSString *)imageName { + return [UIImage imageNamed:imageName inBundle:ADPrefsHelper.sharedInstance.prefsBundle]; +} + +@end diff --git a/AppDataPrefs/Classes/Cells/ADHeaderTableViewCell.h b/AppDataPrefs/Classes/Cells/ADHeaderTableViewCell.h new file mode 100644 index 0000000..d5e21c3 --- /dev/null +++ b/AppDataPrefs/Classes/Cells/ADHeaderTableViewCell.h @@ -0,0 +1,17 @@ +// +// ADHeaderTableViewCell.h +// AppDataPrefs +// +// Created by Fouad Raheb on 3/29/21. +// + +#import + +@interface ADHeaderTableViewCell : UITableViewCell + +@property (nonatomic, strong) UILabel *titleLabel; +@property (nonatomic, strong) UILabel *detailLabel; + ++ (NSString *)reuseIdentifier; + +@end diff --git a/AppDataPrefs/Classes/Cells/ADHeaderTableViewCell.m b/AppDataPrefs/Classes/Cells/ADHeaderTableViewCell.m new file mode 100644 index 0000000..7c3dbd4 --- /dev/null +++ b/AppDataPrefs/Classes/Cells/ADHeaderTableViewCell.m @@ -0,0 +1,73 @@ +// +// ADHeaderTableViewCell.h +// AppDataPrefs +// +// Created by Fouad Raheb on 3/29/21. +// + +#import "ADHeaderTableViewCell.h" + +@implementation ADHeaderTableViewCell + ++ (NSString *)reuseIdentifier { + return @"ADHeaderTableViewCellIdentifier"; +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + [self initialize]; + } + return self; +} + +- (void)awakeFromNib { + [super awakeFromNib]; + [self initialize]; +} + +- (void)initialize { + self.selectionStyle = UITableViewCellSelectionStyleNone; + self.separatorInset = UIEdgeInsetsMake(0, CGFLOAT_MAX, 0, 0); + self.backgroundColor = [UIColor clearColor]; + + // Title Label + self.titleLabel = [[UILabel alloc] init]; + self.titleLabel.textAlignment = NSTextAlignmentCenter; + self.titleLabel.font = [UIFont fontWithName:@"AvenirNext-Bold" size:28]; + [self.contentView addSubview:self.titleLabel]; + + self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO; + [self.titleLabel.topAnchor constraintEqualToAnchor:self.contentView.topAnchor constant:15].active = YES; + [self.titleLabel.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor].active = YES; + [self.titleLabel.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor].active = YES; + [self.titleLabel.heightAnchor constraintEqualToConstant:30].active = YES; + + // Detail Label + self.detailLabel = [[UILabel alloc] init]; + self.detailLabel.textAlignment = NSTextAlignmentCenter; + self.detailLabel.font = [UIFont systemFontOfSize:15]; + if (@available(iOS 13.0, *)) { + self.detailLabel.textColor = [UIColor secondaryLabelColor]; + } else { + self.detailLabel.textColor = [UIColor grayColor]; + } + [self.contentView addSubview:self.detailLabel]; + + self.detailLabel.translatesAutoresizingMaskIntoConstraints = NO; + [self.detailLabel.topAnchor constraintEqualToAnchor:self.titleLabel.bottomAnchor constant:5].active = YES; + [self.detailLabel.leadingAnchor constraintEqualToAnchor:self.contentView.leadingAnchor constant:15].active = YES; + [self.detailLabel.trailingAnchor constraintEqualToAnchor:self.contentView.trailingAnchor constant:-15].active = YES; + [self.detailLabel.bottomAnchor constraintEqualToAnchor:self.contentView.bottomAnchor constant:-15].active = YES; + [self.detailLabel.heightAnchor constraintGreaterThanOrEqualToConstant:20].active = YES; +} + +- (void)addSubview:(UIView *)view { + // The separator has a height of 0.5pt on a retina display and 1pt on non-retina. + // Prevent subviews with this height from being added. + if (CGRectGetHeight(view.frame) * [UIScreen mainScreen].scale == 1) { + return; + } + [super addSubview:view]; +} + +@end diff --git a/AppDataPrefs/Classes/Cells/ADSwitchTableViewCell.h b/AppDataPrefs/Classes/Cells/ADSwitchTableViewCell.h new file mode 100644 index 0000000..ec60936 --- /dev/null +++ b/AppDataPrefs/Classes/Cells/ADSwitchTableViewCell.h @@ -0,0 +1,17 @@ +// +// ADSwitchTableViewCell.h +// AppDataPrefs +// +// Created by Fouad Raheb on 3/29/21. +// + +#import + +@interface ADSwitchTableViewCell : UITableViewCell + ++ (NSString *)reuseIdentifier; ++ (CGFloat)height; + +- (void)configureWithTitle:(NSString *)title switchKey:(NSString *)key; + +@end diff --git a/AppDataPrefs/Classes/Cells/ADSwitchTableViewCell.m b/AppDataPrefs/Classes/Cells/ADSwitchTableViewCell.m new file mode 100644 index 0000000..a31771b --- /dev/null +++ b/AppDataPrefs/Classes/Cells/ADSwitchTableViewCell.m @@ -0,0 +1,58 @@ +// +// ADSwitchTableViewCell.h +// AppDataPrefs +// +// Created by Fouad Raheb on 3/29/21. +// + +#import "ADSwitchTableViewCell.h" +#import "ADSettings.h" + +@interface ADSwitchTableViewCell () +@property (nonatomic, strong) UISwitch *theSwitch; +@property (nonatomic, strong) NSString *switchKey; +@end + +@implementation ADSwitchTableViewCell + ++ (NSString *)reuseIdentifier { + return @"ADSwitchTableViewCellIdentifier"; +} + ++ (CGFloat)height { + return UITableViewAutomaticDimension; +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + [self initialize]; + } + return self; +} + +- (void)awakeFromNib { + [super awakeFromNib]; + [self initialize]; +} + +- (void)initialize { + self.selectionStyle = UITableViewCellSelectionStyleNone; + + self.theSwitch = [[UISwitch alloc] initWithFrame:CGRectZero]; + [self.theSwitch addTarget:self action:@selector(didChangeSwitch:) forControlEvents:UIControlEventValueChanged]; + self.accessoryView = self.theSwitch; +} + +- (void)configureWithTitle:(NSString *)title switchKey:(NSString *)key { + self.textLabel.text = title; + + self.switchKey = key; + + self.theSwitch.on = [ADSettings boolForKey:self.switchKey]; +} + +- (void)didChangeSwitch:(UISwitch *)theSwitch { + [ADSettings setObject:@(theSwitch.isOn) forKey:self.switchKey]; +} + +@end diff --git a/AppDataPrefs/Classes/Controllers/ADSelectListTableViewController.h b/AppDataPrefs/Classes/Controllers/ADSelectListTableViewController.h new file mode 100644 index 0000000..fa39088 --- /dev/null +++ b/AppDataPrefs/Classes/Controllers/ADSelectListTableViewController.h @@ -0,0 +1,18 @@ +// +// ADSelectListTableViewController.m +// AppDataPrefs +// +// Created by Fouad Raheb on 3/29/21. +// + +#import + +typedef void (^ADListItemChange)(NSString *value); + +@interface ADSelectListTableViewController : UITableViewController + +@property (nonatomic, strong) NSString *footerText; + +- (instancetype)initWithStyle:(UITableViewStyle)style title:(NSString *)title items:(NSArray *)items values:(NSArray *)values currentValue:(NSString *)value popViewOnSelect:(BOOL)back changeBlock:(ADListItemChange)block; + +@end diff --git a/AppDataPrefs/Classes/Controllers/ADSelectListTableViewController.m b/AppDataPrefs/Classes/Controllers/ADSelectListTableViewController.m new file mode 100644 index 0000000..0a3ef24 --- /dev/null +++ b/AppDataPrefs/Classes/Controllers/ADSelectListTableViewController.m @@ -0,0 +1,73 @@ +// +// ADSelectListTableViewController.m +// AppDataPrefs +// +// Created by Fouad Raheb on 3/29/21. +// + +#import "ADSelectListTableViewController.h" + +@interface ADSelectListTableViewController () + +@property (nonatomic, strong) ADListItemChange itemChangedBlock; +@property (nonatomic, strong) NSArray *listValues; +@property (nonatomic, strong) NSArray *listItems; +@property (nonatomic, strong) NSString *currentValue; +@property (nonatomic, assign) BOOL popView; + +@end + +@implementation ADSelectListTableViewController + +- (instancetype)initWithStyle:(UITableViewStyle)style title:(NSString *)title items:(NSArray *)items values:(NSArray *)values currentValue:(NSString *)value popViewOnSelect:(BOOL)back changeBlock:(ADListItemChange)block { + self.title = title; + self.listItems = items; + self.listValues = values; + self.currentValue = value; + self.popView = back; + self.itemChangedBlock = block; + return [self initWithStyle:style]; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section { + return self.listItems.count; +} + +- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section { + return self.footerText; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *cellIdentifier = @"ADListCellIdentifier"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (!cell) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; + } + cell.textLabel.text = [self.listItems objectAtIndex:[indexPath row]]; + if ([[self.listValues objectAtIndex:indexPath.row] isEqualToString:self.currentValue]) { + cell.accessoryType = UITableViewCellAccessoryCheckmark; + } else { + cell.accessoryType = UITableViewCellAccessoryNone; + } + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if (self.itemChangedBlock) self.itemChangedBlock([self.listValues objectAtIndex:[indexPath row]]); + [tableView deselectRowAtIndexPath:indexPath animated:YES]; + + for (UITableViewCell *cell in tableView.visibleCells) { + cell.accessoryType = UITableViewCellAccessoryNone; + } + [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; + + if (self.popView) { + [self.navigationController popViewControllerAnimated:YES]; + } +} + +@end diff --git a/AppDataPrefs/Info.plist b/AppDataPrefs/Info.plist new file mode 100644 index 0000000..e6d7025 --- /dev/null +++ b/AppDataPrefs/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSPrincipalClass + ADPreferencesController + + diff --git a/AppDataPrefs/Resources/AppData@2x.png b/AppDataPrefs/Resources/AppData@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0eee98dcea1cc9d8ce012a76e44241c2be7d16f0 GIT binary patch literal 3200 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 literal 0 HcmV?d00001 diff --git a/PackageInfo/changelog.json b/PackageInfo/changelog.json index e0a383f..14edb66 100755 --- a/PackageInfo/changelog.json +++ b/PackageInfo/changelog.json @@ -1,4 +1,13 @@ [ + { + "version":"1.3.5", + "date":"2021-03-30 14:44:50", + "changes":[ + "Added option to select default appearance color (Dark by default)", + "Moved AppData force touch menu item to system section", + "Fixed reset permissions crash on iOS 12" + ] + }, { "version":"1.3.4", "date":"2021-03-29 01:48:30", From c1fdf39a3cfa4d1fbf5cce598996615946c598b9 Mon Sep 17 00:00:00 2001 From: Fouad Raheb Date: Wed, 31 Mar 2021 10:20:48 +0300 Subject: [PATCH 2/3] Release 1.3.6 - Remove AppData Item from Widgets Menu --- AppData/AppData.mm | 21 +++++++-------- AppData/AppData.xm | 11 ++++---- .../Controller/DataSource/ADMainDataSource.m | 24 +++++++++--------- AppData/Headers.h | 2 +- AppData/Package/DEBIAN/control | 2 +- .../AppDataPrefs.bundle/AppDataPrefs | Bin 232720 -> 232688 bytes PackageInfo/changelog.json | 7 ++--- 7 files changed, 35 insertions(+), 32 deletions(-) diff --git a/AppData/AppData.mm b/AppData/AppData.mm index 40d258c..4af4bdc 100644 --- a/AppData/AppData.mm +++ b/AppData/AppData.mm @@ -22,9 +22,9 @@ #define _LOGOS_RETURN_RETAINED #endif -@class SBUIAppIconForceTouchControllerDataProvider; @class SBSApplicationShortcutItem; @class SBIconImageView; @class SBApplication; @class SBFolderIcon; @class SBIconView; @class SBUIAppIconForceTouchController; +@class SBIconView; @class SBIconImageView; @class SBFolderIcon; @class SBApplication; @class SBSApplicationShortcutItem; @class SBWidgetIcon; @class SBUIAppIconForceTouchController; @class SBUIAppIconForceTouchControllerDataProvider; -static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$SBFolderIcon(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("SBFolderIcon"); } return _klass; } +static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$SBFolderIcon(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("SBFolderIcon"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$SBWidgetIcon(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("SBWidgetIcon"); } return _klass; } #line 3 "/Users/fouad/Projects/AppData/AppData/AppData.xm" static SBIconImageView * (*_logos_orig$SHARED_HOOKS$SBIconImageView$initWithFrame$)(_LOGOS_SELF_TYPE_NORMAL SBIconImageView* _LOGOS_SELF_CONST, SEL, CGRect); static SBIconImageView * _logos_method$SHARED_HOOKS$SBIconImageView$initWithFrame$(_LOGOS_SELF_TYPE_NORMAL SBIconImageView* _LOGOS_SELF_CONST, SEL, CGRect); static void _logos_method$SHARED_HOOKS$SBIconImageView$appDataPreferencesChanged(_LOGOS_SELF_TYPE_NORMAL SBIconImageView* _LOGOS_SELF_CONST, SEL); static void _logos_method$SHARED_HOOKS$SBIconImageView$appDataDidSwipeUp$(_LOGOS_SELF_TYPE_NORMAL SBIconImageView* _LOGOS_SELF_CONST, SEL, UIGestureRecognizer *); static NSString * (*_logos_orig$SHARED_HOOKS$SBApplication$displayName)(_LOGOS_SELF_TYPE_NORMAL SBApplication* _LOGOS_SELF_CONST, SEL); static NSString * _logos_method$SHARED_HOOKS$SBApplication$displayName(_LOGOS_SELF_TYPE_NORMAL SBApplication* _LOGOS_SELF_CONST, SEL); @@ -92,12 +92,12 @@ #pragma mark - ForceTouch Menu -static void (*_logos_orig$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$)(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL, NSArray *); static void _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL, NSArray *); static void (*_logos_meta_orig$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL, SBSApplicationShortcutItem *, NSString *, SBIconView *); static void _logos_meta_method$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL, SBSApplicationShortcutItem *, NSString *, SBIconView *); static BOOL _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$ad_isFolderIcon(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL); static BOOL (*_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut)(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); static BOOL _logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); static NSUInteger (*_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection)(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); static NSUInteger _logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); +static void (*_logos_orig$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$)(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL, NSArray *); static void _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL, NSArray *); static void (*_logos_meta_orig$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL, SBSApplicationShortcutItem *, NSString *, SBIconView *); static void _logos_meta_method$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL, SBSApplicationShortcutItem *, NSString *, SBIconView *); static BOOL _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$ad_isSupportedIcon(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST, SEL); static BOOL (*_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut)(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); static BOOL _logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); static NSUInteger (*_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection)(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); static NSUInteger _logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection(_LOGOS_SELF_TYPE_NORMAL SBSApplicationShortcutItem* _LOGOS_SELF_CONST, SEL); static void _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd, NSArray * items) { - if ([ADSettings forceTouchMenuEnabled] && ![self ad_isFolderIcon]) { + if ([ADSettings forceTouchMenuEnabled] && [self ad_isSupportedIcon]) { NSMutableArray *newItems = [NSMutableArray arrayWithArray:items?:@[]]; SBSApplicationShortcutItem *shortcutItem = [ADHelper applicationShortcutItem]; if (shortcutItem) { @@ -110,6 +110,7 @@ } static void _logos_meta_method$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST __unused self, SEL __unused _cmd, SBSApplicationShortcutItem * item, NSString * bundleID, SBIconView * iconView) { + NSLog(@"[AppData]: iconView: %@",iconView); if ([item.type isEqualToString:kSBApplicationShortcutItemType]) { [ADDataViewController presentControllerFromSBIconView:iconView fromContextMenu:YES]; } else { @@ -118,12 +119,12 @@ } -static BOOL _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$ad_isFolderIcon(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) { - +static BOOL _logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$ad_isSupportedIcon(_LOGOS_SELF_TYPE_NORMAL SBIconView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) { if ([self respondsToSelector:@selector(icon)]) { - return [self.icon isKindOfClass:_logos_static_class_lookup$SBFolderIcon()]; + return ![self.icon isKindOfClass:_logos_static_class_lookup$SBFolderIcon()] + && ![self.icon isKindOfClass:_logos_static_class_lookup$SBWidgetIcon()]; } - return NO; + return YES; } @@ -195,11 +196,11 @@ -static __attribute__((constructor)) void _logosLocalCtor_b2edea14(int __unused argc, char __unused **argv, char __unused **envp) { +static __attribute__((constructor)) void _logosLocalCtor_f1f8d160(int __unused argc, char __unused **argv, char __unused **envp) { {Class _logos_class$SHARED_HOOKS$SBIconImageView = objc_getClass("SBIconImageView"); MSHookMessageEx(_logos_class$SHARED_HOOKS$SBIconImageView, @selector(initWithFrame:), (IMP)&_logos_method$SHARED_HOOKS$SBIconImageView$initWithFrame$, (IMP*)&_logos_orig$SHARED_HOOKS$SBIconImageView$initWithFrame$);{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'v'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$SHARED_HOOKS$SBIconImageView, @selector(appDataPreferencesChanged), (IMP)&_logos_method$SHARED_HOOKS$SBIconImageView$appDataPreferencesChanged, _typeEncoding); }{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'v'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; memcpy(_typeEncoding + i, @encode(UIGestureRecognizer *), strlen(@encode(UIGestureRecognizer *))); i += strlen(@encode(UIGestureRecognizer *)); _typeEncoding[i] = '\0'; class_addMethod(_logos_class$SHARED_HOOKS$SBIconImageView, @selector(appDataDidSwipeUp:), (IMP)&_logos_method$SHARED_HOOKS$SBIconImageView$appDataDidSwipeUp$, _typeEncoding); }{ class_addMethod(_logos_class$SHARED_HOOKS$SBIconImageView, @selector(adSwipeGestureRecognizer), (IMP)&_logos_method$SHARED_HOOKS$SBIconImageView$adSwipeGestureRecognizer$, [[NSString stringWithFormat:@"%s@:", @encode(UISwipeGestureRecognizer *)] UTF8String]);class_addMethod(_logos_class$SHARED_HOOKS$SBIconImageView, @selector(setAdSwipeGestureRecognizer:), (IMP)&_logos_method$SHARED_HOOKS$SBIconImageView$setAdSwipeGestureRecognizer$, [[NSString stringWithFormat:@"v@:%s", @encode(UISwipeGestureRecognizer *)] UTF8String]);} Class _logos_class$SHARED_HOOKS$SBApplication = objc_getClass("SBApplication"); MSHookMessageEx(_logos_class$SHARED_HOOKS$SBApplication, @selector(displayName), (IMP)&_logos_method$SHARED_HOOKS$SBApplication$displayName, (IMP*)&_logos_orig$SHARED_HOOKS$SBApplication$displayName);} if (@available(iOS 13, *)) { - {Class _logos_class$IOS13_AND_NEWER_HOOKS$SBIconView = objc_getClass("SBIconView"); Class _logos_metaclass$IOS13_AND_NEWER_HOOKS$SBIconView = object_getClass(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView); MSHookMessageEx(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(setApplicationShortcutItems:), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$, (IMP*)&_logos_orig$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$);MSHookMessageEx(_logos_metaclass$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(activateShortcut:withBundleIdentifier:forIconView:), (IMP)&_logos_meta_method$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$, (IMP*)&_logos_meta_orig$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$);{ char _typeEncoding[1024]; unsigned int i = 0; memcpy(_typeEncoding + i, @encode(BOOL), strlen(@encode(BOOL))); i += strlen(@encode(BOOL)); _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(ad_isFolderIcon), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$ad_isFolderIcon, _typeEncoding); }Class _logos_class$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem = objc_getClass("SBSApplicationShortcutItem"); MSHookMessageEx(_logos_class$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem, @selector(sbh_isSystemShortcut), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut, (IMP*)&_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut);MSHookMessageEx(_logos_class$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem, @selector(sbh_shortcutSection), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection, (IMP*)&_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection);} + {Class _logos_class$IOS13_AND_NEWER_HOOKS$SBIconView = objc_getClass("SBIconView"); Class _logos_metaclass$IOS13_AND_NEWER_HOOKS$SBIconView = object_getClass(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView); MSHookMessageEx(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(setApplicationShortcutItems:), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$, (IMP*)&_logos_orig$IOS13_AND_NEWER_HOOKS$SBIconView$setApplicationShortcutItems$);MSHookMessageEx(_logos_metaclass$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(activateShortcut:withBundleIdentifier:forIconView:), (IMP)&_logos_meta_method$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$, (IMP*)&_logos_meta_orig$IOS13_AND_NEWER_HOOKS$SBIconView$activateShortcut$withBundleIdentifier$forIconView$);{ char _typeEncoding[1024]; unsigned int i = 0; memcpy(_typeEncoding + i, @encode(BOOL), strlen(@encode(BOOL))); i += strlen(@encode(BOOL)); _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$IOS13_AND_NEWER_HOOKS$SBIconView, @selector(ad_isSupportedIcon), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBIconView$ad_isSupportedIcon, _typeEncoding); }Class _logos_class$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem = objc_getClass("SBSApplicationShortcutItem"); MSHookMessageEx(_logos_class$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem, @selector(sbh_isSystemShortcut), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut, (IMP*)&_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_isSystemShortcut);MSHookMessageEx(_logos_class$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem, @selector(sbh_shortcutSection), (IMP)&_logos_method$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection, (IMP*)&_logos_orig$IOS13_AND_NEWER_HOOKS$SBSApplicationShortcutItem$sbh_shortcutSection);} } else { {Class _logos_class$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider = objc_getClass("SBUIAppIconForceTouchControllerDataProvider"); MSHookMessageEx(_logos_class$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider, @selector(applicationShortcutItems), (IMP)&_logos_method$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider$applicationShortcutItems, (IMP*)&_logos_orig$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchControllerDataProvider$applicationShortcutItems);Class _logos_class$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchController = objc_getClass("SBUIAppIconForceTouchController"); MSHookMessageEx(_logos_class$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchController, @selector(appIconForceTouchShortcutViewController:activateApplicationShortcutItem:), (IMP)&_logos_method$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchController$appIconForceTouchShortcutViewController$activateApplicationShortcutItem$, (IMP*)&_logos_orig$IOS12_AND_OLDER_HOOKS$SBUIAppIconForceTouchController$appIconForceTouchShortcutViewController$activateApplicationShortcutItem$);} } diff --git a/AppData/AppData.xm b/AppData/AppData.xm index 7b78fef..4833740 100644 --- a/AppData/AppData.xm +++ b/AppData/AppData.xm @@ -71,7 +71,7 @@ %hook SBIconView - (void)setApplicationShortcutItems:(NSArray *)items { - if ([ADSettings forceTouchMenuEnabled] && ![self ad_isFolderIcon]) { + if ([ADSettings forceTouchMenuEnabled] && [self ad_isSupportedIcon]) { NSMutableArray *newItems = [NSMutableArray arrayWithArray:items?:@[]]; SBSApplicationShortcutItem *shortcutItem = [ADHelper applicationShortcutItem]; if (shortcutItem) { @@ -84,6 +84,7 @@ } + (void)activateShortcut:(SBSApplicationShortcutItem *)item withBundleIdentifier:(NSString *)bundleID forIconView:(SBIconView *)iconView { + NSLog(@"[AppData]: iconView: %@",iconView); if ([item.type isEqualToString:kSBApplicationShortcutItemType]) { [ADDataViewController presentControllerFromSBIconView:iconView fromContextMenu:YES]; } else { @@ -92,12 +93,12 @@ } %new -- (BOOL)ad_isFolderIcon { - // check if it's folder icon view +- (BOOL)ad_isSupportedIcon { if ([self respondsToSelector:@selector(icon)]) { - return [self.icon isKindOfClass:%c(SBFolderIcon)]; + return ![self.icon isKindOfClass:%c(SBFolderIcon)] + && ![self.icon isKindOfClass:%c(SBWidgetIcon)]; } - return NO; + return YES; } %end diff --git a/AppData/Classes/Controller/DataSource/ADMainDataSource.m b/AppData/Classes/Controller/DataSource/ADMainDataSource.m index 5cf33bf..bb879c9 100644 --- a/AppData/Classes/Controller/DataSource/ADMainDataSource.m +++ b/AppData/Classes/Controller/DataSource/ADMainDataSource.m @@ -154,18 +154,18 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N NSInteger itemIndex = 1; [weakActionsBar showLoadingIndicatorForItemAtIndex:itemIndex]; [weakActionsBar setDetail:@"Clearing..." forItemAtIndex:itemIndex]; -// DISPATCH_AFTER(0.5, { -// [self.appData clearAppCachesWithCompletion:^{ -// [weakActionsBar hideLoadingIndicatorForItemAtIndex:itemIndex]; -// [weakActionsBar setDetail:@"Cleared!" forItemAtIndex:itemIndex]; -// [[UINotificationFeedbackGenerator new] notificationOccurred:UINotificationFeedbackTypeSuccess]; -// DISPATCH_AFTER(0.5, { -// [self.appData getCachesDirectorySizeWithCompletion:^(NSString *formattedSize) { -// [weakActionsBar setDetail:formattedSize forItemAtIndex:itemIndex]; -// }]; -// }); -// }]; -// }); + DISPATCH_AFTER(0.5, { + [self.appData clearAppCachesWithCompletion:^{ + [weakActionsBar hideLoadingIndicatorForItemAtIndex:itemIndex]; + [weakActionsBar setDetail:@"Cleared!" forItemAtIndex:itemIndex]; + [[UINotificationFeedbackGenerator new] notificationOccurred:UINotificationFeedbackTypeSuccess]; + DISPATCH_AFTER(0.5, { + [self.appData getCachesDirectorySizeWithCompletion:^(NSString *formattedSize) { + [weakActionsBar setDetail:formattedSize forItemAtIndex:itemIndex]; + }]; + }); + }]; + }); }]; // Clear App Data diff --git a/AppData/Headers.h b/AppData/Headers.h index b5f44b1..6e1e61c 100644 --- a/AppData/Headers.h +++ b/AppData/Headers.h @@ -96,7 +96,7 @@ @property (nonatomic, retain) SBFolderIcon * folderIcon; - (id)_iconImageView; - (void)_updateLabel; -- (BOOL)ad_isFolderIcon; +- (BOOL)ad_isSupportedIcon; @end @interface SBSApplicationShortcutIcon : NSObject diff --git a/AppData/Package/DEBIAN/control b/AppData/Package/DEBIAN/control index ef98239..ae9c00c 100644 --- a/AppData/Package/DEBIAN/control +++ b/AppData/Package/DEBIAN/control @@ -1,6 +1,6 @@ Package: com.fouadraheb.appdata Name: AppData -Version: 1.3.5 +Version: 1.3.6 Description: View & Manage Applications Data from your Home Screen Section: Tweaks Depends: firmware (>= 11.0), mobilesubstrate, preferenceloader diff --git a/AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/AppDataPrefs b/AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/AppDataPrefs index d6de945411dfe9e95359d48c70e8c0d6f80f303f..89742eb0d57a141185cbb4d83569581755cf21f2 100755 GIT binary patch delta 6857 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 QIZt{j<5s_1iR{yV0dya(d;kCd delta 6904 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 diff --git a/PackageInfo/changelog.json b/PackageInfo/changelog.json index 14edb66..df3cf18 100755 --- a/PackageInfo/changelog.json +++ b/PackageInfo/changelog.json @@ -1,11 +1,12 @@ [ { - "version":"1.3.5", - "date":"2021-03-30 14:44:50", + "version":"1.3.6", + "date":"2021-03-31 10:21:19", "changes":[ "Added option to select default appearance color (Dark by default)", "Moved AppData force touch menu item to system section", - "Fixed reset permissions crash on iOS 12" + "Fixed reset permissions crash on iOS 12", + "Hide force touch menu from Widgets on iSO 14" ] }, { From eebc09cfb17375f04f5df08796754738d60b5e13 Mon Sep 17 00:00:00 2001 From: Fouad Raheb Date: Sun, 4 Apr 2021 20:13:31 +0300 Subject: [PATCH 3/3] Copied Preferences.framework to the project --- AppData.xcodeproj/project.pbxproj | 24 +- .../AppDataPrefs.bundle/AppDataPrefs | Bin 232688 -> 232688 bytes .../Preferences.framework/Preferences.tbd | 710 ++++++++++++++++++ 3 files changed, 731 insertions(+), 3 deletions(-) create mode 100755 Frameworks/Preferences.framework/Preferences.tbd diff --git a/AppData.xcodeproj/project.pbxproj b/AppData.xcodeproj/project.pbxproj index 1afc697..e9407f1 100644 --- a/AppData.xcodeproj/project.pbxproj +++ b/AppData.xcodeproj/project.pbxproj @@ -3,10 +3,11 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 50; objects = { /* Begin PBXBuildFile section */ + A408FE86261A2A23002E8946 /* Preferences.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A408FE85261A2A23002E8946 /* Preferences.framework */; }; A4277BCC24AA38DF003AFD4D /* ADHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = A4277BCA24AA38DF003AFD4D /* ADHelper.h */; }; A4277BCD24AA38DF003AFD4D /* ADHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = A4277BCB24AA38DF003AFD4D /* ADHelper.m */; }; A4277C2224ACB50C003AFD4D /* AppData-Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = A4277C2024ACB50C003AFD4D /* AppData-Prefix.pch */; }; @@ -46,7 +47,6 @@ A4C5FD722612376F005FD2D8 /* ADHeaderTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD692612376F005FD2D8 /* ADHeaderTableViewCell.m */; }; A4C5FD742612376F005FD2D8 /* ADPrefsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD6B2612376F005FD2D8 /* ADPrefsHelper.m */; }; A4C5FD7D26123D40005FD2D8 /* ADSwitchTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD7B26123D40005FD2D8 /* ADSwitchTableViewCell.m */; }; - A4C5FD7F26124090005FD2D8 /* Preferences.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4C5FD7E26124090005FD2D8 /* Preferences.framework */; platformFilter = ios; }; A4C5FD8A26125556005FD2D8 /* ADAppearance.h in Headers */ = {isa = PBXBuildFile; fileRef = A4C5FD8826125556005FD2D8 /* ADAppearance.h */; }; A4C5FD8B26125556005FD2D8 /* ADAppearance.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C5FD8926125556005FD2D8 /* ADAppearance.m */; }; A4C5FD8E26131EC4005FD2D8 /* AppData@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A4C5FD8C26131EC4005FD2D8 /* AppData@2x.png */; }; @@ -71,6 +71,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + A408FE85261A2A23002E8946 /* Preferences.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Preferences.framework; path = Frameworks/Preferences.framework; sourceTree = ""; }; A4277BCA24AA38DF003AFD4D /* ADHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ADHelper.h; sourceTree = ""; }; A4277BCB24AA38DF003AFD4D /* ADHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ADHelper.m; sourceTree = ""; }; A4277C2024ACB50C003AFD4D /* AppData-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AppData-Prefix.pch"; sourceTree = ""; }; @@ -155,7 +156,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4C5FD7F26124090005FD2D8 /* Preferences.framework in Frameworks */, + A408FE86261A2A23002E8946 /* Preferences.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -251,6 +252,7 @@ isa = PBXGroup; children = ( A4C5FD7E26124090005FD2D8 /* Preferences.framework */, + A408FE85261A2A23002E8946 /* Preferences.framework */, A4E969DA2578F44900D8043A /* CoreLocation.framework */, A4277C6124AD01DB003AFD4D /* QuartzCore.framework */, A4BB5DBD24A8CB16004A3132 /* CoreGraphics.framework */, @@ -893,6 +895,10 @@ ENABLE_BITCODE = NO; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Frameworks", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -959,6 +965,10 @@ ENABLE_BITCODE = NO; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Frameworks", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -1025,6 +1035,10 @@ ENABLE_BITCODE = NO; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Frameworks", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -1090,6 +1104,10 @@ ENABLE_BITCODE = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Frameworks", + ); GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; diff --git a/AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/AppDataPrefs b/AppData/Package/Library/PreferenceBundles/AppDataPrefs.bundle/AppDataPrefs index 89742eb0d57a141185cbb4d83569581755cf21f2..a3319a815847bf95cce47d239346ec3cfbb0f4ec 100755 GIT binary patch delta 422 zcmew`lkdY!zJ@J~1`*6(KV@z=j$r)D24TfBo`tZO(-?V~!D7OhjDMl5T*g`mYjOeO zx@emhtJwLX)|uNi=&kmD78veq_pe4%!oTvY(azaTdskjaIkk1Z&DtCPUa+$3J@Zk@ zSm~n~_4UvGe~%=&!u+<^o?&cdPFT+K+*@Osg!-E|deX6%<98f6lg4)Sn-#DBBXRbE zDBsqpi)QxjUe@yDgWy9I?wy)mSH*O_O_oo0*cq*=|El%&p^Sqzg>QiAQW~fhNY!E@+Vlb z!*jc52lGs32i=fM3iq9h%&v!JW>vOszNY1H(3~-n)v@cA^?Qd!o%7ur?_W1u7}alV h_jke^A?ea7CUzS*FYVxF;jp?GtF-?2bfq5Va{#SizwZD5 delta 422 zcmew`lkdY!zJ@J~1`*7Cyvf^*BN+d(L0IvOXCW-+G)7)#u$XWr<6kH%m$4SYnq0uR zF4|^O_KutiB~w)oh7*AgeKyX~ot&!}DP5hMyr)?E{lfRpcKocp&w2GZ$0ENI&9Awn zw+gSpR|XRu$KMVO&Jb(Us^`cznn8R}DIRc5G9 zl{J~6K3%NCTo`F>GbgJ;<-^0+*q_rK)SRqXciYZmoR iFLplWyriJNRq_B==`Gjka|Br*?KfK(FkPvK`5XXdd$&FS diff --git a/Frameworks/Preferences.framework/Preferences.tbd b/Frameworks/Preferences.framework/Preferences.tbd new file mode 100755 index 0000000..38efac9 --- /dev/null +++ b/Frameworks/Preferences.framework/Preferences.tbd @@ -0,0 +1,710 @@ +--- +archs: [ armv7, armv7s, arm64 ] +platform: ios +install-name: /System/Library/PrivateFrameworks/Preferences.framework/Preferences +current-version: 1 +compatibility-version: 1 +exports: + - archs: [ armv7, armv7s, arm64 ] + symbols: [ _ACMContextAddCredential, _ACMContextAddCredentialWithScope, _ACMContextContainsCredentialType, + _ACMContextContainsCredentialTypeEx, _ACMContextContainsPassphraseCredentialWithPurpose, + _ACMContextCreate, _ACMContextCreateWithExternalForm, _ACMContextDelete, _ACMContextGetExternalForm, + _ACMContextRemoveCredentialsByType, _ACMContextRemoveCredentialsByTypeAndScope, + _ACMContextRemoveCredentialsByValue, _ACMContextRemoveCredentialsByValueAndScope, + _ACMContextRemovePassphraseCredentialsByPurposeAndScope, + _ACMContextReplacePassphraseCredentialsWithScope, _ACMContextVerifyAclConstraint, + _ACMContextVerifyPolicy, _ACMContextVerifyPolicyEx, _ACMContextVerifyPolicyWithPreflight, + _ACMCredentialCreate, _ACMCredentialDelete, _ACMCredentialGetProperty, _ACMCredentialGetPropertyData, + _ACMCredentialGetType, _ACMCredentialSetProperty, _ACMParseAclAndCopyConstraintCharacteristics, + _ACMRequirementGetPriority, _ACMRequirementGetProperties, _ACMRequirementGetProperty, + _ACMRequirementGetPropertyData, _ACMRequirementGetState, _ACMRequirementGetSubrequirements, + _ACMRequirementGetType, _CARRIER_SPACE_PLANS_EVENT, _CARRIER_SPACE_SERVICES_APP_INSTALL_EVENT, + _CARRIER_SPACE_SERVICES_APP_OPEN_EVENT, _CARRIER_SPACE_SERVICES_EVENT, _CARRIER_SPACE_USAGE_EVENT, + _CompareCredentials, _ContactsOption, _CopyCredential, _CreateDetailControllerInstanceWithClass, + _CreateRangeTimeLabel, _CreateRangeTitleLabel, _DeallocCredential, _DeallocCredentialList, + _DeallocRequirement, _DeserializeAddCredential, _DeserializeCredential, _DeserializeCredentialList, + _DeserializeGetContextProperty, _DeserializeProcessAcl, _DeserializeRemoveCredential, + _DeserializeReplacePassphraseCredential, _DeserializeRequirement, _DeserializeVerifyAclConstraint, + _DeserializeVerifyPolicy, _DeviceName, _EveryoneOption, _FallbackYear, _FavoritesOption, _FilePathKey, + _GetSerializedAddCredentialSize, _GetSerializedCredentialSize, _GetSerializedGetContextPropertySize, + _GetSerializedProcessAclSize, _GetSerializedRemoveCredentialSize, + _GetSerializedReplacePassphraseCredentialSize, _GetSerializedRequirementSize, + _GetSerializedVerifyAclConstraintSize, _GetSerializedVerifyPolicySize, _IsRegulatoryImageFromLockdown, + _LocalizableGTStringKeyForKey, _LocalizeWeeAppName, _LocalizedPolarisExplanation, _NameKey, + _NoOneOption, _ObjectAndOffsetForURLPair, _PRDActionChangeStoragePlan, + _PRDActionFreshmintStorageUpgrade, _PSAbbreviatedFormattedTimeString, + _PSAbbreviatedFormattedTimeStringWithDays, _PSAboutDeviceSupervision, _PSAboutLocationAndPrivacyText, + _PSAccessoryKey, _PSAccountSettingsDataclassesKey, _PSAccountsClientDataclassFilterKey, _PSActionKey, + _PSAdjustFontSizeToFitWidthKey, _PSAirDropImage, _PSAlignmentKey, _PSAppGroupBundleIDKey, + _PSAppGroupDomainKey, _PSAppIconImageNamed, _PSAppSettingsBundleIDKey, _PSAppSettingsBundleKey, + _PSAppTintColor, _PSAppleIDPrivacyText, _PSApplicationDisplayIdentifiersCapability, + _PSApplicationSpecifierForAssistantSection, _PSApplicationSpecifierForAssistantSectionForBundleId, + _PSApplicationSpecifierForBBSection, _PSApplyBuddyThemeToNavigationBar, + _PSAudioAccessoryLicenseFilePath, _PSAudioAccessoryWarrantyFilePath, _PSAuthorizationTokenForPasscode, + _PSAutoCapsKey, _PSAutoCorrectionKey, _PSAutoWhiteBalanceCapability, _PSBackupClass, _PSBadgeNumberKey, + _PSBestGuesserKey, _PSBioKitErrorWrapperDomain, _PSBlankIconImage, _PSBundleCustomIconPathKey, + _PSBundleHasBundleIconKey, _PSBundleHasIconKey, _PSBundleIconPathKey, _PSBundleIdentifierMaps, + _PSBundleIdentifierNews, _PSBundleIdentifierPlaygroundsBeta, _PSBundleIdentifierPodcasts, + _PSBundleIdentifierTV, _PSBundleIdentifieriBooks, _PSBundleIdentifieriTunesU, _PSBundleIsControllerKey, + _PSBundleOverridePrincipalClassKey, _PSBundlePathForPreferenceBundle, _PSBundlePathKey, + _PSBundleSearchControllerClassKey, _PSBundleSearchIconPathKey, _PSBundleSupportsSearchKey, + _PSBundleTintedIconPathKey, _PSButtonActionKey, _PSCancelKey, _PSCapacityBarBackgroundColorKey, + _PSCapacityBarDataKey, _PSCapacityBarHideLegendKey, _PSCapacityBarLegendTextColorKey, + _PSCapacityBarLoadingKey, _PSCapacityBarOtherDataColorKey, _PSCapacityBarOtherDataLegendTextKey, + _PSCapacityBarSeparatorColorKey, _PSCapacityBarShowOtherDataLegendKey, _PSCapacityBarSizeFormatKey, + _PSCapacityBarSizeLblUsesStandardFontKey, _PSCapacityBarSizeTextColorKey, _PSCapacityBarSizesAreMemKey, + _PSCapacityBarTitleTextColorKey, _PSCellClassKey, _PSCityForSpecifier, _PSCityForTimeZone, + _PSCloudFamilyRestrictionsControllerForDSID, _PSColorCodedSerialNumber, _PSConfigString, + _PSConfirmationActionKey, _PSConfirmationCancelActionKey, _PSConfirmationCancelKey, + _PSConfirmationDestructiveKey, _PSConfirmationKey, _PSConfirmationOKKey, _PSConfirmationPromptKey, + _PSConfirmationTitleKey, _PSContainerBundleIDKey, _PSControlIsLoadingKey, _PSControlKey, + _PSControlMaximumKey, _PSControlMinimumKey, _PSControllerLoadActionKey, _PSCopyableCellKey, + _PSCreateSecTrustFromCertificateChain, _PSCurrentCallTypes, _PSDataSourceClassKey, + _PSDecimalKeyboardKey, _PSDefaultValueKey, _PSDefaultsKey, _PSDeferItemSelectionKey, + _PSDeletionActionKey, _PSDetailControllerClassKey, _PSDeviceSubTypeString, _PSDeviceUDID, + _PSDiagnosticsAreEnabled, _PSDisplayNameForBBSection, _PSDisplaySortedByTitleKey, + _PSDisplayZoomCapability, _PSDocumentBundleIdentifierKey, _PSEditPaneClassKey, + _PSEditableTableCellTextFieldShouldPopOnReturn, _PSEditingCellHorizontalInset, + _PSEmailAddressKeyboardKey, _PSEmailAddressingKeyboardKey, _PSEnabledKey, + _PSEthernetChangedNotification, _PSExpectedSpokenLanguage, _PSFaceIDPrivacyText, _PSFindViewOfClass, + _PSFooterAlignmentGroupKey, _PSFooterCellClassGroupKey, _PSFooterHyperlinkViewActionKey, + _PSFooterHyperlinkViewLinkRangeKey, _PSFooterHyperlinkViewTargetKey, _PSFooterHyperlinkViewTitleKey, + _PSFooterHyperlinkViewURLKey, _PSFooterTextGroupKey, _PSFooterViewKey, _PSFormattedTimeString, + _PSFormattedTimeStringWithDays, _PSGetCapabilityBoolAnswer, _PSGetterKey, _PSHasStockholmPass, + _PSHeaderCellClassGroupKey, _PSHeaderDetailTextGroupKey, _PSHeaderViewKey, + _PSHidesDisclosureIndicatorKey, _PSHighLegibilityAlternateFont, _PSIDKey, _PSIPKeyboardKey, + _PSIconImageKey, _PSIconImageShouldFlipForRightToLeftCalendarKey, + _PSIconImageShouldFlipForRightToLeftKey, _PSIconImageShouldLoadAlternateImageForRightToLeftKey, + _PSInEDUModeCapability, _PSInStoreDemoModeCapability, _PSIsAppIdSiriKitTCCEnabled, _PSIsAudioAccessory, + _PSIsBundleIDHiddenDueToRestrictions, _PSIsBundleIDInstalled, _PSIsD22ScreenSize, _PSIsDebug, + _PSIsGreenTeaCapable, _PSIsHostingPersonalHotspot, _PSIsInEDUMode, _PSIsInternalInstall, _PSIsJ99, + _PSIsKeychainSecureBackupEnabled, _PSIsLoggingEnabled, _PSIsN56, _PSIsNanoMirroringDomain, + _PSIsPerGizmoKey, _PSIsRadioGroupKey, _PSIsRunningInAssistant, _PSIsSkippedInEDUModeKey, + _PSIsThirdPartyDetailKey, _PSIsTopLevelKey, _PSIsUsingPasscode, _PSIsiPad, _PSIsiPhone, _PSKeyNameKey, + _PSKeyboardTypeKey, _PSKeychainSyncErrorDomain, _PSKeychainSyncGetCircleMembershipStatus, + _PSKeychainSyncGetStatus, _PSKeychainSyncIsUsingICDP, _PSKillProcessNamed, _PSLazilyLoadedBundleKey, + _PSLazyIconAppID, _PSLazyIconDontUnload, _PSLazyIconLoading, _PSLazyIconLoadingCustomQueue, + _PSLazyIconURL, _PSLegacyCityFromCity, + _PSLegalCopyLocalizedAboutDiagnosticsAppActivityAndPrivacyInfoText, + _PSLegalCopyLocalizedAboutiCloudAnalyticsAndPrivacyInfoText, _PSLicenseFilePath, _PSLicensePath, + _PSLocaleLanguageDirection, _PSLocaleUses24HourClock, _PSLocalizableMesaStringForKey, + _PSLocalizableStockholmStringForKey, _PSLocalizedStringFromTableInBundleForLanguage, _PSLog, + _PSMagnifyModeDidChangeNotification, _PSManifestEntriesKey, _PSManifestSectionKey, + _PSManifestStringTableKey, _PSMarginWidthKey, _PSMigrateSoundsDefaults_10_0, _PSMultipickerStringsName, + _PSNETRBChangedNotification, _PSNavigationControllerWillShow, _PSNavigationControllerWillShowAppearing, + _PSNavigationControllerWillShowDisappearing, _PSNavigationControllerWillShowOperationType, + _PSNegateValueKey, _PSNightShiftCapability, _PSNotifyNanoKey, _PSNumberKeyboardKey, + _PSPIDForProcessNamed, _PSPaneTitleKey, _PSPassbookImage, _PSPearlEnrollErrorDomain, + _PSPerformSelector, _PSPerformSelector2, _PSPlaceholderKey, _PSPlistNameKey, _PSPointImageOfColor, + _PSPreferencesFrameworkBundle, _PSPreferencesLaunchURL, _PSPreferredLanguageIsEnglish, + _PSPrioritizeValueTextDisplayKey, _PSPurgeKeyboardCache, _PSPurpleBuddyIdentifier, + _PSRadioGroupCheckedSpecifierKey, _PSRaiseToWakeCapability, _PSRegulatoryImage, + _PSRequiredCapabilitiesKey, _PSRequiredCapabilitiesOrKey, _PSRerootPreferencesNavigationNotification, + _PSResetCachedSiriKitTCCEnabledAppIds, _PSRootControllerDidSuspendNotification, _PSRoundRectToPixel, + _PSRoundToPixel, _PSScreenClassString, _PSSearchInlineTogglesEnabled, + _PSSearchNanoApplicationsBundlePath, _PSSearchNanoInternalSettingsBundlePath, + _PSSearchNanoSettingsBundlePath, _PSSecureBackupAccountInfo, _PSSelectedTintedImageFromMask, + _PSSetBatteryMonitoringEnabled, _PSSetCustomWatchCapabilityCheck, _PSSetLoggingEnabled, _PSSetterKey, + _PSSetupAssistantNeedsToRun, _PSSetupCustomClassKey, _PSSetupFinishedAllStepsKey, + _PSShortFormattedTimeString, _PSShortTitlesDataSourceKey, _PSShortTitlesKey, _PSShowEnableKeychainSync, + _PSShowKeychainSyncRecovery, _PSShowStorageCapability, _PSShowVideoDownloadsCapability, + _PSSimForceUpdate, _PSSimIsMissing, _PSSimIsRequired, _PSSimStatusString, _PSSiriImage, + _PSSiriImageNamed, _PSSiriKitTCCEnabledAppIds, _PSSliderIsContinuous, _PSSliderIsSegmented, + _PSSliderLeftImageKey, _PSSliderLeftImagePromiseKey, _PSSliderLocksToSegment, _PSSliderRightImageKey, + _PSSliderRightImagePromiseKey, _PSSliderSegmentCount, _PSSliderShowValueKey, _PSSliderSnapsToSegment, + _PSSoundsPreferencesDomain, _PSSpeciferForThirdPartyBundle, _PSSpecifierActionKey, + _PSSpecifierAuthenticationTokenKey, _PSSpecifierForThirdPartyBundle, _PSSpecifierIsSearchableKey, + _PSSpecifierIsSectionKey, _PSSpecifierPasscodeKey, _PSSpecifierSearchBundleKey, + _PSSpecifierSearchDetailPath, _PSSpecifierSearchKeywordsKey, _PSSpecifierSearchPlistKey, + _PSSpecifierSearchSectionID, _PSSpecifierSearchTitleKey, _PSSpecifierSearchURL, + _PSSpecifierSupportsSearchToggleKey, _PSSpecifiersKey, _PSStaticHeaderTextKey, _PSStaticTextMessageKey, + _PSStockholmLocallyStoredValuePassNames, _PSStorageAndBackupClass, _PSStorageAppKey, _PSStorageClass, + _PSStorageIconKey, _PSStorageInfoKey, _PSStorageItemPercentViewedKey, _PSStorageItemURLKey, + _PSStorageLastUsedDateKey, _PSStorageLocStr, _PSStoragePluginReloadTipsNotification, _PSStorageSizeKey, + _PSStorageTipActivatingStringKey, _PSStorageTipEnableButtonTitleKey, _PSStorageTipEventualGainKey, + _PSStorageTipImmediateGainKey, _PSStorageTipKindActionKey, _PSStorageTipKindKey, + _PSStorageTipKindOptionKey, _PSStorageTipPercentKey, _PSStorageTipReloadNotification, + _PSStorageTipRepresentedAppKey, _PSStorageTitleKey, _PSStorageUsageChangedNotification, + _PSStorageVersionTitleDisabledKey, _PSStringForDays, _PSStringForHours, _PSStringForMins, + _PSStringForMinutes, _PSStringsTableKey, _PSSupportsAccountSettingsDataclassesKey, _PSSupportsMesa, + _PSSystemHapticsPreferenceskey, _PSSystemHapticsSetting, _PSTTYCapability, + _PSTableCellAlwaysShowSeparator, _PSTableCellClassKey, _PSTableCellHeightKey, _PSTableCellKey, + _PSTableCellSubtitleColorKey, _PSTableCellSubtitleTextKey, _PSTableCellUseEtchedAppearanceKey, + _PSTableSectionFooterBottomPad, _PSTableSectionFooterTopPad, _PSTableViewSideInset, + _PSTableViewSideInsetPad, _PSTerminateProcessNamed, _PSTextFieldNoAutoCorrectKey, + _PSTextViewBottomMarginKey, _PSTextViewInsets, _PSTimeStringIsShortened, _PSTimeZoneArrayForSpecifier, + _PSTimeZoneArrayForTimeZone, _PSTintedIcon, _PSTintedImageFromMask, _PSTitleKey, + _PSTitlesDataSourceKey, _PSToolbarLabelsTextColor, _PSUISupportsDocumentBrowser, _PSURLKeyboardKey, + _PSUsageBundleAppKey, _PSUsageBundleCategoryKey, _PSUsageBundleDeletingKey, + _PSUseHighLegibilityAlternateKey, _PSUsedByHSA2Account, _PSUsedByManagedAccount, _PSValidTitlesKey, + _PSValidValuesKey, _PSValueChangedNotificationKey, _PSValueKey, _PSValuesDataSourceKey, + _PSWarrantyFilePath, _PSWarrantyPath, _PSWeekOfManufacture, _PSWifiChangedNotification, _PSWifiNameKey, + _PSWifiPowerStateKey, _PSWifiTetheringStateKey, _PSYearOfManufacture, _PathKey, + _PreferencesTableViewCellLeftPad, _PreferencesTableViewCellRightPad, _PreferencesTableViewFooterColor, + _PreferencesTableViewFooterFont, _PreferencesTableViewHeaderColor, _PreferencesTableViewHeaderFont, + _ProcessedSpecifierBundle, _ProductType, _RestrictionsAccessGroup, _RestrictionsAccountName, + _RestrictionsServiceName, _ScreenScale, _SearchEntriesFromSpecifiers, _SearchEntryFromSpecifier, + _SearchSpecifiersFromPlist, _SerializeAddCredential, _SerializeCredential, _SerializeCredentialList, + _SerializeGetContextProperty, _SerializeProcessAcl, _SerializeRemoveCredential, + _SerializeReplacePassphraseCredential, _SerializeRequirement, _SerializeVerifyAclConstraint, + _SerializeVerifyPolicy, _SetDeviceName, _ShouldShowBuiltInApps, _ShouldShowEPUP, + _ShouldShowRoHSCompliance, _ShouldShowWeibo, _ShouldShowYearOfManufacture, _ShowInNotificationsState, + _SpecifiersFromPlist, _SystemHasCapabilities, _TopToBottomLeftToRightViewCompare, + _UsageMediaAudioBooks, _UsageMediaAudioCourses, _UsageMediaAudioPodcasts, _UsageMediaMyPhotoStream, + _UsageMediaPhotoLibrary, _UsageMediaSharedPhotoStream, _UsageMediaSyncedFromiTunes, + _UsageMediaVideoCourses, _UsageMediaVideoPodcasts, _UsageSizeKey, _UserInterfaceIdiom, + _WifiStateChanged, __CacheSizeForAppBundle, __CacheSizeForAppProxy, __PSFindViewRecursively, + __PSLicenseFilePathFromSubdirectory, __PSLoggingFacility, + __PSWarrantyFilePathFromSubdirectoryWithLookupFile, __SizeOfOPurgeableAssets, + ___init_sirikit_enabled_lock, __clearKeychainSyncCache, __consuming_xpc_release, __screenScale, + _diskUsageList, _gAllocatedBytes, _gBBSettingsGatewayDispatchQ, _gLastAllocatedBytes, + _kAccessibilityOptionsAfterNudgesDelay, _kHeaderHorizontalMargin, _kKeychainSyncCountryInfoKey, + _kKeychainSyncPhoneNumberKey, _kKeychainSyncSecurityCodeAdvancedOptionsResult, + _kKeychainSyncSecurityCodeKey, _kKeychainSyncSecurityCodePeerApprovalResult, + _kKeychainSyncSecurityCodeResetKeychainResult, _kKeychainSyncSecurityCodeSetUpLaterResult, + _kKeychainSyncSecurityCodeTypeKey, _kKeychainSyncSpinnerKey, _kMinimumSubstateDisplayDuration, + _kMinimumSubstateDuration, _kNumberOfPasscodeFieldsProperty, _kPSLargeTextUsesExtendedRangeKey, + _kPSSIMStatusReadyNotification, _kPSWirelessDataUsageChangedNotification, _kPearlMaxNudgesPerMode, + _kPillMaxLength, _kTCCBluetoothSharingID, _kTCCCalendarsID, _kTCCCameraID, _kTCCContactsID, + _kTCCFaceID, _kTCCLiverpoolID, _kTCCMediaLibraryID, _kTCCMicrophoneID, _kTCCMotionID, _kTCCPhotosID, + _kTCCRemindersID, _kTCCSpeechRecognitionID, _kTCCWillowID, _kWantsIcon, _kalphaOffset, _kdampingOffset, + _kinitialDamping, _kinitialResponse, _kinstancePerAxisCount, _kresponseOffset, _printNull, + _psUtilitySIMStatus, _resetLocale, _s_sirikit_enabled_lock ] + objc-classes: [ _AlphanumericPINTableViewCell, _AlphanumericPINTextField, _AppWirelessDataUsageManager, + _AppWirelessDataUsageSpecifierFactory, _BlkTraceController, _DevicePINController, _DevicePINKeypad, + _DevicePINKeypadContainerView, _DevicePINPane, _DevicePINSetupController, _DiagnosticDataController, + _FailureBarView, _FontSizeSliderCell, _KeychainSyncAdvancedSecurityCodeController, + _KeychainSyncAppleSupportController, _KeychainSyncCountryInfo, _KeychainSyncDevicePINController, + _KeychainSyncPhoneNumberController, _KeychainSyncPhoneSettingsFragment, + _KeychainSyncSMSVerificationController, _KeychainSyncSecurityCodeCell, _KeychainSyncSetupController, + _LargeTextExplanationView, _LargerSizesHelpTextView, _PINOptionsButton, _PINView, + _PSAboutHTMLSheetViewController, _PSAboutTextSheetViewController, _PSAccessibilitySettingsDetail, + _PSAccountSecurityController, _PSAccountsClientListCell, _PSAccountsClientListController, + _PSAirplaneModeSettingsDetail, _PSAppListController, _PSAppleIDSplashViewController, + _PSAssistiveTouchSettingsDetail, _PSAutoLockSettingsDetail, _PSBadgedTableCell, + _PSBarButtonSpinnerView, _PSBiometricIdentity, _PSBluetoothSettingsDetail, _PSBrightnessController, + _PSBrightnessSettingsDetail, _PSBulletedPINView, _PSBundleController, _PSCapabilityManager, + _PSCapacityBarCategory, _PSCapacityBarCell, _PSCapacityBarData, _PSCapacityBarView, + _PSCastleSettingsDetail, _PSCellularDataSettingsDetail, _PSClearBackgroundCell, + _PSCloudStorageOffersManager, _PSCloudStorageQuotaManager, _PSCompassSettingsDetail, + _PSConfirmationSpecifier, _PSControlCenterSettingsDetail, _PSControlTableCell, _PSCoreSpotlightIndexer, + _PSDNDSettingsDetail, _PSDUETSettingsDetail, _PSDetailController, _PSDocumentsPolicyController, + _PSEditableListController, _PSEditableTableCell, _PSEditingPane, _PSExpandableAppListGroupController, + _PSExpandableListGroupController, _PSFaceTimeSettingsDetail, _PSFooterHyperlinkView, + _PSGameCenterSettingsDetail, _PSGuidedAccessSettingsDetail, _PSIconMarginTableCell, + _PSInternationalController, _PSInternationalLanguageController, + _PSInternationalLanguageSetupController, _PSInvertColorsSettingsDetail, _PSKeyboardNavigationSearchBar, + _PSKeyboardNavigationSearchController, _PSKeyboardSettingsDetail, _PSKeychainSyncHeaderView, + _PSKeychainSyncManager, _PSKeychainSyncPhoneNumber, _PSKeychainSyncSecurityCodeController, + _PSKeychainSyncTextEntryController, _PSKeychainSyncViewController, _PSLanguage, _PSLanguageSelector, + _PSLargeTextController, _PSLargeTextSliderListController, _PSLazyImagePromise, _PSLegalMessagePane, + _PSLegendColorView, _PSListContainerView, _PSListController, _PSListItemsController, + _PSLocaleController, _PSLocaleSelector, _PSLocationServicesSettingsDetail, + _PSLowPowerModeSettingsDetail, _PSMCCSettingsDetail, _PSMagnifyController, _PSMagnifyMode, + _PSMapsSettingsDetail, _PSMessagesSettingsDetail, _PSMigratorUtilities, _PSMusicSettingsDetail, + _PSNavBarSpinnerManager, _PSNonMovableTapGestureRecognizer, _PSNotesSettingsDetail, + _PSNotificationSettingsDetail, _PSOAuthAccountRedirectURLController, _PSPasscodeField, + _PSPasscodeSettingsDetail, _PSPearlAttentionGroupController, _PSPearlCrossHairsManager, + _PSPearlCrossHairsRenderingView, _PSPearlCrossHairsView, _PSPearlEnrollController, + _PSPearlEnrollManager, _PSPearlEnrollView, _PSPearlMovieLoopView, _PSPearlPillContainerView, + _PSPearlPillView, _PSPearlPositioningGuideView, _PSPearlSpringInstance, _PSPhoneNumberSpecifier, + _PSPhoneNumberTableCell, _PSPhoneSettingsDetail, _PSPhotosAndCameraSettingsDetail, + _PSPowerlogListController, _PSPrivacySettingsDetail, _PSQuotaInfo, _PSRegion, + _PSRemindersSettingsDetail, _PSRestrictionsController, _PSRestrictionsPasscodeController, + _PSReversedSubtitleDisclosureTableCell, _PSRootController, _PSSafariSettingsDetail, + _PSSearchController, _PSSearchEntry, _PSSearchIndexOperation, _PSSearchModel, _PSSearchOperation, + _PSSearchResults, _PSSearchResultsCell, _PSSearchResultsController, _PSSegmentTableCell, + _PSSegmentableSlider, _PSSettingsFunctions, _PSSetupController, _PSSharableDetailController, + _PSSiriSettingsDetail, _PSSliderTableCell, _PSSoftwareUpdateAnimatedIcon, + _PSSoftwareUpdateLicenseViewController, _PSSoftwareUpdateReleaseNotesDetail, + _PSSoftwareUpdateTableView, _PSSoftwareUpdateTermsManager, _PSSoftwareUpdateTitleCell, + _PSSoundsSettingsDetail, _PSSpecifier, _PSSpecifierAction, _PSSpecifierDataSource, + _PSSpecifierGroupIndex, _PSSpecifierUpdateContext, _PSSpecifierUpdateOperation, _PSSpecifierUpdates, + _PSSpinnerRecord, _PSSpinnerTableCell, _PSSplitViewController, _PSSpotlightSearchResultsController, + _PSStackPushAnimationController, _PSStorageActionTip, _PSStorageActionTipItem, _PSStorageApp, + _PSStorageAppCell, _PSStorageAppHeaderCell, _PSStorageItemCell, _PSStorageOptionTip, _PSStoragePlugin, + _PSStorageProgressView, _PSStorageTip, _PSStorageTipCell, _PSStorageTipInfoCell, + _PSStoreSettingsDetail, _PSSubtitleDisclosureTableCell, _PSSubtitleSwitchTableCell, _PSSwitchTableCell, + _PSSystemConfiguration, _PSSystemConfigurationDynamicStoreEthernetWatcher, + _PSSystemConfigurationDynamicStoreNETRBWatcher, _PSSystemConfigurationDynamicStoreWifiWatcher, + _PSSystemPolicyForApp, _PSSystemPolicyManager, _PSTableCell, _PSTableCellHighlightContext, + _PSTextEditingCell, _PSTextEditingPane, _PSTextFieldPINView, _PSTextFieldSpecifier, + _PSTextSizeSettingsDetail, _PSTextView, _PSTextViewPane, _PSTextViewTableCell, _PSThirdPartyApp, + _PSThirdPartySettingsDetail, _PSTimeRangeCell, _PSTorchSettingsDetail, _PSUICellularUsageApp, + _PSUISearchController, _PSUIWirelessDataOptionsListController, _PSUsageBundleApp, + _PSUsageBundleCategory, _PSUsageBundleCell, _PSUsageBundleDetailController, _PSUsageBundleManager, + _PSUsagePseudoApp, _PSUsageSizeHeader, _PSVideoSubscriberPrivacyCell, _PSVideosSettingsDetail, + _PSViewController, _PSVoiceOverSettingsDetail, _PSWeakReference, _PSWebContainerView, + _PSWiFiSettingsDetail, _PasscodeFieldCell, _PathObject, _PopBackListItemsController, _PrefsUILinkLabel, + _ProblemReportingAboutController, _ProblemReportingController, _QuietHoursStateController, + _SIMStatusCache, _WirelessDataUsageWorkspace, __PSDeferredUpdates, __PSDeleteButtonCell, + __PSSpinnerHandlingNavigationController, __PSSpinnerViewController ] + objc-ivars: [ _AlphanumericPINTableViewCell._pinTextField, _AppWirelessDataUsageManager._cancelled, + _AppWirelessDataUsageManager._managedBundleIDs, _AppWirelessDataUsageManager._showInternalDetails, + _DevicePINController._allowOptionsButton, _DevicePINController._cancelButton, + _DevicePINController._doneButton, _DevicePINController._doneButtonTitle, _DevicePINController._error1, + _DevicePINController._error2, _DevicePINController._hasBeenDismissed, + _DevicePINController._hidesCancelButton, _DevicePINController._hidesNavigationButtons, + _DevicePINController._lastEntry, _DevicePINController._mode, _DevicePINController._nextButton, + _DevicePINController._numericPIN, _DevicePINController._oldPassword, _DevicePINController._pinDelegate, + _DevicePINController._pinLength, _DevicePINController._requiresKeyboard, + _DevicePINController._sepLockInfo, _DevicePINController._sepOnceToken, + _DevicePINController._shouldDismissWhenDone, _DevicePINController._simplePIN, + _DevicePINController._substate, _DevicePINController._success, _DevicePINController._useSEPLockInfo, + _DevicePINKeypadContainerView._backdropView, _DevicePINKeypadContainerView._iPadKeypadHeight, + _DevicePINKeypadContainerView._keypad, _DevicePINPane._PINLength, + _DevicePINPane._autocapitalizationType, _DevicePINPane._autocorrectionType, _DevicePINPane._isBlocked, + _DevicePINPane._keyboardAppearance, _DevicePINPane._keyboardType, _DevicePINPane._keypad, + _DevicePINPane._keypadActive, _DevicePINPane._keypadContainerView, _DevicePINPane._numericKeyboard, + _DevicePINPane._passcodeOptionsHandler, _DevicePINPane._pinView, _DevicePINPane._playSound, + _DevicePINPane._simplePIN, _DevicePINPane._transitionView, _DevicePINPane._transitioning, + _DevicePINSetupController._allowOptionsButton, _DevicePINSetupController._success, + _FailureBarView._titleLabel, _KeychainSyncAdvancedSecurityCodeController._cellFont, + _KeychainSyncAdvancedSecurityCodeController._cellTextWidth, + _KeychainSyncAdvancedSecurityCodeController._showsDisableRecoveryOption, + _KeychainSyncCountryInfo._countryCode, _KeychainSyncCountryInfo._countryName, + _KeychainSyncCountryInfo._dialingPrefix, _KeychainSyncCountryInfo._localizedCountryName, + _KeychainSyncDevicePINController._devicePINController, + _KeychainSyncDevicePINController._disabledKeyboard, + _KeychainSyncDevicePINController._enterPasscodeReason, + _KeychainSyncDevicePINController._enterPasscodeTitle, + _KeychainSyncDevicePINController._showingBlockedMessage, + _KeychainSyncPhoneNumberController._footerLabel, + _KeychainSyncPhoneNumberController._phoneSettingsFragment, + _KeychainSyncPhoneSettingsFragment._countryInfo, _KeychainSyncPhoneSettingsFragment._countrySpecifier, + _KeychainSyncPhoneSettingsFragment._delegate, _KeychainSyncPhoneSettingsFragment._listController, + _KeychainSyncPhoneSettingsFragment._phoneNumber, + _KeychainSyncPhoneSettingsFragment._phoneNumberSpecifier, + _KeychainSyncPhoneSettingsFragment._specifiers, _KeychainSyncPhoneSettingsFragment._title, + _KeychainSyncSMSVerificationController._countryCode, + _KeychainSyncSMSVerificationController._dialingPrefix, + _KeychainSyncSMSVerificationController._footerButton, + _KeychainSyncSMSVerificationController._keychainSyncManager, + _KeychainSyncSMSVerificationController._phoneNumber, _KeychainSyncSecurityCodeCell._bulletTextLabel, + _KeychainSyncSecurityCodeCell._firstPasscodeEntry, _KeychainSyncSecurityCodeCell._mode, + _KeychainSyncSecurityCodeCell._securityCodeType, _KeychainSyncSetupController._manager, + _LargeTextExplanationView._bodyExampleLabel, _LargeTextExplanationView._bodyExampleTextView, + _LargerSizesHelpTextView._helpLabel, _PINView._delegate, _PINView._error, _PINView._errorTitleLabel, + _PINView._failureView, _PINView._optionsButton, _PINView._passcodeOptionsHandler, + _PINView._pinPolicyLabel, _PINView._titleLabel, _PSAccountSecurityController._SMSTarget, + _PSAccountSecurityController._SMSTargetCountryInfo, _PSAccountSecurityController._devicePINController, + _PSAccountSecurityController._devicePasscodeChangeSetupController, + _PSAccountSecurityController._manager, _PSAccountSecurityController._passcodeSpecifiers, + _PSAccountSecurityController._phoneSettingsFragment, _PSAccountSecurityController._recoverySwitch, + _PSAccountSecurityController._secureBackupEnabled, _PSAccountSecurityController._securityCode, + _PSAccountSecurityController._securityCodeType, _PSAccountsClientListController._acObserver, + _PSAccountsClientListController._accountSpecifier, _PSAccountsClientListController._noAccountsSetUp, + _PSAccountsClientListController._showExtraVC, _PSAccountsClientListController.accountUpdateThrottle, + _PSAppListController._systemPolicy, _PSAppleIDSplashViewController._authController, + _PSAppleIDSplashViewController._cancelButtonBarItem, + _PSAppleIDSplashViewController._createNewAccountButtonSpecifier, + _PSAppleIDSplashViewController._createNewAccountGroupSpecifier, + _PSAppleIDSplashViewController._idleJiggleTimer, _PSAppleIDSplashViewController._isPasswordDirty, + _PSAppleIDSplashViewController._isPresentedModally, _PSAppleIDSplashViewController._monogrammer, + _PSAppleIDSplashViewController._nextButtonBarItem, _PSAppleIDSplashViewController._password, + _PSAppleIDSplashViewController._powerAssertion, _PSAppleIDSplashViewController._remoteUICompletion, + _PSAppleIDSplashViewController._remoteUIController, + _PSAppleIDSplashViewController._shouldHideBackButton, + _PSAppleIDSplashViewController._shouldShowCreateAppleIDButton, + _PSAppleIDSplashViewController._signInButtonSpecifier, _PSAppleIDSplashViewController._silhouetteView, + _PSAppleIDSplashViewController._spinner, _PSAppleIDSplashViewController._spinnerBarItem, + _PSAppleIDSplashViewController._textFieldTextDidChangeObserver, + _PSAppleIDSplashViewController._username, _PSBadgedTableCell._badgeImageView, + _PSBadgedTableCell._badgeInt, _PSBadgedTableCell._badgeNumberLabel, _PSBarButtonSpinnerView._spinner, + _PSBrightnessController._brightnessChangedExternally, _PSBrightnessController._isTracking, + _PSBulletedPINView._passcodeField, _PSBundleController._parent, _PSCapabilityManager._overrides, + _PSCapacityBarCategory._bytes, _PSCapacityBarCategory._color, _PSCapacityBarCategory._identifier, + _PSCapacityBarCategory._title, _PSCapacityBarCell._barView, _PSCapacityBarCell._bigFont, + _PSCapacityBarCell._calcLabel, _PSCapacityBarCell._constraints, _PSCapacityBarCell._hideLegend, + _PSCapacityBarCell._legendColorCache, _PSCapacityBarCell._legendConstraints, + _PSCapacityBarCell._legendFont, _PSCapacityBarCell._legendTextCache, _PSCapacityBarCell._legendViews, + _PSCapacityBarCell._otherLabel, _PSCapacityBarCell._otherLegend, _PSCapacityBarCell._showOtherLegend, + _PSCapacityBarCell._sizeFormat, _PSCapacityBarCell._sizeLabel, _PSCapacityBarCell._sizesAreMem, + _PSCapacityBarCell._titleLabel, _PSCapacityBarData._adjustedCategories, _PSCapacityBarData._bytesUsed, + _PSCapacityBarData._capacity, _PSCapacityBarData._categories, _PSCapacityBarData._categoryLimit, + _PSCapacityBarData._hideTinyCategories, _PSCapacityBarData._orderedCategories, + _PSCapacityBarData._sortStyle, _PSCapacityBarView._barBackgroundColor, _PSCapacityBarView._barData, + _PSCapacityBarView._barOtherDataColor, _PSCapacityBarView._barSeparatorColor, + _PSCloudStorageOffersManager._commerceDelegate, _PSCloudStorageOffersManager._delegate, + _PSCloudStorageOffersManager._requiredStorageThreshold, + _PSCloudStorageOffersManager._shouldOfferFamilySharePlansOnly, + _PSCloudStorageOffersManager._skipCompletionAlert, _PSCloudStorageOffersManager._skipRetryWithoutToken, + _PSCloudStorageOffersManager._supportsModernAlerts, _PSConfirmationSpecifier._cancelButton, + _PSConfirmationSpecifier._okButton, _PSConfirmationSpecifier._prompt, _PSConfirmationSpecifier._title, + _PSControlTableCell._control, _PSCoreSpotlightIndexer._prefsSearchableIndex, + _PSCoreSpotlightIndexer._spotlightIndexQueue, _PSDetailController._pane, + _PSDocumentsPolicyController._bundleIdentifier, _PSDocumentsPolicyController._groupSpecifier, + _PSDocumentsPolicyController._isFirstSourceResults, _PSDocumentsPolicyController._searchingContext, + _PSDocumentsPolicyController._selectedDocumentSource, _PSEditableListController._editable, + _PSEditableListController._editingDisabled, _PSEditableTableCell._controllerDelegate, + _PSEditableTableCell._delaySpecifierRelease, _PSEditableTableCell._delegate, + _PSEditableTableCell._forceFirstResponder, _PSEditableTableCell._realTarget, + _PSEditableTableCell._returnKeyTapped, _PSEditableTableCell._targetSetter, + _PSEditableTableCell._textColor, _PSEditableTableCell._valueChanged, _PSEditingPane._delegate, + _PSEditingPane._requiresKeyboard, _PSEditingPane._specifier, _PSEditingPane._viewController, + _PSExpandableListGroupController._collaspeAfterCount, _PSExpandableListGroupController._groupSpecifier, + _PSExpandableListGroupController._listController, _PSExpandableListGroupController._showAll, + _PSExpandableListGroupController._showAllSpecifier, _PSExpandableListGroupController._specifiers, + _PSExpandableListGroupController._spinnerSpecifier, _PSFooterHyperlinkView._URL, + _PSFooterHyperlinkView._action, _PSFooterHyperlinkView._iconView, _PSFooterHyperlinkView._linkRange, + _PSFooterHyperlinkView._target, _PSFooterHyperlinkView._text, _PSFooterHyperlinkView._textView, + _PSInternationalLanguageController._checkedLanguage, _PSInternationalLanguageController._contentView, + _PSInternationalLanguageController._deviceLanguages, + _PSInternationalLanguageController._filteredDeviceLanguages, + _PSInternationalLanguageController._languageSelector, + _PSInternationalLanguageController._localeSelector, + _PSInternationalLanguageController._savedSearchTerm, _PSInternationalLanguageController._searchBar, + _PSInternationalLanguageController._searchIsActive, _PSInternationalLanguageController._tableView, + _PSInternationalLanguageSetupController._languageSelector, + _PSKeyboardNavigationSearchController.searchBar, + _PSKeyboardNavigationSearchController.searchResultsController, _PSKeychainSyncHeaderView._detailLabel, + _PSKeychainSyncHeaderView._titleLabel, _PSKeychainSyncHeaderView._usesCompactLayout, + _PSKeychainSyncManager._advancedSecurityCodeChoiceController, + _PSKeychainSyncManager._appleIDPasswordOrEquivalentToken, _PSKeychainSyncManager._appleIDRawPassword, + _PSKeychainSyncManager._appleIDUsername, _PSKeychainSyncManager._buddyNavigationController, + _PSKeychainSyncManager._changeSecurityCodeCompletion, _PSKeychainSyncManager._circleJoinCompletion, + _PSKeychainSyncManager._circleNotificationToken, _PSKeychainSyncManager._circleWasReset, + _PSKeychainSyncManager._completion, _PSKeychainSyncManager._complexSecurityCodeController, + _PSKeychainSyncManager._credentialExpirationTimer, _PSKeychainSyncManager._devicePinController, + _PSKeychainSyncManager._flow, _PSKeychainSyncManager._hostViewController, + _PSKeychainSyncManager._joinAfterRecoveryTimeoutTimer, _PSKeychainSyncManager._joiningCircle, + _PSKeychainSyncManager._joiningCircleAfterRecovery, _PSKeychainSyncManager._passwordPromptCompletion, + _PSKeychainSyncManager._phoneNumberController, _PSKeychainSyncManager._resetCompletion, + _PSKeychainSyncManager._resetPromptControllerHost, _PSKeychainSyncManager._securityCodeRecoveryAttempt, + _PSKeychainSyncManager._securityCodeRecoveryController, + _PSKeychainSyncManager._settingsSetupController, _PSKeychainSyncManager._simpleSecurityCodeController, + _PSKeychainSyncManager._smsValidationController, _PSKeychainSyncManager._spinnerCount, + _PSKeychainSyncManager._spinningView, _PSKeychainSyncManager._stagedSecurityCode, + _PSKeychainSyncManager._stagedSecurityCodeType, _PSKeychainSyncPhoneNumber._countryInfo, + _PSKeychainSyncPhoneNumber._digits, _PSKeychainSyncSecurityCodeController._firstPasscodeEntry, + _PSKeychainSyncSecurityCodeController._footerButton, + _PSKeychainSyncSecurityCodeController._footerLabel, + _PSKeychainSyncSecurityCodeController._generatedCode, + _PSKeychainSyncSecurityCodeController._keyboardHeight, _PSKeychainSyncSecurityCodeController._mode, + _PSKeychainSyncSecurityCodeController._securityCodeType, + _PSKeychainSyncSecurityCodeController._showsAdvancedSettings, + _PSKeychainSyncTextEntryController._convertsNumeralsToASCII, + _PSKeychainSyncTextEntryController._hidesNextButton, + _PSKeychainSyncTextEntryController._numberOfPasscodeFields, + _PSKeychainSyncTextEntryController._secureTextEntry, _PSKeychainSyncTextEntryController._textEntryCell, + _PSKeychainSyncTextEntryController._textEntrySpecifier, + _PSKeychainSyncTextEntryController._textEntryType, _PSKeychainSyncTextEntryController._textEntryView, + _PSKeychainSyncTextEntryController._textFieldHasRoundBorder, + _PSKeychainSyncTextEntryController._textValue, _PSKeychainSyncViewController._delegate, + _PSKeychainSyncViewController._groupSpecifier, _PSKeychainSyncViewController._headerView, + _PSLanguage._languageCode, _PSLanguage._languageName, _PSLanguage._localizedLanguageName, + _PSLargeTextController._extendedRangeSliderListController, + _PSLargeTextController._showsExtendedRangeSwitch, _PSLargeTextController._sliderListController, + _PSLargeTextController._usesExtendedRange, _PSLargeTextSliderListController._contentSizeCategories, + _PSLargeTextSliderListController._selectedCategoryIndex, + _PSLargeTextSliderListController._showsExtendedRangeSwitch, + _PSLargeTextSliderListController._showsLargerSizesHelpText, + _PSLargeTextSliderListController._sliderGroupSpecifier, + _PSLargeTextSliderListController._usesExtendedRange, + _PSLargeTextSliderListController._viewIsDisappearing, _PSLazyImagePromise._image, + _PSLazyImagePromise._imageBundle, _PSLazyImagePromise._imageLoaded, _PSLazyImagePromise._imageName, + _PSLazyImagePromise._imagePath, _PSLazyImagePromise._loadBlock, _PSLegalMessagePane._webView, + _PSLegendColorView._color, _PSListContainerView._delegate, _PSListController._altTextColor, + _PSListController._backgroundColor, _PSListController._bundleControllers, + _PSListController._bundlesLoaded, _PSListController._buttonTextColor, _PSListController._cachesCells, + _PSListController._cellAccessoryColor, _PSListController._cellAccessoryHighlightColor, + _PSListController._cellHighlightColor, _PSListController._cells, _PSListController._containerView, + _PSListController._contentOffsetWithKeyboard, _PSListController._dataSource, + _PSListController._edgeToEdgeCells, _PSListController._editableInsertionPointColor, + _PSListController._editablePlaceholderTextColor, _PSListController._editableSelectionBarColor, + _PSListController._editableSelectionHighlightColor, _PSListController._editableTextColor, + _PSListController._footerHyperlinkColor, _PSListController._forceSynchronousIconLoadForCreatedCells, + _PSListController._foregroundColor, _PSListController._groups, _PSListController._hasAppeared, + _PSListController._highlightItemName, _PSListController._isVisible, _PSListController._keyboard, + _PSListController._keyboardWasVisible, _PSListController._offsetItemName, + _PSListController._pendingURLResourceDictionary, _PSListController._popupIsDismissing, + _PSListController._popupIsModal, _PSListController._prequeuedReusablePSTableCells, + _PSListController._requestingSpecifiersFromDataSource, _PSListController._reusesCells, + _PSListController._savedSelectedIndexPath, _PSListController._sectionContentInsetInitialized, + _PSListController._segmentedSliderTrackColor, _PSListController._separatorColor, + _PSListController._showingSetupController, _PSListController._specifierID, + _PSListController._specifierIDPendingPush, _PSListController._specifiers, + _PSListController._specifiersByID, _PSListController._table, _PSListController._textColor, + _PSListController._usesDarkTheme, _PSListController._verticalContentOffset, + _PSListItemsController._deferItemSelection, _PSListItemsController._lastSelectedSpecifier, + _PSListItemsController._restrictionList, _PSListItemsController._retainedTarget, + _PSListItemsController._rowToSelect, _PSLocaleController._contentView, + _PSLocaleController._currentRegion, _PSLocaleController._filteredListContent, + _PSLocaleController._hideKeyboardInSearchMode, _PSLocaleController._localeSelector, + _PSLocaleController._regionsList, _PSLocaleController._searchBar, _PSLocaleController._searchMode, + _PSLocaleController._sections, _PSLocaleController._tableView, + _PSMagnifyController._HTMLResourceBaseURL, _PSMagnifyController._alwaysShowCancelButton, + _PSMagnifyController._delegate, _PSMagnifyController._dividerLine, + _PSMagnifyController._doneButtonCommits, _PSMagnifyController._firstLoadSemaphore, + _PSMagnifyController._initialMagnifyMode, _PSMagnifyController._loaded, + _PSMagnifyController._magnifyModePicker, _PSMagnifyController._originalMagnifyMode, + _PSMagnifyController._pageControl, _PSMagnifyController._previewsScroller, + _PSMagnifyController._scrolledPreviewPage, _PSMagnifyController._selectedMagnifyMode, + _PSMagnifyController._webViewsForMagnifyMode, _PSMagnifyMode._localizedName, _PSMagnifyMode._name, + _PSMagnifyMode._previewHTMLStrings, _PSMagnifyMode._previewStyleSheets, _PSMagnifyMode._size, + _PSMagnifyMode._zoomed, _PSNavBarSpinnerManager._savedRecords, + _PSOAuthAccountRedirectURLController._redirectHandlerMap, _PSPasscodeField._dashViews, + _PSPasscodeField._delegate, _PSPasscodeField._digitViews, _PSPasscodeField._dotFullViews, + _PSPasscodeField._dotOutlineViews, _PSPasscodeField._enabled, _PSPasscodeField._fieldSpacing, + _PSPasscodeField._foregroundColor, _PSPasscodeField._keyboardAppearance, + _PSPasscodeField._numberOfEntryFields, _PSPasscodeField._securePasscodeEntry, + _PSPasscodeField._shouldBecomeFirstResponderOnTap, _PSPasscodeField._stringValue, + _PSPearlAttentionGroupController._groupSpecifier, _PSPearlAttentionGroupController._listController, + _PSPearlAttentionGroupController._pearlDevice, _PSPearlAttentionGroupController._pinCode, + _PSPearlAttentionGroupController._updatedConfiguration, _PSPearlCrossHairsManager._instanceVector, + _PSPearlCrossHairsManager._springInstances, _PSPearlCrossHairsRenderingView._axis, + _PSPearlCrossHairsRenderingView._checkMarkData, + _PSPearlCrossHairsRenderingView._checkMarkPathCollection, + _PSPearlCrossHairsRenderingView._commandQueue, _PSPearlCrossHairsRenderingView._crosshairsData, + _PSPearlCrossHairsRenderingView._crosshairsInstanceManager, + _PSPearlCrossHairsRenderingView._crosshairsPathCollection, + _PSPearlCrossHairsRenderingView._inFlightSemaphore, _PSPearlCrossHairsRenderingView._pathBlend, + _PSPearlCrossHairsRenderingView._pathBlendDest, _PSPearlCrossHairsRenderingView._renderer, + _PSPearlCrossHairsRenderingView._state, _PSPearlCrossHairsRenderingView._time, + _PSPearlCrossHairsView._arrowView, _PSPearlCrossHairsView._renderingView, + _PSPearlEnrollController._animatingDetailLabel, _PSPearlEnrollController._animatingInstructionLabel, + _PSPearlEnrollController._animatingState, _PSPearlEnrollController._audioEngine, + _PSPearlEnrollController._audioNode, _PSPearlEnrollController._authContext, + _PSPearlEnrollController._bioCaptureComplete, _PSPearlEnrollController._bioKitCompletion, + _PSPearlEnrollController._buttonTray, _PSPearlEnrollController._completeSoundBuffer, + _PSPearlEnrollController._credential, _PSPearlEnrollController._customDetailStrings, + _PSPearlEnrollController._customInstructionStrings, _PSPearlEnrollController._darkBackground, + _PSPearlEnrollController._darkTrayBackdrop, _PSPearlEnrollController._debugLabel, + _PSPearlEnrollController._delegate, _PSPearlEnrollController._detailLabel, + _PSPearlEnrollController._device, _PSPearlEnrollController._endSoundBuffer, + _PSPearlEnrollController._enrollOperation, _PSPearlEnrollController._enrollView, + _PSPearlEnrollController._escapeHatchButton, _PSPearlEnrollController._failSoundBuffer, + _PSPearlEnrollController._hapticPlayer, _PSPearlEnrollController._inBuddy, + _PSPearlEnrollController._inDemo, _PSPearlEnrollController._instructionLabel, + _PSPearlEnrollController._lastFaceFoundDate, _PSPearlEnrollController._lightTrayBackdrop, + _PSPearlEnrollController._lockSoundBuffer, _PSPearlEnrollController._nextStateButton, + _PSPearlEnrollController._pendingSubstate, _PSPearlEnrollController._poseStatus, + _PSPearlEnrollController._previousState, _PSPearlEnrollController._progressString, + _PSPearlEnrollController._scanSoundBuffer, _PSPearlEnrollController._scrollView, + _PSPearlEnrollController._sharingclient, _PSPearlEnrollController._state, + _PSPearlEnrollController._stateDelayTimer, _PSPearlEnrollController._stateQueue, + _PSPearlEnrollController._stateSema, _PSPearlEnrollController._stateStart, + _PSPearlEnrollController._statusPollTimer, _PSPearlEnrollController._statusString, + _PSPearlEnrollController._substate, _PSPearlEnrollController._substateDelayTimer, + _PSPearlEnrollController._substatePending, _PSPearlEnrollController._suspended, + _PSPearlEnrollView._active, _PSPearlEnrollView._blurInProgress, _PSPearlEnrollView._cameraShadeView, + _PSPearlEnrollView._captureSession, _PSPearlEnrollView._captureSessionRestarts, + _PSPearlEnrollView._circleMaskLayer, _PSPearlEnrollView._circleMaskView, + _PSPearlEnrollView._correctionSamplesCount, _PSPearlEnrollView._crossHairs, + _PSPearlEnrollView._currentCorrectedPitch, _PSPearlEnrollView._debugFrameInformation, + _PSPearlEnrollView._debugLabel, _PSPearlEnrollView._debugOverlayVisible, + _PSPearlEnrollView._debugStatusInformation, _PSPearlEnrollView._debugTemplateInformation, + _PSPearlEnrollView._delegate, _PSPearlEnrollView._deviceInput, + _PSPearlEnrollView._entryAnimationAlreadyRan, _PSPearlEnrollView._entryAnimationImages, + _PSPearlEnrollView._entryAnimationView, _PSPearlEnrollView._fillHoldoffFrameCount, + _PSPearlEnrollView._frameCount, _PSPearlEnrollView._nudgeTimer, _PSPearlEnrollView._nudgesNudged, + _PSPearlEnrollView._nudgesPaused, _PSPearlEnrollView._nudging, + _PSPearlEnrollView._pendingRaiseLowerGuidanceState, _PSPearlEnrollView._pillContainer, + _PSPearlEnrollView._pitchCorrection, _PSPearlEnrollView._pitchCorrectionSamples, + _PSPearlEnrollView._pitchMax, _PSPearlEnrollView._pitchMin, _PSPearlEnrollView._positioningGuide, + _PSPearlEnrollView._previewLayer, _PSPearlEnrollView._progressiveBlur, + _PSPearlEnrollView._raiseLowerGuidanceDelayTimer, _PSPearlEnrollView._raiseLowerGuidanceStatePending, + _PSPearlEnrollView._repositionPhoneLabel, _PSPearlEnrollView._startTime, _PSPearlEnrollView._state, + _PSPearlEnrollView._stateStart, _PSPearlEnrollView._stateTransitionInProgress, + _PSPearlEnrollView._tutorialMovieView, _PSPearlEnrollView._tutorialPlayer, + _PSPearlPillContainerView._clockwise, _PSPearlPillContainerView._counterwise, + _PSPearlPillContainerView._hasPillStateStash, _PSPearlPillContainerView._lastAngle, + _PSPearlPillContainerView._numberOfVisiblePillViews, _PSPearlPillContainerView._pillViews, + _PSPearlPillContainerView._radius, _PSPearlPillContainerView._stashedPillStates, + _PSPearlPillContainerView._state, _PSPearlPillContainerView._successAnimation, _PSPearlPillView._path, + _PSPearlPillView._shapeLayer, _PSPearlPillView._size, _PSPearlPillView._state, + _PSPearlPillView._stateDelayTimer, _PSPearlPositioningGuideView._animationCompletion, + _PSPearlPositioningGuideView._animationCurve, _PSPearlPositioningGuideView._animationDuration, + _PSPearlPositioningGuideView._animationStart, _PSPearlPositioningGuideView._cornerRadius, + _PSPearlPositioningGuideView._displayLink, _PSPearlPositioningGuideView._edgeDistance, + _PSPearlPositioningGuideView._lastAnimationTickProgres, _PSPearlPositioningGuideView._lineAlpha, + _PSPearlPositioningGuideView._lineWidth, _PSPearlPositioningGuideView._postCornerLength, + _PSPearlPositioningGuideView._startCornerRadius, _PSPearlPositioningGuideView._startEdgeDistance, + _PSPearlPositioningGuideView._startLineAlpha, _PSPearlPositioningGuideView._startLineWidth, + _PSPearlPositioningGuideView._startPostCornerLength, _PSPearlPositioningGuideView._targetCornerRadius, + _PSPearlPositioningGuideView._targetEdgeDistance, _PSPearlPositioningGuideView._targetLineAlpha, + _PSPearlPositioningGuideView._targetLineWidth, _PSPearlPositioningGuideView._targetPostCornerLength, + _PSPearlSpringInstance._alphaDecay, _PSPearlSpringInstance._alphaFactor, + _PSPearlSpringInstance._axisOrientation, _PSPearlSpringInstance._color, + _PSPearlSpringInstance._grayscale, _PSPearlSpringInstance._initialMatrix, + _PSPearlSpringInstance._matrix, _PSPearlSpringInstance._scale, _PSPearlSpringInstance._scaleDest, + _PSPearlSpringInstance._springState, _PSPearlSpringInstance._target, _PSPearlSpringInstance._value, + _PSPearlSpringInstance.springs, _PSPhoneNumberSpecifier._countryCode, _PSQuotaInfo._mediaKindDict, + _PSQuotaInfo._totalStorage, _PSQuotaInfo._usedStorage, _PSRegion._regionCode, _PSRegion._regionName, + _PSRootController._deallocating, _PSRootController._specifier, + _PSRootController._stackAnimationController, _PSRootController._supportedOrientationsOverride, + _PSRootController._tasks, _PSSearchController._delegate, + _PSSearchController._iconForSearchEntryHandler, _PSSearchController._listController, + _PSSearchController._notifyToken, _PSSearchController._resultsController, + _PSSearchController._searchController, _PSSearchController._searchEnabled, _PSSearchEntry._action, + _PSSearchEntry._additionalDetailTextComponents, _PSSearchEntry._bundleName, + _PSSearchEntry._childEntries, _PSSearchEntry._groupName, _PSSearchEntry._groupSpecifier, + _PSSearchEntry._hasDetailController, _PSSearchEntry._hasListController, _PSSearchEntry._identifier, + _PSSearchEntry._isRootURL, _PSSearchEntry._isSection, _PSSearchEntry._keywords, + _PSSearchEntry._manifestBundleName, _PSSearchEntry._name, _PSSearchEntry._parentEntry, + _PSSearchEntry._plistName, _PSSearchEntry._sectionIdentifier, _PSSearchEntry._specifier, + _PSSearchEntry._url, _PSSearchIndexOperation._delegate, _PSSearchIndexOperation._searchEntry, + _PSSearchModel._activeSearchOperation, _PSSearchModel._currentQuery, _PSSearchModel._currentResults, + _PSSearchModel._dataSource, _PSSearchModel._deferredSpecifierUpdates, _PSSearchModel._delegates, + _PSSearchModel._entriesBeingIndexed, _PSSearchModel._entriesPendingSearch, + _PSSearchModel._hasLoadedRootEntries, _PSSearchModel._hasStartedIndexing, + _PSSearchModel._indexOperationQueue, _PSSearchModel._indexing, + _PSSearchModel._indexingEntriesWithLoadedDataSources, _PSSearchModel._queryForCurrentResults, + _PSSearchModel._removedEntriesStillIndexing, _PSSearchModel._removedEntriesStillSearching, + _PSSearchModel._rootEntries, _PSSearchModel._searchOperationQueue, + _PSSearchModel._searchStateAccessQueue, _PSSearchModel._showSectionInDetailText, + _PSSearchModel._specifierDataSources, _PSSearchModel._waitUntilFinished, + _PSSearchOperation._currentResults, _PSSearchOperation._delegate, _PSSearchOperation._newQuery, + _PSSearchOperation._query, _PSSearchOperation._rootEntries, _PSSearchResults._entriesBySection, + _PSSearchResults._entryComparator, _PSSearchResults._explicitlyAddedSectionEntries, + _PSSearchResults._needsSorting, _PSSearchResults._sectionComparator, _PSSearchResults._sectionEntries, + _PSSearchResults._treatSectionEntriesAsRegularEntries, _PSSearchResultsCell._shouldIndentContent, + _PSSearchResultsCell._shouldIndentSeparator, _PSSearchResultsController._delegate, + _PSSearchResultsController._iconViewMap, _PSSearchResultsController._reusableIconViews, + _PSSearchResultsController._searchResults, _PSSearchResultsController._tableView, + _PSSegmentTableCell._titleDict, _PSSegmentTableCell._values, _PSSegmentableSlider._feedbackGenerator, + _PSSegmentableSlider._locksToSegment, _PSSegmentableSlider._segmentCount, + _PSSegmentableSlider._segmented, _PSSegmentableSlider._snapsToSegment, + _PSSegmentableSlider._trackMarkersColor, _PSSetupController._parentController, + _PSSetupController._parentRootController, _PSSetupController._rootInfo, + _PSSliderTableCell._disabledView, _PSSoftwareUpdateAnimatedIcon._animating, + _PSSoftwareUpdateAnimatedIcon._innerGearView, _PSSoftwareUpdateAnimatedIcon._outerGearShadowView, + _PSSoftwareUpdateAnimatedIcon._outerGearView, _PSSoftwareUpdateLicenseViewController._licenseTextInfo, + _PSSoftwareUpdateLicenseViewController._licenseTextView, + _PSSoftwareUpdateReleaseNotesDetail._releaseNotes, + _PSSoftwareUpdateTableView._checkingForUpdateSpinner, _PSSoftwareUpdateTableView._checkingStatusLabel, + _PSSoftwareUpdateTableView._currentVersion, _PSSoftwareUpdateTableView._sourceOfUpdateRestriction, + _PSSoftwareUpdateTableView._state, _PSSoftwareUpdateTableView._subtitleLabel, + _PSSoftwareUpdateTermsManager._agreeToCombinedTOSInProgress, + _PSSoftwareUpdateTermsManager._hostController, _PSSoftwareUpdateTermsManager._overrideNextRUIAction, + _PSSoftwareUpdateTermsManager._presentedViewController, _PSSoftwareUpdateTermsManager._serverFlowStyle, + _PSSoftwareUpdateTermsManager._showProgressViewController, + _PSSoftwareUpdateTermsManager._termsCompletion, _PSSoftwareUpdateTermsManager._termsRemoteUI, + _PSSoftwareUpdateTermsManager._update, _PSSoftwareUpdateTitleCell._animatedGearView, + _PSSoftwareUpdateTitleCell._animatingGearView, _PSSoftwareUpdateTitleCell._gearBackgroundImageView, + _PSSoftwareUpdateTitleCell._progressBar, _PSSoftwareUpdateTitleCell._progressStyle, + _PSSoftwareUpdateTitleCell._releaseNotesSummaryView, _PSSoftwareUpdateTitleCell._updateStatusLabel, + _PSSoftwareUpdateTitleCell._updateStatusLabelVerticalConstraint, _PSSpecifier._buttonAction, + _PSSpecifier._confirmationAction, _PSSpecifier._confirmationCancelAction, + _PSSpecifier._controllerLoadAction, _PSSpecifier._name, _PSSpecifier._properties, + _PSSpecifier._shortTitleDict, _PSSpecifier._showContentString, _PSSpecifier._titleDict, + _PSSpecifier._userInfo, _PSSpecifier._values, _PSSpecifier.action, _PSSpecifier.autoCapsType, + _PSSpecifier.autoCorrectionType, _PSSpecifier.cancel, _PSSpecifier.cellType, + _PSSpecifier.detailControllerClass, _PSSpecifier.editPaneClass, _PSSpecifier.getter, + _PSSpecifier.keyboardType, _PSSpecifier.setter, _PSSpecifier.target, _PSSpecifier.textFieldType, + _PSSpecifierAction._getter, _PSSpecifierAction._setter, _PSSpecifierDataSource._observerRefs, + _PSSpecifierDataSource._specifiers, _PSSpecifierDataSource._specifiersLoaded, + _PSSpecifierGroupIndex._groupSections, _PSSpecifierGroupIndex._groupSpecifiers, + _PSSpecifierGroupIndex._specifiers, _PSSpecifierGroupIndex._ungroupedPrefixSpecifiers, + _PSSpecifierGroupIndex._wantsDebugCallbacks, _PSSpecifierUpdateContext._animated, + _PSSpecifierUpdateContext._updateModelOnly, _PSSpecifierUpdateContext._userInfo, + _PSSpecifierUpdateOperation._index, _PSSpecifierUpdateOperation._operation, + _PSSpecifierUpdateOperation._specifier, _PSSpecifierUpdateOperation._toIndex, + _PSSpecifierUpdates._context, _PSSpecifierUpdates._currentSpecifiers, _PSSpecifierUpdates._groupIndex, + _PSSpecifierUpdates._originalSpecifiers, _PSSpecifierUpdates._updates, + _PSSpecifierUpdates._wantsDebugCallbacks, _PSSpinnerRecord._hidesBackButton, + _PSSpinnerRecord._leftItems, _PSSpinnerRecord._navigationItem, _PSSpinnerRecord._rightItems, + _PSSpinnerTableCell._spinner, _PSSplitViewController._containerNavigationController, + _PSSplitViewController._navigationDelegate, _PSSpotlightSearchResultsController._delegate, + _PSSpotlightSearchResultsController._iconViewMap, _PSSpotlightSearchResultsController._results, + _PSSpotlightSearchResultsController._reusableIconViews, _PSSpotlightSearchResultsController._tableData, + _PSSpotlightSearchResultsController._tableDataCopy, _PSStackPushAnimationController._animationPreset, + _PSStackPushAnimationController._animationsToRunAlongsideToVC, + _PSStackPushAnimationController._completionBlock, _PSStackPushAnimationController._completionStagger, + _PSStackPushAnimationController._hasStartedAnimation, + _PSStackPushAnimationController._navigationController, _PSStackPushAnimationController._pushDuration, + _PSStackPushAnimationController._snapshots, _PSStackPushAnimationController._springDamping, + _PSStackPushAnimationController._startStagger, _PSStackPushAnimationController._viewControllers, + _PSStorageActionTip._significantItems, _PSStorageActionTipItem._createdDate, + _PSStorageActionTipItem._lastUsedDate, _PSStorageActionTipItem._recoverable, + _PSStorageActionTipItem._size, _PSStorageApp._appProxy, _PSStorageApp._demoteSize, + _PSStorageApp._externalDataSize, _PSStorageApp._isDeleting, _PSStorageApp._isDemoting, + _PSStorageApp._isDocumentApp, _PSStorageApp._isInternalApp, _PSStorageApp._isPseudoApp, + _PSStorageApp._isSystemApp, _PSStorageApp._isUsageApp, _PSStorageApp._isUserApp, + _PSStorageApp._mediaTypes, _PSStorageApp._purgeableCalculated, _PSStorageApp._purgeableSize, + _PSStorageApp._specialCalculated, _PSStorageApp._specialSize, _PSStorageApp._usageBundleApp, + _PSStorageAppCell._constraints, _PSStorageAppCell._icon, _PSStorageAppCell._iconView, + _PSStorageAppCell._infoLabel, _PSStorageAppCell._size, _PSStorageAppCell._sizeLabel, + _PSStorageAppCell._titleLabel, _PSStorageAppHeaderCell._appIconView, + _PSStorageAppHeaderCell._cloudIconView, _PSStorageAppHeaderCell._constraints, + _PSStorageAppHeaderCell._icon, _PSStorageAppHeaderCell._infoLabel, + _PSStorageAppHeaderCell._infoLabelEnabled, _PSStorageAppHeaderCell._isDemoted, + _PSStorageAppHeaderCell._titleLabel, _PSStorageAppHeaderCell._vendorLabel, + _PSStorageItemCell._constraints, _PSStorageItemCell._iconView, _PSStorageItemCell._infoLabel, + _PSStorageItemCell._size, _PSStorageItemCell._sizeLabel, _PSStorageItemCell._titleLabel, + _PSStorageOptionTip._confirmationButtonTitle, _PSStorageOptionTip._confirmationText, + _PSStorageOptionTip._delegate, _PSStorageOptionTip._mayCauseDataLoss, _PSStoragePlugin._identifier, + _PSStoragePlugin._tips, _PSStorageProgressView._percent, _PSStorageTip._identifier, + _PSStorageTip._infoSpecifier, _PSStorageTip._specifier, _PSStorageTipCell._appIconView, + _PSStorageTipCell._checkIconView, _PSStorageTipCell._constraints, _PSStorageTipCell._enableButton, + _PSStorageTipCell._enableWidth, _PSStorageTipCell._hformat, _PSStorageTipCell._isOption, + _PSStorageTipCell._percent, _PSStorageTipCell._prevPercent, _PSStorageTipCell._progressLabel, + _PSStorageTipCell._progressView, _PSStorageTipCell._progressWidth, _PSStorageTipCell._spinner, + _PSStorageTipCell._titleLabel, _PSStorageTipCell._titleWidth, _PSStorageTipInfoCell._constraints, + _PSStorageTipInfoCell._infoLabel, _PSSubtitleDisclosureTableCell._valueLabel, + _PSSwitchTableCell._activityIndicator, _PSSystemConfiguration._prefs, + _PSSystemConfigurationDynamicStoreEthernetWatcher._dynamicStore, + _PSSystemConfigurationDynamicStoreEthernetWatcher._dynamicStoreSource, + _PSSystemConfigurationDynamicStoreNETRBWatcher._netrbReason, + _PSSystemConfigurationDynamicStoreNETRBWatcher._netrbState, + _PSSystemConfigurationDynamicStoreNETRBWatcher._scDynamicStore, + _PSSystemConfigurationDynamicStoreNETRBWatcher._scRunLoopSource, + _PSSystemConfigurationDynamicStoreWifiWatcher._prefs, + _PSSystemConfigurationDynamicStoreWifiWatcher._tetheringLink, + _PSSystemConfigurationDynamicStoreWifiWatcher._wifiInterface, + _PSSystemConfigurationDynamicStoreWifiWatcher._wifiKey, _PSSystemPolicyForApp._bundleIdentifier, + _PSSystemPolicyForApp._forcePolicyOptions, _PSSystemPolicyForApp._policyOptions, + _PSTableCell._alignment, _PSTableCell._cellEnabled, _PSTableCell._checked, + _PSTableCell._checkedImageView, _PSTableCell._customHighlightContext, + _PSTableCell._forceHideDisclosureIndicator, _PSTableCell._hiddenTitle, _PSTableCell._isCopyable, + _PSTableCell._lazyIcon, _PSTableCell._lazyIconAppID, _PSTableCell._lazyIconDontUnload, + _PSTableCell._lazyIconForceSynchronous, _PSTableCell._lazyIconURL, _PSTableCell._longTapRecognizer, + _PSTableCell._pAction, _PSTableCell._pTarget, _PSTableCell._reusedCell, _PSTableCell._shouldHideTitle, + _PSTableCell._specifier, _PSTableCell._type, _PSTableCell._urlSession, _PSTableCell._value, + _PSTableCellHighlightContext._animateUnhighlight, _PSTableCellHighlightContext._cell, + _PSTableCellHighlightContext._originalSelectionStyle, _PSTableCellHighlightContext._timer, + _PSTableCellHighlightContext._valid, _PSTextEditingPane._cell, _PSTextEditingPane._table, + _PSTextEditingPane._textField, _PSTextFieldPINView._cell, _PSTextFieldPINView._passcodeField, + _PSTextFieldPINView._table, _PSTextFieldPINView._usesNumericKeyboard, + _PSTextFieldSpecifier._placeholder, _PSTextFieldSpecifier.bestGuess, _PSTextView._cell, + _PSTextViewPane._textView, _PSTextViewTableCell._textView, _PSThirdPartyApp._localizedName, + _PSThirdPartyApp._proxy, _PSTimeRangeCell._constraints, _PSTimeRangeCell._delegate, + _PSTimeRangeCell._fromTime, _PSTimeRangeCell._fromTitle, _PSTimeRangeCell._toTime, + _PSTimeRangeCell._toTitle, _PSUICellularUsageApp._bundleIdentifier, + _PSUICellularUsageApp._bytesUsedLastCycle, _PSUICellularUsageApp._bytesUsedThisCycle, + _PSUICellularUsageApp._displayName, _PSUICellularUsageApp._roamingBytesUsedLastCycle, + _PSUICellularUsageApp._roamingBytesUsedThisCycle, _PSUICellularUsageApp._totalBytesUsed, + _PSUICellularUsageApp._totalRoamingBytesUsed, _PSUsageBundleApp._bundleIdentifier, + _PSUsageBundleApp._categories, _PSUsageBundleApp._deletionRestricted, _PSUsageBundleApp._name, + _PSUsageBundleApp._storageReporterReference, _PSUsageBundleApp._totalSize, + _PSUsageBundleCategory._identifier, _PSUsageBundleCategory._name, + _PSUsageBundleCategory._usageBundleApp, _PSUsageBundleManager._bundleMap, + _PSUsageBundleManager._storageReporters, _PSUsageBundleManager._usageBundleApps, + _PSUsageSizeHeader._height, _PSUsageSizeHeader._sizeLabel, _PSUsageSizeHeader._titleLabel, + _PSViewController._parentController, _PSViewController._rootController, _PSViewController._specifier, + _PSWeakReference._location, _PSWebContainerView._content, _PSWebContainerView._webView, + _PasscodeFieldCell._convertsNumeralsToASCII, _PasscodeFieldCell._delegate, + _PasscodeFieldCell._denyFirstResponder, _PasscodeFieldCell._passcodeField, _PathObject._len, + _PathObject._path, _PrefsUILinkLabel._URL, _PrefsUILinkLabel._action, _PrefsUILinkLabel._target, + _PrefsUILinkLabel._touchingURL, _PrefsUILinkLabel._url, + _ProblemReportingController._aboutDiagnosticsLinkLabel, + _ProblemReportingController._appActivitySpecifiers, + _ProblemReportingController._filesystemMetadataSnapshotSpecifier, + _ProblemReportingController._healthDataSpecifiers, _ProblemReportingController._iCloudSpecifiers, + _ProblemReportingController._spinnerSpecifier, _ProblemReportingController._wheelchairDataSpecifiers, + _QuietHoursStateController._bbGateway, _QuietHoursStateController._behaviorOverrides, + _QuietHoursStateController._fromComponents, _QuietHoursStateController._isEffectiveWhileUnlocked, + _QuietHoursStateController._mode, _QuietHoursStateController._overrideStatus, + _QuietHoursStateController._overrideType, _QuietHoursStateController._overrides, + _QuietHoursStateController._privilegeTypes, _QuietHoursStateController._recordID, + _QuietHoursStateController._toComponents, _QuietHoursStateController._valid, + _SIMStatusCache._simStatus, _WirelessDataUsageWorkspace._analyticsWorkspace, + _WirelessDataUsageWorkspace._billingCycleEndDate, _WirelessDataUsageWorkspace._billingCycleSupported, + _WirelessDataUsageWorkspace._carrierSpaceSupported, + _WirelessDataUsageWorkspace._pendingProcessAnalytics, + _WirelessDataUsageWorkspace._previousBillingCycleEndDate, + _WirelessDataUsageWorkspace._processAnalytics, _WirelessDataUsageWorkspace._subscriberTag, + __PSDeferredUpdates._invalidatedSpecifiers, __PSDeferredUpdates._searchEntries, + __PSDeferredUpdates._specifierUpdates, __PSDeleteButtonCell._buttonColor, + __PSSpinnerViewController._spinner ] +...