├── App └── AVIF.app │ └── Contents │ ├── PkgInfo │ ├── MacOS │ └── applet │ ├── Resources │ ├── applet.icns │ ├── applet.rsrc │ ├── Scripts │ │ ├── main.scpt │ │ └── main.rtf │ └── description.rtfd │ │ └── TXT.rtf │ └── Info.plist ├── Test └── test.avif ├── .github ├── FUNDING.yml └── workflows │ └── CI.yml ├── Screenshot ├── Preview.png └── Thumbnails.png ├── AVIFQuickLook.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── swiftpm │ │ └── Package.resolved ├── xcshareddata │ └── xcschemes │ │ └── AVIFQuickLook.xcscheme └── project.pbxproj ├── AVIFQuickLook.xcworkspace └── contents.xcworkspacedata ├── Podfile ├── .gitignore ├── LICENSE ├── AVIFQuickLook ├── GenerateThumbnailForURL.m ├── GeneratePreviewForURL.m ├── Info.plist └── main.c └── README.md /App/AVIF.app/Contents/PkgInfo: -------------------------------------------------------------------------------- 1 | APPLaplt -------------------------------------------------------------------------------- /Test/test.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dreampiggy/AVIFQuickLook/HEAD/Test/test.avif -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: dreampiggy 4 | -------------------------------------------------------------------------------- /Screenshot/Preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dreampiggy/AVIFQuickLook/HEAD/Screenshot/Preview.png -------------------------------------------------------------------------------- /Screenshot/Thumbnails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dreampiggy/AVIFQuickLook/HEAD/Screenshot/Thumbnails.png -------------------------------------------------------------------------------- /App/AVIF.app/Contents/MacOS/applet: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dreampiggy/AVIFQuickLook/HEAD/App/AVIF.app/Contents/MacOS/applet -------------------------------------------------------------------------------- /App/AVIF.app/Contents/Resources/applet.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dreampiggy/AVIFQuickLook/HEAD/App/AVIF.app/Contents/Resources/applet.icns -------------------------------------------------------------------------------- /App/AVIF.app/Contents/Resources/applet.rsrc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dreampiggy/AVIFQuickLook/HEAD/App/AVIF.app/Contents/Resources/applet.rsrc -------------------------------------------------------------------------------- /App/AVIF.app/Contents/Resources/Scripts/main.scpt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dreampiggy/AVIFQuickLook/HEAD/App/AVIF.app/Contents/Resources/Scripts/main.scpt -------------------------------------------------------------------------------- /App/AVIF.app/Contents/Resources/Scripts/main.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg936\cocoartf1671\cocoasubrtf400 2 | {\fonttbl} 3 | {\colortbl;\red255\green255\blue255;} 4 | {\*\expandedcolortbl;;} 5 | } -------------------------------------------------------------------------------- /App/AVIF.app/Contents/Resources/description.rtfd/TXT.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg936\cocoartf1671\cocoasubrtf400 2 | {\fonttbl} 3 | {\colortbl;\red255\green255\blue255;} 4 | {\*\expandedcolortbl;;} 5 | } -------------------------------------------------------------------------------- /AVIFQuickLook.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /AVIFQuickLook.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | platform :osx, '10.11' 3 | 4 | target 'AVIFQuickLook' do 5 | # Comment the next line if you don't want to use dynamic frameworks 6 | # use_frameworks! 7 | 8 | # Pods for AVIFQuickLook 9 | pod 'libavif', '0.11.1', :subspecs => ['libaom', 'libdav1d'] 10 | pod 'libdav1d', '1.2.0' 11 | pod 'SDWebImageAVIFCoder', '0.10.1' 12 | pod 'SDWebImage', '5.17.0' 13 | 14 | end 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | IDEWorkspaceChecks.plist 22 | 23 | # Bundler 24 | .bundle 25 | 26 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 27 | Carthage/Checkouts 28 | Carthage/Build 29 | Cartfile.resolved 30 | 31 | # We recommend against adding the Pods directory to your .gitignore. However 32 | # you should judge for yourself, the pros and cons are mentioned at: 33 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 34 | # 35 | # Note: if you ignore the Pods directory, make sure to uncomment 36 | # `pod install` in .travis.yml 37 | # 38 | Pods/ 39 | Podfile.lock 40 | 41 | # SwiftPM 42 | .build 43 | .swiftpm 44 | Package.resolved 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 DreamPiggy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /AVIFQuickLook.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "libaom-xcode", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/SDWebImage/libaom-Xcode.git", 7 | "state" : { 8 | "revision" : "482cafbebbc5f32378b82339b7580761fab4fd23", 9 | "version" : "2.0.2" 10 | } 11 | }, 12 | { 13 | "identity" : "libavif-xcode", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/SDWebImage/libavif-Xcode.git", 16 | "state" : { 17 | "revision" : "a158cb024166f8c599f88f8c91458c59922bcb0f", 18 | "version" : "0.11.1" 19 | } 20 | }, 21 | { 22 | "identity" : "libvmaf-xcode", 23 | "kind" : "remoteSourceControl", 24 | "location" : "https://github.com/SDWebImage/libvmaf-Xcode.git", 25 | "state" : { 26 | "revision" : "41db5dc11d05c02d1aca7de0b572a068f528c37c", 27 | "version" : "2.3.1" 28 | } 29 | }, 30 | { 31 | "identity" : "sdwebimage", 32 | "kind" : "remoteSourceControl", 33 | "location" : "https://github.com/SDWebImage/SDWebImage.git", 34 | "state" : { 35 | "revision" : "633996a807442ec28df9d33b0f88ce57a0e2fdbf", 36 | "version" : "5.17.0" 37 | } 38 | }, 39 | { 40 | "identity" : "sdwebimageavifcoder", 41 | "kind" : "remoteSourceControl", 42 | "location" : "https://github.com/SDWebImage/SDWebImageAVIFCoder.git", 43 | "state" : { 44 | "revision" : "989e4b6ad18200644956ba2a908cb7d939878690", 45 | "version" : "0.10.1" 46 | } 47 | } 48 | ], 49 | "version" : 2 50 | } 51 | -------------------------------------------------------------------------------- /AVIFQuickLook/GenerateThumbnailForURL.m: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #import "SDImageAVIFCoder.h" 5 | 6 | OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize); 7 | void CancelThumbnailGeneration(void *thisInterface, QLThumbnailRequestRef thumbnail); 8 | 9 | /* ----------------------------------------------------------------------------- 10 | Generate a thumbnail for file 11 | 12 | This function's job is to create thumbnail for designated file as fast as possible 13 | ----------------------------------------------------------------------------- */ 14 | 15 | OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize) 16 | { 17 | // To complete your generator please implement the function GenerateThumbnailForURL in GenerateThumbnailForURL.c 18 | @autoreleasepool { 19 | 20 | NSString *path = [(__bridge NSURL *)url path]; 21 | NSData *data = [NSData dataWithContentsOfFile:path]; 22 | UIImage *image = [SDImageAVIFCoder.sharedCoder decodedImageWithData:data options:nil]; 23 | CGImageRef cgImgRef = image.CGImage; 24 | if (cgImgRef) { 25 | QLThumbnailRequestSetImage(thumbnail, cgImgRef, nil); 26 | } else { 27 | QLThumbnailRequestSetImageAtURL(thumbnail, url, nil); 28 | } 29 | 30 | } 31 | return noErr; 32 | } 33 | 34 | void CancelThumbnailGeneration(void *thisInterface, QLThumbnailRequestRef thumbnail) 35 | { 36 | // Implement only if supported 37 | } 38 | -------------------------------------------------------------------------------- /.github/workflows/CI.yml: -------------------------------------------------------------------------------- 1 | name: "AVIFQuickLook CI" 2 | 3 | on: 4 | push: 5 | # Pattern matched against refs/tags 6 | tags: 7 | - '*' 8 | 9 | permissions: 10 | contents: write 11 | 12 | jobs: 13 | Build: 14 | name: Build App 15 | runs-on: macos-11 16 | env: 17 | DEVELOPER_DIR: /Applications/Xcode_13.2.1.app 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@v3 21 | 22 | - name: Install Cocoapods 23 | run: gem install cocoapods --no-document --quiet 24 | 25 | - name: Install Xcpretty 26 | run: gem install xcpretty --no-document --quiet 27 | 28 | - name: Pod Update 29 | run: pod repo update --silent 30 | 31 | - name: Pod Install 32 | run: pod install 33 | 34 | - name: Clean DerivedData 35 | run: | 36 | rm -rf ~/Library/Developer/Xcode/DerivedData/ 37 | mkdir DerivedData 38 | 39 | - name: Archive 40 | run: | 41 | set -o pipefail 42 | xcodebuild archive -workspace AVIFQuickLook.xcworkspace -scheme AVIFQuickLook -configuration Release -destination "generic/platform=macOS" -archivePath AVIFQuickLook.xcarchive 43 | mv AVIFQuickLook.xcarchive/Products/Library/QuickLook/AVIFQuickLook.qlgenerator AVIFQuickLook.qlgenerator 44 | mv AVIFQuickLook.xcarchive/dSYMs/AVIFQuickLook.qlgenerator.dSYM AVIFQuickLook.qlgenerator.dSYM 45 | zip -r AVIFQuickLook.qlgenerator.zip AVIFQuickLook.qlgenerator 46 | zip -r AVIFQuickLook.qlgenerator.dSYM.zip AVIFQuickLook.qlgenerator.dSYM 47 | 48 | - name: Upload Release 49 | uses: ncipollo/release-action@v1.12.0 50 | with: 51 | artifacts: "AVIFQuickLook.qlgenerator.zip,AVIFQuickLook.qlgenerator.dSYM.zip" 52 | token: ${{ secrets.GITHUB_TOKEN }} 53 | -------------------------------------------------------------------------------- /AVIFQuickLook/GeneratePreviewForURL.m: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #import "SDImageAVIFCoder.h" 5 | 6 | OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options); 7 | void CancelPreviewGeneration(void *thisInterface, QLPreviewRequestRef preview); 8 | 9 | /* ----------------------------------------------------------------------------- 10 | Generate a preview for file 11 | 12 | This function's job is to create preview for designated file 13 | ----------------------------------------------------------------------------- */ 14 | 15 | OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options) 16 | { 17 | // To complete your generator please implement the function GeneratePreviewForURL in GeneratePreviewForURL.c 18 | @autoreleasepool { 19 | 20 | NSString *path = [(__bridge NSURL *)url path]; 21 | NSData *data = [NSData dataWithContentsOfFile:path]; 22 | UIImage *image = [SDImageAVIFCoder.sharedCoder decodedImageWithData:data options:nil]; 23 | CGImageRef cgImgRef = image.CGImage; 24 | 25 | if (cgImgRef == NULL) { 26 | QLPreviewRequestSetURLRepresentation(preview, url, contentTypeUTI, nil); 27 | return -1; 28 | } 29 | 30 | CGFloat width = CGImageGetWidth(cgImgRef); 31 | CGFloat height = CGImageGetHeight(cgImgRef); 32 | 33 | // Add image dimensions to title 34 | NSString *newTitle = [NSString stringWithFormat:@"%@ (%d x %d)", [path lastPathComponent], (int)width, (int)height]; 35 | 36 | NSDictionary *newOpt = @{ (NSString *)kQLPreviewPropertyDisplayNameKey : newTitle, 37 | (NSString *)kQLPreviewPropertyWidthKey : @(width), 38 | (NSString *)kQLPreviewPropertyHeightKey : @(height) }; 39 | 40 | // Draw image 41 | CGContextRef ctx = QLPreviewRequestCreateContext(preview, CGSizeMake(width, height), YES, (__bridge CFDictionaryRef)newOpt); 42 | CGContextDrawImage(ctx, CGRectMake(0,0,width,height), cgImgRef); 43 | QLPreviewRequestFlushContext(preview, ctx); 44 | 45 | // Cleanup 46 | CGContextRelease(ctx); 47 | 48 | } 49 | return noErr; 50 | } 51 | 52 | void CancelPreviewGeneration(void *thisInterface, QLPreviewRequestRef preview) 53 | { 54 | // Implement only if supported 55 | } 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AVIFQuickLook 2 | 3 | ![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat) 4 | [![Build Status](https://github.com/dreampiggy/AVIFQuickLook/actions/workflows/CI.yml/badge.svg)](https://github.com/dreampiggy/AVIFQuickLook/actions/workflows/CI.yml) 5 | 6 | This is the **macOS QuickLook** plugin for [AVIF (AV1 Image File Format)](https://aomediacodec.github.io/av1-avif/). Including 10-bit HDR support. 7 | 8 | ## Generate Finder thumbnails 9 | 10 | ![](https://raw.githubusercontent.com/dreampiggy/AVIFQuickLook/master/Screenshot/Thumbnails.png) 11 | 12 | ## QuickLook the image 13 | 14 | ![](https://raw.githubusercontent.com/dreampiggy/AVIFQuickLook/master/Screenshot/Preview.png) 15 | 16 | These images are from [AVIF Specification Test Files](https://github.com/AOMediaCodec/av1-avif/blob/master/testFiles/) 17 | 18 | ## Requirements 19 | 20 | + macOS 10.11+ (Big Sur+) 21 | + M1/Intel Mac are both supported 22 | 23 | ## Build 24 | 25 | + Xcode 13+ 26 | + CocoaPods 1.11+ 27 | 28 | ``` 29 | pod install 30 | open AVIFQuickLook.xcworkspace 31 | ``` 32 | 33 | ## Install 34 | 35 | ### Homebrew Cask (New!) 36 | 37 | ``` 38 | brew install avifquicklook 39 | ``` 40 | 41 | ### Manual 42 | 43 | 1. Grab the latest `AVIFQuickLook.qlgenerator` from the [Release Page](https://github.com/dreampiggy/AVIFQuickLook/releases/latest), or build using Xcode. 44 | 2. Open Finder 45 | 3. `Shift + Command + G`, input `~/Library/QuickLook/` and press Enter. For macOS Catalina above, use `/Library/QuickLook/` instead. 46 | 4. Drag `AVIFQuickLook.qlgenerator` into this folder. You may need to enter the password 47 | 48 | ## Uninstall 49 | 50 | ### Homebrew Cask (New!) 51 | 52 | ``` 53 | brew uninstall avifquicklook 54 | ``` 55 | 56 | ### Manual 57 | 58 | 1. Open Finder 59 | 2. `Shift + Command + G`, input `~/Library/QuickLook/` and press Enter. For macOS Catalina above, use `/Library/QuickLook/` instead. 60 | 3. Delete `AVIFQuickLook.qlgenerator` 61 | 62 | ## For macOS Big Sur+ 63 | 64 | If you face the issue that the AVIF preview is blank, please try running the following command: 65 | 66 | ``` 67 | xattr -d -r com.apple.quarantine ~/Library/QuickLook/AVIFQuickLook.qlgenerator 68 | ``` 69 | 70 | Note the path is where you put the `AVIFQuickLook.qlgenerator` 71 | 72 | ## Author 73 | 74 | DreamPiggy, lizhuoli1126@126.com 75 | 76 | ## License 77 | 78 | This project is released under the *MIT license*, see **LICENSE**. 79 | 80 | ## Thanks 81 | 82 | + [libavif](https://github.com/AOMediaCodec/libavif) 83 | + [aom](https://aomedia.googlesource.com/aom/) 84 | + [SDWebImageAVIFCoder](https://github.com/SDWebImage/SDWebImageAVIFCoder) 85 | + [Homebrew Cask](https://github.com/Homebrew/homebrew-cask) 86 | 87 | -------------------------------------------------------------------------------- /AVIFQuickLook/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDocumentTypes 8 | 9 | 10 | CFBundleTypeRole 11 | QLGenerator 12 | LSItemContentTypes 13 | 14 | public.avif 15 | dyn.ah62d4rv4ge80c7xmq2 16 | 17 | 18 | 19 | CFBundleExecutable 20 | $(EXECUTABLE_NAME) 21 | CFBundleIdentifier 22 | $(PRODUCT_BUNDLE_IDENTIFIER) 23 | CFBundleInfoDictionaryVersion 24 | 6.0 25 | CFBundleName 26 | $(PRODUCT_NAME) 27 | CFBundleShortVersionString 28 | 1.2.0 29 | CFBundleVersion 30 | 1 31 | CFPlugInDynamicRegisterFunction 32 | 33 | CFPlugInDynamicRegistration 34 | NO 35 | CFPlugInFactories 36 | 37 | 5A0E19B7-6D55-4123-A433-465D6A5159EE 38 | QuickLookGeneratorPluginFactory 39 | 40 | CFPlugInTypes 41 | 42 | 5E2D9680-5022-40FA-B806-43349622E5B9 43 | 44 | 5A0E19B7-6D55-4123-A433-465D6A5159EE 45 | 46 | 47 | CFPlugInUnloadFunction 48 | 49 | NSHumanReadableCopyright 50 | Copyright © 2019 dreampiggy. All rights reserved. 51 | QLNeedsToBeRunInMainThread 52 | 53 | QLPreviewHeight 54 | 600 55 | QLPreviewWidth 56 | 800 57 | QLSupportsConcurrentRequests 58 | 59 | QLThumbnailMinimumSize 60 | 17 61 | UTImportedTypeDeclarations 62 | 63 | 64 | UTTypeConformsTo 65 | 66 | public.image 67 | 68 | UTTypeDescription 69 | AVIF Image 70 | UTTypeIdentifier 71 | public.avif 72 | UTTypeReferenceURL 73 | https://aomediacodec.github.io/av1-avif/ 74 | UTTypeTagSpecification 75 | 76 | public.filename-extension 77 | 78 | avif 79 | 80 | public.mime-type 81 | image/avif 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /App/AVIF.app/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleAllowMixedLocalizations 6 | 7 | CFBundleDevelopmentRegion 8 | English 9 | CFBundleExecutable 10 | applet 11 | CFBundleIconFile 12 | applet 13 | CFBundleIdentifier 14 | com.apple.ScriptEditor.id.AVIF 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | AVIF 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 1.2.0 23 | CFBundleSignature 24 | aplt 25 | LSMinimumSystemVersionByArchitecture 26 | 27 | x86_64 28 | 10.6 29 | 30 | LSRequiresCarbon 31 | 32 | NSAppleEventsUsageDescription 33 | This script needs to control other applications to run. 34 | NSAppleMusicUsageDescription 35 | This script needs access to your music to run. 36 | NSCalendarsUsageDescription 37 | This script needs access to your calendars to run. 38 | NSCameraUsageDescription 39 | This script needs access to your camera to run. 40 | NSContactsUsageDescription 41 | This script needs access to your contacts to run. 42 | NSHomeKitUsageDescription 43 | This script needs access to your HomeKit Home to run. 44 | NSMicrophoneUsageDescription 45 | This script needs access to your microphone to run. 46 | NSPhotoLibraryUsageDescription 47 | This script needs access to your photos to run. 48 | NSRemindersUsageDescription 49 | This script needs access to your reminders to run. 50 | NSSiriUsageDescription 51 | This script needs access to Siri to run. 52 | NSSystemAdministrationUsageDescription 53 | This script needs access to administer this system to run. 54 | WindowState 55 | 56 | bundleDividerCollapsed 57 | 58 | bundlePositionOfDivider 59 | 0 60 | dividerCollapsed 61 | 62 | eventLogLevel 63 | 2 64 | name 65 | ScriptWindowState 66 | positionOfDivider 67 | 421 68 | savedFrame 69 | 20 307 700 672 0 0 1680 1027 70 | selectedTab 71 | description 72 | 73 | UTExportedTypeDeclarations 74 | 75 | 76 | UTTypeConformsTo 77 | 78 | public.image 79 | 80 | UTTypeDescription 81 | AVIF Image 82 | UTTypeIdentifier 83 | public.avif 84 | UTTypeReferenceURL 85 | https://aomediacodec.github.io/av1-avif/ 86 | UTTypeTagSpecification 87 | 88 | public.filename-extension 89 | 90 | avif 91 | 92 | public.mime-type 93 | image/avif 94 | 95 | 96 | 97 | UTImportedTypeDeclarations 98 | 99 | 100 | UTTypeConformsTo 101 | 102 | public.image 103 | 104 | UTTypeDescription 105 | AVIF Image 106 | UTTypeIdentifier 107 | public.avif 108 | UTTypeReferenceURL 109 | https://aomediacodec.github.io/av1-avif/ 110 | UTTypeTagSpecification 111 | 112 | public.filename-extension 113 | 114 | avif 115 | 116 | public.mime-type 117 | image/avif 118 | 119 | 120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /AVIFQuickLook.xcodeproj/xcshareddata/xcschemes/AVIFQuickLook.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 46 | 47 | 48 | 54 | 55 | 56 | 57 | 60 | 61 | 64 | 65 | 68 | 69 | 72 | 73 | 76 | 77 | 80 | 81 | 84 | 85 | 86 | 87 | 93 | 94 | 100 | 101 | 102 | 103 | 105 | 106 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /AVIFQuickLook/main.c: -------------------------------------------------------------------------------- 1 | //============================================================================== 2 | // 3 | // DO NO MODIFY THE CONTENT OF THIS FILE 4 | // 5 | // This file contains the generic CFPlug-in code necessary for your generator 6 | // To complete your generator implement the function in GenerateThumbnailForURL/GeneratePreviewForURL.c 7 | // 8 | //============================================================================== 9 | 10 | 11 | 12 | 13 | 14 | 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | // ----------------------------------------------------------------------------- 21 | // constants 22 | // ----------------------------------------------------------------------------- 23 | 24 | // Don't modify this line 25 | #define PLUGIN_ID "6D1DD4BF-9B13-4FF5-89CD-750CDD2685DD" 26 | 27 | // 28 | // Below is the generic glue code for all plug-ins. 29 | // 30 | // You should not have to modify this code aside from changing 31 | // names if you decide to change the names defined in the Info.plist 32 | // 33 | 34 | 35 | // ----------------------------------------------------------------------------- 36 | // typedefs 37 | // ----------------------------------------------------------------------------- 38 | 39 | // The thumbnail generation function to be implemented in GenerateThumbnailForURL.c 40 | OSStatus GenerateThumbnailForURL(void *thisInterface, QLThumbnailRequestRef thumbnail, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options, CGSize maxSize); 41 | void CancelThumbnailGeneration(void* thisInterface, QLThumbnailRequestRef thumbnail); 42 | 43 | // The preview generation function to be implemented in GeneratePreviewForURL.c 44 | OSStatus GeneratePreviewForURL(void *thisInterface, QLPreviewRequestRef preview, CFURLRef url, CFStringRef contentTypeUTI, CFDictionaryRef options); 45 | void CancelPreviewGeneration(void *thisInterface, QLPreviewRequestRef preview); 46 | 47 | // The layout for an instance of QuickLookGeneratorPlugIn 48 | typedef struct __QuickLookGeneratorPluginType 49 | { 50 | void *conduitInterface; 51 | CFUUIDRef factoryID; 52 | UInt32 refCount; 53 | } QuickLookGeneratorPluginType; 54 | 55 | // ----------------------------------------------------------------------------- 56 | // prototypes 57 | // ----------------------------------------------------------------------------- 58 | // Forward declaration for the IUnknown implementation. 59 | // 60 | 61 | QuickLookGeneratorPluginType *AllocQuickLookGeneratorPluginType(CFUUIDRef inFactoryID); 62 | void DeallocQuickLookGeneratorPluginType(QuickLookGeneratorPluginType *thisInstance); 63 | HRESULT QuickLookGeneratorQueryInterface(void *thisInstance,REFIID iid,LPVOID *ppv); 64 | void *QuickLookGeneratorPluginFactory(CFAllocatorRef allocator,CFUUIDRef typeID); 65 | ULONG QuickLookGeneratorPluginAddRef(void *thisInstance); 66 | ULONG QuickLookGeneratorPluginRelease(void *thisInstance); 67 | 68 | // ----------------------------------------------------------------------------- 69 | // myInterfaceFtbl definition 70 | // ----------------------------------------------------------------------------- 71 | // The QLGeneratorInterfaceStruct function table. 72 | // 73 | static QLGeneratorInterfaceStruct myInterfaceFtbl = { 74 | NULL, 75 | QuickLookGeneratorQueryInterface, 76 | QuickLookGeneratorPluginAddRef, 77 | QuickLookGeneratorPluginRelease, 78 | NULL, 79 | NULL, 80 | NULL, 81 | NULL 82 | }; 83 | 84 | 85 | // ----------------------------------------------------------------------------- 86 | // AllocQuickLookGeneratorPluginType 87 | // ----------------------------------------------------------------------------- 88 | // Utility function that allocates a new instance. 89 | // You can do some initial setup for the generator here if you wish 90 | // like allocating globals etc... 91 | // 92 | QuickLookGeneratorPluginType *AllocQuickLookGeneratorPluginType(CFUUIDRef inFactoryID) 93 | { 94 | QuickLookGeneratorPluginType *theNewInstance; 95 | 96 | theNewInstance = (QuickLookGeneratorPluginType *)malloc(sizeof(QuickLookGeneratorPluginType)); 97 | memset(theNewInstance,0,sizeof(QuickLookGeneratorPluginType)); 98 | 99 | /* Point to the function table Malloc enough to store the stuff and copy the filler from myInterfaceFtbl over */ 100 | theNewInstance->conduitInterface = malloc(sizeof(QLGeneratorInterfaceStruct)); 101 | memcpy(theNewInstance->conduitInterface,&myInterfaceFtbl,sizeof(QLGeneratorInterfaceStruct)); 102 | 103 | /* Retain and keep an open instance refcount for each factory. */ 104 | theNewInstance->factoryID = CFRetain(inFactoryID); 105 | CFPlugInAddInstanceForFactory(inFactoryID); 106 | 107 | /* This function returns the IUnknown interface so set the refCount to one. */ 108 | theNewInstance->refCount = 1; 109 | return theNewInstance; 110 | } 111 | 112 | // ----------------------------------------------------------------------------- 113 | // DeallocQuickLookGeneratorPluginType 114 | // ----------------------------------------------------------------------------- 115 | // Utility function that deallocates the instance when 116 | // the refCount goes to zero. 117 | // In the current implementation generator interfaces are never deallocated 118 | // but implement this as this might change in the future 119 | // 120 | void DeallocQuickLookGeneratorPluginType(QuickLookGeneratorPluginType *thisInstance) 121 | { 122 | CFUUIDRef theFactoryID; 123 | 124 | theFactoryID = thisInstance->factoryID; 125 | /* Free the conduitInterface table up */ 126 | free(thisInstance->conduitInterface); 127 | 128 | /* Free the instance structure */ 129 | free(thisInstance); 130 | if (theFactoryID){ 131 | CFPlugInRemoveInstanceForFactory(theFactoryID); 132 | CFRelease(theFactoryID); 133 | } 134 | } 135 | 136 | // ----------------------------------------------------------------------------- 137 | // QuickLookGeneratorQueryInterface 138 | // ----------------------------------------------------------------------------- 139 | // Implementation of the IUnknown QueryInterface function. 140 | // 141 | HRESULT QuickLookGeneratorQueryInterface(void *thisInstance,REFIID iid,LPVOID *ppv) 142 | { 143 | CFUUIDRef interfaceID; 144 | 145 | interfaceID = CFUUIDCreateFromUUIDBytes(kCFAllocatorDefault,iid); 146 | 147 | if (CFEqual(interfaceID,kQLGeneratorCallbacksInterfaceID)){ 148 | /* If the Right interface was requested, bump the ref count, 149 | * set the ppv parameter equal to the instance, and 150 | * return good status. 151 | */ 152 | ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->GenerateThumbnailForURL = GenerateThumbnailForURL; 153 | ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->CancelThumbnailGeneration = CancelThumbnailGeneration; 154 | ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->GeneratePreviewForURL = GeneratePreviewForURL; 155 | ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType *)thisInstance)->conduitInterface)->CancelPreviewGeneration = CancelPreviewGeneration; 156 | ((QLGeneratorInterfaceStruct *)((QuickLookGeneratorPluginType*)thisInstance)->conduitInterface)->AddRef(thisInstance); 157 | *ppv = thisInstance; 158 | CFRelease(interfaceID); 159 | return S_OK; 160 | }else{ 161 | /* Requested interface unknown, bail with error. */ 162 | *ppv = NULL; 163 | CFRelease(interfaceID); 164 | return E_NOINTERFACE; 165 | } 166 | } 167 | 168 | // ----------------------------------------------------------------------------- 169 | // QuickLookGeneratorPluginAddRef 170 | // ----------------------------------------------------------------------------- 171 | // Implementation of reference counting for this type. Whenever an interface 172 | // is requested, bump the refCount for the instance. NOTE: returning the 173 | // refcount is a convention but is not required so don't rely on it. 174 | // 175 | ULONG QuickLookGeneratorPluginAddRef(void *thisInstance) 176 | { 177 | ((QuickLookGeneratorPluginType *)thisInstance )->refCount += 1; 178 | return ((QuickLookGeneratorPluginType*) thisInstance)->refCount; 179 | } 180 | 181 | // ----------------------------------------------------------------------------- 182 | // QuickLookGeneratorPluginRelease 183 | // ----------------------------------------------------------------------------- 184 | // When an interface is released, decrement the refCount. 185 | // If the refCount goes to zero, deallocate the instance. 186 | // 187 | ULONG QuickLookGeneratorPluginRelease(void *thisInstance) 188 | { 189 | ((QuickLookGeneratorPluginType*)thisInstance)->refCount -= 1; 190 | if (((QuickLookGeneratorPluginType*)thisInstance)->refCount == 0){ 191 | DeallocQuickLookGeneratorPluginType((QuickLookGeneratorPluginType*)thisInstance ); 192 | return 0; 193 | }else{ 194 | return ((QuickLookGeneratorPluginType*) thisInstance )->refCount; 195 | } 196 | } 197 | 198 | // ----------------------------------------------------------------------------- 199 | // QuickLookGeneratorPluginFactory 200 | // ----------------------------------------------------------------------------- 201 | void *QuickLookGeneratorPluginFactory(CFAllocatorRef allocator,CFUUIDRef typeID) 202 | { 203 | QuickLookGeneratorPluginType *result; 204 | CFUUIDRef uuid; 205 | 206 | /* If correct type is being requested, allocate an 207 | * instance of kQLGeneratorTypeID and return the IUnknown interface. 208 | */ 209 | if (CFEqual(typeID,kQLGeneratorTypeID)){ 210 | uuid = CFUUIDCreateFromString(kCFAllocatorDefault,CFSTR(PLUGIN_ID)); 211 | result = AllocQuickLookGeneratorPluginType(uuid); 212 | CFRelease(uuid); 213 | return result; 214 | } 215 | /* If the requested type is incorrect, return NULL. */ 216 | return NULL; 217 | } 218 | 219 | -------------------------------------------------------------------------------- /AVIFQuickLook.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 2D9EFD1FCFA47D99C16187F8 /* libPods-AVIFQuickLook.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11B58BD319084104314EF3D3 /* libPods-AVIFQuickLook.a */; }; 11 | 324706AE2264C44C005B2791 /* AVIF.app in Resources */ = {isa = PBXBuildFile; fileRef = 324706AD2264C44C005B2791 /* AVIF.app */; }; 12 | 32581D442264588300E36BB6 /* GenerateThumbnailForURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 32581D432264588300E36BB6 /* GenerateThumbnailForURL.m */; }; 13 | 32581D462264588300E36BB6 /* GeneratePreviewForURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 32581D452264588300E36BB6 /* GeneratePreviewForURL.m */; }; 14 | 32581D482264588300E36BB6 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 32581D472264588300E36BB6 /* main.c */; }; 15 | /* End PBXBuildFile section */ 16 | 17 | /* Begin PBXFileReference section */ 18 | 11B58BD319084104314EF3D3 /* libPods-AVIFQuickLook.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AVIFQuickLook.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 19 | 324706AD2264C44C005B2791 /* AVIF.app */ = {isa = PBXFileReference; lastKnownFileType = wrapper.application; path = AVIF.app; sourceTree = ""; }; 20 | 32581D402264588300E36BB6 /* AVIFQuickLook.qlgenerator */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AVIFQuickLook.qlgenerator; sourceTree = BUILT_PRODUCTS_DIR; }; 21 | 32581D432264588300E36BB6 /* GenerateThumbnailForURL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GenerateThumbnailForURL.m; sourceTree = ""; }; 22 | 32581D452264588300E36BB6 /* GeneratePreviewForURL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GeneratePreviewForURL.m; sourceTree = ""; }; 23 | 32581D472264588300E36BB6 /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; 24 | 32581D492264588300E36BB6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 25 | 70DC7653EF061E8A819AF0A2 /* Pods-AVIFQuickLook.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AVIFQuickLook.debug.xcconfig"; path = "Target Support Files/Pods-AVIFQuickLook/Pods-AVIFQuickLook.debug.xcconfig"; sourceTree = ""; }; 26 | E0C7E43A268AD16C5778F6DC /* Pods-AVIFQuickLook.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AVIFQuickLook.release.xcconfig"; path = "Target Support Files/Pods-AVIFQuickLook/Pods-AVIFQuickLook.release.xcconfig"; sourceTree = ""; }; 27 | /* End PBXFileReference section */ 28 | 29 | /* Begin PBXFrameworksBuildPhase section */ 30 | 32581D3D2264588300E36BB6 /* Frameworks */ = { 31 | isa = PBXFrameworksBuildPhase; 32 | buildActionMask = 2147483647; 33 | files = ( 34 | 2D9EFD1FCFA47D99C16187F8 /* libPods-AVIFQuickLook.a in Frameworks */, 35 | ); 36 | runOnlyForDeploymentPostprocessing = 0; 37 | }; 38 | /* End PBXFrameworksBuildPhase section */ 39 | 40 | /* Begin PBXGroup section */ 41 | 324706AC2264C44C005B2791 /* App */ = { 42 | isa = PBXGroup; 43 | children = ( 44 | 324706AD2264C44C005B2791 /* AVIF.app */, 45 | ); 46 | path = App; 47 | sourceTree = ""; 48 | }; 49 | 32581D362264588300E36BB6 = { 50 | isa = PBXGroup; 51 | children = ( 52 | 32581D422264588300E36BB6 /* AVIFQuickLook */, 53 | 324706AC2264C44C005B2791 /* App */, 54 | 32581D412264588300E36BB6 /* Products */, 55 | 32581D5422645F8B00E36BB6 /* Frameworks */, 56 | CB35FFFD7654246E3FFF83D5 /* Pods */, 57 | ); 58 | sourceTree = ""; 59 | }; 60 | 32581D412264588300E36BB6 /* Products */ = { 61 | isa = PBXGroup; 62 | children = ( 63 | 32581D402264588300E36BB6 /* AVIFQuickLook.qlgenerator */, 64 | ); 65 | name = Products; 66 | sourceTree = ""; 67 | }; 68 | 32581D422264588300E36BB6 /* AVIFQuickLook */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | 32581D432264588300E36BB6 /* GenerateThumbnailForURL.m */, 72 | 32581D452264588300E36BB6 /* GeneratePreviewForURL.m */, 73 | 32581D472264588300E36BB6 /* main.c */, 74 | 32581D492264588300E36BB6 /* Info.plist */, 75 | ); 76 | path = AVIFQuickLook; 77 | sourceTree = ""; 78 | }; 79 | 32581D5422645F8B00E36BB6 /* Frameworks */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | 11B58BD319084104314EF3D3 /* libPods-AVIFQuickLook.a */, 83 | ); 84 | name = Frameworks; 85 | sourceTree = ""; 86 | }; 87 | CB35FFFD7654246E3FFF83D5 /* Pods */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | 70DC7653EF061E8A819AF0A2 /* Pods-AVIFQuickLook.debug.xcconfig */, 91 | E0C7E43A268AD16C5778F6DC /* Pods-AVIFQuickLook.release.xcconfig */, 92 | ); 93 | path = Pods; 94 | sourceTree = ""; 95 | }; 96 | /* End PBXGroup section */ 97 | 98 | /* Begin PBXHeadersBuildPhase section */ 99 | 32581D3B2264588300E36BB6 /* Headers */ = { 100 | isa = PBXHeadersBuildPhase; 101 | buildActionMask = 2147483647; 102 | files = ( 103 | ); 104 | runOnlyForDeploymentPostprocessing = 0; 105 | }; 106 | /* End PBXHeadersBuildPhase section */ 107 | 108 | /* Begin PBXNativeTarget section */ 109 | 32581D3F2264588300E36BB6 /* AVIFQuickLook */ = { 110 | isa = PBXNativeTarget; 111 | buildConfigurationList = 32581D4C2264588300E36BB6 /* Build configuration list for PBXNativeTarget "AVIFQuickLook" */; 112 | buildPhases = ( 113 | 81B271E4408AEEA4590B3ACE /* [CP] Check Pods Manifest.lock */, 114 | 32581D3B2264588300E36BB6 /* Headers */, 115 | 32581D3C2264588300E36BB6 /* Sources */, 116 | 32581D3D2264588300E36BB6 /* Frameworks */, 117 | 32581D3E2264588300E36BB6 /* Resources */, 118 | ); 119 | buildRules = ( 120 | ); 121 | dependencies = ( 122 | ); 123 | name = AVIFQuickLook; 124 | packageProductDependencies = ( 125 | ); 126 | productName = AVIFQuickLook; 127 | productReference = 32581D402264588300E36BB6 /* AVIFQuickLook.qlgenerator */; 128 | productType = "com.apple.product-type.bundle"; 129 | }; 130 | /* End PBXNativeTarget section */ 131 | 132 | /* Begin PBXProject section */ 133 | 32581D372264588300E36BB6 /* Project object */ = { 134 | isa = PBXProject; 135 | attributes = { 136 | LastUpgradeCheck = 1020; 137 | ORGANIZATIONNAME = dreampiggy; 138 | TargetAttributes = { 139 | 32581D3F2264588300E36BB6 = { 140 | CreatedOnToolsVersion = 10.2; 141 | }; 142 | }; 143 | }; 144 | buildConfigurationList = 32581D3A2264588300E36BB6 /* Build configuration list for PBXProject "AVIFQuickLook" */; 145 | compatibilityVersion = "Xcode 9.3"; 146 | developmentRegion = en; 147 | hasScannedForEncodings = 0; 148 | knownRegions = ( 149 | en, 150 | ); 151 | mainGroup = 32581D362264588300E36BB6; 152 | packageReferences = ( 153 | ); 154 | productRefGroup = 32581D412264588300E36BB6 /* Products */; 155 | projectDirPath = ""; 156 | projectRoot = ""; 157 | targets = ( 158 | 32581D3F2264588300E36BB6 /* AVIFQuickLook */, 159 | ); 160 | }; 161 | /* End PBXProject section */ 162 | 163 | /* Begin PBXResourcesBuildPhase section */ 164 | 32581D3E2264588300E36BB6 /* Resources */ = { 165 | isa = PBXResourcesBuildPhase; 166 | buildActionMask = 2147483647; 167 | files = ( 168 | 324706AE2264C44C005B2791 /* AVIF.app in Resources */, 169 | ); 170 | runOnlyForDeploymentPostprocessing = 0; 171 | }; 172 | /* End PBXResourcesBuildPhase section */ 173 | 174 | /* Begin PBXShellScriptBuildPhase section */ 175 | 81B271E4408AEEA4590B3ACE /* [CP] Check Pods Manifest.lock */ = { 176 | isa = PBXShellScriptBuildPhase; 177 | buildActionMask = 2147483647; 178 | files = ( 179 | ); 180 | inputFileListPaths = ( 181 | ); 182 | inputPaths = ( 183 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 184 | "${PODS_ROOT}/Manifest.lock", 185 | ); 186 | name = "[CP] Check Pods Manifest.lock"; 187 | outputFileListPaths = ( 188 | ); 189 | outputPaths = ( 190 | "$(DERIVED_FILE_DIR)/Pods-AVIFQuickLook-checkManifestLockResult.txt", 191 | ); 192 | runOnlyForDeploymentPostprocessing = 0; 193 | shellPath = /bin/sh; 194 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 195 | showEnvVarsInLog = 0; 196 | }; 197 | /* End PBXShellScriptBuildPhase section */ 198 | 199 | /* Begin PBXSourcesBuildPhase section */ 200 | 32581D3C2264588300E36BB6 /* Sources */ = { 201 | isa = PBXSourcesBuildPhase; 202 | buildActionMask = 2147483647; 203 | files = ( 204 | 32581D442264588300E36BB6 /* GenerateThumbnailForURL.m in Sources */, 205 | 32581D462264588300E36BB6 /* GeneratePreviewForURL.m in Sources */, 206 | 32581D482264588300E36BB6 /* main.c in Sources */, 207 | ); 208 | runOnlyForDeploymentPostprocessing = 0; 209 | }; 210 | /* End PBXSourcesBuildPhase section */ 211 | 212 | /* Begin XCBuildConfiguration section */ 213 | 32581D4A2264588300E36BB6 /* Debug */ = { 214 | isa = XCBuildConfiguration; 215 | buildSettings = { 216 | ALWAYS_SEARCH_USER_PATHS = NO; 217 | CLANG_ANALYZER_NONNULL = YES; 218 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 219 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 220 | CLANG_CXX_LIBRARY = "libc++"; 221 | CLANG_ENABLE_MODULES = YES; 222 | CLANG_ENABLE_OBJC_ARC = YES; 223 | CLANG_ENABLE_OBJC_WEAK = YES; 224 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 225 | CLANG_WARN_BOOL_CONVERSION = YES; 226 | CLANG_WARN_COMMA = YES; 227 | CLANG_WARN_CONSTANT_CONVERSION = YES; 228 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 229 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 230 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 231 | CLANG_WARN_EMPTY_BODY = YES; 232 | CLANG_WARN_ENUM_CONVERSION = YES; 233 | CLANG_WARN_INFINITE_RECURSION = YES; 234 | CLANG_WARN_INT_CONVERSION = YES; 235 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 236 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 237 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 238 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 239 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 240 | CLANG_WARN_STRICT_PROTOTYPES = YES; 241 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 242 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 243 | CLANG_WARN_UNREACHABLE_CODE = YES; 244 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 245 | CODE_SIGN_IDENTITY = "-"; 246 | COPY_PHASE_STRIP = NO; 247 | DEBUG_INFORMATION_FORMAT = dwarf; 248 | ENABLE_STRICT_OBJC_MSGSEND = YES; 249 | ENABLE_TESTABILITY = YES; 250 | GCC_C_LANGUAGE_STANDARD = gnu11; 251 | GCC_DYNAMIC_NO_PIC = NO; 252 | GCC_NO_COMMON_BLOCKS = YES; 253 | GCC_OPTIMIZATION_LEVEL = 0; 254 | GCC_PREPROCESSOR_DEFINITIONS = ( 255 | "DEBUG=1", 256 | "$(inherited)", 257 | ); 258 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 259 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 260 | GCC_WARN_UNDECLARED_SELECTOR = YES; 261 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 262 | GCC_WARN_UNUSED_FUNCTION = YES; 263 | GCC_WARN_UNUSED_VARIABLE = YES; 264 | MACOSX_DEPLOYMENT_TARGET = 10.14; 265 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 266 | MTL_FAST_MATH = YES; 267 | ONLY_ACTIVE_ARCH = YES; 268 | SDKROOT = macosx; 269 | }; 270 | name = Debug; 271 | }; 272 | 32581D4B2264588300E36BB6 /* Release */ = { 273 | isa = XCBuildConfiguration; 274 | buildSettings = { 275 | ALWAYS_SEARCH_USER_PATHS = NO; 276 | CLANG_ANALYZER_NONNULL = YES; 277 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 278 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 279 | CLANG_CXX_LIBRARY = "libc++"; 280 | CLANG_ENABLE_MODULES = YES; 281 | CLANG_ENABLE_OBJC_ARC = YES; 282 | CLANG_ENABLE_OBJC_WEAK = YES; 283 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 284 | CLANG_WARN_BOOL_CONVERSION = YES; 285 | CLANG_WARN_COMMA = YES; 286 | CLANG_WARN_CONSTANT_CONVERSION = YES; 287 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 288 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 289 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 290 | CLANG_WARN_EMPTY_BODY = YES; 291 | CLANG_WARN_ENUM_CONVERSION = YES; 292 | CLANG_WARN_INFINITE_RECURSION = YES; 293 | CLANG_WARN_INT_CONVERSION = YES; 294 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 295 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 296 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 297 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 298 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 299 | CLANG_WARN_STRICT_PROTOTYPES = YES; 300 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 301 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 302 | CLANG_WARN_UNREACHABLE_CODE = YES; 303 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 304 | CODE_SIGN_IDENTITY = "-"; 305 | COPY_PHASE_STRIP = NO; 306 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 307 | ENABLE_NS_ASSERTIONS = NO; 308 | ENABLE_STRICT_OBJC_MSGSEND = YES; 309 | GCC_C_LANGUAGE_STANDARD = gnu11; 310 | GCC_NO_COMMON_BLOCKS = YES; 311 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 312 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 313 | GCC_WARN_UNDECLARED_SELECTOR = YES; 314 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 315 | GCC_WARN_UNUSED_FUNCTION = YES; 316 | GCC_WARN_UNUSED_VARIABLE = YES; 317 | MACOSX_DEPLOYMENT_TARGET = 10.14; 318 | MTL_ENABLE_DEBUG_INFO = NO; 319 | MTL_FAST_MATH = YES; 320 | SDKROOT = macosx; 321 | }; 322 | name = Release; 323 | }; 324 | 32581D4D2264588300E36BB6 /* Debug */ = { 325 | isa = XCBuildConfiguration; 326 | baseConfigurationReference = 70DC7653EF061E8A819AF0A2 /* Pods-AVIFQuickLook.debug.xcconfig */; 327 | buildSettings = { 328 | CODE_SIGN_STYLE = Automatic; 329 | COMBINE_HIDPI_IMAGES = YES; 330 | DEVELOPMENT_TEAM = H7W77QXGX2; 331 | INFOPLIST_FILE = AVIFQuickLook/Info.plist; 332 | INSTALL_PATH = /Library/QuickLook; 333 | MACOSX_DEPLOYMENT_TARGET = 10.11; 334 | PRODUCT_BUNDLE_IDENTIFIER = com.dreampiggy.AVIFQuickLook; 335 | PRODUCT_NAME = "$(TARGET_NAME)"; 336 | WRAPPER_EXTENSION = qlgenerator; 337 | }; 338 | name = Debug; 339 | }; 340 | 32581D4E2264588300E36BB6 /* Release */ = { 341 | isa = XCBuildConfiguration; 342 | baseConfigurationReference = E0C7E43A268AD16C5778F6DC /* Pods-AVIFQuickLook.release.xcconfig */; 343 | buildSettings = { 344 | CODE_SIGN_STYLE = Automatic; 345 | COMBINE_HIDPI_IMAGES = YES; 346 | DEVELOPMENT_TEAM = H7W77QXGX2; 347 | INFOPLIST_FILE = AVIFQuickLook/Info.plist; 348 | INSTALL_PATH = /Library/QuickLook; 349 | MACOSX_DEPLOYMENT_TARGET = 10.11; 350 | PRODUCT_BUNDLE_IDENTIFIER = com.dreampiggy.AVIFQuickLook; 351 | PRODUCT_NAME = "$(TARGET_NAME)"; 352 | WRAPPER_EXTENSION = qlgenerator; 353 | }; 354 | name = Release; 355 | }; 356 | /* End XCBuildConfiguration section */ 357 | 358 | /* Begin XCConfigurationList section */ 359 | 32581D3A2264588300E36BB6 /* Build configuration list for PBXProject "AVIFQuickLook" */ = { 360 | isa = XCConfigurationList; 361 | buildConfigurations = ( 362 | 32581D4A2264588300E36BB6 /* Debug */, 363 | 32581D4B2264588300E36BB6 /* Release */, 364 | ); 365 | defaultConfigurationIsVisible = 0; 366 | defaultConfigurationName = Release; 367 | }; 368 | 32581D4C2264588300E36BB6 /* Build configuration list for PBXNativeTarget "AVIFQuickLook" */ = { 369 | isa = XCConfigurationList; 370 | buildConfigurations = ( 371 | 32581D4D2264588300E36BB6 /* Debug */, 372 | 32581D4E2264588300E36BB6 /* Release */, 373 | ); 374 | defaultConfigurationIsVisible = 0; 375 | defaultConfigurationName = Release; 376 | }; 377 | /* End XCConfigurationList section */ 378 | }; 379 | rootObject = 32581D372264588300E36BB6 /* Project object */; 380 | } 381 | --------------------------------------------------------------------------------