Not working for mac os 15 sequoia
Probably due to apple requiring apple developer account for signing app. Any chance it will be updated ?
Hi @abhishek-notes, I'd like to get it signed but don't have Apple developer account right now. Did you try the workaround in https://github.com/amoeba/QLArrow?tab=readme-ov-file#installation?
Hi, Thanks for responding.
Yeah, i did try that, and i even tried lots of stuff using claude code and codex cli including creating a personal certificate on my macbook and then signing with that, or trying to make it run, but still cant get it to work, for ref. here are some things i have tried with claude, (and still not working after restart) [ --- would really appreciate your further insights and suggestions] :
Claude
Complete Summary of What We've Tried and Why Each Failed 1. Downloaded Pre-built Release from GitHub
- What we did: Downloaded the pre-compiled QLArrow.qlgenerator from GitHub releases
- Why it failed: The plugin was compiled in 2022, ad-hoc signed (not properly signed), and macOS blocks unsigned/ad-hoc signed QuickLook plugins
- Error: "The application quicklookd can't be opened" (which is actually normal - you don't open .qlgenerator files directly)
-
Built from Source
- What we did: Compiled the Go component and built via Xcode with proper architecture (ARM64)
- Why it failed: Even though we built it successfully, it was still unsigned (ad-hoc signature only)
- Status: Build succeeded, Go component works perfectly (tested independently), but QuickLook won't load unsigned plugins
-
Discovered Conflicting ParquetPreviewer.app
- What we found: You had ParquetPreviewer.app installed which was competing for .parquet files
- What we did: Disabled its QuickLook extension
- Result: Neither plugin was working anyway due to signing issues
-
Modified System Security Settings (Multiple Attempts)
- Tried: xattr -d com.apple.quarantine
- Failed because: Quarantine removal doesn't bypass code signing requirements
- Tried: sudo spctl --add
- Failed because: This command is deprecated in modern macOS
- Tried: sudo spctl --master-disable
- Failed because: Requires manual confirmation in System Settings, and is a global security risk
- Tried: defaults write com.apple.quicklookd QLEnableUnsignedPlugins
-bool YES
- Failed because: This setting doesn't exist or isn't honored in modern macOS
- Tried: xattr -d com.apple.quarantine
-
Code Signing Attempts a. Ad-hoc Signing
- Command: codesign --force --deep --sign -
- Failed because: Ad-hoc signatures aren't trusted for plugins
b. Created Hardened Runtime with Entitlements
- What we did: Created entitlements file, signed with runtime flag
- Failed because: Still ad-hoc signed, not from a trusted developer
c. Modified Bundle Identifier
- What we did: Changed to com.apple.quicklook.QLArrow to impersonate Apple
- Failed because: Signature doesn't match Apple's certificates
-
System-Level Modifications
- Tried: Creating symlink in /Library/QuickLook/
- Failed because: System directories don't change the trust requirement
- Tried: Modifying QuickLook daemon launch parameters
- Failed because: System files are protected by SIP (System Integrity Protection)
- Tried: Configuration profiles
- Failed because: profiles command is deprecated for manual installation
-
Self-Signed Certificate (First Attempt)
- What happened: Created "Local Dev Code Signing" certificate
- Failed because: Certificate was created without private key (didn't check "override defaults")
-
Self-Signed Certificate (Second Attempt - "QLArrow Signing")
- What we did: Created proper certificate with private key
- Result: Certificate created successfully, plugin signed
- Failed because: Self-signed certificates still aren't trusted enough for QuickLook plugins
-
Apple Development Certificate (Free with Apple ID)
- What we did:
- Set up Apple ID in Xcode
- Created Apple Development certificate
- Downloaded Apple intermediate certificates for proper chain
- Successfully signed the plugin with Apple Development certificate
- Current status: Plugin is properly signed with certificate chain:
- Apple Development: @.*** (25YZWT7525)
- Apple Worldwide Developer Relations Certification Authority
- Apple Root CA
- Why it's still failing: macOS caches plugin loading decisions and requires a restart to re-evaluate security for newly signed plugins
- What we did:
The Core Problem
Modern macOS (especially Ventura/Sonoma and later) has extremely strict security for QuickLook plugins:
- Unsigned plugins are completely blocked - no bypass without disabling major security features
- Ad-hoc signatures don't work - they're treated as unsigned
- Self-signed certificates don't work - not trusted for system plugins
- Even Apple Development certificates need a system restart - macOS caches security decisions
What WILL Work
- Restart your Mac - With the Apple Development certificate signature, the plugin should load after restart
- Get a paid Apple Developer account ($99/year) - Allows proper Developer ID signing and notarization
- Disable SIP entirely - Not recommended, major security risk, requires restart anyway
The Irony
- The Go component works perfectly (we tested it)
- The plugin is properly built for ARM64
- It's now properly signed with an Apple Development certificate
- But macOS's security cache won't recognize the changes until restart
Quick summary of codex trial, there were other trials as well, still can't figure it out :
Here is a summary of everything that was attempted to get the Quick Look plugin working on macOS 15, but ultimately did not resolve the issue.
- Initial Analysis and Repair of the Legacy Plugin (.qlgenerator) Problem: The original QLArrow.qlgenerator (a legacy plugin type) stopped working on macOS 15 Sequoia. Actions Taken: Analyzed Project: Inspected the Xcode project (.pbxproj), Info.plist, and source code (.m, .c, .go files). Updated Deployment Target: Changed the macOS deployment target from an outdated version (10.6) to a modern one (12.0) to resolve build warnings. Corrected Info.plist: Fixed malformed and duplicated keys, and updated the Uniform Type Identifier (UTI) declarations from UTImportedTypeDeclarations to UTExportedTypeDeclarations to properly define org.apache.parquet for Parquet files. Patched Deprecated Code: Replaced a deprecated constant (kUTTypeHTML) in the Objective-C code with its modern equivalent ("public.html") to ensure compatibility with the latest SDK. Rebuilt Go Archive: The internal Go library (internal.a) that parses Parquet data was recompiled for the arm64 architecture to match modern Apple Silicon Macs. Rebuilt and Reinstalled: The .qlgenerator was successfully rebuilt, installed into ~/Library/QuickLook, and the Quick Look cache was reset multiple times. Result: Did not work. System logs and qlmanage commands showed that macOS 15 was ignoring the legacy .qlgenerator entirely, preferring modern App Extensions for previews.
- Migration to a Modern Quick Look Preview Extension (App-Based) Problem: Since legacy generators are unsupported, the project was migrated to a modern Quick Look Preview Extension, which lives inside a host application. Actions Taken: Scaffolded New Project: A new macOS application project ("ParquetPreviewer") was created from scratch using XcodeGen. This app serves as a container for the preview extension. Created App Extension: A Quick Look Preview Extension target ("ParquetQLPreview") was added to the project. Two Implementations were Tried: Go Library Bridge: Initially, the extension was written in Objective-C and linked against the original Go static library (internal.a) to generate the HTML preview. Swift + DuckDB: When the Go bridge didn't work, the entire preview logic was rewritten in Swift. It used the official duckdb-swift package to read the Parquet file and generate an HTML table directly within the extension. This removed the complexity of bridging C/Go code. Configured Info.plist (App & Extension): The app's Info.plist was configured to export the org.apache.parquet UTI and associate it with the .parquet file extension. The extension's Info.plist was configured to declare that it handles the org.apache.parquet content type. Handled a Third-Party UTI: We discovered your Parquet files were identified with a vendor-specific UTI (com.macdatapro.parquet). We updated the extension's configuration to explicitly support this UTI as well. Set App Sandboxing: Added the necessary entitlements to allow the app and its extension to operate within Apple's security sandbox and read user-selected files. Fixed Swift Code: Addressed multiple build errors, including a QueryResult type mismatch, and made Objective-C bridging adjustments to the Swift class. Rebuilt, Installed, and Registered: The ParquetPreviewer.app (containing the extension) was built, copied to /Applications, and registered with the system's Launch Services multiple times. Result: Did not work. Despite the app and extension being correctly built and registered (verified with pluginkit), Finder would not select our extension to generate a preview when you pressed the spacebar. System logs continued to show "No extension found," indicating a persistent issue with how the system was matching the file's type to our extension's declared capabilities.
- Fallback Solutions Python-backed Extension: The Swift code was briefly modified to call an external Python script to generate the HTML. Result: Did not work in Finder. While the Python script worked perfectly from the command line, App Extensions on macOS are heavily sandboxed and are not allowed to execute external processes. This attempt failed silently inside Finder. Command-Line Helper (pqpreview): A standalone shell script was created and installed at ~/bin/pqpreview. This script uses Python/DuckDB to generate an HTML preview and then calls qlmanage to display it in a Quick Look window. Result: Worked. This confirmed the data parsing and HTML generation logic was correct and functional on your machine. However, it requires using the terminal and is not the seamless Finder integration you wanted. Finder Quick Action (Automator Workflow): An Automator workflow was created at ~/Library/Services to add a "Preview Parquet File" option to the right-click context menu in Finder. This action was intended to run the pqpreview script. Result: Caused system instability. The process of creating and registering this user-level service unfortunately caused issues with your System Settings and Finder, and had to be reverted.
On Mon, Aug 25, 2025 at 11:50 PM Bryce Mecum @.***> wrote:
amoeba left a comment (amoeba/QLArrow#5) https://github.com/amoeba/QLArrow/issues/5#issuecomment-3221290962
Hi @abhishek-notes https://github.com/abhishek-notes, I'd like to get it signed but don't have Apple developer account right now. Did you try the workaround in https://github.com/amoeba/QLArrow?tab=readme-ov-file#installation?
— Reply to this email directly, view it on GitHub https://github.com/amoeba/QLArrow/issues/5#issuecomment-3221290962, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOYRHLCRZ4KHFG343VQQILT3PNHWLAVCNFSM6AAAAACEP6YMQSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTEMRRGI4TAOJWGI . You are receiving this because you were mentioned.Message ID: @.***>
Thanks. I may need some time to figure out a fix but appreciate the report.
Really appreciate it, thanks in advance.
On Tue, Aug 26, 2025 at 12:43 AM Bryce Mecum @.***> wrote:
amoeba left a comment (amoeba/QLArrow#5) https://github.com/amoeba/QLArrow/issues/5#issuecomment-3221432497
Thanks. I may need some time to figure out a fix but appreciate the report.
— Reply to this email directly, view it on GitHub https://github.com/amoeba/QLArrow/issues/5#issuecomment-3221432497, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOYRHLCFKASPGANCY6T6Q6L3PNN35AVCNFSM6AAAAACEP6YMQSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTEMRRGQZTENBZG4 . You are receiving this because you were mentioned.Message ID: @.***>