get wallpapers in order
This commit is contained in:
1 parent
2f99384650
commit
918af3baa3
6 files changed
+108
-16
No files matched your search
@@ -0,0 +1,23 @@
|
||||
//
|
||||
// CarPlayWallpaper.swift
|
||||
// Pocket Poster
|
||||
//
|
||||
// Created by lemin on 6/22/25.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct CarPlayWallpaper: Identifiable {
|
||||
var id = UUID()
|
||||
var name: String
|
||||
var lightImage: UIImage
|
||||
var darkImage: UIImage
|
||||
var selectedImageDataLight: Data?
|
||||
var selectedImageDataDark: Data?
|
||||
var changed: Bool
|
||||
}
|
||||
|
||||
extension CarPlayWallpaper: Reorderable {
|
||||
typealias OrderElement = String
|
||||
var orderElement: OrderElement { name }
|
||||
}
|
||||
@@ -245,6 +245,39 @@ class PosterBoardManager: ObservableObject {
|
||||
return ""
|
||||
}
|
||||
|
||||
func getCarPlayWallpaperNames() -> [String]? {
|
||||
dlopen("/System/Library/PrivateFrameworks/CarPlayUIServices.framework/CarPlayUIServices", RTLD_GLOBAL)
|
||||
|
||||
if #available(iOS 18.0, *) {
|
||||
// iOS 18 method (it got moved)
|
||||
guard let obj = objc_getClass("CRSUISystemWallpaper") as? NSObject else { print("no class"); return nil }
|
||||
|
||||
if let success = obj.perform(Selector(("wallpapers"))), let arr = success.takeUnretainedValue() as? [NSObject] {
|
||||
var namesList: [String] = []
|
||||
for wp in arr {
|
||||
if let wpACName = wp.perform(Selector(("wallpaperAssetCatalogName"))), let result = wpACName.takeUnretainedValue() as? String {
|
||||
namesList.append(result)
|
||||
}
|
||||
}
|
||||
return namesList
|
||||
}
|
||||
} else {
|
||||
// iOS 17-
|
||||
guard let obj = objc_getClass("CRSUIWallpaperPreferences") as? NSObject else { print("no class"); return nil }
|
||||
if let success = obj.perform(Selector(("availableWallpapers"))), let arr = success.takeUnretainedValue() as? [NSObject] {
|
||||
var namesList: [String] = []
|
||||
for wp in arr {
|
||||
if let wpACName = wp.perform(Selector(("wallpaperAssetCatalogName"))), let result = wpACName.takeUnretainedValue() as? String {
|
||||
namesList.append(result)
|
||||
}
|
||||
}
|
||||
return namesList
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func applyCarPlay(appHash: String, wallpapers: [CarPlayWallpaper]) throws {
|
||||
// write the image
|
||||
var toRemove: [URL] = []
|
||||
@@ -270,14 +303,21 @@ class PosterBoardManager: ObservableObject {
|
||||
}
|
||||
|
||||
// symlink and apply
|
||||
let _ = try SymHandler.createAppSymlink(for: "\(appHash)/Library/Caches/MappedImageCache/com.apple.CarPlayApp.wallpaper-images")
|
||||
// let _ = try SymHandler.createAppSymlink(for: "\(appHash)/Library/Caches/MappedImageCache/com.apple.CarPlayApp.wallpaper-images")
|
||||
// defer {
|
||||
// SymHandler.cleanup()
|
||||
// }
|
||||
// for imgURL in toRemove {
|
||||
// try FileManager.default.trashItem(at: imgURL, resultingItemURL: nil)
|
||||
// }
|
||||
// UserDefaults.standard.set(activeWP, forKey: "ActiveCarPlayWallpapers")
|
||||
// let test = SymHandler.getDocumentsDirectory().appendingPathComponent("Caches")
|
||||
// try Data(count: 0).write(to: test)
|
||||
let hmm = try SymHandler.createAppSymlink(for: "\(appHash)/Library")
|
||||
defer {
|
||||
SymHandler.cleanup()
|
||||
}
|
||||
for imgURL in toRemove {
|
||||
try FileManager.default.trashItem(at: imgURL, resultingItemURL: nil)
|
||||
}
|
||||
UserDefaults.standard.set(activeWP, forKey: "ActiveCarPlayWallpapers")
|
||||
try FileManager.default.removeItem(at: hmm.appendingPathComponent("Caches"))
|
||||
}
|
||||
|
||||
static func clearCache() throws {
|
||||
|
||||
Reference in new issue
Block a user