3.8 KiB
3.8 KiB
Quick Look Plan
Current State
The shared Bedrock package inspection layer is implemented in app code and ready to be reused by Quick Look targets:
World Manager for Minecraft/Services/MinecraftPackageInspector.swift- extracts
.mcworld,.mcpack,.mctemplate, and.mcaddon - normalizes archives with either flat contents or a single nested top-level folder
- infers pack type for ambiguous
.mcpackand.mcaddonarchives
- extracts
World Manager for Minecraft/Services/MinecraftContentMetadataReader.swift- shared manifest, icon, display-name, and world metadata parsing
World Manager for Minecraft/QuickLook/MinecraftPackageTypes.swift- central UTType identifiers and extension definitions
World Manager for Minecraft/QuickLook/MinecraftPackageQuickLookModel.swift- preview-friendly summary model
World Manager for Minecraft/QuickLook/MinecraftPackageThumbnailRenderer.swift- branded thumbnail rendering with icon fallback
Archive inspection is covered by tests in World Manager for MinecraftTests/World_Manager_for_MinecraftTests.swift.
Why The Extension Target Is Not Landed Yet
The project is using Xcode's filesystem-synchronized project format. Adding a new Quick Look target by hand in project.pbxproj is possible, but it is the highest-risk part of this feature to do blind because:
- the target graph, extension point declaration, product embedding, and bundle metadata all need to be correct together
- a malformed
pbxprojcan break the project more broadly than a normal source change - the extension will need generated or explicit Info.plist keys for document/UTType registration
The parsing and rendering code is now in a shape where the target layer can stay thin.
Recommended Next Steps
- Add a
Quick Look Thumbnail Extensiontarget in Xcode. - Point it at the shared package inspector and thumbnail renderer.
- Register support for:
.mcworld.mcpack.mctemplate.mcaddon
- Add a
Quick Look Preview Extensiontarget after thumbnails are working. - Render the preview from
MinecraftPackageQuickLookModel.
Thumbnail Extension Outline
Implement a provider roughly like this:
final class ThumbnailProvider: QLThumbnailProvider {
override func provideThumbnail(
for request: QLFileThumbnailRequest,
_ handler: @escaping (QLThumbnailReply?, Error?) -> Void
) {
do {
let inspection = try MinecraftPackageInspector.inspectArchive(at: request.fileURL)
defer { MinecraftPackageInspector.cleanup(inspection) }
guard let image = MinecraftPackageThumbnailRenderer.makeThumbnail(
for: inspection,
size: request.maximumSize,
scale: request.scale
) else {
handler(nil, CocoaError(.fileReadCorruptFile))
return
}
handler(
QLThumbnailReply(contextSize: request.maximumSize) { context in
context.draw(image, in: CGRect(origin: .zero, size: request.maximumSize))
return true
},
nil
)
} catch {
handler(nil, error)
}
}
}
Preview Extension Outline
The preview target can:
- inspect the archive with
MinecraftPackageInspector - build display content with
MinecraftPackageQuickLookModelBuilder - render a compact SwiftUI summary view with:
- package icon or branded artwork
- title
- package kind
- key facts like version, UUID, minimum engine, game mode, difficulty, and last played
Verification Notes
xcodebuild ... buildsucceeds.xcodebuild ... testcurrently does not complete cleanly because the existing test target already referencesIFuseDeviceServices, which is not in scope for the test build. That issue predates the Quick Look work.