[PR #588] [CLOSED] Fancy IPA Library + New Downloader + New Cache System #1669

Closed
opened 2026-03-03 19:08:17 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/PlayCover/PlayCover/pull/588
Author: @amirsaam
Created: 12/17/2022
Status: Closed

Base: developHead: Fancy-IPA-Library


📝 Commits (10+)

  • 1f757e3 Feat: Fancy IPA Library
  • 2da09e7 Locale + Minor Fixes
  • 7635b30 no more func in func
  • 31984a0 ZStack -> Group IPALibraryView
  • d34ad99 DownloadApp Class
  • 30e747d Merge branch 'develop' into Fancy-IPA-Library
  • b430c8b Visual Improvement
  • 86397a0 Update StoreAppView.swift
  • 5371026 revert accidentally pushed signing changes
  • d0c161e remove unnecessary selves

📊 Changes

17 files changed (+967 additions, -466 deletions)

View changed files

📝 PlayCover.xcodeproj/project.pbxproj (+76 -13)
PlayCover/AppInstaller/Downloader.swift (+127 -0)
📝 PlayCover/Model/ITunesResponse.swift (+20 -2)
PlayCover/Utils/Cacher.swift (+85 -0)
PlayCover/Utils/ImageCache.swift (+0 -166)
PlayCover/Utils/ViewExtenstions.swift (+56 -0)
📝 PlayCover/ViewModel/StoreVM.swift (+1 -1)
📝 PlayCover/ViewModel/ToastVM.swift (+1 -0)
PlayCover/Views/App Views/DetailStoreAppView.swift (+300 -0)
📝 PlayCover/Views/App Views/PlayAppView.swift (+28 -26)
📝 PlayCover/Views/App Views/StoreAppView.swift (+73 -116)
📝 PlayCover/Views/AppSettingsView.swift (+14 -12)
📝 PlayCover/Views/MenuBarView.swift (+13 -1)
📝 PlayCover/Views/Sidebar Views/IPALibraryView.swift (+108 -84)
📝 PlayCover/Views/ToastView.swift (+45 -43)
📝 PlayCover/en.lproj/Localizable.strings (+17 -2)
📝 README.md (+3 -0)

📄 Description

Co-Authored-By: Isaac Marovitz 42140194+IsaacMarovitz@users.noreply.github.com

This PR introduces several changes:

  • New detailed page for each app in IPA Libraey based on iTunesLookup file that its function is already being used and handles fetching app icons in IPA Library (No extra function is required) by @IsaacMarovitz
  • New StackNavigationView view extension has been introduced in ViewExtenstions.swift that is similar to NavigationStack on macOS 13 but supports macOS 12, so DetailedView is accessible in macOS 12 with same code. This extension can be used in any other views as you may want like creating App Folders in App Library or Source Folders in IPA Library
  • New DownloadApp class has been introduced in Downloader.swift explained here
  • Added working Download or Cancel Download buttons in the detailed page of each app
  • Download buttons will show 4 different text:
  1. Get: If the user hasn't installed that app/game yet on their PlayCover
  2. Reinstall: If the user already has the same version of the app installed in their PlayCover
  3. Update: If user has older version compared to what they are viewing installed in their PlayCover
  4. Downgrade: If user has newer version compared to what they are viewing installed in their PlayCover

Note: This version compare is using same logic and function of what @TheMoonThatRises has introduced into PlayCover in previously merged PRs.

  • Download buttons on press will change to Download progress bar with a stop option and after download to Install progress bar and will be shown only when user is in that app detail page
  • Made showing ToastView optional that can be controlled via ToastVM.shared.isShown boolean, it will no longer be shown when downloading or installing an app while user is in that app's DetailedView

Note: If you navigate to other apps DetailedView you'll still see the 4 type of download texts but they are disabled, no matter what in any DetailedView while app is being installed, that button is disabled.

  • Apps that have no iTunesLookup will get default text that notifies user the app is not on app store
  • New Cacher class has been introduced in Cacher.swift that uses DataCache package, removed ImageCache class and rewrote the logic.
  • Online Images now are being cached via CachedAsyncImage package that uses URLCache as memory
  • All texts have locale key, so translation can start right away

This library in future PlayCover development can be used to shown extra details that can be provided by sources like a stat badge like file size that shows if the app should have PlayTools or not or it just works in SIP disabled environment or not

Overall the general point is, current IPA Library interface has no room for improvement and showing details that user need to be notified about apps in sources.

Demo: this comment


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/PlayCover/PlayCover/pull/588 **Author:** [@amirsaam](https://github.com/amirsaam) **Created:** 12/17/2022 **Status:** ❌ Closed **Base:** `develop` ← **Head:** `Fancy-IPA-Library` --- ### 📝 Commits (10+) - [`1f757e3`](https://github.com/PlayCover/PlayCover/commit/1f757e3765bde032040b19e9f599668c91388dc9) Feat: Fancy IPA Library - [`2da09e7`](https://github.com/PlayCover/PlayCover/commit/2da09e7bf14149ac1db0edd1d7e1fe093aa6b7d4) Locale + Minor Fixes - [`7635b30`](https://github.com/PlayCover/PlayCover/commit/7635b30824403ba65f3ee1c9d1158d5c39041592) no more func in func - [`31984a0`](https://github.com/PlayCover/PlayCover/commit/31984a0c8ced03f618978fff1389de64163358ba) ZStack -> Group IPALibraryView - [`d34ad99`](https://github.com/PlayCover/PlayCover/commit/d34ad9937a7031d01d72c89c9c57138a372f7ad7) DownloadApp Class - [`30e747d`](https://github.com/PlayCover/PlayCover/commit/30e747d54f71bbac6dd53a6710eb45db8735fc88) Merge branch 'develop' into Fancy-IPA-Library - [`b430c8b`](https://github.com/PlayCover/PlayCover/commit/b430c8b1b06260b9056af7220026d33c8873ae65) Visual Improvement - [`86397a0`](https://github.com/PlayCover/PlayCover/commit/86397a024bc2ea1500320a661d3efeb26933b6cf) Update StoreAppView.swift - [`5371026`](https://github.com/PlayCover/PlayCover/commit/5371026461daec96d7e3d8f5601a8737eb70f39c) revert accidentally pushed signing changes - [`d0c161e`](https://github.com/PlayCover/PlayCover/commit/d0c161e8730a408b5d5363227e6ba0fa3d476f40) remove unnecessary selves ### 📊 Changes **17 files changed** (+967 additions, -466 deletions) <details> <summary>View changed files</summary> 📝 `PlayCover.xcodeproj/project.pbxproj` (+76 -13) ➕ `PlayCover/AppInstaller/Downloader.swift` (+127 -0) 📝 `PlayCover/Model/ITunesResponse.swift` (+20 -2) ➕ `PlayCover/Utils/Cacher.swift` (+85 -0) ➖ `PlayCover/Utils/ImageCache.swift` (+0 -166) ➕ `PlayCover/Utils/ViewExtenstions.swift` (+56 -0) 📝 `PlayCover/ViewModel/StoreVM.swift` (+1 -1) 📝 `PlayCover/ViewModel/ToastVM.swift` (+1 -0) ➕ `PlayCover/Views/App Views/DetailStoreAppView.swift` (+300 -0) 📝 `PlayCover/Views/App Views/PlayAppView.swift` (+28 -26) 📝 `PlayCover/Views/App Views/StoreAppView.swift` (+73 -116) 📝 `PlayCover/Views/AppSettingsView.swift` (+14 -12) 📝 `PlayCover/Views/MenuBarView.swift` (+13 -1) 📝 `PlayCover/Views/Sidebar Views/IPALibraryView.swift` (+108 -84) 📝 `PlayCover/Views/ToastView.swift` (+45 -43) 📝 `PlayCover/en.lproj/Localizable.strings` (+17 -2) 📝 `README.md` (+3 -0) </details> ### 📄 Description Co-Authored-By: Isaac Marovitz <42140194+IsaacMarovitz@users.noreply.github.com> This PR introduces several changes: - New detailed page for each app in IPA Libraey based on iTunesLookup file that its function is already being used and handles fetching app icons in IPA Library (No extra function is required) by @IsaacMarovitz - New `StackNavigationView` view extension has been introduced in `ViewExtenstions.swift` that is similar to `NavigationStack` on macOS 13 but supports macOS 12, so DetailedView is accessible in macOS 12 with same code. This extension can be used in any other views as you may want like creating App Folders in App Library or Source Folders in IPA Library - New `DownloadApp` class has been introduced in `Downloader.swift` explained [here](https://github.com/PlayCover/PlayCover/pull/588#issuecomment-1361166253) - Added working Download or Cancel Download buttons in the detailed page of each app - Download buttons will show 4 different text: 1. `Get`: If the user hasn't installed that app/game yet on their PlayCover 2. `Reinstall`: If the user already has the same version of the app installed in their PlayCover 3. `Update`: If user has older version compared to what they are viewing installed in their PlayCover 4. `Downgrade`: If user has newer version compared to what they are viewing installed in their PlayCover Note: This version compare is using same logic and function of what @TheMoonThatRises has introduced into PlayCover in previously merged PRs. - Download buttons on press will change to Download progress bar with a stop option and after download to Install progress bar and will be shown only when user is in that app detail page - Made showing ToastView optional that can be controlled via `ToastVM.shared.isShown` boolean, it will no longer be shown when downloading or installing an app while user is in that app's DetailedView Note: If you navigate to other apps DetailedView you'll still see the 4 type of download texts but they are disabled, no matter what in any DetailedView while app is being installed, that button is disabled. - Apps that have no iTunesLookup will get default text that notifies user the app is not on app store - New `Cacher` class has been introduced in `Cacher.swift` that uses `DataCache` package, removed `ImageCache` class and rewrote the logic. - Online Images now are being cached via `CachedAsyncImage` package that uses `URLCache` as memory - All texts have locale key, so translation can start right away This library in future PlayCover development can be used to shown extra details that can be provided by sources like a stat badge like file size that shows if the app should have PlayTools or not or it just works in SIP disabled environment or not Overall the general point is, current IPA Library interface has no room for improvement and showing details that user need to be notified about apps in sources. Demo: [this comment](https://github.com/PlayCover/PlayCover/pull/588#issuecomment-1363776097) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
kerem 2026-03-03 19:08:18 +03:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/PlayCover#1669
No description provided.