get wallpapers in order

This commit is contained in:
leminlimez committed 2025-06-22 15:59:01 -04:00
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 {