diff --git a/MacNewFile.xcodeproj/project.pbxproj b/MacNewFile.xcodeproj/project.pbxproj index 3a69d85..85fe0be 100644 --- a/MacNewFile.xcodeproj/project.pbxproj +++ b/MacNewFile.xcodeproj/project.pbxproj @@ -374,7 +374,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 10; - DEVELOPMENT_TEAM = 57G5Y8C4XX; + DEVELOPMENT_TEAM = D7Q745NTDC; ENABLE_APP_SANDBOX = NO; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_LSUIElement = YES; @@ -386,7 +386,7 @@ "@executable_path/../Frameworks", ); MARKETING_VERSION = 3.0.0; - PRODUCT_BUNDLE_IDENTIFIER = com.louieyin.MacNewFile; + PRODUCT_BUNDLE_IDENTIFIER = com.johli.MacNewFile; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; REGISTER_APP_GROUPS = YES; @@ -408,7 +408,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 10; - DEVELOPMENT_TEAM = 57G5Y8C4XX; + DEVELOPMENT_TEAM = D7Q745NTDC; ENABLE_APP_SANDBOX = NO; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_KEY_LSUIElement = YES; @@ -420,7 +420,7 @@ "@executable_path/../Frameworks", ); MARKETING_VERSION = 3.0.0; - PRODUCT_BUNDLE_IDENTIFIER = com.louieyin.MacNewFile; + PRODUCT_BUNDLE_IDENTIFIER = com.johli.MacNewFile; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; REGISTER_APP_GROUPS = YES; @@ -438,7 +438,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 10; - DEVELOPMENT_TEAM = 57G5Y8C4XX; + DEVELOPMENT_TEAM = D7Q745NTDC; ENABLE_APP_SANDBOX = YES; ENABLE_INCOMING_NETWORK_CONNECTIONS = NO; ENABLE_OUTGOING_NETWORK_CONNECTIONS = NO; @@ -454,6 +454,8 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = MacNewFileFinderExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = MacNewFileFinderExtension; + INFOPLIST_KEY_LSUIElement = YES; + INFOPLIST_KEY_NSAppleEventsUsageDescription = "This extension needs to control Finder to select newly created files."; INFOPLIST_KEY_NSHumanReadableCopyright = ""; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -461,7 +463,7 @@ "@executable_path/../../../../Frameworks", ); MARKETING_VERSION = 3.0.0; - PRODUCT_BUNDLE_IDENTIFIER = com.louieyin.MacNewFile.MacNewFileFinderExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.johli.MacNewFile.MacNewFileFinderExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; REGISTER_APP_GROUPS = YES; @@ -479,7 +481,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 10; - DEVELOPMENT_TEAM = 57G5Y8C4XX; + DEVELOPMENT_TEAM = D7Q745NTDC; ENABLE_APP_SANDBOX = YES; ENABLE_INCOMING_NETWORK_CONNECTIONS = NO; ENABLE_OUTGOING_NETWORK_CONNECTIONS = NO; @@ -495,6 +497,8 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = MacNewFileFinderExtension/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = MacNewFileFinderExtension; + INFOPLIST_KEY_LSUIElement = YES; + INFOPLIST_KEY_NSAppleEventsUsageDescription = "This extension needs to control Finder to select newly created files."; INFOPLIST_KEY_NSHumanReadableCopyright = ""; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -502,7 +506,7 @@ "@executable_path/../../../../Frameworks", ); MARKETING_VERSION = 3.0.0; - PRODUCT_BUNDLE_IDENTIFIER = com.louieyin.MacNewFile.MacNewFileFinderExtension; + PRODUCT_BUNDLE_IDENTIFIER = com.johli.MacNewFile.MacNewFileFinderExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; REGISTER_APP_GROUPS = YES; diff --git a/MacNewFile/AppDelegate.m b/MacNewFile/AppDelegate.m index 1b01f69..0f87a94 100644 --- a/MacNewFile/AppDelegate.m +++ b/MacNewFile/AppDelegate.m @@ -8,7 +8,7 @@ #import "AppDelegate.h" #import -static NSString * const kAppGroupIdentifier = @"group.com.louieyin.MacNewFile"; +static NSString * const kAppGroupIdentifier = @"group.com.johli.MacNewFile"; // Feature keys for UserDefaults static NSString * const kFeatureCopyPath = @"feature_copy_path"; @@ -237,7 +237,7 @@ - (void)setExtensionEnabled:(BOOL)enabled { @"-e", enabled ? @"use" : @"ignore", @"-i", - @"com.louieyin.MacNewFile.MacNewFileFinderExtension" + @"com.johli.MacNewFile.MacNewFileFinderExtension" ]; [task launch]; [task waitUntilExit]; diff --git a/MacNewFile/MacNewFile.entitlements b/MacNewFile/MacNewFile.entitlements index 6396311..72b5774 100644 --- a/MacNewFile/MacNewFile.entitlements +++ b/MacNewFile/MacNewFile.entitlements @@ -4,7 +4,7 @@ com.apple.security.application-groups - group.com.louieyin.MacNewFile + group.com.johli.MacNewFile diff --git a/MacNewFileFinderExtension/Assets.xcassets/add.imageset/add-dark.png b/MacNewFileFinderExtension/Assets.xcassets/add.imageset/add-dark.png index bf95ebf..be6e368 100644 Binary files a/MacNewFileFinderExtension/Assets.xcassets/add.imageset/add-dark.png and b/MacNewFileFinderExtension/Assets.xcassets/add.imageset/add-dark.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/add.imageset/add.png b/MacNewFileFinderExtension/Assets.xcassets/add.imageset/add.png index c662b6f..aed396a 100644 Binary files a/MacNewFileFinderExtension/Assets.xcassets/add.imageset/add.png and b/MacNewFileFinderExtension/Assets.xcassets/add.imageset/add.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/copy.imageset/copy-dark.png b/MacNewFileFinderExtension/Assets.xcassets/copy.imageset/copy-dark.png index 7f3e457..233c297 100644 Binary files a/MacNewFileFinderExtension/Assets.xcassets/copy.imageset/copy-dark.png and b/MacNewFileFinderExtension/Assets.xcassets/copy.imageset/copy-dark.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/copy.imageset/copy.png b/MacNewFileFinderExtension/Assets.xcassets/copy.imageset/copy.png index f31e25c..b04ac2b 100644 Binary files a/MacNewFileFinderExtension/Assets.xcassets/copy.imageset/copy.png and b/MacNewFileFinderExtension/Assets.xcassets/copy.imageset/copy.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/document.imageset/Contents.json b/MacNewFileFinderExtension/Assets.xcassets/document.imageset/Contents.json index 145d0f9..a3c44c4 100644 --- a/MacNewFileFinderExtension/Assets.xcassets/document.imageset/Contents.json +++ b/MacNewFileFinderExtension/Assets.xcassets/document.imageset/Contents.json @@ -12,7 +12,7 @@ "value" : "dark" } ], - "filename" : "document-dark (1).png", + "filename" : "document-dark.png", "idiom" : "universal", "scale" : "1x" }, diff --git a/MacNewFileFinderExtension/Assets.xcassets/document.imageset/document-dark (1).png b/MacNewFileFinderExtension/Assets.xcassets/document.imageset/document-dark (1).png deleted file mode 100644 index fecb67a..0000000 Binary files a/MacNewFileFinderExtension/Assets.xcassets/document.imageset/document-dark (1).png and /dev/null differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/document.imageset/document-dark.png b/MacNewFileFinderExtension/Assets.xcassets/document.imageset/document-dark.png new file mode 100644 index 0000000..2d51030 Binary files /dev/null and b/MacNewFileFinderExtension/Assets.xcassets/document.imageset/document-dark.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/document.imageset/document.png b/MacNewFileFinderExtension/Assets.xcassets/document.imageset/document.png index 6e0f134..7707062 100644 Binary files a/MacNewFileFinderExtension/Assets.xcassets/document.imageset/document.png and b/MacNewFileFinderExtension/Assets.xcassets/document.imageset/document.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/edit.imageset/edit-dark.png b/MacNewFileFinderExtension/Assets.xcassets/edit.imageset/edit-dark.png index 2843ede..184c4d5 100644 Binary files a/MacNewFileFinderExtension/Assets.xcassets/edit.imageset/edit-dark.png and b/MacNewFileFinderExtension/Assets.xcassets/edit.imageset/edit-dark.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/edit.imageset/edit.png b/MacNewFileFinderExtension/Assets.xcassets/edit.imageset/edit.png index ac3b401..2ed6dcc 100644 Binary files a/MacNewFileFinderExtension/Assets.xcassets/edit.imageset/edit.png and b/MacNewFileFinderExtension/Assets.xcassets/edit.imageset/edit.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/Contents.json b/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/Contents.json index 88c68db..7172eda 100644 --- a/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/Contents.json +++ b/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/Contents.json @@ -1,17 +1,48 @@ { "images" : [ { + "filename" : "excel.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "sheet.png", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "excel-dark.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], "idiom" : "universal", "scale" : "2x" }, { "idiom" : "universal", "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/excel-dark.png b/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/excel-dark.png new file mode 100644 index 0000000..0c3904c Binary files /dev/null and b/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/excel-dark.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/excel.png b/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/excel.png new file mode 100644 index 0000000..82dd153 Binary files /dev/null and b/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/excel.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/sheet.png b/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/sheet.png deleted file mode 100644 index fb50ee7..0000000 Binary files a/MacNewFileFinderExtension/Assets.xcassets/excel.imageset/sheet.png and /dev/null differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/keynote.imageset/Contents.json b/MacNewFileFinderExtension/Assets.xcassets/keynote.imageset/Contents.json index 619dee8..c2dacb5 100644 --- a/MacNewFileFinderExtension/Assets.xcassets/keynote.imageset/Contents.json +++ b/MacNewFileFinderExtension/Assets.xcassets/keynote.imageset/Contents.json @@ -6,12 +6,43 @@ "scale" : "1x" }, { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "keynote-dark.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], "idiom" : "universal", "scale" : "2x" }, { "idiom" : "universal", "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/MacNewFileFinderExtension/Assets.xcassets/keynote.imageset/keynote-dark.png b/MacNewFileFinderExtension/Assets.xcassets/keynote.imageset/keynote-dark.png new file mode 100644 index 0000000..cb31315 Binary files /dev/null and b/MacNewFileFinderExtension/Assets.xcassets/keynote.imageset/keynote-dark.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/keynote.imageset/keynote.png b/MacNewFileFinderExtension/Assets.xcassets/keynote.imageset/keynote.png index fa6cede..24ed654 100644 Binary files a/MacNewFileFinderExtension/Assets.xcassets/keynote.imageset/keynote.png and b/MacNewFileFinderExtension/Assets.xcassets/keynote.imageset/keynote.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/Contents.json b/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/Contents.json index 0fcd2b1..9837e0a 100644 --- a/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/Contents.json +++ b/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/Contents.json @@ -1,17 +1,48 @@ { "images" : [ { - "filename" : "apple.png", + "filename" : "number.png", "idiom" : "universal", "scale" : "1x" }, { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "number-dark.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], "idiom" : "universal", "scale" : "2x" }, { "idiom" : "universal", "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/apple.png b/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/apple.png deleted file mode 100644 index deeae7f..0000000 Binary files a/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/apple.png and /dev/null differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/number-dark.png b/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/number-dark.png new file mode 100644 index 0000000..bf74992 Binary files /dev/null and b/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/number-dark.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/number.png b/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/number.png new file mode 100644 index 0000000..f3e8493 Binary files /dev/null and b/MacNewFileFinderExtension/Assets.xcassets/numbers.imageset/number.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/pages.imageset/Contents.json b/MacNewFileFinderExtension/Assets.xcassets/pages.imageset/Contents.json index ba3a0a8..819dc14 100644 --- a/MacNewFileFinderExtension/Assets.xcassets/pages.imageset/Contents.json +++ b/MacNewFileFinderExtension/Assets.xcassets/pages.imageset/Contents.json @@ -6,12 +6,43 @@ "scale" : "1x" }, { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "pages-dark.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], "idiom" : "universal", "scale" : "2x" }, { "idiom" : "universal", "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/MacNewFileFinderExtension/Assets.xcassets/pages.imageset/pages-dark.png b/MacNewFileFinderExtension/Assets.xcassets/pages.imageset/pages-dark.png new file mode 100644 index 0000000..acc9b42 Binary files /dev/null and b/MacNewFileFinderExtension/Assets.xcassets/pages.imageset/pages-dark.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/pages.imageset/pages.png b/MacNewFileFinderExtension/Assets.xcassets/pages.imageset/pages.png index 6b5918b..ac8b6a6 100644 Binary files a/MacNewFileFinderExtension/Assets.xcassets/pages.imageset/pages.png and b/MacNewFileFinderExtension/Assets.xcassets/pages.imageset/pages.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/Contents.json b/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/Contents.json index 6d85f92..e7c4f87 100644 --- a/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/Contents.json +++ b/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/Contents.json @@ -1,17 +1,48 @@ { "images" : [ { + "filename" : "powerpoint.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "slide.png", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "powerpoint-dark.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], "idiom" : "universal", "scale" : "2x" }, { "idiom" : "universal", "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/powerpoint-dark.png b/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/powerpoint-dark.png new file mode 100644 index 0000000..983c2be Binary files /dev/null and b/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/powerpoint-dark.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/powerpoint.png b/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/powerpoint.png new file mode 100644 index 0000000..d55166b Binary files /dev/null and b/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/powerpoint.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/slide.png b/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/slide.png deleted file mode 100644 index 9f2da0d..0000000 Binary files a/MacNewFileFinderExtension/Assets.xcassets/powerpoint.imageset/slide.png and /dev/null differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/terminal.imageset/terminal-dark.png b/MacNewFileFinderExtension/Assets.xcassets/terminal.imageset/terminal-dark.png index eaed808..1549210 100644 Binary files a/MacNewFileFinderExtension/Assets.xcassets/terminal.imageset/terminal-dark.png and b/MacNewFileFinderExtension/Assets.xcassets/terminal.imageset/terminal-dark.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/terminal.imageset/terminal.png b/MacNewFileFinderExtension/Assets.xcassets/terminal.imageset/terminal.png index 773792a..7add4ec 100644 Binary files a/MacNewFileFinderExtension/Assets.xcassets/terminal.imageset/terminal.png and b/MacNewFileFinderExtension/Assets.xcassets/terminal.imageset/terminal.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/word.imageset/Contents.json b/MacNewFileFinderExtension/Assets.xcassets/word.imageset/Contents.json index 94eba35..4410c4b 100644 --- a/MacNewFileFinderExtension/Assets.xcassets/word.imageset/Contents.json +++ b/MacNewFileFinderExtension/Assets.xcassets/word.imageset/Contents.json @@ -1,17 +1,48 @@ { "images" : [ { + "filename" : "word.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "word-processor.png", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "word-dark.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], "idiom" : "universal", "scale" : "2x" }, { "idiom" : "universal", "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "scale" : "3x" } ], "info" : { diff --git a/MacNewFileFinderExtension/Assets.xcassets/word.imageset/word-processor.png b/MacNewFileFinderExtension/Assets.xcassets/word.imageset/word-processor.png deleted file mode 100644 index 6bb03ee..0000000 Binary files a/MacNewFileFinderExtension/Assets.xcassets/word.imageset/word-processor.png and /dev/null differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/word.imageset/word.png b/MacNewFileFinderExtension/Assets.xcassets/word.imageset/word.png new file mode 100644 index 0000000..9964432 Binary files /dev/null and b/MacNewFileFinderExtension/Assets.xcassets/word.imageset/word.png differ diff --git a/MacNewFileFinderExtension/Assets.xcassets/word.imageset/work-dark.png b/MacNewFileFinderExtension/Assets.xcassets/word.imageset/work-dark.png new file mode 100644 index 0000000..78085b8 Binary files /dev/null and b/MacNewFileFinderExtension/Assets.xcassets/word.imageset/work-dark.png differ diff --git a/MacNewFileFinderExtension/FinderSync.m b/MacNewFileFinderExtension/FinderSync.m index 19220df..2a088c0 100644 --- a/MacNewFileFinderExtension/FinderSync.m +++ b/MacNewFileFinderExtension/FinderSync.m @@ -27,6 +27,109 @@ @interface FinderSync () @implementation FinderSync +/// Finder draws menu icons in its own process; multi-appearance `NSImage`s from the asset catalog +/// can resolve incorrectly. Draw the catalog image under the target system appearance and keep a +/// single bitmap representation so light/dark assets always match Settings ▸ Appearance. ++ (NSImage *)singleLayerMenuImageFromCatalogImage:(NSImage *)image { + if (!image) { + return nil; + } + NSSize size = image.size; + if (size.width <= 0 || size.height <= 0) { + return image; + } + + CGFloat scale = 2.0; + NSScreen *screen = [NSScreen mainScreen]; + if (screen) { + scale = screen.backingScaleFactor; + } + + NSInteger pixelW = (NSInteger)ceil(size.width * scale); + NSInteger pixelH = (NSInteger)ceil(size.height * scale); + if (pixelW < 1) { + pixelW = 1; + } + if (pixelH < 1) { + pixelH = 1; + } + + NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL + pixelsWide:pixelW + pixelsHigh:pixelH + bitsPerSample:8 + samplesPerPixel:4 + hasAlpha:YES + isPlanar:NO + colorSpaceName:NSCalibratedRGBColorSpace + bytesPerRow:pixelW * 4 + bitsPerPixel:32]; + rep.size = size; + + NSGraphicsContext *ctx = [NSGraphicsContext graphicsContextWithBitmapImageRep:rep]; + ctx.imageInterpolation = NSImageInterpolationHigh; + [NSGraphicsContext saveGraphicsState]; + [NSGraphicsContext setCurrentContext:ctx]; + CGContextRef cg = ctx.CGContext; + if (cg) { + CGContextClearRect(cg, CGRectMake(0, 0, pixelW, pixelH)); + } + [image drawInRect:NSMakeRect(0, 0, size.width, size.height) + fromRect:NSZeroRect + operation:NSCompositingOperationSourceOver + fraction:1.0 + respectFlipped:NO + hints:nil]; + [NSGraphicsContext restoreGraphicsState]; + + NSImage *flat = [[NSImage alloc] initWithSize:size]; + [flat addRepresentation:rep]; + return flat; +} + +/// Finder Sync runs in an XPC process; `NSAppearance` here often does not match the Finder window. +/// Menu images are handed to Finder and may be flattened, so asset-catalog dark/light must be +/// resolved explicitly using the user's system appearance. +- (BOOL)systemAppearanceIsDark { + id style = [[[NSUserDefaults standardUserDefaults] persistentDomainForName:NSGlobalDomain] objectForKey:@"AppleInterfaceStyle"]; + if ([style isKindOfClass:[NSString class]] && [(NSString *)style length] > 0) { + return [(NSString *)style caseInsensitiveCompare:@"Dark"] == NSOrderedSame; + } + if (@available(macOS 10.14, *)) { + NSAppearance *app = NSApp.effectiveAppearance; + if (app) { + NSAppearanceName match = [app bestMatchFromAppearancesWithNames:@[NSAppearanceNameAqua, NSAppearanceNameDarkAqua]]; + return [match isEqualToString:NSAppearanceNameDarkAqua]; + } + } + return NO; +} + +- (NSImage *)contextMenuImageNamed:(NSString *)name { + NSBundle *bundle = [NSBundle bundleForClass:[FinderSync class]]; + NSImage *catalog = [bundle imageForResource:name]; + if (!catalog) { + catalog = [NSImage imageNamed:name]; + } + if (!catalog) { + return nil; + } + + BOOL dark = [self systemAppearanceIsDark]; + if (@available(macOS 10.14, *)) { + NSAppearanceName appearanceName = dark ? NSAppearanceNameDarkAqua : NSAppearanceNameAqua; + NSAppearance *appearance = [NSAppearance appearanceNamed:appearanceName]; + if (appearance) { + __block NSImage *flat = nil; + [appearance performAsCurrentDrawingAppearance:^{ + flat = [FinderSync singleLayerMenuImageFromCatalogImage:catalog]; + }]; + return flat ?: catalog; + } + } + return catalog; +} + - (instancetype)init { self = [super init]; @@ -84,18 +187,14 @@ - (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu { // Add "Copy Path" menu item (if enabled) if ([self isFeatureEnabled:kFeatureCopyPath]) { NSMenuItem *copyPathItem = [[NSMenuItem alloc] initWithTitle:@"Copy Path" action:@selector(copyPathToClipboard:) keyEquivalent:@""]; - NSImage *copyIcon = [NSImage imageNamed:@"copy"]; - copyIcon.template = YES; - copyPathItem.image = copyIcon; + copyPathItem.image = [self contextMenuImageNamed:@"copy"]; [menu addItem:copyPathItem]; } // Add "Open Terminal" menu item (if enabled) if ([self isFeatureEnabled:kFeatureOpenTerminal]) { NSMenuItem *openTerminalItem = [[NSMenuItem alloc] initWithTitle:@"Open New Terminal" action:@selector(openTerminalAtPath:) keyEquivalent:@""]; - NSImage *terminalIcon = [NSImage imageNamed:@"terminal"]; - terminalIcon.template = YES; - openTerminalItem.image = terminalIcon; + openTerminalItem.image = [self contextMenuImageNamed:@"terminal"]; [menu addItem:openTerminalItem]; } @@ -105,72 +204,56 @@ - (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu { // Add "New Text File" to submenu (if enabled) if ([self isFeatureEnabled:kFeatureTextFile]) { NSMenuItem *newTextItem = [[NSMenuItem alloc] initWithTitle:@"Text File" action:@selector(createNewTextFile:) keyEquivalent:@""]; - NSImage *textIcon = [NSImage imageNamed:@"edit"]; - textIcon.template = YES; - newTextItem.image = textIcon; + newTextItem.image = [self contextMenuImageNamed:@"edit"]; [submenu addItem:newTextItem]; } // Add "New Markdown File" to submenu (if enabled) if ([self isFeatureEnabled:kFeatureMarkdownFile]) { NSMenuItem *newMarkdownItem = [[NSMenuItem alloc] initWithTitle:@"Markdown File" action:@selector(createNewMarkdownFile:) keyEquivalent:@""]; - NSImage *markdownIcon = [NSImage imageNamed:@"document"]; - markdownIcon.template = YES; - newMarkdownItem.image = markdownIcon; + newMarkdownItem.image = [self contextMenuImageNamed:@"document"]; [submenu addItem:newMarkdownItem]; } // Add "New Microsoft Word Document" to submenu (if enabled) if ([self isFeatureEnabled:kFeatureWordDocument]) { NSMenuItem *newWordItem = [[NSMenuItem alloc] initWithTitle:@"Microsoft Word Document" action:@selector(createNewWordDocument:) keyEquivalent:@""]; - NSImage *wordIcon = [NSImage imageNamed:@"word"]; - wordIcon.template = YES; - newWordItem.image = wordIcon; + newWordItem.image = [self contextMenuImageNamed:@"word"]; [submenu addItem:newWordItem]; } // Add "New Microsoft Excel Spreadsheet" to submenu (if enabled) if ([self isFeatureEnabled:kFeatureExcelSpreadsheet]) { NSMenuItem *newExcelItem = [[NSMenuItem alloc] initWithTitle:@"Microsoft Excel Spreadsheet" action:@selector(createNewExcelDocument:) keyEquivalent:@""]; - NSImage *excelIcon = [NSImage imageNamed:@"excel"]; - excelIcon.template = YES; - newExcelItem.image = excelIcon; + newExcelItem.image = [self contextMenuImageNamed:@"excel"]; [submenu addItem:newExcelItem]; } // Add "New Microsoft PowerPoint Presentation" to submenu (if enabled) if ([self isFeatureEnabled:kFeaturePowerPointPresentation]) { NSMenuItem *newPowerPointItem = [[NSMenuItem alloc] initWithTitle:@"Microsoft PowerPoint Presentation" action:@selector(createNewPowerPointDocument:) keyEquivalent:@""]; - NSImage *powerPointIcon = [NSImage imageNamed:@"powerpoint"]; - powerPointIcon.template = YES; - newPowerPointItem.image = powerPointIcon; + newPowerPointItem.image = [self contextMenuImageNamed:@"powerpoint"]; [submenu addItem:newPowerPointItem]; } // Add "New Pages Document" to submenu (if enabled) if ([self isFeatureEnabled:kFeaturePagesDocument]) { NSMenuItem *newPagesItem = [[NSMenuItem alloc] initWithTitle:@"Pages Document" action:@selector(createNewPagesDocument:) keyEquivalent:@""]; - NSImage *pagesIcon = [NSImage imageNamed:@"pages"]; - pagesIcon.template = YES; - newPagesItem.image = pagesIcon; + newPagesItem.image = [self contextMenuImageNamed:@"pages"]; [submenu addItem:newPagesItem]; } // Add "New Numbers Spreadsheet" to submenu (if enabled) if ([self isFeatureEnabled:kFeatureNumbersSpreadsheet]) { NSMenuItem *newNumbersItem = [[NSMenuItem alloc] initWithTitle:@"Numbers Spreadsheet" action:@selector(createNewNumbersDocument:) keyEquivalent:@""]; - NSImage *numbersIcon = [NSImage imageNamed:@"numbers"]; - numbersIcon.template = YES; - newNumbersItem.image = numbersIcon; + newNumbersItem.image = [self contextMenuImageNamed:@"numbers"]; [submenu addItem:newNumbersItem]; } // Add "New Keynote Presentation" to submenu (if enabled) if ([self isFeatureEnabled:kFeatureKeynotePresentation]) { NSMenuItem *newKeynoteItem = [[NSMenuItem alloc] initWithTitle:@"Keynote Presentation" action:@selector(createNewKeynoteDocument:) keyEquivalent:@""]; - NSImage *keynoteIcon = [NSImage imageNamed:@"keynote"]; - keynoteIcon.template = YES; - newKeynoteItem.image = keynoteIcon; + newKeynoteItem.image = [self contextMenuImageNamed:@"keynote"]; [submenu addItem:newKeynoteItem]; } @@ -183,8 +266,7 @@ - (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu { [menu addItem:newItem]; } else if (submenu.numberOfItems > 1) { NSMenuItem *mainItem = [[NSMenuItem alloc] initWithTitle:@"New File" action:nil keyEquivalent:@""]; - NSImage *mainIcon = [NSImage imageNamed:@"add"]; - mainItem.image = mainIcon; + mainItem.image = [self contextMenuImageNamed:@"add"]; mainItem.submenu = submenu; [menu addItem:mainItem]; } diff --git a/MacNewFileFinderExtension/Info.plist b/MacNewFileFinderExtension/Info.plist index f9bc93a..b1f3f6e 100644 --- a/MacNewFileFinderExtension/Info.plist +++ b/MacNewFileFinderExtension/Info.plist @@ -2,18 +2,14 @@ - LSUIElement - - NSAppleEventsUsageDescription - This extension needs to control Finder to select newly created files. - NSExtension - - NSExtensionAttributes - - NSExtensionPointIdentifier - com.apple.FinderSync - NSExtensionPrincipalClass - FinderSync - + NSExtension + + NSExtensionAttributes + + NSExtensionPointIdentifier + com.apple.FinderSync + NSExtensionPrincipalClass + FinderSync + diff --git a/MacNewFileFinderExtension/MacNewFileFinderExtension.entitlements b/MacNewFileFinderExtension/MacNewFileFinderExtension.entitlements index 7d61eb9..383c869 100644 --- a/MacNewFileFinderExtension/MacNewFileFinderExtension.entitlements +++ b/MacNewFileFinderExtension/MacNewFileFinderExtension.entitlements @@ -6,7 +6,7 @@ com.apple.security.application-groups - group.com.louieyin.MacNewFile + group.com.johli.MacNewFile com.apple.security.automation.apple-events