feat: show xcarchive developer notes

This commit is contained in:
relikd
2025-11-06 01:06:53 +01:00
parent 1a6d98a4b2
commit 2d16cb666b
4 changed files with 40 additions and 2 deletions

View File

@@ -9,6 +9,7 @@
/* Begin PBXBuildFile section */
5405CF5E2EA1199B00613856 /* MetaInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5405CF5D2EA1199B00613856 /* MetaInfo.swift */; };
5405CF652EA1376B00613856 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5405CF642EA1376B00613856 /* Zip.swift */; };
5412DECE2EBC168600F9040D /* Preview+ArchiveInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5412DECD2EBC168600F9040D /* Preview+ArchiveInfo.swift */; };
543FE5742EB3BB5E0059F98B /* AppIcon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 543FE5732EB3BB5E0059F98B /* AppIcon.icns */; };
54442C232E378BAF008A870E /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 54442C222E378BAF008A870E /* Quartz.framework */; };
54442C702E378BDD008A870E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54442C6A2E378BDD008A870E /* AppDelegate.swift */; };
@@ -124,6 +125,7 @@
/* Begin PBXFileReference section */
5405CF5D2EA1199B00613856 /* MetaInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaInfo.swift; sourceTree = "<group>"; };
5405CF642EA1376B00613856 /* Zip.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Zip.swift; sourceTree = "<group>"; };
5412DECD2EBC168600F9040D /* Preview+ArchiveInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Preview+ArchiveInfo.swift"; sourceTree = "<group>"; };
54352E8A2EB6A79A0082F61D /* AssetCarReader.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AssetCarReader.framework; sourceTree = BUILT_PRODUCTS_DIR; };
543FE5732EB3BB5E0059F98B /* AppIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = AppIcon.icns; sourceTree = "<group>"; };
543FE5752EB3BC740059F98B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -217,6 +219,7 @@
547F52DC2EB2C15D002B6D5F /* ExpirationStatus.swift */,
547F52E62EB2C41C002B6D5F /* PreviewGenerator.swift */,
547F52EC2EB2C822002B6D5F /* Preview+AppInfo.swift */,
5412DECD2EBC168600F9040D /* Preview+ArchiveInfo.swift */,
547F52E32EB2C3D8002B6D5F /* Preview+iTunesPurchase.swift */,
549E3BA32EBC021500ADFF56 /* Preview+TransportSecurity.swift */,
547F52F32EB2CA05002B6D5F /* Preview+Entitlements.swift */,
@@ -529,6 +532,7 @@
buildActionMask = 2147483647;
files = (
549E3BA42EBC021500ADFF56 /* Preview+TransportSecurity.swift in Sources */,
5412DECE2EBC168600F9040D /* Preview+ArchiveInfo.swift in Sources */,
54D3A6F02EA3F49F001EF4F6 /* NSBezierPath+RoundedRect.swift in Sources */,
547F52E42EB2C3D8002B6D5F /* Preview+iTunesPurchase.swift in Sources */,
547F52F72EB2CAC7002B6D5F /* Preview+Footer.swift in Sources */,

View File

@@ -22,6 +22,11 @@
<br class="clear" />
</div>
<div class="__ArchiveHidden__">
<h2>Archive Notes</h2>
<pre>__ArchiveComment__</pre>
</div>
<div class="__iTunesHidden__">
<h2>iTunes Metadata</h2>
iTunesId: __iTunesId__<br />

View File

@@ -0,0 +1,29 @@
import Foundation
extension MetaInfo {
/// Read `Info.plist` if type `.Archive`
func readPlistXCArchive() -> PlistDict? {
switch self.type {
case .Archive:
// not `readPayloadFile` because plist is in root dir
return try? Data(contentsOf: self.url.appendingPathComponent("Info.plist", isDirectory: false)).asPlistOrNil()
case .IPA, .Extension:
return nil
}
}
}
extension PreviewGenerator {
/// Process info of `.xcarchive` stored in root `Info.plist`
mutating func procArchiveInfo(_ archivePlist: PlistDict?) {
guard let archivePlist, let comment = archivePlist["Comment"] as? String else {
self.apply(["ArchiveHidden": CLASS_HIDDEN])
return
}
self.apply([
"ArchiveHidden": CLASS_VISIBLE,
"ArchiveComment": comment,
])
}
}

View File

@@ -10,13 +10,13 @@ struct PreviewGenerator {
init(_ meta: MetaInfo) {
self.meta = meta
let plistApp = meta.readPlistApp()
let plistItunes = meta.readPlistItunes()
let plistProvision = meta.readPlistProvision()
data["QuickLookTitle"] = stringForFileType(meta)
procAppInfo(plistApp, isOSX: meta.isOSX)
procItunesMeta(plistItunes)
procArchiveInfo(meta.readPlistXCArchive())
procItunesMeta(meta.readPlistItunes())
procTransportSecurity(plistApp)
procEntitlements(meta, plistApp, plistProvision)
procProvision(plistProvision, isOSX: meta.isOSX)