├── 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 | 
4 | [](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 | 
11 |
12 | ## QuickLook the image
13 |
14 | 
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 |
--------------------------------------------------------------------------------