From c4c2d17ffca3847f5a90db08653e352f51b49cd3 Mon Sep 17 00:00:00 2001 From: Joseph Mattello Date: Sun, 2 Apr 2023 02:28:12 -0400 Subject: [PATCH] snapshot Signed-off-by: Joseph Mattello --- .../contents.xcworkspacedata | 7 + .../xcschemes/SideBackup.xcscheme | 104 +++++ .../xcschemes/SideStore-Package.xcscheme | 411 ++++++++++++++++++ .../xcshareddata/xcschemes/SideStore.xcscheme | 176 ++++++++ .../xcschemes/SideStoreCore-Dynamic.xcscheme | 66 +++ .../xcschemes/SideStoreCore-Static.xcscheme | 66 +++ .../xcschemes/SideStoreCore.xcscheme | 66 +++ .../xcschemes/SideStoreUIKit-Dynamic.xcscheme | 66 +++ .../xcschemes/SideStoreUIKit-Static.xcscheme | 66 +++ .../xcschemes/SideStoreUIKit.xcscheme | 66 +++ .../xcschemes/SideWidgetKit-Dynamic.xcscheme | 66 +++ .../xcschemes/SideWidgetKit-Static.xcscheme | 66 +++ .../xcschemes/SideWidgetKit.xcscheme | 66 +++ SideStoreApp/Package.resolved | 59 +-- SideStoreApp/Package.swift | 113 +++-- .../Sources/Cargo/Commands/Version.swift | 5 +- .../Cargo/swiftlint/Commands/Version.swift | 5 +- .../Sources/MiniMuxer/MiniMuxer.swift | 6 +- .../Sources/SideBackup/AppDelegate.swift | 5 +- .../Sources/SideBackup/BackupController.swift | 5 +- .../SideDaemon/DaemonRequestHandler.swift | 5 +- .../Sources/SideStore/AppDelegate.swift | 5 +- .../Sources/SideStore/Resources/AltBackup.ipa | Bin 58302 -> 0 bytes .../Sources/SideStore/SceneDelegate.swift | 5 +- .../Connections/Connection.swift | 5 +- .../Connections/ConnectionManager.swift | 5 +- .../Connections/XPCConnection.swift | 5 +- .../Extensions/UIColor+Hex.swift | 4 +- .../SideStoreCore/Model/AppPermission.swift | 25 -- .../SideStoreCore/Model/DatabaseManager.swift | 5 +- .../SideStoreCore/Model/MergePolicy.swift | 5 +- .../SideStoreCore/Model/NewsItem.swift | 10 +- .../Sources/SideStoreCore/Model/Source.swift | 2 +- .../SideStoreCore/Model/StoreApp.swift | 9 +- .../SideStoreCore/Patreon/PatreonAPI.swift | 17 +- .../App Detail/AppContentViewController.swift | 5 +- .../AppContentViewControllerCells.swift | 0 .../App Detail/AppViewController.swift | 0 .../PermissionPopoverViewController.swift | 0 .../App IDs/AppIDsViewController.swift | 0 .../AuthenticationViewController.swift | 0 .../InstructionsViewController.swift | 0 .../RefreshAltStoreViewController.swift | 0 .../SelectTeamViewController.swift | 5 +- .../Browse/BrowseCollectionViewCell.swift | 5 +- .../Browse/BrowseViewController.swift | 5 +- .../Browse/ScreenshotCollectionViewCell.swift | 0 .../Components/AppBannerView.swift | 0 .../Components/AppIconImageView.swift | 0 .../Components/BackgroundTaskManager.swift | 0 .../Components/BannerCollectionViewCell.swift | 0 .../Components/Button.swift | 0 .../Components/CollapsingTextView.swift | 0 .../ForwardingNavigationController.swift | 0 .../Components/NavigationBar.swift | 0 .../Components/PillButton.swift | 0 .../TextCollectionReusableView.swift | 0 .../Components/ToastView.swift | 0 .../FileManager+DirectorySize.swift | 5 +- .../Extensions/INInteraction+AltStore.swift | 0 .../Extensions/OSLog+SideStore.swift | 0 .../UIApplication+AppExtension.swift | 0 .../Extensions/UIColor+AltStore.swift | 1 + .../Extensions/UIDevice+Jailbreak.swift | 0 .../Extensions/UIDevice+Vibration.swift | 0 .../Extensions/UIScreen+CompactHeight.swift | 0 .../Managing Apps/AppManager.swift | 5 +- .../Managing Apps/AppManagerErrors.swift | 0 .../Model/AppPermission+UIKIt.swift | 38 ++ .../InstalledAppsCollectionHeaderView.swift | 0 .../My Apps/MyAppsComponents.swift | 0 .../My Apps/MyAppsViewController.swift | 5 +- .../My Apps/UpdateCollectionViewCell.swift | 0 .../News/NewsCollectionViewCell.swift | 0 .../News/NewsViewController.swift | 5 +- .../PatchViewController.swift | 6 +- .../Error Log/ErrorLogTableViewCell.swift | 0 .../Error Log/ErrorLogViewController.swift | 5 +- .../Settings/InsetGroupTableViewCell.swift | 0 .../Settings/LicensesViewController.swift | 0 .../Settings/PatreonComponents.swift | 0 .../Settings/PatreonViewController.swift | 0 .../RefreshAttemptsViewController.swift | 0 .../Settings/SettingsHeaderFooterView.swift | 0 .../Settings/SettingsViewController.swift | 0 .../SideStoreAppDelegate.swift | 0 .../Sources/SourcesViewController.swift | 5 +- .../TabBarController.swift | 0 .../Types/ScreenshotProcessor.swift | 0 .../ALTApplication+AltStoreApp.swift | 0 .../Analytics/AnalyticsManager.swift | 0 .../Intents/IntentHandler.swift | 5 +- .../Intents/Intents.intentdefinition | 0 .../Intents/ViewApp.intentdefinition | 0 .../Intents/ViewAppIntentHandler.swift | 5 +- .../Consts/Consts+Proxy.swift | 0 .../Consts/Consts.swift | 0 .../Operations/AuthenticationOperation.swift | 5 +- .../BackgroundRefreshAppsOperation.swift | 5 +- .../Operations/BackupAppOperation.swift | 5 +- .../Operations/DeactivateAppOperation.swift | 0 .../Operations/DownloadAppOperation.swift | 5 +- .../Operations/EnableJITOperation.swift | 0 .../FetchAnisetteDataOperation.swift | 0 .../Operations/FetchAppIDsOperation.swift | 0 .../FetchProvisioningProfilesOperation.swift | 0 .../Operations/FetchSourceOperation.swift | 0 .../FetchTrustedSourcesOperation.swift | 0 .../Operations/InstallAppOperation.swift | 5 +- .../Operations/Operation.swift | 0 .../Operations/OperationContexts.swift | 0 .../Operations/OperationError.swift | 0 .../Patch App/PatchAppOperation.swift | 2 + .../Operations/RefreshAppOperation.swift | 0 .../Operations/RefreshGroup.swift | 0 .../Operations/RemoveAppBackupOperation.swift | 5 +- .../Operations/RemoveAppOperation.swift | 0 .../Operations/ResignAppOperation.swift | 5 +- .../Operations/SendAppOperation.swift | 0 .../Operations/UpdatePatronsOperation.swift | 0 .../Operations/VerifyAppOperation.swift | 0 .../Patreon/PatreonAPI+UIApplication.swift | 19 + .../Settings/AnisetteManager.swift | 0 .../Types/LoadingState.swift | 0 .../Types/Managed.swift | 0 .../Sources/SideWidgetKit/SideWidget.swift | 5 +- 126 files changed, 1639 insertions(+), 124 deletions(-) create mode 100644 SideStoreApp/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideBackup.xcscheme create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStore-Package.xcscheme create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStore.xcscheme create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore-Dynamic.xcscheme create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore-Static.xcscheme create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore.xcscheme create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit-Dynamic.xcscheme create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit-Static.xcscheme create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit.xcscheme create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit-Dynamic.xcscheme create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit-Static.xcscheme create mode 100644 SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit.xcscheme delete mode 100644 SideStoreApp/Sources/SideStore/Resources/AltBackup.ipa rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/App Detail/AppContentViewController.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/App Detail/AppContentViewControllerCells.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/App Detail/AppViewController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/App Detail/PermissionPopoverViewController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/App IDs/AppIDsViewController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Authentication/AuthenticationViewController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Authentication/InstructionsViewController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Authentication/RefreshAltStoreViewController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Authentication/SelectTeamViewController.swift (97%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Browse/BrowseCollectionViewCell.swift (98%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Browse/BrowseViewController.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Browse/ScreenshotCollectionViewCell.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Components/AppBannerView.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Components/AppIconImageView.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Components/BackgroundTaskManager.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Components/BannerCollectionViewCell.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Components/Button.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Components/CollapsingTextView.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Components/ForwardingNavigationController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Components/NavigationBar.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Components/PillButton.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Components/TextCollectionReusableView.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Components/ToastView.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Extensions/FileManager+DirectorySize.swift (93%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Extensions/INInteraction+AltStore.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Extensions/OSLog+SideStore.swift (100%) rename SideStoreApp/Sources/{SideStoreCore => SideStoreUIKit}/Extensions/UIApplication+AppExtension.swift (100%) rename SideStoreApp/Sources/{SideStoreCore => SideStoreUIKit}/Extensions/UIColor+AltStore.swift (97%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Extensions/UIDevice+Jailbreak.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Extensions/UIDevice+Vibration.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Extensions/UIScreen+CompactHeight.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Managing Apps/AppManager.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Managing Apps/AppManagerErrors.swift (100%) create mode 100644 SideStoreApp/Sources/SideStoreUIKit/Model/AppPermission+UIKIt.swift rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/My Apps/InstalledAppsCollectionHeaderView.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/My Apps/MyAppsComponents.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/My Apps/MyAppsViewController.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/My Apps/UpdateCollectionViewCell.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/News/NewsCollectionViewCell.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/News/NewsViewController.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit/Operations/Patch App => SideStoreUIKit/Operations/PatchAppOperation}/PatchViewController.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Settings/Error Log/ErrorLogTableViewCell.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Settings/Error Log/ErrorLogViewController.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Settings/InsetGroupTableViewCell.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Settings/LicensesViewController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Settings/PatreonComponents.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Settings/PatreonViewController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Settings/RefreshAttemptsViewController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Settings/SettingsHeaderFooterView.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Settings/SettingsViewController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/SideStoreAppDelegate.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Sources/SourcesViewController.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/TabBarController.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideStoreUIKit}/Types/ScreenshotProcessor.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/ALTApplication+AltStoreApp.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Analytics/AnalyticsManager.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Authentication/Intents/IntentHandler.swift (98%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Authentication/Intents/Intents.intentdefinition (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Authentication/Intents/ViewApp.intentdefinition (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Authentication/Intents/ViewAppIntentHandler.swift (95%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Consts/Consts+Proxy.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Consts/Consts.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/AuthenticationOperation.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/BackgroundRefreshAppsOperation.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/BackupAppOperation.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/DeactivateAppOperation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/DownloadAppOperation.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/EnableJITOperation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/FetchAnisetteDataOperation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/FetchAppIDsOperation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/FetchProvisioningProfilesOperation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/FetchSourceOperation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/FetchTrustedSourcesOperation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/InstallAppOperation.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/Operation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/OperationContexts.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/OperationError.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/Patch App/PatchAppOperation.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/RefreshAppOperation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/RefreshGroup.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/RemoveAppBackupOperation.swift (97%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/RemoveAppOperation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/ResignAppOperation.swift (99%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/SendAppOperation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/UpdatePatronsOperation.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Operations/VerifyAppOperation.swift (100%) create mode 100644 SideStoreApp/Sources/SideUIShared/Patreon/PatreonAPI+UIApplication.swift rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Settings/AnisetteManager.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Types/LoadingState.swift (100%) rename SideStoreApp/Sources/{SideStoreAppKit => SideUIShared}/Types/Managed.swift (100%) diff --git a/SideStoreApp/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/SideStoreApp/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideBackup.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideBackup.xcscheme new file mode 100644 index 00000000..5da38bf4 --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideBackup.xcscheme @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStore-Package.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStore-Package.xcscheme new file mode 100644 index 00000000..863b03cb --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStore-Package.xcscheme @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStore.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStore.xcscheme new file mode 100644 index 00000000..fb561c17 --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStore.xcscheme @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore-Dynamic.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore-Dynamic.xcscheme new file mode 100644 index 00000000..438a7965 --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore-Dynamic.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore-Static.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore-Static.xcscheme new file mode 100644 index 00000000..03008f35 --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore-Static.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore.xcscheme new file mode 100644 index 00000000..435240b7 --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreCore.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit-Dynamic.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit-Dynamic.xcscheme new file mode 100644 index 00000000..eda2f622 --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit-Dynamic.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit-Static.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit-Static.xcscheme new file mode 100644 index 00000000..06881652 --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit-Static.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit.xcscheme new file mode 100644 index 00000000..976e7810 --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideStoreUIKit.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit-Dynamic.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit-Dynamic.xcscheme new file mode 100644 index 00000000..5f0981ca --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit-Dynamic.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit-Static.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit-Static.xcscheme new file mode 100644 index 00000000..78d2eda1 --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit-Static.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit.xcscheme b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit.xcscheme new file mode 100644 index 00000000..28dbb773 --- /dev/null +++ b/SideStoreApp/.swiftpm/xcode/xcshareddata/xcschemes/SideWidgetKit.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SideStoreApp/Package.resolved b/SideStoreApp/Package.resolved index e636bee2..9e76aa95 100644 --- a/SideStoreApp/Package.resolved +++ b/SideStoreApp/Package.resolved @@ -3,7 +3,7 @@ { "identity" : "altsign", "kind" : "remoteSourceControl", - "location" : "https://github.com/SideStore/AltSign", + "location" : "https://github.com/SideStore/AltSign.git", "state" : { "revision" : "eb4c74dcf6be2fb00a3edc0381aae59fbbdb4cf3", "version" : "1.0.3" @@ -12,7 +12,7 @@ { "identity" : "appcenter-sdk-apple", "kind" : "remoteSourceControl", - "location" : "https://github.com/microsoft/appcenter-sdk-apple", + "location" : "https://github.com/microsoft/appcenter-sdk-apple.git", "state" : { "revision" : "b2dc99cfedead0bad4e6573d86c5228c89cff332", "version" : "4.4.3" @@ -27,37 +27,19 @@ "revision" : "e754ab1c80920dd51a8e08290c912ac1c2ac8b58" } }, - { - "identity" : "imobiledevice.swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/SideStore/iMobileDevice.swift", - "state" : { - "revision" : "74e481106dd155c0cd21bca6795fd9fe5f751654", - "version" : "1.0.5" - } - }, { "identity" : "keychainaccess", "kind" : "remoteSourceControl", - "location" : "https://github.com/kishikawakatsumi/KeychainAccess", + "location" : "https://github.com/kishikawakatsumi/KeychainAccess.git", "state" : { "revision" : "84e546727d66f1adc5439debad16270d0fdd04e7", "version" : "4.2.2" } }, - { - "identity" : "launchatlogin", - "kind" : "remoteSourceControl", - "location" : "https://github.com/sindresorhus/LaunchAtLogin.git", - "state" : { - "revision" : "7ad6331f9c38953eb1ce8737758e18f7607e984a", - "version" : "5.0.0" - } - }, { "identity" : "nuke", "kind" : "remoteSourceControl", - "location" : "https://github.com/kean/Nuke", + "location" : "https://github.com/kean/Nuke.git", "state" : { "revision" : "9318d02a8a6d20af56505c9673261c1fd3b3aebe", "version" : "7.6.3" @@ -84,7 +66,7 @@ { "identity" : "roxas", "kind" : "remoteSourceControl", - "location" : "https://github.com/JoeMatt/Roxas", + "location" : "https://github.com/JoeMatt/Roxas.git", "state" : { "revision" : "17338c09ec0ffeea4c68135f17c1f801a3d6d10d", "version" : "1.2.2" @@ -93,7 +75,7 @@ { "identity" : "semanticversion", "kind" : "remoteSourceControl", - "location" : "https://github.com/SwiftPackageIndex/SemanticVersion", + "location" : "https://github.com/SwiftPackageIndex/SemanticVersion.git", "state" : { "revision" : "fc670910dc0903cc269b3d0b776cda5703979c4e", "version" : "0.3.5" @@ -102,12 +84,30 @@ { "identity" : "sidekit", "kind" : "remoteSourceControl", - "location" : "https://github.com/SideStore/SideKit", + "location" : "https://github.com/SideStore/SideKit.git", "state" : { "revision" : "7ea34a09b52c104077dea8e0b90f8dc55d43b36b", "version" : "0.1.0" } }, + { + "identity" : "swift-log", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-log.git", + "state" : { + "revision" : "32e8d724467f8fe623624570367e3d50c5638e46", + "version" : "1.5.2" + } + }, + { + "identity" : "swift-log-swiftybeaver", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ShivaHuang/swift-log-SwiftyBeaver.git", + "state" : { + "revision" : "7b6f329f47530583546be82bb14060aba888cd43", + "version" : "0.1.0" + } + }, { "identity" : "swiftpmplugins", "kind" : "remoteSourceControl", @@ -116,6 +116,15 @@ "revision" : "2e4833a3ca65d0aaa986138b8ef350b7f549ba28", "version" : "1.0.0" } + }, + { + "identity" : "swiftybeaver", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SwiftyBeaver/SwiftyBeaver.git", + "state" : { + "revision" : "12b5acf96d98f91d50de447369bd18df74600f1a", + "version" : "1.9.6" + } } ], "version" : 2 diff --git a/SideStoreApp/Package.swift b/SideStoreApp/Package.swift index 7dfc703c..79894e21 100644 --- a/SideStoreApp/Package.swift +++ b/SideStoreApp/Package.swift @@ -2,7 +2,6 @@ // The swift-tools-version declares the minimum version of Swift required to build this package. import Foundation -import os.log import PackageDescription // Process enviroment variables. @@ -10,6 +9,8 @@ typealias EnviromentBool = (var: String, default: Bool) // Possible keys for `env` and their default value let USE_CARGO = envBool(("USE_CARGO", false)) +let USE_LOCAL_MINIMUXER = envBool(("USE_LOCAL_MINIMUXER", true)) +let USE_LOCAL_EM_PROXY = envBool(("USE_LOCAL_EM_PROXY", true)) let USE_CXX_INTEROP = envBool(("USE_CXX_INTEROP", false)) let USE_CXX_MODULES = envBool(("USE_CXX_MODULES", false)) let INHIBIT_UPSTREAM_WARNINGS = envBool(("INHIBIT_UPSTREAM_WARNINGS", true)) @@ -19,6 +20,11 @@ let unsafe_flags: [String] = INHIBIT_UPSTREAM_WARNINGS ? ["-w"] : [String]() let unsafe_flags_cxx: [String] = INHIBIT_UPSTREAM_WARNINGS ? ["-w", "-Wno-module-import-in-extern-c"] : ["-Wno-module-import-in-extern-c"] +enum Consts { + static let minimuxer_checksum: String = "57b5126605ad127f209a57a2f8e6fe7230ce9acabc499f2b7510983ddec954bb" + static let em_proxy_checksum: String = "79f90075b8ff2f47540a5bccf5fb7740905cda63463f833e2505256237df3c1b" +} + extension Package.Dependency { /// The combination of all the dependencies for the Package. enum SideStore { @@ -32,21 +38,34 @@ extension Package.Dependency { /// Side Store Team Packages static let Packages_SideStoreTeam: [Package.Dependency] = [ .github("SideStore/AltSign", from: "1.0.3"), - .github("SideStore/iMobileDevice.swift", from: "1.0.5"), + .package(name: "iMobileDevice.swift", path: "../../iMobileDevice.swift"), +// .github("SideStore/iMobileDevice.swift", from: "1.0.5"), .github("SideStore/SideKit", from: "0.1.0"), /// @JoeMatt updated fork for Riley's `Roxas` .github("JoeMatt/Roxas", from: "1.2.2"), ] + #if HAVE_MACOS_DAEMON + static let Packages_macOS_Daemon: [Package.Dependency] = [ + .github("sindresorhus/LaunchAtLogin", from: "5.0.0") + ] + #else + static let Packages_macOS_Daemon: [Package.Dependency] = [] + #endif + /// 3rd party Packages static let Packages_3rdParty: [Package.Dependency] = [ - .github("SwiftPackageIndex/SemanticVersion", from: "0.3.5"), + // Logging + .github("apple/swift-log", from: "1.5.2"), + // XCode console output + .github("ShivaHuang/swift-log-SwiftyBeaver", from: "0.1.0"), + .github("johnxnguyen/Down", branch: "master"), .github("kean/Nuke", from: "7.0.0"), .github("kishikawakatsumi/KeychainAccess", from: "4.2.0"), .github("microsoft/appcenter-sdk-apple", from: "4.2.0"), - .github("sindresorhus/LaunchAtLogin", from: "5.0.0"), - ] + .github("SwiftPackageIndex/SemanticVersion", from: "0.3.5") + ] + Packages_macOS_Daemon static let Plugins_BuildTools: [Package.Dependency] = [ // Plugins @@ -141,8 +160,11 @@ let AppCenterCrashes : Target.Dependency = .product(name: "AppCenterCrashes", p let CoreCrypto : Target.Dependency = .product(name: "CoreCrypto", package: "AltSign") let CCoreCrypto : Target.Dependency = .product(name: "CCoreCrypto", package: "AltSign") let libimobiledevice: Target.Dependency = .product(name: "libimobiledevice", package: "iMobileDevice.swift") +let iMobileDevice : Target.Dependency = .product(name: "iMobileDevice", package: "iMobileDevice.swift") let Roxas : Target.Dependency = .product(name: "Roxas", package: "Roxas") let RoxasUI : Target.Dependency = .product(name: "RoxasUI", package: "Roxas") +let Logging : Target.Dependency = .product(name: "Logging", package: "swift-log") +let LoggingSwiftyBeaver : Target.Dependency = .product(name: "LoggingSwiftyBeaver", package: "swift-log-SwiftyBeaver") // MARK: - Linking let frameworksCommon: [LinkerSetting] = [ "Avfoundation", @@ -177,6 +199,7 @@ let package = Package( .tvOS(.v14), .macCatalyst(.v14), .macOS(.v12), + .driverKit("99") ], products: Product.products, dependencies: Package.Dependency.SideStore.dependencies, @@ -192,9 +215,9 @@ let package = Package( extension Product { static let products: [Product] = [ // Modules - SideStoreAppKit.0, - SideStoreAppKit.static, - SideStoreAppKit.dynamic, + SideStoreUIKit.0, + SideStoreUIKit.static, + SideStoreUIKit.dynamic, SideStoreCore.0, SideStoreCore.static, @@ -217,8 +240,8 @@ extension Product { static let cliProducts: [Product] = [] #endif - // SideStoreAppKit - static let SideStoreAppKit = librarySet("SideStoreAppKit") + // SideStoreUIKit + static let SideStoreUIKit = librarySet("SideStoreUIKit") // SideStoreCore static let SideStoreCore = librarySet("SideStoreCore") @@ -255,7 +278,7 @@ extension Target { } typealias TargetPair = (target: PackageDescription.Target, testTarget: PackageDescription.Target?) -// MARK: - SideStoreAppKit +// MARK: - SideStoreUIKit extension Target.SideStore { /// All the targets fo be added to `Package(targets:)` @@ -263,8 +286,11 @@ extension Target.SideStore { /// __Public Targets__ static let publicTargets: [Target] = [ - // SideStoreAppKit - SideStoreAppKit, + // SideStoreUIKit + SideStoreUIKit, + + // SideUIShared + SideUIShared, // iOS Widget SideWidgetKit, @@ -299,10 +325,10 @@ extension Target.SideStore { Cargo.Plugins }() - // MARK: - SideStoreAppKit - static let SideStoreAppKit: Target = + // MARK: - SideStoreUIKit + static let SideStoreUIKit: Target = .target( - name: "SideStoreAppKit", + name: "SideStoreUIKit", dependencies: [ AppCenterAnalytics, AppCenterCrashes, @@ -324,13 +350,40 @@ extension Target.SideStore { plugins: [LoggerPlugin, IntentBuilderPlugin] ) + // MARK: - SideUIShared + static let SideUIShared: Target = + .target( + name: "SideUIShared", + dependencies: [ + AppCenterAnalytics, + AppCenterCrashes, + "AltSign", + "Down", + "EmotionalDamage", + "KeychainAccess", + libimobiledevice, + iMobileDevice, + "MiniMuxer", + Roxas, + RoxasUI, + "SideKit", + "SidePatcher", + "SideStoreCore", + ], + resources: [], + linkerSettings: linkerSettings, + plugins: [LoggerPlugin, IntentBuilderPlugin] + ) + // MARK: - SideWidgetKit static let SideWidgetKit: Target = .target( name: "SideWidgetKit", dependencies: [ + Roxas, + RoxasUI, "SideKit", - "SideStoreAppKit", + "SideUIShared", "SideStoreCore" ], plugins: commonPlugins @@ -344,7 +397,11 @@ extension Target.SideStore { "AltSign", "KeychainAccess", Roxas, - "SemanticVersion"], + "SemanticVersion", + Logging, + LoggingSwiftyBeaver, + "SideKit" + ], plugins: commonPlugins), .testTarget( name: "SideStoreCoreTests", @@ -408,9 +465,8 @@ extension Target.SideStore { static let SideStore_app: Target = .executableTarget( name: "SideStore", - dependencies: [ "SideStoreAppKit" ], + dependencies: [ "SideStoreUIKit" ], exclude: [ - "Resources/AltBackup.ipa", "Resources/Info.info", "Resources/Info.plist", "Resources/SideStore.entitlements", @@ -493,10 +549,13 @@ extension Target.SideStore { ].compactMap{$0} // MARK: em_proxy - private static let em_proxy_target: Target = .binaryTarget( - name: "em_proxy", - url: "https://github.com/SideStore/em_proxy/releases/download/build/em_proxy.xcframework.zip", - checksum: "79f90075b8ff2f47540a5bccf5fb7740905cda63463f833e2505256237df3c1b") + private static let em_proxy_target: Target = USE_LOCAL_EM_PROXY ? + .binaryTarget(name: "em_proxy", + path: "Dependencies/em_proxy/em_proxy.xcframework") : + .binaryTarget( + name: "em_proxy", + url: "https://github.com/SideStore/em_proxy/releases/download/build/em_proxy.xcframework.zip", + checksum: Consts.em_proxy_checksum) // MARK: - EmotionalDamage (Swift) private static let emotionalDamageTarget: TargetPair = ( @@ -504,10 +563,12 @@ extension Target.SideStore { .testTarget(name: "EmotionalDamageTests", dependencies: ["EmotionalDamage"])) // MARK: minimuxer - private static let minimuxer_target: Target = + private static let minimuxer_target: Target = USE_LOCAL_MINIMUXER ? + .binaryTarget(name: "minimuxer", + path: "Dependencies/minimuxer/minimuxer.xcframework") : .binaryTarget(name: "minimuxer", url: "https://github.com/SideStore/minimuxer/releases/download/build/minimuxer.xcframework.zip", - checksum: "aa47182547b60f4f7560bdc0f25ea797c69419765003d16d5039c13b87930ed1") + checksum: Consts.minimuxer_checksum) // MARK: MiniMuxer.Swift private static let miniMuxerSwiftTarget: TargetPair = ( diff --git a/SideStoreApp/Sources/Cargo/Commands/Version.swift b/SideStoreApp/Sources/Cargo/Commands/Version.swift index abf82250..5b7273ae 100644 --- a/SideStoreApp/Sources/Cargo/Commands/Version.swift +++ b/SideStoreApp/Sources/Cargo/Commands/Version.swift @@ -1,6 +1,9 @@ import ArgumentParser import SwiftLintFramework -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif extension Cargo { struct Version: ParsableCommand { diff --git a/SideStoreApp/Sources/Cargo/swiftlint/Commands/Version.swift b/SideStoreApp/Sources/Cargo/swiftlint/Commands/Version.swift index 6a8c45ee..187120fc 100644 --- a/SideStoreApp/Sources/Cargo/swiftlint/Commands/Version.swift +++ b/SideStoreApp/Sources/Cargo/swiftlint/Commands/Version.swift @@ -1,6 +1,9 @@ import ArgumentParser import SwiftLintFramework -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif extension SwiftLint { struct Version: ParsableCommand { diff --git a/SideStoreApp/Sources/MiniMuxer/MiniMuxer.swift b/SideStoreApp/Sources/MiniMuxer/MiniMuxer.swift index 6e0adc46..a262e949 100644 --- a/SideStoreApp/Sources/MiniMuxer/MiniMuxer.swift +++ b/SideStoreApp/Sources/MiniMuxer/MiniMuxer.swift @@ -6,7 +6,10 @@ // import Foundation -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif @_exported import minimuxer public enum Uhoh: Error { @@ -19,6 +22,7 @@ public func start_minimuxer(pairing_file: String) -> Int32 { let pf_pointer = UnsafeMutablePointer(mutating: pf.utf8String) let u = NSString(string: getDocumentsDirectory().absoluteString) let u_ptr = UnsafeMutablePointer(mutating: u.utf8String) + return minimuxer_c_start(pf_pointer, u_ptr) } diff --git a/SideStoreApp/Sources/SideBackup/AppDelegate.swift b/SideStoreApp/Sources/SideBackup/AppDelegate.swift index ef5b2ca8..169d06e5 100644 --- a/SideStoreApp/Sources/SideBackup/AppDelegate.swift +++ b/SideStoreApp/Sources/SideBackup/AppDelegate.swift @@ -7,7 +7,10 @@ // import UIKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif extension AppDelegate { static let startBackupNotification = Notification.Name("io.altstore.StartBackup") diff --git a/SideStoreApp/Sources/SideBackup/BackupController.swift b/SideStoreApp/Sources/SideBackup/BackupController.swift index 36250abe..51f3e5a9 100644 --- a/SideStoreApp/Sources/SideBackup/BackupController.swift +++ b/SideStoreApp/Sources/SideBackup/BackupController.swift @@ -7,7 +7,10 @@ // import Foundation -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif import AltSign import Roxas diff --git a/SideStoreApp/Sources/SideDaemon/DaemonRequestHandler.swift b/SideStoreApp/Sources/SideDaemon/DaemonRequestHandler.swift index 8c88fb32..0f868b7a 100644 --- a/SideStoreApp/Sources/SideDaemon/DaemonRequestHandler.swift +++ b/SideStoreApp/Sources/SideDaemon/DaemonRequestHandler.swift @@ -9,7 +9,10 @@ import Foundation import SideKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif typealias DaemonConnectionManager = ConnectionManager diff --git a/SideStoreApp/Sources/SideStore/AppDelegate.swift b/SideStoreApp/Sources/SideStore/AppDelegate.swift index c0991758..44069dc7 100644 --- a/SideStoreApp/Sources/SideStore/AppDelegate.swift +++ b/SideStoreApp/Sources/SideStore/AppDelegate.swift @@ -10,7 +10,10 @@ import AVFoundation import Intents import UIKit import UserNotifications -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif import AltSign import SideStoreCore diff --git a/SideStoreApp/Sources/SideStore/Resources/AltBackup.ipa b/SideStoreApp/Sources/SideStore/Resources/AltBackup.ipa deleted file mode 100644 index 2bba63eb0a36ddce92b7c3cdc18e6c4371be01e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58302 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 Void) diff --git a/SideStoreApp/Sources/SideStoreCore/Connections/ConnectionManager.swift b/SideStoreApp/Sources/SideStoreCore/Connections/ConnectionManager.swift index ae04c913..4d4dd39d 100644 --- a/SideStoreApp/Sources/SideStoreCore/Connections/ConnectionManager.swift +++ b/SideStoreApp/Sources/SideStoreCore/Connections/ConnectionManager.swift @@ -9,7 +9,10 @@ import Foundation import Network import SideKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif public protocol RequestHandler { func handleAnisetteDataRequest(_ request: AnisetteDataRequest, for connection: Connection, completionHandler: @escaping (Result) -> Void) diff --git a/SideStoreApp/Sources/SideStoreCore/Connections/XPCConnection.swift b/SideStoreApp/Sources/SideStoreCore/Connections/XPCConnection.swift index 064ec3ae..fc161802 100644 --- a/SideStoreApp/Sources/SideStoreCore/Connections/XPCConnection.swift +++ b/SideStoreApp/Sources/SideStoreCore/Connections/XPCConnection.swift @@ -8,7 +8,10 @@ import Foundation import SideKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif @objc private protocol XPCConnectionProxy { func ping(completionHandler: @escaping () -> Void) diff --git a/SideStoreApp/Sources/SideStoreCore/Extensions/UIColor+Hex.swift b/SideStoreApp/Sources/SideStoreCore/Extensions/UIColor+Hex.swift index 411661ba..af67593a 100644 --- a/SideStoreApp/Sources/SideStoreCore/Extensions/UIColor+Hex.swift +++ b/SideStoreApp/Sources/SideStoreCore/Extensions/UIColor+Hex.swift @@ -6,7 +6,8 @@ // Copyright © 2019 Riley Testut. All rights reserved. // -import UIKit +#if canImport(UIKit) +import UIKit.UIColor public extension UIColor { // Borrowed from https://stackoverflow.com/a/26341062 @@ -69,3 +70,4 @@ public extension UIColor { ) } } +#endif diff --git a/SideStoreApp/Sources/SideStoreCore/Model/AppPermission.swift b/SideStoreApp/Sources/SideStoreCore/Model/AppPermission.swift index ff5fffe1..0941276e 100644 --- a/SideStoreApp/Sources/SideStoreCore/Model/AppPermission.swift +++ b/SideStoreApp/Sources/SideStoreCore/Model/AppPermission.swift @@ -7,7 +7,6 @@ // import CoreData -import UIKit public extension ALTAppPermissionType { var localizedShortName: String? { @@ -41,30 +40,6 @@ public extension ALTAppPermissionType { default: return nil } } - - var icon: UIImage? { - switch self { - case .photos: return UIImage(systemName: "photo.on.rectangle.angled") - case .camera: return UIImage(systemName: "camera.fill") - case .location: return UIImage(systemName: "location.fill") - case .contacts: return UIImage(systemName: "person.2.fill") - case .reminders: return UIImage(systemName: "checklist") - case .appleMusic: return UIImage(systemName: "music.note") - case .microphone: return UIImage(systemName: "mic.fill") - case .speechRecognition: return UIImage(systemName: "waveform.and.mic") - case .backgroundAudio: return UIImage(systemName: "speaker.fill") - case .backgroundFetch: return UIImage(systemName: "square.and.arrow.down") - case .bluetooth: return UIImage(systemName: "wave.3.right") - case .network: return UIImage(systemName: "network") - case .calendars: return UIImage(systemName: "calendar") - case .touchID: return UIImage(systemName: "touchid") - case .faceID: return UIImage(systemName: "faceid") - case .siri: return UIImage(systemName: "mic.and.signal.meter.fill") - case .motion: return UIImage(systemName: "figure.walk.motion") - default: - return nil - } - } } @objc(AppPermission) diff --git a/SideStoreApp/Sources/SideStoreCore/Model/DatabaseManager.swift b/SideStoreApp/Sources/SideStoreCore/Model/DatabaseManager.swift index 4ba03811..8cfd6d80 100644 --- a/SideStoreApp/Sources/SideStoreCore/Model/DatabaseManager.swift +++ b/SideStoreApp/Sources/SideStoreCore/Model/DatabaseManager.swift @@ -10,7 +10,10 @@ import CoreData import AltSign import Roxas -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif private extension CFNotificationName { static let willAccessDatabase = CFNotificationName("com.rileytestut.AltStore.WillAccessDatabase" as CFString) diff --git a/SideStoreApp/Sources/SideStoreCore/Model/MergePolicy.swift b/SideStoreApp/Sources/SideStoreCore/Model/MergePolicy.swift index 6fb9eb6a..53633d13 100644 --- a/SideStoreApp/Sources/SideStoreCore/Model/MergePolicy.swift +++ b/SideStoreApp/Sources/SideStoreCore/Model/MergePolicy.swift @@ -9,7 +9,10 @@ import CoreData import Roxas -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif open class MergePolicy: RSTRelationshipPreservingMergePolicy { override open func resolve(constraintConflicts conflicts: [NSConstraintConflict]) throws { diff --git a/SideStoreApp/Sources/SideStoreCore/Model/NewsItem.swift b/SideStoreApp/Sources/SideStoreCore/Model/NewsItem.swift index d308715c..ce20a157 100644 --- a/SideStoreApp/Sources/SideStoreCore/Model/NewsItem.swift +++ b/SideStoreApp/Sources/SideStoreCore/Model/NewsItem.swift @@ -7,7 +7,15 @@ // import CoreData -import UIKit + +#if canImport(UIKit) +import class UIKit.UIColor +#elseif canImport(AppKit) +import class AppKit.NSColor +fileprivate typealias UIColor = NSColor +#else +#error ("Unsupported platform. Need to refactor UIColor/NSColor to extend support.") +#endif @objc(NewsItem) public class NewsItem: NSManagedObject, Decodable, Fetchable { diff --git a/SideStoreApp/Sources/SideStoreCore/Model/Source.swift b/SideStoreApp/Sources/SideStoreCore/Model/Source.swift index 35a70b89..0efba9bf 100644 --- a/SideStoreApp/Sources/SideStoreCore/Model/Source.swift +++ b/SideStoreApp/Sources/SideStoreCore/Model/Source.swift @@ -7,7 +7,7 @@ // import CoreData -import UIKit +import Foundation public extension Source { #if ALPHA diff --git a/SideStoreApp/Sources/SideStoreCore/Model/StoreApp.swift b/SideStoreApp/Sources/SideStoreCore/Model/StoreApp.swift index b7a4c498..439bca9d 100644 --- a/SideStoreApp/Sources/SideStoreCore/Model/StoreApp.swift +++ b/SideStoreApp/Sources/SideStoreCore/Model/StoreApp.swift @@ -8,8 +8,15 @@ import CoreData import Foundation -import class UIKit.UIColor +#if canImport(UIKit) +import class UIKit.UIColor +#elseif canImport(AppKit) +import class AppKit.NSColor +fileprivate typealias UIColor = NSColor +#else +#error ("Unsupported platform. Need to refactor UIColor/NSColor to extend support.") +#endif import Roxas public extension StoreApp { diff --git a/SideStoreApp/Sources/SideStoreCore/Patreon/PatreonAPI.swift b/SideStoreApp/Sources/SideStoreCore/Patreon/PatreonAPI.swift index a75167e7..da32b1fd 100644 --- a/SideStoreApp/Sources/SideStoreCore/Patreon/PatreonAPI.swift +++ b/SideStoreApp/Sources/SideStoreCore/Patreon/PatreonAPI.swift @@ -9,7 +9,10 @@ import AuthenticationServices import CoreData import Foundation -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif private let clientID = "ZMx0EGUWe4TVWYXNZZwK_fbIK5jHFVWoUf1Qb-sqNXmT-YzAGwDPxxq7ak3_W5Q2" private let clientSecret = "1hktsZB89QyN69cB4R0tu55R4TCPQGXxvebYUUh7Y-5TLSnRswuxs6OUjdJ74IJt" @@ -115,8 +118,9 @@ public extension PatreonAPI { } } - if #available(iOS 13.0, *) { - self.authenticationSession?.presentationContextProvider = self + if let provider = self as? ASWebAuthenticationPresentationContextProviding, + let authenticationSession = self.authenticationSession { + authenticationSession.presentationContextProvider = provider } authenticationSession?.start() @@ -359,10 +363,3 @@ private extension PatreonAPI { installedApps.forEach { $0.isActive = false } } } - -@available(iOS 13.0, *) -extension PatreonAPI: ASWebAuthenticationPresentationContextProviding { - public func presentationAnchor(for _: ASWebAuthenticationSession) -> ASPresentationAnchor { - UIApplication.alt_shared?.keyWindow ?? UIWindow() - } -} diff --git a/SideStoreApp/Sources/SideStoreAppKit/App Detail/AppContentViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/App Detail/AppContentViewController.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/App Detail/AppContentViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/App Detail/AppContentViewController.swift index e02ebe0c..937f707e 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/App Detail/AppContentViewController.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/App Detail/AppContentViewController.swift @@ -10,7 +10,10 @@ import UIKit import SideStoreCore import RoxasUIKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif import Nuke diff --git a/SideStoreApp/Sources/SideStoreAppKit/App Detail/AppContentViewControllerCells.swift b/SideStoreApp/Sources/SideStoreUIKit/App Detail/AppContentViewControllerCells.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/App Detail/AppContentViewControllerCells.swift rename to SideStoreApp/Sources/SideStoreUIKit/App Detail/AppContentViewControllerCells.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/App Detail/AppViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/App Detail/AppViewController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/App Detail/AppViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/App Detail/AppViewController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/App Detail/PermissionPopoverViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/App Detail/PermissionPopoverViewController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/App Detail/PermissionPopoverViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/App Detail/PermissionPopoverViewController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/App IDs/AppIDsViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/App IDs/AppIDsViewController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/App IDs/AppIDsViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/App IDs/AppIDsViewController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Authentication/AuthenticationViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Authentication/AuthenticationViewController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Authentication/AuthenticationViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Authentication/AuthenticationViewController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Authentication/InstructionsViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Authentication/InstructionsViewController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Authentication/InstructionsViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Authentication/InstructionsViewController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Authentication/RefreshAltStoreViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Authentication/RefreshAltStoreViewController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Authentication/RefreshAltStoreViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Authentication/RefreshAltStoreViewController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Authentication/SelectTeamViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Authentication/SelectTeamViewController.swift similarity index 97% rename from SideStoreApp/Sources/SideStoreAppKit/Authentication/SelectTeamViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Authentication/SelectTeamViewController.swift index dd455284..5650ddb7 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Authentication/SelectTeamViewController.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/Authentication/SelectTeamViewController.swift @@ -11,7 +11,10 @@ import IntentsUI import MessageUI import SafariServices import UIKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif import AltSign diff --git a/SideStoreApp/Sources/SideStoreAppKit/Browse/BrowseCollectionViewCell.swift b/SideStoreApp/Sources/SideStoreUIKit/Browse/BrowseCollectionViewCell.swift similarity index 98% rename from SideStoreApp/Sources/SideStoreAppKit/Browse/BrowseCollectionViewCell.swift rename to SideStoreApp/Sources/SideStoreUIKit/Browse/BrowseCollectionViewCell.swift index ab16ad4b..c2ccf3d9 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Browse/BrowseCollectionViewCell.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/Browse/BrowseCollectionViewCell.swift @@ -9,7 +9,10 @@ import UIKit import RoxasUIKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif import Nuke diff --git a/SideStoreApp/Sources/SideStoreAppKit/Browse/BrowseViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Browse/BrowseViewController.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Browse/BrowseViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Browse/BrowseViewController.swift index 2673ac95..3c95c64b 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Browse/BrowseViewController.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/Browse/BrowseViewController.swift @@ -10,7 +10,10 @@ import UIKit import SideStoreCore import RoxasUIKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif import Nuke diff --git a/SideStoreApp/Sources/SideStoreAppKit/Browse/ScreenshotCollectionViewCell.swift b/SideStoreApp/Sources/SideStoreUIKit/Browse/ScreenshotCollectionViewCell.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Browse/ScreenshotCollectionViewCell.swift rename to SideStoreApp/Sources/SideStoreUIKit/Browse/ScreenshotCollectionViewCell.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/AppBannerView.swift b/SideStoreApp/Sources/SideStoreUIKit/Components/AppBannerView.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Components/AppBannerView.swift rename to SideStoreApp/Sources/SideStoreUIKit/Components/AppBannerView.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/AppIconImageView.swift b/SideStoreApp/Sources/SideStoreUIKit/Components/AppIconImageView.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Components/AppIconImageView.swift rename to SideStoreApp/Sources/SideStoreUIKit/Components/AppIconImageView.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/BackgroundTaskManager.swift b/SideStoreApp/Sources/SideStoreUIKit/Components/BackgroundTaskManager.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Components/BackgroundTaskManager.swift rename to SideStoreApp/Sources/SideStoreUIKit/Components/BackgroundTaskManager.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/BannerCollectionViewCell.swift b/SideStoreApp/Sources/SideStoreUIKit/Components/BannerCollectionViewCell.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Components/BannerCollectionViewCell.swift rename to SideStoreApp/Sources/SideStoreUIKit/Components/BannerCollectionViewCell.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/Button.swift b/SideStoreApp/Sources/SideStoreUIKit/Components/Button.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Components/Button.swift rename to SideStoreApp/Sources/SideStoreUIKit/Components/Button.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/CollapsingTextView.swift b/SideStoreApp/Sources/SideStoreUIKit/Components/CollapsingTextView.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Components/CollapsingTextView.swift rename to SideStoreApp/Sources/SideStoreUIKit/Components/CollapsingTextView.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/ForwardingNavigationController.swift b/SideStoreApp/Sources/SideStoreUIKit/Components/ForwardingNavigationController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Components/ForwardingNavigationController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Components/ForwardingNavigationController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/NavigationBar.swift b/SideStoreApp/Sources/SideStoreUIKit/Components/NavigationBar.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Components/NavigationBar.swift rename to SideStoreApp/Sources/SideStoreUIKit/Components/NavigationBar.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/PillButton.swift b/SideStoreApp/Sources/SideStoreUIKit/Components/PillButton.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Components/PillButton.swift rename to SideStoreApp/Sources/SideStoreUIKit/Components/PillButton.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/TextCollectionReusableView.swift b/SideStoreApp/Sources/SideStoreUIKit/Components/TextCollectionReusableView.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Components/TextCollectionReusableView.swift rename to SideStoreApp/Sources/SideStoreUIKit/Components/TextCollectionReusableView.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Components/ToastView.swift b/SideStoreApp/Sources/SideStoreUIKit/Components/ToastView.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Components/ToastView.swift rename to SideStoreApp/Sources/SideStoreUIKit/Components/ToastView.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Extensions/FileManager+DirectorySize.swift b/SideStoreApp/Sources/SideStoreUIKit/Extensions/FileManager+DirectorySize.swift similarity index 93% rename from SideStoreApp/Sources/SideStoreAppKit/Extensions/FileManager+DirectorySize.swift rename to SideStoreApp/Sources/SideStoreUIKit/Extensions/FileManager+DirectorySize.swift index 0cf3d09c..df224adc 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Extensions/FileManager+DirectorySize.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/Extensions/FileManager+DirectorySize.swift @@ -7,7 +7,10 @@ // import Foundation -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif extension FileManager { func directorySize(at directoryURL: URL) -> Int? { diff --git a/SideStoreApp/Sources/SideStoreAppKit/Extensions/INInteraction+AltStore.swift b/SideStoreApp/Sources/SideStoreUIKit/Extensions/INInteraction+AltStore.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Extensions/INInteraction+AltStore.swift rename to SideStoreApp/Sources/SideStoreUIKit/Extensions/INInteraction+AltStore.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Extensions/OSLog+SideStore.swift b/SideStoreApp/Sources/SideStoreUIKit/Extensions/OSLog+SideStore.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Extensions/OSLog+SideStore.swift rename to SideStoreApp/Sources/SideStoreUIKit/Extensions/OSLog+SideStore.swift diff --git a/SideStoreApp/Sources/SideStoreCore/Extensions/UIApplication+AppExtension.swift b/SideStoreApp/Sources/SideStoreUIKit/Extensions/UIApplication+AppExtension.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreCore/Extensions/UIApplication+AppExtension.swift rename to SideStoreApp/Sources/SideStoreUIKit/Extensions/UIApplication+AppExtension.swift diff --git a/SideStoreApp/Sources/SideStoreCore/Extensions/UIColor+AltStore.swift b/SideStoreApp/Sources/SideStoreUIKit/Extensions/UIColor+AltStore.swift similarity index 97% rename from SideStoreApp/Sources/SideStoreCore/Extensions/UIColor+AltStore.swift rename to SideStoreApp/Sources/SideStoreUIKit/Extensions/UIColor+AltStore.swift index b87d507d..0cd50385 100644 --- a/SideStoreApp/Sources/SideStoreCore/Extensions/UIColor+AltStore.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/Extensions/UIColor+AltStore.swift @@ -7,6 +7,7 @@ // import UIKit +import SideStoreCore public extension UIColor { private static let colorBundle = Bundle(for: DatabaseManager.self) diff --git a/SideStoreApp/Sources/SideStoreAppKit/Extensions/UIDevice+Jailbreak.swift b/SideStoreApp/Sources/SideStoreUIKit/Extensions/UIDevice+Jailbreak.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Extensions/UIDevice+Jailbreak.swift rename to SideStoreApp/Sources/SideStoreUIKit/Extensions/UIDevice+Jailbreak.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Extensions/UIDevice+Vibration.swift b/SideStoreApp/Sources/SideStoreUIKit/Extensions/UIDevice+Vibration.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Extensions/UIDevice+Vibration.swift rename to SideStoreApp/Sources/SideStoreUIKit/Extensions/UIDevice+Vibration.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Extensions/UIScreen+CompactHeight.swift b/SideStoreApp/Sources/SideStoreUIKit/Extensions/UIScreen+CompactHeight.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Extensions/UIScreen+CompactHeight.swift rename to SideStoreApp/Sources/SideStoreUIKit/Extensions/UIScreen+CompactHeight.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Managing Apps/AppManager.swift b/SideStoreApp/Sources/SideStoreUIKit/Managing Apps/AppManager.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Managing Apps/AppManager.swift rename to SideStoreApp/Sources/SideStoreUIKit/Managing Apps/AppManager.swift index f1333171..a29a095e 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Managing Apps/AppManager.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/Managing Apps/AppManager.swift @@ -19,7 +19,10 @@ import AltSign import SideKit import SideStoreCore import RoxasUIKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif public extension AppManager { static let didFetchSourceNotification = Notification.Name("io.altstore.AppManager.didFetchSource") diff --git a/SideStoreApp/Sources/SideStoreAppKit/Managing Apps/AppManagerErrors.swift b/SideStoreApp/Sources/SideStoreUIKit/Managing Apps/AppManagerErrors.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Managing Apps/AppManagerErrors.swift rename to SideStoreApp/Sources/SideStoreUIKit/Managing Apps/AppManagerErrors.swift diff --git a/SideStoreApp/Sources/SideStoreUIKit/Model/AppPermission+UIKIt.swift b/SideStoreApp/Sources/SideStoreUIKit/Model/AppPermission+UIKIt.swift new file mode 100644 index 00000000..9319f11a --- /dev/null +++ b/SideStoreApp/Sources/SideStoreUIKit/Model/AppPermission+UIKIt.swift @@ -0,0 +1,38 @@ +// +// AppPermission+UIKit.swift +// AltStore +// +// Created by Riley Testut on 7/23/19. +// Copyright © 2019 Riley Testut. All rights reserved. +// + +import CoreData +import SideStoreCore +import UIKit + +// ALTAppPermissionType UIKit Extensions +public extension ALTAppPermissionType { + var icon: UIImage? { + switch self { + case .photos: return UIImage(systemName: "photo.on.rectangle.angled") + case .camera: return UIImage(systemName: "camera.fill") + case .location: return UIImage(systemName: "location.fill") + case .contacts: return UIImage(systemName: "person.2.fill") + case .reminders: return UIImage(systemName: "checklist") + case .appleMusic: return UIImage(systemName: "music.note") + case .microphone: return UIImage(systemName: "mic.fill") + case .speechRecognition: return UIImage(systemName: "waveform.and.mic") + case .backgroundAudio: return UIImage(systemName: "speaker.fill") + case .backgroundFetch: return UIImage(systemName: "square.and.arrow.down") + case .bluetooth: return UIImage(systemName: "wave.3.right") + case .network: return UIImage(systemName: "network") + case .calendars: return UIImage(systemName: "calendar") + case .touchID: return UIImage(systemName: "touchid") + case .faceID: return UIImage(systemName: "faceid") + case .siri: return UIImage(systemName: "mic.and.signal.meter.fill") + case .motion: return UIImage(systemName: "figure.walk.motion") + default: + return nil + } + } +} diff --git a/SideStoreApp/Sources/SideStoreAppKit/My Apps/InstalledAppsCollectionHeaderView.swift b/SideStoreApp/Sources/SideStoreUIKit/My Apps/InstalledAppsCollectionHeaderView.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/My Apps/InstalledAppsCollectionHeaderView.swift rename to SideStoreApp/Sources/SideStoreUIKit/My Apps/InstalledAppsCollectionHeaderView.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/My Apps/MyAppsComponents.swift b/SideStoreApp/Sources/SideStoreUIKit/My Apps/MyAppsComponents.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/My Apps/MyAppsComponents.swift rename to SideStoreApp/Sources/SideStoreUIKit/My Apps/MyAppsComponents.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/My Apps/MyAppsViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/My Apps/MyAppsViewController.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/My Apps/MyAppsViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/My Apps/MyAppsViewController.swift index bc6cf379..604095de 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/My Apps/MyAppsViewController.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/My Apps/MyAppsViewController.swift @@ -14,7 +14,10 @@ import UIKit import AltSign import SideStoreCore import RoxasUIKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif import Nuke diff --git a/SideStoreApp/Sources/SideStoreAppKit/My Apps/UpdateCollectionViewCell.swift b/SideStoreApp/Sources/SideStoreUIKit/My Apps/UpdateCollectionViewCell.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/My Apps/UpdateCollectionViewCell.swift rename to SideStoreApp/Sources/SideStoreUIKit/My Apps/UpdateCollectionViewCell.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/News/NewsCollectionViewCell.swift b/SideStoreApp/Sources/SideStoreUIKit/News/NewsCollectionViewCell.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/News/NewsCollectionViewCell.swift rename to SideStoreApp/Sources/SideStoreUIKit/News/NewsCollectionViewCell.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/News/NewsViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/News/NewsViewController.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/News/NewsViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/News/NewsViewController.swift index e8690f10..82122bc0 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/News/NewsViewController.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/News/NewsViewController.swift @@ -13,7 +13,10 @@ import SideStoreCore import RoxasUIKit import Nuke -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif private final class AppBannerFooterView: UICollectionReusableView { let bannerView = AppBannerView(frame: .zero) diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/Patch App/PatchViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Operations/PatchAppOperation/PatchViewController.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/Patch App/PatchViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Operations/PatchAppOperation/PatchViewController.swift index 8975f628..9da3108b 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Operations/Patch App/PatchViewController.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/Operations/PatchAppOperation/PatchViewController.swift @@ -12,7 +12,11 @@ import UIKit import AltSign import SideStoreCore import RoxasUIKit -import os.log +import SideUIShared +import OSLog +#if canImport(Logging) +import Logging +#endif @available(iOS 14.0, *) extension PatchViewController { diff --git a/SideStoreApp/Sources/SideStoreAppKit/Settings/Error Log/ErrorLogTableViewCell.swift b/SideStoreApp/Sources/SideStoreUIKit/Settings/Error Log/ErrorLogTableViewCell.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Settings/Error Log/ErrorLogTableViewCell.swift rename to SideStoreApp/Sources/SideStoreUIKit/Settings/Error Log/ErrorLogTableViewCell.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Settings/Error Log/ErrorLogViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Settings/Error Log/ErrorLogViewController.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Settings/Error Log/ErrorLogViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Settings/Error Log/ErrorLogViewController.swift index a4cc3f0b..00b4e41d 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Settings/Error Log/ErrorLogViewController.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/Settings/Error Log/ErrorLogViewController.swift @@ -14,7 +14,10 @@ import RoxasUIKit import SideKit import Nuke import QuickLook -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif final class ErrorLogViewController: UITableViewController { private lazy var dataSource = self.makeDataSource() diff --git a/SideStoreApp/Sources/SideStoreAppKit/Settings/InsetGroupTableViewCell.swift b/SideStoreApp/Sources/SideStoreUIKit/Settings/InsetGroupTableViewCell.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Settings/InsetGroupTableViewCell.swift rename to SideStoreApp/Sources/SideStoreUIKit/Settings/InsetGroupTableViewCell.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Settings/LicensesViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Settings/LicensesViewController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Settings/LicensesViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Settings/LicensesViewController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Settings/PatreonComponents.swift b/SideStoreApp/Sources/SideStoreUIKit/Settings/PatreonComponents.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Settings/PatreonComponents.swift rename to SideStoreApp/Sources/SideStoreUIKit/Settings/PatreonComponents.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Settings/PatreonViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Settings/PatreonViewController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Settings/PatreonViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Settings/PatreonViewController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Settings/RefreshAttemptsViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Settings/RefreshAttemptsViewController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Settings/RefreshAttemptsViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Settings/RefreshAttemptsViewController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Settings/SettingsHeaderFooterView.swift b/SideStoreApp/Sources/SideStoreUIKit/Settings/SettingsHeaderFooterView.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Settings/SettingsHeaderFooterView.swift rename to SideStoreApp/Sources/SideStoreUIKit/Settings/SettingsHeaderFooterView.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Settings/SettingsViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Settings/SettingsViewController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Settings/SettingsViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Settings/SettingsViewController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/SideStoreAppDelegate.swift b/SideStoreApp/Sources/SideStoreUIKit/SideStoreAppDelegate.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/SideStoreAppDelegate.swift rename to SideStoreApp/Sources/SideStoreUIKit/SideStoreAppDelegate.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Sources/SourcesViewController.swift b/SideStoreApp/Sources/SideStoreUIKit/Sources/SourcesViewController.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Sources/SourcesViewController.swift rename to SideStoreApp/Sources/SideStoreUIKit/Sources/SourcesViewController.swift index cfc79723..9b7ce67b 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Sources/SourcesViewController.swift +++ b/SideStoreApp/Sources/SideStoreUIKit/Sources/SourcesViewController.swift @@ -11,7 +11,10 @@ import UIKit import SideStoreCore import RoxasUIKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif struct SourceError: LocalizedError { enum Code { diff --git a/SideStoreApp/Sources/SideStoreAppKit/TabBarController.swift b/SideStoreApp/Sources/SideStoreUIKit/TabBarController.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/TabBarController.swift rename to SideStoreApp/Sources/SideStoreUIKit/TabBarController.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Types/ScreenshotProcessor.swift b/SideStoreApp/Sources/SideStoreUIKit/Types/ScreenshotProcessor.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Types/ScreenshotProcessor.swift rename to SideStoreApp/Sources/SideStoreUIKit/Types/ScreenshotProcessor.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/ALTApplication+AltStoreApp.swift b/SideStoreApp/Sources/SideUIShared/ALTApplication+AltStoreApp.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/ALTApplication+AltStoreApp.swift rename to SideStoreApp/Sources/SideUIShared/ALTApplication+AltStoreApp.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Analytics/AnalyticsManager.swift b/SideStoreApp/Sources/SideUIShared/Analytics/AnalyticsManager.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Analytics/AnalyticsManager.swift rename to SideStoreApp/Sources/SideUIShared/Analytics/AnalyticsManager.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Authentication/Intents/IntentHandler.swift b/SideStoreApp/Sources/SideUIShared/Authentication/Intents/IntentHandler.swift similarity index 98% rename from SideStoreApp/Sources/SideStoreAppKit/Authentication/Intents/IntentHandler.swift rename to SideStoreApp/Sources/SideUIShared/Authentication/Intents/IntentHandler.swift index e030953a..d030bf89 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Authentication/Intents/IntentHandler.swift +++ b/SideStoreApp/Sources/SideUIShared/Authentication/Intents/IntentHandler.swift @@ -9,7 +9,10 @@ import Foundation import SideStoreCore import Intents -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif @available(iOS 14, *) public final class IntentHandler: NSObject, RefreshAllIntentHandling { diff --git a/SideStoreApp/Sources/SideStoreAppKit/Authentication/Intents/Intents.intentdefinition b/SideStoreApp/Sources/SideUIShared/Authentication/Intents/Intents.intentdefinition similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Authentication/Intents/Intents.intentdefinition rename to SideStoreApp/Sources/SideUIShared/Authentication/Intents/Intents.intentdefinition diff --git a/SideStoreApp/Sources/SideStoreAppKit/Authentication/Intents/ViewApp.intentdefinition b/SideStoreApp/Sources/SideUIShared/Authentication/Intents/ViewApp.intentdefinition similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Authentication/Intents/ViewApp.intentdefinition rename to SideStoreApp/Sources/SideUIShared/Authentication/Intents/ViewApp.intentdefinition diff --git a/SideStoreApp/Sources/SideStoreAppKit/Authentication/Intents/ViewAppIntentHandler.swift b/SideStoreApp/Sources/SideUIShared/Authentication/Intents/ViewAppIntentHandler.swift similarity index 95% rename from SideStoreApp/Sources/SideStoreAppKit/Authentication/Intents/ViewAppIntentHandler.swift rename to SideStoreApp/Sources/SideUIShared/Authentication/Intents/ViewAppIntentHandler.swift index 280c1809..e0d5cfc9 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Authentication/Intents/ViewAppIntentHandler.swift +++ b/SideStoreApp/Sources/SideUIShared/Authentication/Intents/ViewAppIntentHandler.swift @@ -8,7 +8,10 @@ import Intents import SideStoreCore -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif @available(iOS 14, *) public class ViewAppIntentHandler: NSObject, ViewAppIntentHandling { diff --git a/SideStoreApp/Sources/SideStoreAppKit/Consts/Consts+Proxy.swift b/SideStoreApp/Sources/SideUIShared/Consts/Consts+Proxy.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Consts/Consts+Proxy.swift rename to SideStoreApp/Sources/SideUIShared/Consts/Consts+Proxy.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Consts/Consts.swift b/SideStoreApp/Sources/SideUIShared/Consts/Consts.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Consts/Consts.swift rename to SideStoreApp/Sources/SideUIShared/Consts/Consts.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/AuthenticationOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/AuthenticationOperation.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/AuthenticationOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/AuthenticationOperation.swift index c8174912..10653168 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Operations/AuthenticationOperation.swift +++ b/SideStoreApp/Sources/SideUIShared/Operations/AuthenticationOperation.swift @@ -9,7 +9,10 @@ import Foundation import Network import RoxasUIKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif import AltSign import SideStoreCore diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/BackgroundRefreshAppsOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/BackgroundRefreshAppsOperation.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/BackgroundRefreshAppsOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/BackgroundRefreshAppsOperation.swift index c6d3ae2d..0d0ef1d1 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Operations/BackgroundRefreshAppsOperation.swift +++ b/SideStoreApp/Sources/SideUIShared/Operations/BackgroundRefreshAppsOperation.swift @@ -8,7 +8,10 @@ import CoreData import UIKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif import SideStoreCore import EmotionalDamage diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/BackupAppOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/BackupAppOperation.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/BackupAppOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/BackupAppOperation.swift index b5296dd8..b34128a9 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Operations/BackupAppOperation.swift +++ b/SideStoreApp/Sources/SideUIShared/Operations/BackupAppOperation.swift @@ -10,7 +10,10 @@ import Foundation import AltSign import SideStoreCore -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif extension BackupAppOperation { enum Action: String { diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/DeactivateAppOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/DeactivateAppOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/DeactivateAppOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/DeactivateAppOperation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/DownloadAppOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/DownloadAppOperation.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/DownloadAppOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/DownloadAppOperation.swift index 4acb6b96..b3e529f7 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Operations/DownloadAppOperation.swift +++ b/SideStoreApp/Sources/SideUIShared/Operations/DownloadAppOperation.swift @@ -13,7 +13,10 @@ import AltSign import SideKit import SideStoreCore -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif private extension DownloadAppOperation { struct DependencyError: ALTLocalizedError { diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/EnableJITOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/EnableJITOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/EnableJITOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/EnableJITOperation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/FetchAnisetteDataOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/FetchAnisetteDataOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/FetchAnisetteDataOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/FetchAnisetteDataOperation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/FetchAppIDsOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/FetchAppIDsOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/FetchAppIDsOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/FetchAppIDsOperation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/FetchProvisioningProfilesOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/FetchProvisioningProfilesOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/FetchProvisioningProfilesOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/FetchProvisioningProfilesOperation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/FetchSourceOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/FetchSourceOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/FetchSourceOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/FetchSourceOperation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/FetchTrustedSourcesOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/FetchTrustedSourcesOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/FetchTrustedSourcesOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/FetchTrustedSourcesOperation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/InstallAppOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/InstallAppOperation.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/InstallAppOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/InstallAppOperation.swift index 8e3fdab9..286ec994 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Operations/InstallAppOperation.swift +++ b/SideStoreApp/Sources/SideUIShared/Operations/InstallAppOperation.swift @@ -13,7 +13,10 @@ import SideStoreCore import RoxasUIKit import MiniMuxer import minimuxer -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif @objc(InstallAppOperation) final class InstallAppOperation: ResultOperation { diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/Operation.swift b/SideStoreApp/Sources/SideUIShared/Operations/Operation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/Operation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/Operation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/OperationContexts.swift b/SideStoreApp/Sources/SideUIShared/Operations/OperationContexts.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/OperationContexts.swift rename to SideStoreApp/Sources/SideUIShared/Operations/OperationContexts.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/OperationError.swift b/SideStoreApp/Sources/SideUIShared/Operations/OperationError.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/OperationError.swift rename to SideStoreApp/Sources/SideUIShared/Operations/OperationError.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/Patch App/PatchAppOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/Patch App/PatchAppOperation.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/Patch App/PatchAppOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/Patch App/PatchAppOperation.swift index ebb19052..c2caa8c4 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Operations/Patch App/PatchAppOperation.swift +++ b/SideStoreApp/Sources/SideUIShared/Operations/Patch App/PatchAppOperation.swift @@ -16,6 +16,8 @@ import AltSign import SideStoreCore import RoxasUIKit +import iMobileDevice + @available(iOS 14, *) protocol PatchAppContext { var bundleIdentifier: String { get } diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/RefreshAppOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/RefreshAppOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/RefreshAppOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/RefreshAppOperation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/RefreshGroup.swift b/SideStoreApp/Sources/SideUIShared/Operations/RefreshGroup.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/RefreshGroup.swift rename to SideStoreApp/Sources/SideUIShared/Operations/RefreshGroup.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/RemoveAppBackupOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/RemoveAppBackupOperation.swift similarity index 97% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/RemoveAppBackupOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/RemoveAppBackupOperation.swift index 2024477f..299a6d62 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Operations/RemoveAppBackupOperation.swift +++ b/SideStoreApp/Sources/SideUIShared/Operations/RemoveAppBackupOperation.swift @@ -7,7 +7,10 @@ // import Foundation -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif @objc(RemoveAppBackupOperation) final class RemoveAppBackupOperation: ResultOperation { diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/RemoveAppOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/RemoveAppOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/RemoveAppOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/RemoveAppOperation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/ResignAppOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/ResignAppOperation.swift similarity index 99% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/ResignAppOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/ResignAppOperation.swift index efdf50f5..b9c9014d 100644 --- a/SideStoreApp/Sources/SideStoreAppKit/Operations/ResignAppOperation.swift +++ b/SideStoreApp/Sources/SideUIShared/Operations/ResignAppOperation.swift @@ -11,7 +11,10 @@ import RoxasUIKit import AltSign import SideStoreCore -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif @objc(ResignAppOperation) final class ResignAppOperation: ResultOperation { diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/SendAppOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/SendAppOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/SendAppOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/SendAppOperation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/UpdatePatronsOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/UpdatePatronsOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/UpdatePatronsOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/UpdatePatronsOperation.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Operations/VerifyAppOperation.swift b/SideStoreApp/Sources/SideUIShared/Operations/VerifyAppOperation.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Operations/VerifyAppOperation.swift rename to SideStoreApp/Sources/SideUIShared/Operations/VerifyAppOperation.swift diff --git a/SideStoreApp/Sources/SideUIShared/Patreon/PatreonAPI+UIApplication.swift b/SideStoreApp/Sources/SideUIShared/Patreon/PatreonAPI+UIApplication.swift new file mode 100644 index 00000000..422e23a0 --- /dev/null +++ b/SideStoreApp/Sources/SideUIShared/Patreon/PatreonAPI+UIApplication.swift @@ -0,0 +1,19 @@ +// +// PatreonAPI+UIApplication.swift +// AltStore +// +// Created by Riley Testut on 8/20/19. +// Copyright © 2019 Riley Testut. All rights reserved. +// + +import AuthenticationServices +import CoreData +import Foundation +import SideStoreCore + +@available(iOS 13.0, *) +extension PatreonAPI: ASWebAuthenticationPresentationContextProviding { + public func presentationAnchor(for _: ASWebAuthenticationSession) -> ASPresentationAnchor { + UIApplication.alt_shared?.keyWindow ?? UIWindow() + } +} diff --git a/SideStoreApp/Sources/SideStoreAppKit/Settings/AnisetteManager.swift b/SideStoreApp/Sources/SideUIShared/Settings/AnisetteManager.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Settings/AnisetteManager.swift rename to SideStoreApp/Sources/SideUIShared/Settings/AnisetteManager.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Types/LoadingState.swift b/SideStoreApp/Sources/SideUIShared/Types/LoadingState.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Types/LoadingState.swift rename to SideStoreApp/Sources/SideUIShared/Types/LoadingState.swift diff --git a/SideStoreApp/Sources/SideStoreAppKit/Types/Managed.swift b/SideStoreApp/Sources/SideUIShared/Types/Managed.swift similarity index 100% rename from SideStoreApp/Sources/SideStoreAppKit/Types/Managed.swift rename to SideStoreApp/Sources/SideUIShared/Types/Managed.swift diff --git a/SideStoreApp/Sources/SideWidgetKit/SideWidget.swift b/SideStoreApp/Sources/SideWidgetKit/SideWidget.swift index 7067e190..d4257418 100644 --- a/SideStoreApp/Sources/SideWidgetKit/SideWidget.swift +++ b/SideStoreApp/Sources/SideWidgetKit/SideWidget.swift @@ -15,7 +15,10 @@ import AltSign import SideStoreCore import Roxas import RoxasUIKit -import os.log +import OSLog +#if canImport(Logging) +import Logging +#endif import class SideStoreAppKit.ViewAppIntent