From 1bcdc4dae229f41e2b6b8391c1530ed387da246c Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Mon, 8 Mar 2021 14:25:39 +0800 Subject: [PATCH 01/12] build: add XCode setup --- Makefile | 6 + Safari/.gitignore | 28 + .../Gitako_Extension.entitlements | 10 + Safari/Gitako/Gitako Extension/Info.plist | 33 ++ .../SafariWebExtensionHandler.swift | 9 + .../Gitako/Gitako.xcodeproj/project.pbxproj | 531 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + Safari/Gitako/Gitako/AppDelegate.swift | 18 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 58 ++ .../Gitako/Assets.xcassets/Contents.json | 6 + .../Gitako/Gitako/Base.lproj/Main.storyboard | 168 ++++++ Safari/Gitako/Gitako/Gitako.entitlements | 10 + Safari/Gitako/Gitako/Info.plist | 30 + Safari/Gitako/Gitako/ViewController.swift | 44 ++ 16 files changed, 977 insertions(+) create mode 100644 Safari/.gitignore create mode 100644 Safari/Gitako/Gitako Extension/Gitako_Extension.entitlements create mode 100644 Safari/Gitako/Gitako Extension/Info.plist create mode 100644 Safari/Gitako/Gitako Extension/SafariWebExtensionHandler.swift create mode 100644 Safari/Gitako/Gitako.xcodeproj/project.pbxproj create mode 100644 Safari/Gitako/Gitako.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Safari/Gitako/Gitako.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Safari/Gitako/Gitako/AppDelegate.swift create mode 100644 Safari/Gitako/Gitako/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Safari/Gitako/Gitako/Assets.xcassets/Contents.json create mode 100644 Safari/Gitako/Gitako/Base.lproj/Main.storyboard create mode 100644 Safari/Gitako/Gitako/Gitako.entitlements create mode 100644 Safari/Gitako/Gitako/Info.plist create mode 100644 Safari/Gitako/Gitako/ViewController.swift diff --git a/Makefile b/Makefile index 9fcf4dc..df79d0c 100755 --- a/Makefile +++ b/Makefile @@ -8,6 +8,10 @@ build: rm -rf dist yarn build +safari: + rm -rf Safari/Gitako/Gitako\ Extension/Resources/* + cd dist && cp -r . ../Safari/Gitako/Gitako\ Extension/Resources + test: yarn test @@ -45,3 +49,5 @@ compress-env: compress-icons-into-source-for-mz-review: zip -r dist/source-$(FULL_VERSION).zip vscode-icons/icons + +.PHONY: safari diff --git a/Safari/.gitignore b/Safari/.gitignore new file mode 100644 index 0000000..074d44a --- /dev/null +++ b/Safari/.gitignore @@ -0,0 +1,28 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) +*.xcscmblueprint +*.xccheckout + +## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) +build/ +DerivedData/ +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Gcc Patch +/*.gcno + +Resources diff --git a/Safari/Gitako/Gitako Extension/Gitako_Extension.entitlements b/Safari/Gitako/Gitako Extension/Gitako_Extension.entitlements new file mode 100644 index 0000000..f2ef3ae --- /dev/null +++ b/Safari/Gitako/Gitako Extension/Gitako_Extension.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + + diff --git a/Safari/Gitako/Gitako Extension/Info.plist b/Safari/Gitako/Gitako Extension/Info.plist new file mode 100644 index 0000000..b3c30e9 --- /dev/null +++ b/Safari/Gitako/Gitako Extension/Info.plist @@ -0,0 +1,33 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Gitako Extension + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSExtension + + NSExtensionPointIdentifier + com.apple.Safari.web-extension + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).SafariWebExtensionHandler + + + diff --git a/Safari/Gitako/Gitako Extension/SafariWebExtensionHandler.swift b/Safari/Gitako/Gitako Extension/SafariWebExtensionHandler.swift new file mode 100644 index 0000000..b5209a0 --- /dev/null +++ b/Safari/Gitako/Gitako Extension/SafariWebExtensionHandler.swift @@ -0,0 +1,9 @@ +import SafariServices +import os.log + +let SFExtensionMessageKey = "message" + +class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling { + func beginRequest(with context: NSExtensionContext) { + } +} diff --git a/Safari/Gitako/Gitako.xcodeproj/project.pbxproj b/Safari/Gitako/Gitako.xcodeproj/project.pbxproj new file mode 100644 index 0000000..f4c6a25 --- /dev/null +++ b/Safari/Gitako/Gitako.xcodeproj/project.pbxproj @@ -0,0 +1,531 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D24E2F0E25F51A12000E12CC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D24E2F0D25F51A12000E12CC /* AppDelegate.swift */; }; + D24E2F1125F51A12000E12CC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F0F25F51A12000E12CC /* Main.storyboard */; }; + D24E2F1325F51A12000E12CC /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D24E2F1225F51A12000E12CC /* ViewController.swift */; }; + D24E2F1525F51A12000E12CC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F1425F51A12000E12CC /* Assets.xcassets */; }; + D24E2F1C25F51A13000E12CC /* Gitako Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = D24E2F1B25F51A13000E12CC /* Gitako Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + D24E2F2125F51A13000E12CC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D24E2F2025F51A13000E12CC /* Cocoa.framework */; }; + D24E2F2425F51A13000E12CC /* SafariWebExtensionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D24E2F2325F51A13000E12CC /* SafariWebExtensionHandler.swift */; }; + D24E2F2B25F51A13000E12CC /* manifest.json in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F2A25F51A13000E12CC /* manifest.json */; }; + D24E2F2D25F51A13000E12CC /* background.js in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F2C25F51A13000E12CC /* background.js */; }; + D24E2F2F25F51A13000E12CC /* content.js in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F2E25F51A13000E12CC /* content.js */; }; + D24E2F4A25F52669000E12CC /* content.css in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F4525F52669000E12CC /* content.css */; }; + D24E2F4B25F52669000E12CC /* browser-polyfill.js in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F4625F52669000E12CC /* browser-polyfill.js */; }; + D24E2F4C25F52669000E12CC /* firefox-shim.js in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F4825F52669000E12CC /* firefox-shim.js */; }; + D24E2F4D25F52669000E12CC /* icons in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F4925F52669000E12CC /* icons */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + D24E2F1D25F51A13000E12CC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D24E2F0125F51A12000E12CC /* Project object */; + proxyType = 1; + remoteGlobalIDString = D24E2F1A25F51A13000E12CC; + remoteInfo = "Gitako Extension"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + D24E2F3D25F51A13000E12CC /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + D24E2F1C25F51A13000E12CC /* Gitako Extension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + D24E2F0925F51A12000E12CC /* Gitako.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Gitako.app; sourceTree = BUILT_PRODUCTS_DIR; }; + D24E2F0C25F51A12000E12CC /* Gitako.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Gitako.entitlements; sourceTree = ""; }; + D24E2F0D25F51A12000E12CC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + D24E2F1025F51A12000E12CC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + D24E2F1225F51A12000E12CC /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + D24E2F1425F51A12000E12CC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + D24E2F1625F51A12000E12CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D24E2F1B25F51A13000E12CC /* Gitako Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Gitako Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + D24E2F2025F51A13000E12CC /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + D24E2F2325F51A13000E12CC /* SafariWebExtensionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariWebExtensionHandler.swift; sourceTree = ""; }; + D24E2F2A25F51A13000E12CC /* manifest.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = manifest.json; sourceTree = ""; }; + D24E2F2C25F51A13000E12CC /* background.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = background.js; sourceTree = ""; }; + D24E2F2E25F51A13000E12CC /* content.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = content.js; sourceTree = ""; }; + D24E2F3625F51A13000E12CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D24E2F3725F51A13000E12CC /* Gitako_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Gitako_Extension.entitlements; sourceTree = ""; }; + D24E2F4325F52669000E12CC /* content.css.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = content.css.map; sourceTree = ""; }; + D24E2F4425F52669000E12CC /* content.js.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = content.js.map; sourceTree = ""; }; + D24E2F4525F52669000E12CC /* content.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = content.css; sourceTree = ""; }; + D24E2F4625F52669000E12CC /* browser-polyfill.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "browser-polyfill.js"; sourceTree = ""; }; + D24E2F4725F52669000E12CC /* background.js.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = background.js.map; sourceTree = ""; }; + D24E2F4825F52669000E12CC /* firefox-shim.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "firefox-shim.js"; sourceTree = ""; }; + D24E2F4925F52669000E12CC /* icons */ = {isa = PBXFileReference; lastKnownFileType = folder; path = icons; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D24E2F0625F51A12000E12CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D24E2F1825F51A13000E12CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D24E2F2125F51A13000E12CC /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D24E2F0025F51A12000E12CC = { + isa = PBXGroup; + children = ( + D24E2F0B25F51A12000E12CC /* Gitako */, + D24E2F2225F51A13000E12CC /* Gitako Extension */, + D24E2F1F25F51A13000E12CC /* Frameworks */, + D24E2F0A25F51A12000E12CC /* Products */, + ); + sourceTree = ""; + }; + D24E2F0A25F51A12000E12CC /* Products */ = { + isa = PBXGroup; + children = ( + D24E2F0925F51A12000E12CC /* Gitako.app */, + D24E2F1B25F51A13000E12CC /* Gitako Extension.appex */, + ); + name = Products; + sourceTree = ""; + }; + D24E2F0B25F51A12000E12CC /* Gitako */ = { + isa = PBXGroup; + children = ( + D24E2F0C25F51A12000E12CC /* Gitako.entitlements */, + D24E2F0D25F51A12000E12CC /* AppDelegate.swift */, + D24E2F0F25F51A12000E12CC /* Main.storyboard */, + D24E2F1225F51A12000E12CC /* ViewController.swift */, + D24E2F1425F51A12000E12CC /* Assets.xcassets */, + D24E2F1625F51A12000E12CC /* Info.plist */, + ); + path = Gitako; + sourceTree = ""; + }; + D24E2F1F25F51A13000E12CC /* Frameworks */ = { + isa = PBXGroup; + children = ( + D24E2F2025F51A13000E12CC /* Cocoa.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + D24E2F2225F51A13000E12CC /* Gitako Extension */ = { + isa = PBXGroup; + children = ( + D24E2F2325F51A13000E12CC /* SafariWebExtensionHandler.swift */, + D24E2F3625F51A13000E12CC /* Info.plist */, + D24E2F3725F51A13000E12CC /* Gitako_Extension.entitlements */, + D24E2F2525F51A13000E12CC /* Resources */, + ); + path = "Gitako Extension"; + sourceTree = ""; + }; + D24E2F2525F51A13000E12CC /* Resources */ = { + isa = PBXGroup; + children = ( + D24E2F4725F52669000E12CC /* background.js.map */, + D24E2F4625F52669000E12CC /* browser-polyfill.js */, + D24E2F4525F52669000E12CC /* content.css */, + D24E2F4325F52669000E12CC /* content.css.map */, + D24E2F4425F52669000E12CC /* content.js.map */, + D24E2F4825F52669000E12CC /* firefox-shim.js */, + D24E2F4925F52669000E12CC /* icons */, + D24E2F2A25F51A13000E12CC /* manifest.json */, + D24E2F2C25F51A13000E12CC /* background.js */, + D24E2F2E25F51A13000E12CC /* content.js */, + ); + path = Resources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + D24E2F0825F51A12000E12CC /* Gitako */ = { + isa = PBXNativeTarget; + buildConfigurationList = D24E2F3E25F51A13000E12CC /* Build configuration list for PBXNativeTarget "Gitako" */; + buildPhases = ( + D24E2F0525F51A12000E12CC /* Sources */, + D24E2F0625F51A12000E12CC /* Frameworks */, + D24E2F0725F51A12000E12CC /* Resources */, + D24E2F3D25F51A13000E12CC /* Embed App Extensions */, + ); + buildRules = ( + ); + dependencies = ( + D24E2F1E25F51A13000E12CC /* PBXTargetDependency */, + ); + name = Gitako; + productName = Gitako; + productReference = D24E2F0925F51A12000E12CC /* Gitako.app */; + productType = "com.apple.product-type.application"; + }; + D24E2F1A25F51A13000E12CC /* Gitako Extension */ = { + isa = PBXNativeTarget; + buildConfigurationList = D24E2F3A25F51A13000E12CC /* Build configuration list for PBXNativeTarget "Gitako Extension" */; + buildPhases = ( + D24E2F1725F51A13000E12CC /* Sources */, + D24E2F1825F51A13000E12CC /* Frameworks */, + D24E2F1925F51A13000E12CC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Gitako Extension"; + productName = "Gitako Extension"; + productReference = D24E2F1B25F51A13000E12CC /* Gitako Extension.appex */; + productType = "com.apple.product-type.app-extension"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D24E2F0125F51A12000E12CC /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1240; + LastUpgradeCheck = 1240; + TargetAttributes = { + D24E2F0825F51A12000E12CC = { + CreatedOnToolsVersion = 12.4; + }; + D24E2F1A25F51A13000E12CC = { + CreatedOnToolsVersion = 12.4; + }; + }; + }; + buildConfigurationList = D24E2F0425F51A12000E12CC /* Build configuration list for PBXProject "Gitako" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = D24E2F0025F51A12000E12CC; + productRefGroup = D24E2F0A25F51A12000E12CC /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D24E2F0825F51A12000E12CC /* Gitako */, + D24E2F1A25F51A13000E12CC /* Gitako Extension */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D24E2F0725F51A12000E12CC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D24E2F1525F51A12000E12CC /* Assets.xcassets in Resources */, + D24E2F1125F51A12000E12CC /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D24E2F1925F51A13000E12CC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D24E2F4B25F52669000E12CC /* browser-polyfill.js in Resources */, + D24E2F4A25F52669000E12CC /* content.css in Resources */, + D24E2F2D25F51A13000E12CC /* background.js in Resources */, + D24E2F2B25F51A13000E12CC /* manifest.json in Resources */, + D24E2F4C25F52669000E12CC /* firefox-shim.js in Resources */, + D24E2F4D25F52669000E12CC /* icons in Resources */, + D24E2F2F25F51A13000E12CC /* content.js in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D24E2F0525F51A12000E12CC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D24E2F1325F51A12000E12CC /* ViewController.swift in Sources */, + D24E2F0E25F51A12000E12CC /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D24E2F1725F51A13000E12CC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D24E2F2425F51A13000E12CC /* SafariWebExtensionHandler.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + D24E2F1E25F51A13000E12CC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = D24E2F1A25F51A13000E12CC /* Gitako Extension */; + targetProxy = D24E2F1D25F51A13000E12CC /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + D24E2F0F25F51A12000E12CC /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + D24E2F1025F51A12000E12CC /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + D24E2F3825F51A13000E12CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + D24E2F3925F51A13000E12CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + D24E2F3B25F51A13000E12CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "Gitako Extension/Gitako_Extension.entitlements"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = "Gitako Extension/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_BUNDLE_IDENTIFIER = enixcoda.Gitako.Extension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + D24E2F3C25F51A13000E12CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = "Gitako Extension/Gitako_Extension.entitlements"; + CODE_SIGN_STYLE = Automatic; + INFOPLIST_FILE = "Gitako Extension/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_BUNDLE_IDENTIFIER = enixcoda.Gitako.Extension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + D24E2F3F25F51A13000E12CC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Gitako/Gitako.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Gitako/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_BUNDLE_IDENTIFIER = enixcoda.Gitako; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + D24E2F4025F51A13000E12CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Gitako/Gitako.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Gitako/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_BUNDLE_IDENTIFIER = enixcoda.Gitako; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D24E2F0425F51A12000E12CC /* Build configuration list for PBXProject "Gitako" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D24E2F3825F51A13000E12CC /* Debug */, + D24E2F3925F51A13000E12CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D24E2F3A25F51A13000E12CC /* Build configuration list for PBXNativeTarget "Gitako Extension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D24E2F3B25F51A13000E12CC /* Debug */, + D24E2F3C25F51A13000E12CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D24E2F3E25F51A13000E12CC /* Build configuration list for PBXNativeTarget "Gitako" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D24E2F3F25F51A13000E12CC /* Debug */, + D24E2F4025F51A13000E12CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D24E2F0125F51A12000E12CC /* Project object */; +} diff --git a/Safari/Gitako/Gitako.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Safari/Gitako/Gitako.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Safari/Gitako/Gitako.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Safari/Gitako/Gitako.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Safari/Gitako/Gitako.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Safari/Gitako/Gitako.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Safari/Gitako/Gitako/AppDelegate.swift b/Safari/Gitako/Gitako/AppDelegate.swift new file mode 100644 index 0000000..6222982 --- /dev/null +++ b/Safari/Gitako/Gitako/AppDelegate.swift @@ -0,0 +1,18 @@ +import Cocoa + +@main +class AppDelegate: NSObject, NSApplicationDelegate { + + func applicationDidFinishLaunching(_ notification: Notification) { + // Insert code here to initialize your application + } + + func applicationWillTerminate(_ notification: Notification) { + // Insert code here to tear down your application + } + + func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + +} diff --git a/Safari/Gitako/Gitako/Assets.xcassets/AccentColor.colorset/Contents.json b/Safari/Gitako/Gitako/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/Safari/Gitako/Gitako/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Contents.json b/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..3f00db4 --- /dev/null +++ b/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,58 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Safari/Gitako/Gitako/Assets.xcassets/Contents.json b/Safari/Gitako/Gitako/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Safari/Gitako/Gitako/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Safari/Gitako/Gitako/Base.lproj/Main.storyboard b/Safari/Gitako/Gitako/Base.lproj/Main.storyboard new file mode 100644 index 0000000..b7037ff --- /dev/null +++ b/Safari/Gitako/Gitako/Base.lproj/Main.storyboard @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Safari/Gitako/Gitako/Gitako.entitlements b/Safari/Gitako/Gitako/Gitako.entitlements new file mode 100644 index 0000000..f2ef3ae --- /dev/null +++ b/Safari/Gitako/Gitako/Gitako.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + + diff --git a/Safari/Gitako/Gitako/Info.plist b/Safari/Gitako/Gitako/Info.plist new file mode 100644 index 0000000..cfbbdb7 --- /dev/null +++ b/Safari/Gitako/Gitako/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSMainStoryboardFile + Main + NSPrincipalClass + NSApplication + + diff --git a/Safari/Gitako/Gitako/ViewController.swift b/Safari/Gitako/Gitako/ViewController.swift new file mode 100644 index 0000000..ce019ae --- /dev/null +++ b/Safari/Gitako/Gitako/ViewController.swift @@ -0,0 +1,44 @@ +import Cocoa +import SafariServices.SFSafariApplication +import SafariServices.SFSafariExtensionManager + +let appName = "Gitako" +let extensionBundleIdentifier = "enixcoda.Gitako.Extension" + +class ViewController: NSViewController { + + @IBOutlet var appNameLabel: NSTextField! + + override func viewDidLoad() { + super.viewDidLoad() + self.appNameLabel.stringValue = appName + SFSafariExtensionManager.getStateOfSafariExtension(withIdentifier: extensionBundleIdentifier) { (state, error) in + guard let state = state, error == nil else { + // Insert code to inform the user that something went wrong. + return + } + + DispatchQueue.main.async { + if (state.isEnabled) { + self.appNameLabel.stringValue = "\(appName)'s extension is currently on." + } else { + self.appNameLabel.stringValue = "\(appName)'s extension is currently off. You can turn it on in Safari Extensions preferences." + } + } + } + } + + @IBAction func openSafariExtensionPreferences(_ sender: AnyObject?) { + SFSafariApplication.showPreferencesForExtension(withIdentifier: extensionBundleIdentifier) { error in + guard error == nil else { + // Insert code to inform the user that something went wrong. + return + } + + DispatchQueue.main.async { + NSApplication.shared.terminate(nil) + } + } + } + +} From 7dd0f4d191d0fa24438034502e10b0aa7c5232b3 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Mon, 8 Mar 2021 14:24:03 +0800 Subject: [PATCH 02/12] refactor: support path mode in Safari --- src/components/Highlight.tsx | 17 ++++++++++------ src/components/searchModes/fuzzyMode.tsx | 25 +++++++++++++++++++----- src/components/searchModes/regexMode.tsx | 13 +++--------- src/utils/general.ts | 19 ++++++++---------- 4 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/components/Highlight.tsx b/src/components/Highlight.tsx index 083630d..820a294 100644 --- a/src/components/Highlight.tsx +++ b/src/components/Highlight.tsx @@ -1,18 +1,23 @@ import * as React from 'react' -export function Highlight(props: { text: string; match?: RegExp }) { +export function Highlight(props: { text: string; match?: RegExp | string }) { const { text, match } = props const $match = React.useMemo(() => { - if (match instanceof RegExp) { - if (match.flags.includes('g')) return match - return new RegExp(match.source, 'g' + match.flags) + if (match) { + if (match instanceof RegExp) { + if (match.flags.includes('g')) return match + return new RegExp(match.source, 'g' + match.flags) + } + return new RegExp(match, 'g') } return null }, [match]) - if (!($match instanceof RegExp) || typeof text !== 'string') return <>{text} + if (!$match) return <>{text} - const matchedPieces = Array.from(text.matchAll($match)).map(([text]) => text) + const matchedPieces = Array.from(text.matchAll($match)).map( + ([text, highlightText = text]) => highlightText, + ) const preservedPieces = text.split($match) const content = [] diff --git a/src/components/searchModes/fuzzyMode.tsx b/src/components/searchModes/fuzzyMode.tsx index 9aa7f8d..1bcbe9a 100644 --- a/src/components/searchModes/fuzzyMode.tsx +++ b/src/components/searchModes/fuzzyMode.tsx @@ -2,7 +2,6 @@ import * as React from 'react' import { cx } from 'utils/cx' import { hasUpperCase } from 'utils/general' import { ModeShape } from '.' -import { Highlight } from '../Highlight' export const fuzzyMode: ModeShape = { getSearchParams(searchKey) { @@ -26,13 +25,13 @@ export const fuzzyMode: ModeShape = { let progress = 0 return chunks.map((chunk, index, chunks) => { const chunkIndexes = indexes.filter(i => i >= progress && i < chunk.length + progress) - const regexp = chunkIndexes.length - ? new RegExp(chunkIndexes.map(i => `(?<=^.{${i - progress}}).`).join('|')) - : undefined + + const $indexes = chunkIndexes.length ? chunkIndexes.map(i => i - progress) : undefined + progress += chunk.length + 1 return ( - + ) }) @@ -61,3 +60,19 @@ function fuzzyMatchIndexes(input: string, sample: string, shift: number = 0) { } return indexes } + +function Highlight(props: { text: string; match?: number[] }) { + const { text, match } = props + + if (!match?.length) return <>{text} + + return ( + <> + {text + .split('') + .map((char, i) => + match.includes(i) ? {char} : {char}, + )} + + ) +} diff --git a/src/components/searchModes/regexMode.tsx b/src/components/searchModes/regexMode.tsx index 6de1b3b..bfd3b39 100644 --- a/src/components/searchModes/regexMode.tsx +++ b/src/components/searchModes/regexMode.tsx @@ -1,29 +1,22 @@ import * as React from 'react' import { cx } from 'utils/cx' -import { hasUpperCase, isValidRegexpSource, searchKeyToRegexp } from 'utils/general' +import { searchKeyToRegexp } from 'utils/general' import { ModeShape } from '.' import { Highlight } from '../Highlight' export const regexMode: ModeShape = { getSearchParams(searchKey) { - if (!searchKey) return null - const regexp = searchKeyToRegexp(searchKey) if (regexp) { - const matchNode = (node: TreeNode) => regexp.test(node.name) - return { - matchNode, + matchNode: node => regexp.test(node.name), } } return null }, renderNodeLabelText(node, searchKey) { - const regex = - searchKey && isValidRegexpSource(searchKey) - ? new RegExp(searchKey, 'g' + (hasUpperCase(searchKey) ? '' : 'i')) - : undefined + const regex = searchKeyToRegexp(searchKey) || undefined const { name } = node return name.includes('/') ? ( name.split('/').map((chunk, index, chunks) => ( diff --git a/src/utils/general.ts b/src/utils/general.ts index 9bafe4e..9d31607 100644 --- a/src/utils/general.ts +++ b/src/utils/general.ts @@ -146,13 +146,7 @@ export async function JSONRequest(url: string, data: any, extra: RequestInit = { export function searchKeyToRegexp(searchKey: string) { if (!searchKey) return null - try { - const flags = hasUpperCase(searchKey) ? '' : 'i' - // case-sensitive when searchKey contains uppercase char - return new RegExp(searchKey, flags) - } catch (err) { - return null // matching nothing if failed transforming regexp - } + return safeRegexp(searchKey, hasUpperCase(searchKey) ? 'g' : 'gi') } export function hasUpperCase(input: string) { @@ -168,15 +162,18 @@ export async function renderReact(element: ReactElement) { }) } -export function isValidRegexpSource(source: string) { +export function safeRegexp(pattern: string | RegExp, flags?: string | undefined) { try { - new RegExp(source) - return true + return new RegExp(pattern, flags) } catch (err) { - return false + return null } } +export function isValidRegexpSource(source: string) { + return Boolean(safeRegexp(source)) +} + export function withEffect any>( method: Method, effect: (payload: ReturnType) => void, From 75f24661d6c8815062d7a32283e54a6fb71eb1dd Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sun, 13 Jun 2021 12:52:40 +0800 Subject: [PATCH 03/12] Build from Xcode 12 --- .../SafariWebExtensionHandler.swift | 11 +- .../Gitako/Gitako.xcodeproj/project.pbxproj | 530 +++++++++++++----- Safari/Gitako/Gitako/AppDelegate.swift | 7 + .../AppIcon.appiconset/Contents.json | 3 + .../AppIcon.appiconset/Gitako-128.png | Bin 0 -> 7221 bytes .../AppIcon.appiconset/Gitako-256.png | Bin 0 -> 16080 bytes .../AppIcon.appiconset/Gitako-64.png | Bin 0 -> 3326 bytes .../Gitako/Gitako/Base.lproj/Main.storyboard | 19 +- Safari/Gitako/Gitako/Info.plist | 2 + Safari/Gitako/Gitako/ViewController.swift | 11 +- Safari/Gitako/GitakoTests/GitakoTests.swift | 33 ++ Safari/Gitako/GitakoTests/Info.plist | 22 + .../Gitako/GitakoUITests/GitakoUITests.swift | 42 ++ Safari/Gitako/GitakoUITests/Info.plist | 22 + 14 files changed, 545 insertions(+), 157 deletions(-) create mode 100644 Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Gitako-128.png create mode 100644 Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Gitako-256.png create mode 100644 Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Gitako-64.png create mode 100644 Safari/Gitako/GitakoTests/GitakoTests.swift create mode 100644 Safari/Gitako/GitakoTests/Info.plist create mode 100644 Safari/Gitako/GitakoUITests/GitakoUITests.swift create mode 100644 Safari/Gitako/GitakoUITests/Info.plist diff --git a/Safari/Gitako/Gitako Extension/SafariWebExtensionHandler.swift b/Safari/Gitako/Gitako Extension/SafariWebExtensionHandler.swift index b5209a0..a0e14c2 100644 --- a/Safari/Gitako/Gitako Extension/SafariWebExtensionHandler.swift +++ b/Safari/Gitako/Gitako Extension/SafariWebExtensionHandler.swift @@ -1,9 +1,14 @@ +// +// SafariWebExtensionHandler.swift +// Gitako Extension +// +// Created by Enix on 13/6/2021. +// + import SafariServices import os.log let SFExtensionMessageKey = "message" -class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling { - func beginRequest(with context: NSExtensionContext) { - } +class SafariWebExtensionHandler: NSObject { } diff --git a/Safari/Gitako/Gitako.xcodeproj/project.pbxproj b/Safari/Gitako/Gitako.xcodeproj/project.pbxproj index f4c6a25..6d9ffd4 100644 --- a/Safari/Gitako/Gitako.xcodeproj/project.pbxproj +++ b/Safari/Gitako/Gitako.xcodeproj/project.pbxproj @@ -7,40 +7,57 @@ objects = { /* Begin PBXBuildFile section */ - D24E2F0E25F51A12000E12CC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D24E2F0D25F51A12000E12CC /* AppDelegate.swift */; }; - D24E2F1125F51A12000E12CC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F0F25F51A12000E12CC /* Main.storyboard */; }; - D24E2F1325F51A12000E12CC /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D24E2F1225F51A12000E12CC /* ViewController.swift */; }; - D24E2F1525F51A12000E12CC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F1425F51A12000E12CC /* Assets.xcassets */; }; - D24E2F1C25F51A13000E12CC /* Gitako Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = D24E2F1B25F51A13000E12CC /* Gitako Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - D24E2F2125F51A13000E12CC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D24E2F2025F51A13000E12CC /* Cocoa.framework */; }; - D24E2F2425F51A13000E12CC /* SafariWebExtensionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D24E2F2325F51A13000E12CC /* SafariWebExtensionHandler.swift */; }; - D24E2F2B25F51A13000E12CC /* manifest.json in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F2A25F51A13000E12CC /* manifest.json */; }; - D24E2F2D25F51A13000E12CC /* background.js in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F2C25F51A13000E12CC /* background.js */; }; - D24E2F2F25F51A13000E12CC /* content.js in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F2E25F51A13000E12CC /* content.js */; }; - D24E2F4A25F52669000E12CC /* content.css in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F4525F52669000E12CC /* content.css */; }; - D24E2F4B25F52669000E12CC /* browser-polyfill.js in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F4625F52669000E12CC /* browser-polyfill.js */; }; - D24E2F4C25F52669000E12CC /* firefox-shim.js in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F4825F52669000E12CC /* firefox-shim.js */; }; - D24E2F4D25F52669000E12CC /* icons in Resources */ = {isa = PBXBuildFile; fileRef = D24E2F4925F52669000E12CC /* icons */; }; + 0EA3131B2675C39B00D5C092 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA3131A2675C39B00D5C092 /* AppDelegate.swift */; }; + 0EA3131E2675C39B00D5C092 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0EA3131C2675C39B00D5C092 /* Main.storyboard */; }; + 0EA313202675C39B00D5C092 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA3131F2675C39B00D5C092 /* ViewController.swift */; }; + 0EA313222675C39C00D5C092 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0EA313212675C39C00D5C092 /* Assets.xcassets */; }; + 0EA3132D2675C39D00D5C092 /* GitakoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA3132C2675C39D00D5C092 /* GitakoTests.swift */; }; + 0EA313382675C39D00D5C092 /* GitakoUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA313372675C39D00D5C092 /* GitakoUITests.swift */; }; + 0EA3133F2675C39D00D5C092 /* Gitako Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 0EA3133E2675C39D00D5C092 /* Gitako Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 0EA313442675C39D00D5C092 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EA313432675C39D00D5C092 /* Cocoa.framework */; }; + 0EA313472675C39D00D5C092 /* SafariWebExtensionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA313462675C39D00D5C092 /* SafariWebExtensionHandler.swift */; }; + 0EA3134E2675C39D00D5C092 /* manifest.json in Resources */ = {isa = PBXBuildFile; fileRef = 0EA3134D2675C39D00D5C092 /* manifest.json */; }; + 0EA313502675C39D00D5C092 /* background.js in Resources */ = {isa = PBXBuildFile; fileRef = 0EA3134F2675C39D00D5C092 /* background.js */; }; + 0EA313522675C39D00D5C092 /* content.js in Resources */ = {isa = PBXBuildFile; fileRef = 0EA313512675C39D00D5C092 /* content.js */; }; + 0EA3136A2675C82800D5C092 /* content.js in Resources */ = {isa = PBXBuildFile; fileRef = 0EA313512675C39D00D5C092 /* content.js */; }; + 0EA313722675C9A300D5C092 /* firefox-shim.js in Resources */ = {isa = PBXBuildFile; fileRef = 0EA3136B2675C9A300D5C092 /* firefox-shim.js */; }; + 0EA313732675C9A300D5C092 /* content.css in Resources */ = {isa = PBXBuildFile; fileRef = 0EA3136C2675C9A300D5C092 /* content.css */; }; + 0EA313742675C9A300D5C092 /* browser-polyfill.js in Resources */ = {isa = PBXBuildFile; fileRef = 0EA313702675C9A300D5C092 /* browser-polyfill.js */; }; + 0EA313752675C9A300D5C092 /* icons in Resources */ = {isa = PBXBuildFile; fileRef = 0EA313712675C9A300D5C092 /* icons */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - D24E2F1D25F51A13000E12CC /* PBXContainerItemProxy */ = { + 0EA313292675C39C00D5C092 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = D24E2F0125F51A12000E12CC /* Project object */; + containerPortal = 0EA3130E2675C39B00D5C092 /* Project object */; proxyType = 1; - remoteGlobalIDString = D24E2F1A25F51A13000E12CC; + remoteGlobalIDString = 0EA313152675C39B00D5C092; + remoteInfo = Gitako; + }; + 0EA313342675C39D00D5C092 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0EA3130E2675C39B00D5C092 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0EA313152675C39B00D5C092; + remoteInfo = Gitako; + }; + 0EA313402675C39D00D5C092 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0EA3130E2675C39B00D5C092 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0EA3133D2675C39D00D5C092; remoteInfo = "Gitako Extension"; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - D24E2F3D25F51A13000E12CC /* Embed App Extensions */ = { + 0EA313602675C39D00D5C092 /* Embed App Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 13; files = ( - D24E2F1C25F51A13000E12CC /* Gitako Extension.appex in Embed App Extensions */, + 0EA3133F2675C39D00D5C092 /* Gitako Extension.appex in Embed App Extensions */, ); name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -48,113 +65,155 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - D24E2F0925F51A12000E12CC /* Gitako.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Gitako.app; sourceTree = BUILT_PRODUCTS_DIR; }; - D24E2F0C25F51A12000E12CC /* Gitako.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Gitako.entitlements; sourceTree = ""; }; - D24E2F0D25F51A12000E12CC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - D24E2F1025F51A12000E12CC /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - D24E2F1225F51A12000E12CC /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - D24E2F1425F51A12000E12CC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - D24E2F1625F51A12000E12CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D24E2F1B25F51A13000E12CC /* Gitako Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Gitako Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; - D24E2F2025F51A13000E12CC /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - D24E2F2325F51A13000E12CC /* SafariWebExtensionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariWebExtensionHandler.swift; sourceTree = ""; }; - D24E2F2A25F51A13000E12CC /* manifest.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = manifest.json; sourceTree = ""; }; - D24E2F2C25F51A13000E12CC /* background.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = background.js; sourceTree = ""; }; - D24E2F2E25F51A13000E12CC /* content.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = content.js; sourceTree = ""; }; - D24E2F3625F51A13000E12CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D24E2F3725F51A13000E12CC /* Gitako_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Gitako_Extension.entitlements; sourceTree = ""; }; - D24E2F4325F52669000E12CC /* content.css.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = content.css.map; sourceTree = ""; }; - D24E2F4425F52669000E12CC /* content.js.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = content.js.map; sourceTree = ""; }; - D24E2F4525F52669000E12CC /* content.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = content.css; sourceTree = ""; }; - D24E2F4625F52669000E12CC /* browser-polyfill.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "browser-polyfill.js"; sourceTree = ""; }; - D24E2F4725F52669000E12CC /* background.js.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = background.js.map; sourceTree = ""; }; - D24E2F4825F52669000E12CC /* firefox-shim.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "firefox-shim.js"; sourceTree = ""; }; - D24E2F4925F52669000E12CC /* icons */ = {isa = PBXFileReference; lastKnownFileType = folder; path = icons; sourceTree = ""; }; + 0EA313162675C39B00D5C092 /* Gitako.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Gitako.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 0EA313192675C39B00D5C092 /* Gitako.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Gitako.entitlements; sourceTree = ""; }; + 0EA3131A2675C39B00D5C092 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 0EA3131D2675C39B00D5C092 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 0EA3131F2675C39B00D5C092 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 0EA313212675C39C00D5C092 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 0EA313232675C39C00D5C092 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 0EA313282675C39C00D5C092 /* GitakoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GitakoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 0EA3132C2675C39D00D5C092 /* GitakoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitakoTests.swift; sourceTree = ""; }; + 0EA3132E2675C39D00D5C092 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 0EA313332675C39D00D5C092 /* GitakoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GitakoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 0EA313372675C39D00D5C092 /* GitakoUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitakoUITests.swift; sourceTree = ""; }; + 0EA313392675C39D00D5C092 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 0EA3133E2675C39D00D5C092 /* Gitako Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Gitako Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0EA313432675C39D00D5C092 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 0EA313462675C39D00D5C092 /* SafariWebExtensionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariWebExtensionHandler.swift; sourceTree = ""; }; + 0EA3134D2675C39D00D5C092 /* manifest.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = manifest.json; sourceTree = ""; }; + 0EA3134F2675C39D00D5C092 /* background.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = background.js; sourceTree = ""; }; + 0EA313512675C39D00D5C092 /* content.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = content.js; sourceTree = ""; }; + 0EA313592675C39D00D5C092 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 0EA3135A2675C39D00D5C092 /* Gitako_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Gitako_Extension.entitlements; sourceTree = ""; }; + 0EA3136B2675C9A300D5C092 /* firefox-shim.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "firefox-shim.js"; sourceTree = ""; }; + 0EA3136C2675C9A300D5C092 /* content.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = content.css; sourceTree = ""; }; + 0EA3136D2675C9A300D5C092 /* content.js.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = content.js.map; sourceTree = ""; }; + 0EA3136E2675C9A300D5C092 /* content.css.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = content.css.map; sourceTree = ""; }; + 0EA3136F2675C9A300D5C092 /* background.js.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = background.js.map; sourceTree = ""; }; + 0EA313702675C9A300D5C092 /* browser-polyfill.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "browser-polyfill.js"; sourceTree = ""; }; + 0EA313712675C9A300D5C092 /* icons */ = {isa = PBXFileReference; lastKnownFileType = folder; path = icons; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - D24E2F0625F51A12000E12CC /* Frameworks */ = { + 0EA313132675C39B00D5C092 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - D24E2F1825F51A13000E12CC /* Frameworks */ = { + 0EA313252675C39C00D5C092 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D24E2F2125F51A13000E12CC /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0EA313302675C39D00D5C092 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0EA3133B2675C39D00D5C092 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0EA313442675C39D00D5C092 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - D24E2F0025F51A12000E12CC = { + 0EA3130D2675C39B00D5C092 = { isa = PBXGroup; children = ( - D24E2F0B25F51A12000E12CC /* Gitako */, - D24E2F2225F51A13000E12CC /* Gitako Extension */, - D24E2F1F25F51A13000E12CC /* Frameworks */, - D24E2F0A25F51A12000E12CC /* Products */, + 0EA313182675C39B00D5C092 /* Gitako */, + 0EA3132B2675C39C00D5C092 /* GitakoTests */, + 0EA313362675C39D00D5C092 /* GitakoUITests */, + 0EA313452675C39D00D5C092 /* Gitako Extension */, + 0EA313422675C39D00D5C092 /* Frameworks */, + 0EA313172675C39B00D5C092 /* Products */, ); sourceTree = ""; }; - D24E2F0A25F51A12000E12CC /* Products */ = { + 0EA313172675C39B00D5C092 /* Products */ = { isa = PBXGroup; children = ( - D24E2F0925F51A12000E12CC /* Gitako.app */, - D24E2F1B25F51A13000E12CC /* Gitako Extension.appex */, + 0EA313162675C39B00D5C092 /* Gitako.app */, + 0EA313282675C39C00D5C092 /* GitakoTests.xctest */, + 0EA313332675C39D00D5C092 /* GitakoUITests.xctest */, + 0EA3133E2675C39D00D5C092 /* Gitako Extension.appex */, ); name = Products; sourceTree = ""; }; - D24E2F0B25F51A12000E12CC /* Gitako */ = { + 0EA313182675C39B00D5C092 /* Gitako */ = { isa = PBXGroup; children = ( - D24E2F0C25F51A12000E12CC /* Gitako.entitlements */, - D24E2F0D25F51A12000E12CC /* AppDelegate.swift */, - D24E2F0F25F51A12000E12CC /* Main.storyboard */, - D24E2F1225F51A12000E12CC /* ViewController.swift */, - D24E2F1425F51A12000E12CC /* Assets.xcassets */, - D24E2F1625F51A12000E12CC /* Info.plist */, + 0EA313192675C39B00D5C092 /* Gitako.entitlements */, + 0EA3131A2675C39B00D5C092 /* AppDelegate.swift */, + 0EA3131C2675C39B00D5C092 /* Main.storyboard */, + 0EA3131F2675C39B00D5C092 /* ViewController.swift */, + 0EA313212675C39C00D5C092 /* Assets.xcassets */, + 0EA313232675C39C00D5C092 /* Info.plist */, ); path = Gitako; sourceTree = ""; }; - D24E2F1F25F51A13000E12CC /* Frameworks */ = { + 0EA3132B2675C39C00D5C092 /* GitakoTests */ = { isa = PBXGroup; children = ( - D24E2F2025F51A13000E12CC /* Cocoa.framework */, + 0EA3132C2675C39D00D5C092 /* GitakoTests.swift */, + 0EA3132E2675C39D00D5C092 /* Info.plist */, + ); + path = GitakoTests; + sourceTree = ""; + }; + 0EA313362675C39D00D5C092 /* GitakoUITests */ = { + isa = PBXGroup; + children = ( + 0EA313372675C39D00D5C092 /* GitakoUITests.swift */, + 0EA313392675C39D00D5C092 /* Info.plist */, + ); + path = GitakoUITests; + sourceTree = ""; + }; + 0EA313422675C39D00D5C092 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 0EA313432675C39D00D5C092 /* Cocoa.framework */, ); name = Frameworks; sourceTree = ""; }; - D24E2F2225F51A13000E12CC /* Gitako Extension */ = { + 0EA313452675C39D00D5C092 /* Gitako Extension */ = { isa = PBXGroup; children = ( - D24E2F2325F51A13000E12CC /* SafariWebExtensionHandler.swift */, - D24E2F3625F51A13000E12CC /* Info.plist */, - D24E2F3725F51A13000E12CC /* Gitako_Extension.entitlements */, - D24E2F2525F51A13000E12CC /* Resources */, + 0EA313462675C39D00D5C092 /* SafariWebExtensionHandler.swift */, + 0EA313592675C39D00D5C092 /* Info.plist */, + 0EA3135A2675C39D00D5C092 /* Gitako_Extension.entitlements */, + 0EA313482675C39D00D5C092 /* Resources */, ); path = "Gitako Extension"; sourceTree = ""; }; - D24E2F2525F51A13000E12CC /* Resources */ = { + 0EA313482675C39D00D5C092 /* Resources */ = { isa = PBXGroup; children = ( - D24E2F4725F52669000E12CC /* background.js.map */, - D24E2F4625F52669000E12CC /* browser-polyfill.js */, - D24E2F4525F52669000E12CC /* content.css */, - D24E2F4325F52669000E12CC /* content.css.map */, - D24E2F4425F52669000E12CC /* content.js.map */, - D24E2F4825F52669000E12CC /* firefox-shim.js */, - D24E2F4925F52669000E12CC /* icons */, - D24E2F2A25F51A13000E12CC /* manifest.json */, - D24E2F2C25F51A13000E12CC /* background.js */, - D24E2F2E25F51A13000E12CC /* content.js */, + 0EA3136F2675C9A300D5C092 /* background.js.map */, + 0EA313702675C9A300D5C092 /* browser-polyfill.js */, + 0EA3136C2675C9A300D5C092 /* content.css */, + 0EA3136E2675C9A300D5C092 /* content.css.map */, + 0EA3136D2675C9A300D5C092 /* content.js.map */, + 0EA3136B2675C9A300D5C092 /* firefox-shim.js */, + 0EA313712675C9A300D5C092 /* icons */, + 0EA3134D2675C39D00D5C092 /* manifest.json */, + 0EA3134F2675C39D00D5C092 /* background.js */, + 0EA313512675C39D00D5C092 /* content.js */, ); path = Resources; sourceTree = ""; @@ -162,32 +221,68 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - D24E2F0825F51A12000E12CC /* Gitako */ = { + 0EA313152675C39B00D5C092 /* Gitako */ = { isa = PBXNativeTarget; - buildConfigurationList = D24E2F3E25F51A13000E12CC /* Build configuration list for PBXNativeTarget "Gitako" */; + buildConfigurationList = 0EA313612675C39D00D5C092 /* Build configuration list for PBXNativeTarget "Gitako" */; buildPhases = ( - D24E2F0525F51A12000E12CC /* Sources */, - D24E2F0625F51A12000E12CC /* Frameworks */, - D24E2F0725F51A12000E12CC /* Resources */, - D24E2F3D25F51A13000E12CC /* Embed App Extensions */, + 0EA313122675C39B00D5C092 /* Sources */, + 0EA313132675C39B00D5C092 /* Frameworks */, + 0EA313142675C39B00D5C092 /* Resources */, + 0EA313602675C39D00D5C092 /* Embed App Extensions */, ); buildRules = ( ); dependencies = ( - D24E2F1E25F51A13000E12CC /* PBXTargetDependency */, + 0EA313412675C39D00D5C092 /* PBXTargetDependency */, ); name = Gitako; productName = Gitako; - productReference = D24E2F0925F51A12000E12CC /* Gitako.app */; + productReference = 0EA313162675C39B00D5C092 /* Gitako.app */; productType = "com.apple.product-type.application"; }; - D24E2F1A25F51A13000E12CC /* Gitako Extension */ = { + 0EA313272675C39C00D5C092 /* GitakoTests */ = { isa = PBXNativeTarget; - buildConfigurationList = D24E2F3A25F51A13000E12CC /* Build configuration list for PBXNativeTarget "Gitako Extension" */; + buildConfigurationList = 0EA313642675C39D00D5C092 /* Build configuration list for PBXNativeTarget "GitakoTests" */; buildPhases = ( - D24E2F1725F51A13000E12CC /* Sources */, - D24E2F1825F51A13000E12CC /* Frameworks */, - D24E2F1925F51A13000E12CC /* Resources */, + 0EA313242675C39C00D5C092 /* Sources */, + 0EA313252675C39C00D5C092 /* Frameworks */, + 0EA313262675C39C00D5C092 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 0EA3132A2675C39C00D5C092 /* PBXTargetDependency */, + ); + name = GitakoTests; + productName = GitakoTests; + productReference = 0EA313282675C39C00D5C092 /* GitakoTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 0EA313322675C39D00D5C092 /* GitakoUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0EA313672675C39D00D5C092 /* Build configuration list for PBXNativeTarget "GitakoUITests" */; + buildPhases = ( + 0EA3132F2675C39D00D5C092 /* Sources */, + 0EA313302675C39D00D5C092 /* Frameworks */, + 0EA313312675C39D00D5C092 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 0EA313352675C39D00D5C092 /* PBXTargetDependency */, + ); + name = GitakoUITests; + productName = GitakoUITests; + productReference = 0EA313332675C39D00D5C092 /* GitakoUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; + 0EA3133D2675C39D00D5C092 /* Gitako Extension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0EA3135D2675C39D00D5C092 /* Build configuration list for PBXNativeTarget "Gitako Extension" */; + buildPhases = ( + 0EA3133A2675C39D00D5C092 /* Sources */, + 0EA3133B2675C39D00D5C092 /* Frameworks */, + 0EA3133C2675C39D00D5C092 /* Resources */, ); buildRules = ( ); @@ -195,27 +290,35 @@ ); name = "Gitako Extension"; productName = "Gitako Extension"; - productReference = D24E2F1B25F51A13000E12CC /* Gitako Extension.appex */; + productReference = 0EA3133E2675C39D00D5C092 /* Gitako Extension.appex */; productType = "com.apple.product-type.app-extension"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - D24E2F0125F51A12000E12CC /* Project object */ = { + 0EA3130E2675C39B00D5C092 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1240; - LastUpgradeCheck = 1240; + LastSwiftUpdateCheck = 1250; + LastUpgradeCheck = 1250; TargetAttributes = { - D24E2F0825F51A12000E12CC = { - CreatedOnToolsVersion = 12.4; + 0EA313152675C39B00D5C092 = { + CreatedOnToolsVersion = 12.5; }; - D24E2F1A25F51A13000E12CC = { - CreatedOnToolsVersion = 12.4; + 0EA313272675C39C00D5C092 = { + CreatedOnToolsVersion = 12.5; + TestTargetID = 0EA313152675C39B00D5C092; + }; + 0EA313322675C39D00D5C092 = { + CreatedOnToolsVersion = 12.5; + TestTargetID = 0EA313152675C39B00D5C092; + }; + 0EA3133D2675C39D00D5C092 = { + CreatedOnToolsVersion = 12.5; }; }; }; - buildConfigurationList = D24E2F0425F51A12000E12CC /* Build configuration list for PBXProject "Gitako" */; + buildConfigurationList = 0EA313112675C39B00D5C092 /* Build configuration list for PBXProject "Gitako" */; compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; @@ -223,76 +326,119 @@ en, Base, ); - mainGroup = D24E2F0025F51A12000E12CC; - productRefGroup = D24E2F0A25F51A12000E12CC /* Products */; + mainGroup = 0EA3130D2675C39B00D5C092; + productRefGroup = 0EA313172675C39B00D5C092 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - D24E2F0825F51A12000E12CC /* Gitako */, - D24E2F1A25F51A13000E12CC /* Gitako Extension */, + 0EA313152675C39B00D5C092 /* Gitako */, + 0EA313272675C39C00D5C092 /* GitakoTests */, + 0EA313322675C39D00D5C092 /* GitakoUITests */, + 0EA3133D2675C39D00D5C092 /* Gitako Extension */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - D24E2F0725F51A12000E12CC /* Resources */ = { + 0EA313142675C39B00D5C092 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D24E2F1525F51A12000E12CC /* Assets.xcassets in Resources */, - D24E2F1125F51A12000E12CC /* Main.storyboard in Resources */, + 0EA3136A2675C82800D5C092 /* content.js in Resources */, + 0EA313222675C39C00D5C092 /* Assets.xcassets in Resources */, + 0EA3131E2675C39B00D5C092 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D24E2F1925F51A13000E12CC /* Resources */ = { + 0EA313262675C39C00D5C092 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D24E2F4B25F52669000E12CC /* browser-polyfill.js in Resources */, - D24E2F4A25F52669000E12CC /* content.css in Resources */, - D24E2F2D25F51A13000E12CC /* background.js in Resources */, - D24E2F2B25F51A13000E12CC /* manifest.json in Resources */, - D24E2F4C25F52669000E12CC /* firefox-shim.js in Resources */, - D24E2F4D25F52669000E12CC /* icons in Resources */, - D24E2F2F25F51A13000E12CC /* content.js in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0EA313312675C39D00D5C092 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0EA3133C2675C39D00D5C092 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0EA313502675C39D00D5C092 /* background.js in Resources */, + 0EA3134E2675C39D00D5C092 /* manifest.json in Resources */, + 0EA313522675C39D00D5C092 /* content.js in Resources */, + 0EA313732675C9A300D5C092 /* content.css in Resources */, + 0EA313742675C9A300D5C092 /* browser-polyfill.js in Resources */, + 0EA313752675C9A300D5C092 /* icons in Resources */, + 0EA313722675C9A300D5C092 /* firefox-shim.js in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - D24E2F0525F51A12000E12CC /* Sources */ = { + 0EA313122675C39B00D5C092 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D24E2F1325F51A12000E12CC /* ViewController.swift in Sources */, - D24E2F0E25F51A12000E12CC /* AppDelegate.swift in Sources */, + 0EA313202675C39B00D5C092 /* ViewController.swift in Sources */, + 0EA3131B2675C39B00D5C092 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D24E2F1725F51A13000E12CC /* Sources */ = { + 0EA313242675C39C00D5C092 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D24E2F2425F51A13000E12CC /* SafariWebExtensionHandler.swift in Sources */, + 0EA3132D2675C39D00D5C092 /* GitakoTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0EA3132F2675C39D00D5C092 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0EA313382675C39D00D5C092 /* GitakoUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0EA3133A2675C39D00D5C092 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0EA313472675C39D00D5C092 /* SafariWebExtensionHandler.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - D24E2F1E25F51A13000E12CC /* PBXTargetDependency */ = { + 0EA3132A2675C39C00D5C092 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = D24E2F1A25F51A13000E12CC /* Gitako Extension */; - targetProxy = D24E2F1D25F51A13000E12CC /* PBXContainerItemProxy */; + target = 0EA313152675C39B00D5C092 /* Gitako */; + targetProxy = 0EA313292675C39C00D5C092 /* PBXContainerItemProxy */; + }; + 0EA313352675C39D00D5C092 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0EA313152675C39B00D5C092 /* Gitako */; + targetProxy = 0EA313342675C39D00D5C092 /* PBXContainerItemProxy */; + }; + 0EA313412675C39D00D5C092 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 0EA3133D2675C39D00D5C092 /* Gitako Extension */; + targetProxy = 0EA313402675C39D00D5C092 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - D24E2F0F25F51A12000E12CC /* Main.storyboard */ = { + 0EA3131C2675C39B00D5C092 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - D24E2F1025F51A12000E12CC /* Base */, + 0EA3131D2675C39B00D5C092 /* Base */, ); name = Main.storyboard; sourceTree = ""; @@ -300,7 +446,7 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - D24E2F3825F51A13000E12CC /* Debug */ = { + 0EA3135B2675C39D00D5C092 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -351,7 +497,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.3; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -361,7 +507,7 @@ }; name = Debug; }; - D24E2F3925F51A13000E12CC /* Release */ = { + 0EA3135C2675C39D00D5C092 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -406,7 +552,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; + MACOSX_DEPLOYMENT_TARGET = 11.3; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; @@ -415,10 +561,11 @@ }; name = Release; }; - D24E2F3B25F51A13000E12CC /* Debug */ = { + 0EA3135E2675C39D00D5C092 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_ENTITLEMENTS = "Gitako Extension/Gitako_Extension.entitlements"; + CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = "Gitako Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( @@ -434,10 +581,11 @@ }; name = Debug; }; - D24E2F3C25F51A13000E12CC /* Release */ = { + 0EA3135F2675C39D00D5C092 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_ENTITLEMENTS = "Gitako Extension/Gitako_Extension.entitlements"; + CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = "Gitako Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( @@ -453,7 +601,7 @@ }; name = Release; }; - D24E2F3F25F51A13000E12CC /* Debug */ = { + 0EA313622675C39D00D5C092 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; @@ -474,7 +622,7 @@ }; name = Debug; }; - D24E2F4025F51A13000E12CC /* Release */ = { + 0EA313632675C39D00D5C092 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; @@ -495,37 +643,135 @@ }; name = Release; }; + 0EA313652675C39D00D5C092 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = GitakoTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_BUNDLE_IDENTIFIER = enixcoda.GitakoTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Gitako.app/Contents/MacOS/Gitako"; + }; + name = Debug; + }; + 0EA313662675C39D00D5C092 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = GitakoTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.14; + PRODUCT_BUNDLE_IDENTIFIER = enixcoda.GitakoTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Gitako.app/Contents/MacOS/Gitako"; + }; + name = Release; + }; + 0EA313682675C39D00D5C092 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = GitakoUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = enixcoda.GitakoUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = Gitako; + }; + name = Debug; + }; + 0EA313692675C39D00D5C092 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = GitakoUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = enixcoda.GitakoUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = Gitako; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - D24E2F0425F51A12000E12CC /* Build configuration list for PBXProject "Gitako" */ = { + 0EA313112675C39B00D5C092 /* Build configuration list for PBXProject "Gitako" */ = { isa = XCConfigurationList; buildConfigurations = ( - D24E2F3825F51A13000E12CC /* Debug */, - D24E2F3925F51A13000E12CC /* Release */, + 0EA3135B2675C39D00D5C092 /* Debug */, + 0EA3135C2675C39D00D5C092 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D24E2F3A25F51A13000E12CC /* Build configuration list for PBXNativeTarget "Gitako Extension" */ = { + 0EA3135D2675C39D00D5C092 /* Build configuration list for PBXNativeTarget "Gitako Extension" */ = { isa = XCConfigurationList; buildConfigurations = ( - D24E2F3B25F51A13000E12CC /* Debug */, - D24E2F3C25F51A13000E12CC /* Release */, + 0EA3135E2675C39D00D5C092 /* Debug */, + 0EA3135F2675C39D00D5C092 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D24E2F3E25F51A13000E12CC /* Build configuration list for PBXNativeTarget "Gitako" */ = { + 0EA313612675C39D00D5C092 /* Build configuration list for PBXNativeTarget "Gitako" */ = { isa = XCConfigurationList; buildConfigurations = ( - D24E2F3F25F51A13000E12CC /* Debug */, - D24E2F4025F51A13000E12CC /* Release */, + 0EA313622675C39D00D5C092 /* Debug */, + 0EA313632675C39D00D5C092 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0EA313642675C39D00D5C092 /* Build configuration list for PBXNativeTarget "GitakoTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0EA313652675C39D00D5C092 /* Debug */, + 0EA313662675C39D00D5C092 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0EA313672675C39D00D5C092 /* Build configuration list for PBXNativeTarget "GitakoUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0EA313682675C39D00D5C092 /* Debug */, + 0EA313692675C39D00D5C092 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = D24E2F0125F51A12000E12CC /* Project object */; + rootObject = 0EA3130E2675C39B00D5C092 /* Project object */; } diff --git a/Safari/Gitako/Gitako/AppDelegate.swift b/Safari/Gitako/Gitako/AppDelegate.swift index 6222982..7396502 100644 --- a/Safari/Gitako/Gitako/AppDelegate.swift +++ b/Safari/Gitako/Gitako/AppDelegate.swift @@ -1,3 +1,10 @@ +// +// AppDelegate.swift +// Gitako +// +// Created by Enix on 13/6/2021. +// + import Cocoa @main diff --git a/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Contents.json b/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Contents.json index 3f00db4..1fc4d50 100644 --- a/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -16,11 +16,13 @@ "size" : "32x32" }, { + "filename" : "Gitako-64.png", "idiom" : "mac", "scale" : "2x", "size" : "32x32" }, { + "filename" : "Gitako-128.png", "idiom" : "mac", "scale" : "1x", "size" : "128x128" @@ -31,6 +33,7 @@ "size" : "128x128" }, { + "filename" : "Gitako-256.png", "idiom" : "mac", "scale" : "1x", "size" : "256x256" diff --git a/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Gitako-128.png b/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Gitako-128.png new file mode 100644 index 0000000000000000000000000000000000000000..60c967f1513d82f27164f482b56fb6363789a0eb GIT binary patch literal 7221 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 literal 0 HcmV?d00001 diff --git a/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Gitako-256.png b/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Gitako-256.png new file mode 100644 index 0000000000000000000000000000000000000000..6902e6008f34ceac80b503047a1af4415f65604c GIT binary patch literal 16080 zcmY+r1yq|)&@UXpU5Y!!3WWfrxI0CQLvctc#oe{IJEeG`1&X^vC=Nx6OL6z$PHz71 zea}7Lm-C#H-DIEHo!Qyh-^}hrX{agSVo_oN003MiMOjS%0EjFC0T^h=FC&+dkI0I$ zjkdmF82^W^FtYsL z&k#oX|7qf8E5<1GUx)Pisv7h%jxJF8w_N<3mOO6+=>>$ic-{&L^76f==jG<%hj0r) zc=$NEd4#!zgt>X>|M$Zvjzur(V)ap2Q&#?eJ44pQ7(cnWISE4`o}Qjuo^QAuU92HI zLPA0iZe9p4FDJ4Er>nPvo4FUKgX_!xNc>+KvQSq`7aJ!x8%GEF|7e<9IJ&!uF)~8_ z>jd(@y&&0x{6GGXmH#Ipr~^_gE=d0Al`4e+0D6FutdzD__HmAPvz4{+u0-)KhZ$pE zWl!Opu};=R6b$-sW+1BE3l!Px0dx&&e-sqzzfz2Qe@e{Xb7RuWk`fb!Z*3XS0}svWd|N(H{J&;!lw_u8NY;ASFbyFsY^5p zq{FaC*tP$^h2QVvnA{>Zen4=Sp{QgSglZ-_yP6IkcC=1HWSxJtrB-Fwqj51RaRJ5v zYG`U8k0d5sGh5S2Fg2qRX|PC;Z_o$DWJk~{s1rXj__?ZM7S8iqvyrgA2}=QAnk`w0 zp^GD2X%_iDYA&uQ*z1LoX5FVbdZor>_E2Ib-WzZpgVHku&J*g@{J6EO;SErrlJ*Ah zls^g%RWPxnxo^vY|S@Bo&QAsW8_FCAnOj3M7-2Kku*EwV5ycRkacm;#6FvZmR%05t?A%LhEbo;gq&7?H};tY3bP{Ons4 zo>#yn;f$Kfc~?=m0Bi~%5^{K;eOzo?-GTX`*vu8YW6P}p1L$^yqW&DiCC zL|&$fS2L8`sZSLLk_Fx-ho2pe*pN2?2PPJ1y`Y>Ivpv$%@a#_ zj1U|*k1TLqTkI;Iz+oIwe=57b6Mb{{_{07*w=}tKce_WF845oD{lNszosM)|=_a}# zsZKwPqK<0jg|$`L2F@IJVYFM8{0n=mFnssux-;#IqwOkSZu}GXQ4G$t7Grcdu+s>9 z|0+lUWW?EGO9lOtS5{qfQjmUM+4{5(Ll5r#C6W1Oj78LXz>Htw#pLNW73?i6A{e~~ z-y-52kh+4q^+w#j{oi7DErT9~Cqy#Bb0q)^PM9yGZ9RNsy=^`EyDmOBeESD)pAODj zU4jkAU{8=~!=We_JE{|3_rN681K*`qc~j;WHOzT0AbY0g$_kTvu_xf9CLkGxdQrM` z3cj*7MX8jJlt4YXIuylYM};dYER@|DL3vv=FuSD2*N$PE z%&$(Z#8GXl;(V;Y7$zJVZPBCM@B!ey>)ZbcC?;X*;Cgf^HNdqoM%lh z$RF05LibAqq~jFq9$WRwQw zH*hOr7(6eCvF)?ek7!+Yn_ac$s6M4dcrNEAn!N0C7&IzJ*t~J-FYgO&5X5OGzrB?# zy$**!BXItkB~CWiI?TC%v|6sG4Uf_)BZ~G&rk446-JclW-Zops^q>?80z`>#7bQzi z9fsbUV!k5*sgU+Nf%Fp`HMyb1CocG4VEaQnC43cqSQWF+@5z#E()RQzDcLl#ih|jm z`{!z>CLlrkwzXtzxAZmq=E&A*3<4T^Km5@u<5gIu&o6*c&5B+I)17y8dZ1T)i;G;I zbga&q9@bh?(EM3ReFEbdNwg&N*!|-ELWF3Ix0t!N{itwvYRUO-vnfd3K>49^Cl-(f zD#;JGRjfAIH?S6)y$HfaduMljC)3)6cocH)prB)2UKYSv+SW)rBLB~5QqxOih8GKh~-|X3ylA)xrE*V0Dd*MXuvHfpp15ST?Dt zL&eA8nx`N9>}_DWr*Tz*=&y0dlm=Iq=(qeyl)q~NQbN6&zTr*edHx98y&H$Gv^9dq zoeuatD{q6BleIZ5tcUrw%p|(`)o_ zL^+c`_eV&%CV+|}*s<``k7t~%y3#3NQRFTIFo3`MQkyp%2Z7}_3jT0;=(=rXrHz#@ ztrRL6Lt+A(@f-z6oGc&j$opL7(REsI?$`buhGudzB3U&jmvVg2@iKTz?(@KB79jbj z?`d43XZ)!(lB(YSq5N1KXXx*WL}}IteUbu@i23 z90wyOSt)#EvqT<97G{=QBetv6qRjbYdoUeg*TjoYbS}PoW>g;7Kv*LEB39Ns)o8rY zz|e1X8M(i1qW?1b7f5b`Xj=U`#k`DS6+Rj!(a$VhmK1`N-zJPn|3WF)08%&}W z=hR0~U2bs;K}3|?2qwM6e_VdrdtI=K*Q}h=59voN^oTt*ZdMA$RUDc&je5tvmqhMy zy>dyn>~i^xQprY|f*w?X1$)oRR-v_>oBZUoOCdQ57}4*5cCvel++%ycnY)>_P~^^T zmfzrt>MlgY@qR6B5*&dF21{N@qKa9~zPTlT#|&pG4zP+g`>A_0#cK%xe0()RNOfp>3@*{2 zEYKqz?yVK~WJrG%%;fz?GIQM8jzrD*hTE*|{qM9cV(9=Rp|JP)%_RB_Z@mN|aB}Tx z9ki*pBFUw4@eNdw|Kwj)kwnz6eL47RmJ-fHQKdt^?~ihSCC7ygq-$=HN*4Wfc{^&f zdskz%`EI*+tWT9Jpy`Nj=Q_}}L^LQ4Wxt0@K?0Z4kCu$3OMK1Ek0?ma zD&c81NmadbD$bQHh8$OL1rU%M5Pt;#|54#~g-%Wtz!%{^E;n9lMoY?~hmuHus zD~N-Pi;Nbed`v?mz}Emr7_?O5Ud-D|<-ff!E?TKQ7v{a0@KMh!8OH}unJ17kE&-VT zeb88(UmxAeYTd}|`d5QCrE35^{B zLk!9OMJ_)qXAKAchg-7?Ht|Ur-V75<{&^?=_QiMaGRUb3*-@*Lcx+lgWLp9#xWq6& z)LhP1p|Y|;t;kjc6oDm*Nyn^fkMhfDy4$ZWuiQ@`cxyORsc{M$ag!l>{MH_L;)D25=7O;wa_4Pjy$r+rQy%Z)pR3wq4IQ-gRe0-Il~ExUdH8h_rHhv*oKS#%vOJDW@ z2fhftb?}o6GjTnTO$KQxLZv9m`0dgJl$IWhBH>fH_dP9qdv&01V^m%beZf zZh_6WbY?9jW?L3<+fUQ2+qtNQFzbc}Vj{f%v><%qUf%Nyc2|m@p!be4DT7&QhT7nK znAztuhc4&v8k|SVk}-?_wv*Vn4H_%93pn(LYAwYGsji#I>ZTbZ zID3M`lULZ^pga7WbzY&rM2DdpQ^gUdfdnaeuudiGnpUd18q$J=#%ZSoUmIZY(eF28 z3f+RgDc>YwSUx<#l!FlFGj}M<6wN+@dw)YiyNOG^j3|M^bsaDCFd7)AW`?Zrtx!nm zYaz^t?H9wd_oOPEs|uD^48j%mZd6%&Glr3iFQWF|6LU<9pqF~$88!0xUSIWlH>W0G zAOQ*iU4dEv*~YH(#9uIhZ6G}|_K{JVhW^#ipPNRa03k6Xnz8y-L&npsVKz2l|7}_prK0^r8M=Txh?zZ6cjDKi`17yii-k z8H`c&4VH4Y1l0J$4JjUTKbW5M3`mlIv@y_ERk;f3d%n=j8#musugtJIFEI<1OXdoD z!arot_wJ&5NH4Nw@vwgxM(zW6m8?}eKpM?Vjk_=Yq)kt}ZTBqgrP_x)|AF6do?rUY z*5syh%ksdj?WfKVI&g0J$z0iZ$$y*7oAC6L=z(yn{KT18=!>FER3LnJ7fVB;e~x$= z2Fi1EFk#j+W<6U-Y=ra^hAZ4tA=nibNor>PQ1-loO zsK(mp^~Y7|`Xetguj*<}{R|B4^bez@Xzkq|pEr>{ZGY5zL-2=~9m^|wY2bc1oek0n zBW45Y(86XmmY&=oXk)d>)WrY!E}?ZB?|TnT{3$aY;%klu@mocMPTes+PdhJ=aU&f_ zGb0S>)0clT<4#9YO>PZRb%dWfs&di`AJ&5%xbW$Nr?p-+D6EqOPc;x({=r7Jr;c=f zRgN2FoDQ%*HQcNt%Dy|+Osx!hsCxq7IdmZ=a9QTDk@l!$-Ir*I1<>)(#M}2KJO zkUp|Tx-On#O~9Y(za9p*AZrQlO)^?x%dQ z{!H%glQkh36{_Zny}U!(8fPHeap$wv6x;!83RVZvp`F}N=f7ab&&T1lrTg+IOp(V_ zpnPq*`z*qI^I~(b&5O2>Uvc4ckR#)C(8)ANIcwY;x~?r;Q4#4A(^*@Za^mU5@5H=c zhq8)mhySKlj2(3?TBB(EhLy7^QI8pM>Co8zPgiYm_BSzips9rQs|-fjTBoY@XMiyI zPK&TV^~iZA^=@c1eMWp}oK>-CLUE3Mt2gXNoJ-O>??16Y>Q zX$-;Bti`4}DE>@3GU>OiRy=z+Bo&uNd2vBMaKX#7P9IP7dQ%$~7KU_gUv5q6WJGEU4W_aG4wI*zU+u*E$*5)kSkO2ZGg`^`cAsmvk zx&WO4@vS+7Kx0iO``qC2uIR_P;|>h3V-4e#XfjLBwDOp3$Z%yeAH^r|sQPl*l5x*g z)apz56#BGPOIGmN{4z^Pr`Qkp<`7W=Rq6f%vX@H>DDb%m40E*wMN=$L6samJr0h{v`J*X6%wx{E&bpLl`O))(6~AkhqKUqdFE(d* z8Fg&?596(b7MnR^082_0M`KD-*Zl0v72UVOB9)o`%O}6R6*}NEaLGzH6D6_@HpqP%<1q?_|88`HXwoTo`q`Q0Ze7kjahU+XHs zjuOK!++?g%#n@FpE-h6vwslWd(Ph_;Gq-YKG?`_b`r)N(6hgZnd@pci&3a)Ypi=cf3rIIG{&w zao%BHhj3NCk*#oKAn4IX3a_zbRz&)!_}hEkq<7pt_-4smh_~Ge6#L&wq=9L%?1Z1( z%Ne^EPsa5gnx82uTYM?K1eDItgU=J&?zGQ;GUX57gX_aimjk3Q4sv8Bh;BVC!q%Mo z_r!uGNIUI7B{+7imrBpCmT!W#1PF}^*gD(5ZtyvgxZk^J}STh3j~{}`&jluk-d-+Y^1gO;Ha?L!`rq^Al@OVDM3Ju6U&RllzJ)tro-U zShLSp0lLLsmPtw?)x%Dl{*46b0jh=?a#%Wqw(5dBo$hcw0SKH&Y&gWoW5s`+<=xi_ zSVLg(QJ0(n#rfgJ^LNd`wr9HbL#8!*Sj;PF1(Q5wfBUTw!$5}o+`O!9BPJvQjU1ci z_gSyPYp1zwn#hsY07Rc}cwVPxnGDk3K`YciCM$uMTwUvEYpyV|pz(`v*B*8h3On~u zwM;>41oJk3FWsj@$$$#hWM4#Zn+LcHwLN;;5<5aeIZ%9-&aCz4$rNVD>?Fh{EiKa+Lsf$JI}RwFlTqvhFQQ=q(XkZfyjnYUGjI*+WneYBMIDiLiJg zD2P%INc)3+^7vj8`XuevRLpMqbOG&i(aEkV8wq5YLQulbjbBlHZnz9gzD!8Da<&>+ z@LITGM!7^e-to}2R!{U(GMSgTpTA7Ia}8k7&V$`b2kB|0KiVw0-dEX;dP`)i!g1FQ zpXLO-dc1w#U7D)t>Kd`2XjBrg36Hd$Rc-|$a+ZR3Q&!>+&XU!6G3IP9M?OB=mv`BJ zSBF0Nw+BD#YjNPye^yR&v{CZ@p zhUxwNshZPP#pafCcnt$0Ja|V;%2QgZ`E?~k+?Wv$CxW@DmkPLOE1Q=8oW+NRh9 zT~WRNy6gK;)zN-Z?hmfW)&smQZz(4Rwja(~25$ywDb4MuqmG?)sj+O0sn6ZcLl?&9 zY@H0QM-Z#&BevfnD^sTE_uW6ycBYi}b-4X(`fKm-Q{e5?Dj$=gaM`pT-lX6;!PSq5 zeMIMOYurZs`v`zUguRiF0}f*EttL@Ux&6)cDFplw?B6oSu*NM-4Zs5#PnrsLd0qm( zjEK6HuZk5fNH`?z2sK`sE9mE%_t*7KqvxF!?VRGRl?faz=Ovq~}t3PvodQ+dgPGDAHDwhSETQx8DQ~dZci!$d;u;T*$M)==l!aW*^`B;LC zcso(k)D;Zgoo7o)C{3O4Oii3zgYiX1S}9Q=g2C!xm*A>dZ>gsqDf3bX$3cJe%O(A_IAl@bi77^0RVv7L&76bTCmB_B}az zj6aN8#V9KGZq*CqNrN?4oE5Q$5cGQ1ta0gf>9Z`sEtLa;j7P6JQ@Ogn8-)dr8l<0p z&fXVnC6?a@8f`3FD>8FCOpfH&e%#FdQW0y9vGy(?%LyiMGH#WnL6oL2$ z3hRh;tBuoEa8sf>%~T9%@~8iOB3SsEqUb;uE6vdCrw82(oGUW@(<}k$YTG_N83`zy z>`JNkpQgf%|4awda`r4ba;_&ZMWx!_otpJDN?~0~?zp)Ez{an}o5X}Xha5u0&SH3- zX&U2pfQrh2e7Ayyp^zx~_2B`H0EWmsiED^2wrw~<@g9muuFkjqVm$XDzE60)LeTEpgMoxC4%{{i|VBzjjXSjJ#?=>uS)T zC4Zz71ORCG{<{l6=mL;oJztQV_GK2a{3lU~!|&?yo=80J?{xoc^zN!UPac_sav>EtPGjhN=LHh)9gp`X4ic7bOQu^3 zoxN9;w5#5s_>?M_w8cNT<$jgK6V0@?MyzW2Dwtp^a-Sk~XlsCaNq6PvpV@<~=aE53 z-8XThl8mwI2kr;TuxZr8q4cxQgZ)t+3VQ4jj zRoLj-(1kNMT(uZV-H7lfhy;Df)$o(44b-kS=26`B z_x)4aYl0?9^)(6UGGEX@EoLD=yX-3e)4*JDoenuP=$))7ULmFNNFu7mSs0Bf8X zN50yG4HSw7Pb*~y9b*dS{Nc-tyF4kmXJbx5cioE?ipER!y$u8bIUaT=@lQ)3`CVXW zuRQBxN&n>#{P4h^DDW4e)=L7hlJO`b`vRU?(IRB7;6`_|$^!h9gYp6pQ#4)_87?RU z02;ZDe>8JVeC}7h{rawZ#^rXb??!|#3|)Am?7))s;rtY06lD3~K-M&AuMj2)(kRpD z>{B-;d5nU2_u>H6&Q2_|L+KjOxesKERjEEqF16#YpJxqgpOR6+iz<39CJhkZ`^H~} zk95s8)n9VN2m~@638MD4QF1Fy;!5(HPBVSDReDF17IwH>?|f&!n!vu0(V-q>eH>J} zcz-sr+imyce$qAEcQb?AW8by6kn+~T2fzw;PS$~LCwTnMICJsa2$=DuD|7tyreO#k z%4u_6rFi0pmyeO-x%T;Nge}6YoC_}0B(+TV26L|yRS<1mrtPudMd%17iB?pr;qyjK z{B5Df-J5LQ6m~$$VO8C8?N**TuR2=WEy6aYSVHK)9YEmvQX~0@H$Z7Ka@{hViVI_= zOIf0|c~1Ld847H?HN*Yxjh#(VWuQlQ!k-Q09-xeaBw8^}ptPqC@$xKb>!`PEVVXF( z_N8Jg&F8X+Qizz!CLGMPj0a;qX5C2m$^fgRXT4)02q+9g?OcsI#ge@4#5vP}vMh-1 z9Kh=aq{&yj)!b+{O{RC!u%GuX0!$ z;|}v!+cEoYO@bXAs{&!YBb}F4~R{fg-wi~P*?D*he zA)U>%W-7t`#fDgeP2jE7L!mK6>KR(?P3>0hfqy3N^26g=GA_VM6QQS>EO_` zu$28jc6!qy<{a=>YtoFyq|^go#blb?(Uu>db$Hp!su=yxnq%7> zlhcOmb3%4$(X%K&pObC+QO&LLUyrjQ?q@i%)C%6vT-un31mA!qh-;^CYLbJl4w`1R-1e9n z4b$YoiHnh@z)APa!bak@{5>X&fDGJ1Kypz#dVU$coSk0S#-t}Le}NWMOf8|$TNdV@L}>(bU^nQI4a6FG;7HYb zjZl2(l>*JXt!?|LpB$d<2>YexOJ5`G0GDFX74$g9iET7K=fD8FQeJ(ChM7RBS1b$ipoAsllWj8K$oQa<^TlN%sf+xEqdml= zL#~QP8l=&g*I?S!!WB^=iQ5p)!ZJBw|=4xhVug8hgQro_AN5#+WnqG9r5VYj$z z?P1dg5G%5?)av_%nmCuiaRvE+f|3!{uDP$)yrX|WIg3QohJqXFD6CL%ZapOyB`U=!v6eCMa4De3pKIRzxWNuVM&jD zMW)>x1P$}}vy{IDWIP2a@#(+Bw=+aKTJDeZcCg!_oWk@ho=b6IULK))eB5h&< z^Mn#29u9>Xlybb*u5Jv0Cv|aBz{d}Jc$WSl?yG|{?w$;t6%C#Z+Kt-GPUI>CB6%m4;nu~VUnQgXa!cW- zz8IH`4X5ZTN8dbOo(?AdxjroI$otUrh1yWYtSh zC+Z`;TXEr;x!+*LFKqMU5ko<`UQKH8r}Vg|H!5>$MK*%=T>j@L+QEr;Hw;mZ$s>8J zycrS?5(H>lt4m&}A%>prsZp?-fjz!-kYXTS$^%kqw53vRWPO_4;4xPM$yfMqbqD9W z(2hQJM{x=|^LI$Hc8`)IC_Nr^4INlR7izHYTxq2z4MP61A+Hm?5#)~y1XQfhsv!e3V&Lpwn@ae^=S{#MD3Ot_}J@`}$fl6NkYP z;T!?>zU{wmz4rl$eA@@}$2)ePO?^>c4CbC)DXj>;MIv;zP04_u`*W$*sTTBv{+FZ1F^sU+-%P_2$Wa8$vb&vTA{NfP0|)CK9jQYG+LXG`rw*G z#?x4cdjH2&!FzcdD|_Ne8qchYs?y8JMO9p(g<6kE7xc-IVIxtnaZc>*n&VXrZ+uH| z=@-wbWx_}HWtd;N#R> zcOvzA=NWP{>`TBtt#mU!J~K7vC&v6}BsN-V_wAjf*UYY=Zxy?MH?R>(`%Zcrv*fjS zYSVpYtg-_@%HKxfYCB?I&5?n71^rQJPc0@g4JFhy%Sks-Bwn?xj#mk}H6+Kh&vcPF>?VfB8$JqA8%vUyec1m0GKz(^^y6b87U(Gk&NhmUNbQ zN)-Ipc_KrIs_~}{vJv}^P|)3*dfN7|AI4;i2SWI@)Z!TJjM~=1y=MTAX{zj$C2Z~R zBU}H$VaAjdKF1GXJaa)p;g0DJ+dn>`4EvFi{oWlJ3B>?INoQ#f0#pP)>L61(9xqJ1hLj0_e(X~m~`wbFd(n$-Gg;3Z|hwv z=xG0RN^I(<*Q!OsWZutv;c=aH)Z<0P{+KZ>n;Ik=T+Mh2u)l+=OY?#s!A|@qx3qAV zwK7`!4#Jn1w|tGWld#pI9u+2yBxh~il?cI~t?N?t5hu~i@NEBc(4EVN$uDhL5DwQX zJh$B66JDCN{MK^E+Bxv+FBmkqGqB(sUO#aHk3n0;UJ=TX^&C>Rr zJ2VZVOwc!-n#T3C7wM3EQ^`Srw*?(e7B{6E7O7UnA&u%XL71Ra8HiqOcsT4t1Pdgy zzyoM+G1r`n48FfwlQP4HldM_7x=6+E6p;h=df#%L9#&J)ZrkDz0^Kp>uZJ_VIjFHr z9v;{$rx9iOU&5CRe~g6H$+bbB)|faBZb|@b?bfv$`Jbo%_yhiNW_FGzGH;b(r!Sj9dy0A(R<09CraVRU$!w|xKlySQrAY-myE zvx?Z?!r2eZ`&?R%5KUW%rXwAiIkD#8@ax~8w`UB-O9-7c-HMs7QP;S6E~mcgY8BF>J@d=+zRvzOTtn&;3^p>T>6kLqSUKe@rYtlDjt5&GL%_| z<=Kz}rxkB-3wq;h6*8~k{#|xG= zXzi8-# z+0p-+1H1Td*~lpx9q7BRHS~}o@}5r%{ggI0fpdRuX*p``3Kl_lHxHHkIp3dqt4X1> z{FSf=+`Rm{(B2X9fyLEP`ChXi80w#il3i=pT#}vr4|`9=(Hi>9nXd_TPGpuBjYN_;Ly_NVJ6uXkJmmS|gTAq#6oV*bq~VwAon^k8;~^3}zhVVN$BHZd(B?W* zmW;F}y^MXMXNwm5r>_KuKl3F}a=%wzD+2l%JKj|yI`tg?mW@wUjMIPSl%14ia+lQv z6A}Fdw=#9`zpat3XjAEEQ>w@AFJYv51aoA-yW4cUQo$YbrV5xf%(hZ$84 zLN?S1ed#Ytk^ZsT=7c}MmvCb|=mvxyR|H9?!aQC-AL-AfKg2(i4m#a~GEu_9;c`O7 zKSb*qPWg9i1QLEMu_5x&llb=d5(=h7!wq*aMt^in>(Py2qTm3nT=?x(+`|IeDo};r zEM1g@0Cs6u`AIICx^`tt;jIZUgGtU8o=8~@JX&q%Pd12*33^a$J1P=c|N zga*ILrA3=bN8jf|uhzJA1r1oPaSNXf)Pu*llv*B!jbhP+TC!FHfGT^8^0wYcz=Y21n z$o-oDw7nFK^APu#_Uqx1`BYX7WhVE_5vc#Pey$L-d~19nS0w%Vx5Hl4C9~{_*i(jn zAcHSSK9N?3j|H503-Y(VrSD1KX&m^bv zGA0TU-6X7**(YC(t{U!%PwuTTPJ!jNb1k|<&q&^cQU^xxyT*K?4ymx?U$obaKjVJ5XLLqe#?mVtM2+K8E9DeQo4^0L$4P%E6N0N2 z5cwT|W|GI>`Xpl?Ez3_3SfZ{Z0bn%$@wT($Q23H^s(#mVILbj2O|JG=YKSs9y$)#- zt*Z&1*jnIl8BS4z`Q*!__v>u*61{(bMOzOdZ`PBhN33vr75?fW6dcs;Wth5YSE;Fw z!;B>vSzDv$#nX+iYb7h{h>q(rV8y{AXfa44=e-GO%~bwa^cEP28>DL^9+h2xqTi^% z85Tlj#<`u6-vn18=w%D#ni}Yv?kjsa%LtgN7KhERyf%A2guhcM%4oT3^y4R7Re-$k z=CSC-1JbV>AG%Xc?k?>dqTTa_p~|5GF!pA53BtvmQi4wY=!y*)TU^7c?l*c=$i?M( zo*~kAVjJ?a6S{$aipF26VQ?!>CnPg9Q7D~C`@J|vEz9f3D=P28>(F(`jyQE6KvmMWnT#+9(;FL~;KE*!r! zCLyJl0(NH?ymIF~^mimsV%MiuTwch>Y7K@DpNp0htLAQnU#)kk-K#vjeVyy8R5SVn z;|NMfrCgwM1U)kuo+i+5SVy)HbL*u8{wes_!>oge>)QZ2x)Q#oZg+JzU1cQ!krY^yUK&JXv+ixe80q< zesjWzgFV6Hbjb}h_w4_9)7ofCRc#FIL59AW4fq>vo~qGr)nR%eH`FP&mFWR0@lub}FgSW!29q}sZnd@zQ%_K-BFVQ0;WN2;vf{U7r+FB3@^rxGqL=)flv>xqV#7-~awDkQykdDZ> zl2}}I7J&uf>OhCycBg#k-%x<9J2=ghNvZZhAV=wUA1nbtmdr#3xUjW3|ipVhn3yeizuQ6PwKzhl#DMW&`iMX81NSN30!1mS6A;fu7>(XJ0Or*lictQDcf<$w!UMs zZ3SRu^3d3&6neia)n|leYwcq)1FB6!nRX$D=D}~kFtIX_1}jc&5SG3_ISwqc*t4jG&6;?`FA*V14AB0_ zbiDd>+l+IEUD<_}$Dpd)p~T83jZ7)EhgL*iLJJNG;Y)w~ck2S4)F(eSeWmayyZA8m z38V{RG{%h-yF)kf$GwZ0@Bu9@JOQ05bS?Ohxee0!92IHyDAD#EGTvC5crPtX%wD>l zU09NCTcO?wFOXEel+Ats;-ryuWlOi?e*}$`KWXHA?+W4DcgNH#MUfA(4a)oJrEE*m zzug$2AzY}5vdQF+vB4VKhaKr#tY9Oazjlt_Vcq<%|0<(FPXrCGT;0tBKG-&jpB*2+|3rTq@OPDMGXlk{xXQBi+9I teDrEow literal 0 HcmV?d00001 diff --git a/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Gitako-64.png b/Safari/Gitako/Gitako/Assets.xcassets/AppIcon.appiconset/Gitako-64.png new file mode 100644 index 0000000000000000000000000000000000000000..e9db0ac98bc3fbc31a31dbb2dd66c7bbebe20b38 GIT binary patch literal 3326 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 - + - - + @@ -67,7 +66,7 @@ - + @@ -97,17 +96,17 @@ - + - + - + - - + + @@ -163,6 +162,6 @@ DQ - + diff --git a/Safari/Gitako/Gitako/Info.plist b/Safari/Gitako/Gitako/Info.plist index cfbbdb7..d2385cc 100644 --- a/Safari/Gitako/Gitako/Info.plist +++ b/Safari/Gitako/Gitako/Info.plist @@ -20,6 +20,8 @@ 1.0 CFBundleVersion 1 + LSApplicationCategoryType + public.app-category.productivity LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSMainStoryboardFile diff --git a/Safari/Gitako/Gitako/ViewController.swift b/Safari/Gitako/Gitako/ViewController.swift index ce019ae..0fe5f61 100644 --- a/Safari/Gitako/Gitako/ViewController.swift +++ b/Safari/Gitako/Gitako/ViewController.swift @@ -1,3 +1,10 @@ +// +// ViewController.swift +// Gitako +// +// Created by Enix on 13/6/2021. +// + import Cocoa import SafariServices.SFSafariApplication import SafariServices.SFSafariExtensionManager @@ -8,7 +15,7 @@ let extensionBundleIdentifier = "enixcoda.Gitako.Extension" class ViewController: NSViewController { @IBOutlet var appNameLabel: NSTextField! - + override func viewDidLoad() { super.viewDidLoad() self.appNameLabel.stringValue = appName @@ -27,7 +34,7 @@ class ViewController: NSViewController { } } } - + @IBAction func openSafariExtensionPreferences(_ sender: AnyObject?) { SFSafariApplication.showPreferencesForExtension(withIdentifier: extensionBundleIdentifier) { error in guard error == nil else { diff --git a/Safari/Gitako/GitakoTests/GitakoTests.swift b/Safari/Gitako/GitakoTests/GitakoTests.swift new file mode 100644 index 0000000..ab23269 --- /dev/null +++ b/Safari/Gitako/GitakoTests/GitakoTests.swift @@ -0,0 +1,33 @@ +// +// GitakoTests.swift +// GitakoTests +// +// Created by Enix on 13/6/2021. +// + +import XCTest +@testable import Gitako + +class GitakoTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/Safari/Gitako/GitakoTests/Info.plist b/Safari/Gitako/GitakoTests/Info.plist new file mode 100644 index 0000000..64d65ca --- /dev/null +++ b/Safari/Gitako/GitakoTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Safari/Gitako/GitakoUITests/GitakoUITests.swift b/Safari/Gitako/GitakoUITests/GitakoUITests.swift new file mode 100644 index 0000000..3bcaea9 --- /dev/null +++ b/Safari/Gitako/GitakoUITests/GitakoUITests.swift @@ -0,0 +1,42 @@ +// +// GitakoUITests.swift +// GitakoUITests +// +// Created by Enix on 13/6/2021. +// + +import XCTest + +class GitakoUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/Safari/Gitako/GitakoUITests/Info.plist b/Safari/Gitako/GitakoUITests/Info.plist new file mode 100644 index 0000000..64d65ca --- /dev/null +++ b/Safari/Gitako/GitakoUITests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + From 6f9d157cde10cb50d15819f2631f97f6bd26698d Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sun, 13 Jun 2021 16:35:52 +0800 Subject: [PATCH 04/12] build: allow accessing source map in dev --- webpack.config.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index b28b018..b534407 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,6 +9,7 @@ const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPl const srcPath = path.resolve(__dirname, 'src') const packagesPath = path.resolve(__dirname, 'packages') +const IN_PRODUCTION_MODE = process.env.NODE_ENV === 'production' const plugins = [ new CopyWebpackPlugin([ { @@ -17,9 +18,18 @@ const plugins = [ transform(content) { const { version, description, author, homepage: homepage_url } = require('./package.json') const manifest = JSON.parse(content) - return JSON.stringify( - Object.assign(manifest, { version, description, author, homepage_url }), - ) + Object.assign(manifest, { + version, + description, + author, + homepage_url, + }) + if (!IN_PRODUCTION_MODE) { + Object.assign(manifest, { + web_accessible_resources: manifest.web_accessible_resources.concat('*.map'), // enable source mapping while developing + }) + } + return JSON.stringify(manifest) }, }, { @@ -50,7 +60,6 @@ if (analyse) { console.log(`BundleAnalyzerPlugin added`) } -const IN_PRODUCTION_MODE = process.env.NODE_ENV === 'production' plugins.push( new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV), From c9c968aa2c218fa8aab4c0b06d604c03c50f427f Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Fri, 14 Jan 2022 16:53:44 +0800 Subject: [PATCH 05/12] build: add webpack build support for Safari --- package.json | 3 ++- webpack.config.js | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 57c14b2..5b71c77 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "private": true, "homepage": "https://github.com/EnixCoda/Gitako", "scripts": { - "start": "VERSION=dev-v$(node scripts/get-version.js) webpack --watch", + "dev": "VERSION=dev-v$(node scripts/get-version.js) webpack --watch", + "dev-safari": "TARGET=safari yarn run dev", "debug-firefox": "web-ext run -s dist", "analyse-bundle": "ANALYSE= NODE_ENV=production webpack", "postinstall": "rm -rf node_modules/@types/react-native && node scripts/fix-pjax-api", diff --git a/webpack.config.js b/webpack.config.js index b534407..c34aae7 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,6 +9,17 @@ const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPl const srcPath = path.resolve(__dirname, 'src') const packagesPath = path.resolve(__dirname, 'packages') +function resolvePathInput(input) { + return path.isAbsolute(input) ? input : path.resolve(process.cwd(), input) +} + +const buildTarget = process.env.TARGET +const buildTargetOutputMap = { + safari: 'Safari/Gitako/Gitako Extension/Resources', +} +const envOutputDir = process.env.OUTPUT_DIR || buildTargetOutputMap[buildTarget] +const outputPath = envOutputDir ? resolvePathInput(envOutputDir) : path.resolve(__dirname, 'dist') + const IN_PRODUCTION_MODE = process.env.NODE_ENV === 'production' const plugins = [ new CopyWebpackPlugin([ @@ -24,6 +35,13 @@ const plugins = [ author, homepage_url, }) + + // Disable custom domains for Safari + if (buildTarget === 'safari') { + Reflect.deleteProperty(manifest, 'optional_permissions') + Reflect.deleteProperty(manifest, 'background') + } + if (!IN_PRODUCTION_MODE) { Object.assign(manifest, { web_accessible_resources: manifest.web_accessible_resources.concat('*.map'), // enable source mapping while developing @@ -75,7 +93,7 @@ module.exports = { devtool: IN_PRODUCTION_MODE ? 'source-map' : 'inline-source-map', mode: IN_PRODUCTION_MODE ? 'production' : 'development', output: { - path: path.resolve(__dirname, 'dist'), + path: outputPath, filename: '[name].js', }, resolve: { From c493509579c0e45e2572c9d22fee38ad17547d41 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Fri, 14 Jan 2022 19:04:17 +0800 Subject: [PATCH 06/12] feat: support safari tab bar toggle --- src/components/SideBarBodyWrapper.tsx | 12 ++++++++++-- src/utils/general.ts | 10 ++++++++++ src/utils/hooks/useConditionalHook.ts | 6 ++++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 src/utils/hooks/useConditionalHook.ts diff --git a/src/components/SideBarBodyWrapper.tsx b/src/components/SideBarBodyWrapper.tsx index 63dd118..e9a6a98 100644 --- a/src/components/SideBarBodyWrapper.tsx +++ b/src/components/SideBarBodyWrapper.tsx @@ -6,6 +6,8 @@ import { defaultConfigs } from 'utils/config/helper' import { cx } from 'utils/cx' import { setCSSVariable } from 'utils/DOMHelper' import * as features from 'utils/features' +import { detectBrowser } from 'utils/general' +import { useConditionalHook } from '../utils/hooks/useConditionalHook' type Size = number export type Size2D = [Size, Size] @@ -36,6 +38,11 @@ export function SideBarBodyWrapper({ const configContext = useConfigs() const blockLeaveRef = React.useRef(false) + const heightForSafari = useConditionalHook( + () => detectBrowser() === 'Safari', + () => useWindowSize().height, + ) + React.useEffect(() => { setSize(baseSize) }, [baseSize]) @@ -95,11 +102,12 @@ export function SideBarBodyWrapper({ [onLeave], ) - const newLocal: [number, number] = React.useMemo(() => [size, size], [size]) + const dummySize: [number, number] = React.useMemo(() => [size, size], [size]) return (
{children}
@@ -113,7 +121,7 @@ export function SideBarBodyWrapper({ onResizeStateChange={state => { blockLeaveRef.current = state === 'resizing' }} - size={newLocal} + size={dummySize} /> )}
diff --git a/src/utils/general.ts b/src/utils/general.ts index 519abcf..619b889 100644 --- a/src/utils/general.ts +++ b/src/utils/general.ts @@ -34,6 +34,16 @@ function detectOS(): OperatingSystems { export const os = detectOS() +export const detectBrowser = () => { + const ua = navigator.userAgent.toLowerCase() + if (ua.includes('safari')) { + if (ua.includes('chrome')) return 'Chrome' + return 'Safari' + } + + return 'Other' +} + export function friendlyFormatShortcut(shortcut?: string) { if (!shortcut) return '' if (os === OperatingSystems.Windows) { diff --git a/src/utils/hooks/useConditionalHook.ts b/src/utils/hooks/useConditionalHook.ts new file mode 100644 index 0000000..613269d --- /dev/null +++ b/src/utils/hooks/useConditionalHook.ts @@ -0,0 +1,6 @@ +import * as React from "react"; + +export function useConditionalHook(condition: () => boolean, hook: () => T) { + const [use] = React.useState(condition) + if (use) return hook() +} From 29c9314c6d613db5885c8331efa9dd05dde9381e Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sat, 15 Jan 2022 22:21:12 +0800 Subject: [PATCH 07/12] fix: prevent selection when resizing in Safari --- src/components/ResizeHandler.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/ResizeHandler.tsx b/src/components/ResizeHandler.tsx index 05692f9..4c4442a 100644 --- a/src/components/ResizeHandler.tsx +++ b/src/components/ResizeHandler.tsx @@ -75,7 +75,9 @@ export function useResizeHandler( return () => window.removeEventListener('pointerup', onPointerUp) }, []) - const onPointerDown = React.useCallback(({ clientX, clientY }: React.PointerEvent) => { + const onPointerDown = React.useCallback((e: React.PointerEvent) => { + e.preventDefault() // Prevent unexpected selection when dragging in Safari + const { clientX, clientY } = e pointerDown.current = true initialSizeRef.current = [clientX, clientY] baseSize.current = latestPropSize.current From 3d4bf82f0225d8b7fd73de0a798adfbf3bf5006d Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sat, 15 Jan 2022 22:21:48 +0800 Subject: [PATCH 08/12] fix: style patch for select in Safari --- src/components/SideBar.tsx | 6 +++++- src/styles/index.scss | 18 ++++++++++++++++++ src/utils/DOMHelper.ts | 15 ++++++++++++--- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/components/SideBar.tsx b/src/components/SideBar.tsx index a351b38..a2cb811 100644 --- a/src/components/SideBar.tsx +++ b/src/components/SideBar.tsx @@ -10,7 +10,7 @@ import { platform } from 'platforms' import * as React from 'react' import { cx } from 'utils/cx' import * as DOMHelper from 'utils/DOMHelper' -import { run } from 'utils/general' +import { detectBrowser, run } from 'utils/general' import { useCatchNetworkError } from 'utils/hooks/useCatchNetworkError' import { useLoadedContext } from 'utils/hooks/useLoadedContext' import { useOnPJAXDone, usePJAX } from 'utils/hooks/usePJAX' @@ -49,6 +49,10 @@ export function SideBar() { } }, [hasMetaData]) + React.useEffect(() => { + if (detectBrowser() === 'Safari') DOMHelper.markGitakoSafariFlag() + }, []) + const sidebarToggleMode = configContext.value.sidebarToggleMode const intelligentToggle = configContext.value.intelligentToggle const $shouldShow = useStateIO(intelligentToggle === null ? false : intelligentToggle) diff --git a/src/styles/index.scss b/src/styles/index.scss index a3b5681..c7146cd 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -979,6 +979,24 @@ $minimal-z-index: max( } } +// patches for Safari +.gitako-safari { + .#{$name}-side-bar { + .#{$name}-side-bar-body { + .#{$name}-settings-bar { + &-content { + .field { + select { + -webkit-appearance: none; + padding: 0 6px; + } + } + } + } + } + } +} + // gitee .git-project { // reset styles diff --git a/src/utils/DOMHelper.ts b/src/utils/DOMHelper.ts index 94ddee9..b369b46 100644 --- a/src/utils/DOMHelper.ts +++ b/src/utils/DOMHelper.ts @@ -2,15 +2,24 @@ * this helper helps manipulating DOM */ +export function setGitakoBodyClass(className: string, enable: boolean) { + const classList = document.body.classList + if (enable) classList.add(className) + else classList.remove(className) +} + /** * when gitako is ready, make page's header narrower * or cancel it */ export function markGitakoReadyState(ready: boolean) { const readyClassName = 'gitako-ready' - const classList = document.body.classList - if (ready) classList.add(readyClassName) - else classList.remove(readyClassName) + return setGitakoBodyClass(readyClassName, ready) +} + +export function markGitakoSafariFlag(enable = true) { + const className = 'gitako-safari' + return setGitakoBodyClass(className, enable) } /** From bf360efe1f8ee450e2e2008a2576f1eff97d3544 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sun, 16 Jan 2022 21:44:45 +0800 Subject: [PATCH 09/12] feat: use consistent selector chevron --- src/components/SelectInput.tsx | 33 +++++++------ src/styles/index.scss | 84 +++++++++++++++++++--------------- 2 files changed, 64 insertions(+), 53 deletions(-) diff --git a/src/components/SelectInput.tsx b/src/components/SelectInput.tsx index 3701e9b..48479a4 100644 --- a/src/components/SelectInput.tsx +++ b/src/components/SelectInput.tsx @@ -11,21 +11,24 @@ export function SelectInput({ } >) { return ( - +
+ + +
) } export type Option = { diff --git a/src/styles/index.scss b/src/styles/index.scss index c7146cd..5d9cfa7 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -86,6 +86,19 @@ $minimal-z-index: max( } } +@mixin pseudo-primer-icon($icon-name) { + content: ''; + display: block; + cursor: pointer; + user-select: none; + -webkit-mask-image: url('~@primer/octicons/build/svg/' + $icon-name + '.svg?inline'); + mask-image: url('~@primer/octicons/build/svg/' + $icon-name + '.svg?inline'); + -webkit-mask-size: contain; + mask-size: contain; + -webkit-mask-position: center; + mask-position: center; +} + .#{$name}-ready { // github // code folding start @@ -116,19 +129,10 @@ $minimal-z-index: max( align-items: center; &::before { - content: ''; - display: block; width: 10px; height: 20px; - cursor: pointer; - user-select: none; transition: 0.25s ease; - -webkit-mask-image: url('~@primer/octicons/build/svg/chevron-down.svg?inline'); - mask-image: url('~@primer/octicons/build/svg/chevron-down.svg?inline'); - -webkit-mask-size: contain; - mask-size: contain; - -webkit-mask-position: center; - mask-position: center; + @include pseudo-primer-icon('chevron-down'); } @include interactive-background-on-before( @@ -894,16 +898,38 @@ $minimal-z-index: max( cursor: not-allowed; } } - select { - width: 100%; - -moz-appearance: menulist-button; - // make it look like text inputs - height: 36px; - border-radius: 6px; - border: 1px solid var(--gitako-border-default); - background: var(--gitako-canvas-default); - color: var(--gitako-fg-default); - box-shadow: var(--gitako-primer-shadow-inset); + .select-wrapper { + position: relative; + + select { + width: 100%; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + // make it look like text inputs + height: 36px; + padding: 0 6px; + border-radius: 6px; + border: 1px solid var(--gitako-border-default); + background: var(--gitako-canvas-default); + color: var(--gitako-fg-default); + box-shadow: var(--gitako-primer-shadow-inset); + } + + .chevron { + position: absolute; + right: 6px; + top: 8px; + width: 10px; + height: 20px; + + &::before { + width: 10px; + height: 20px; + background-color: var(--gitako-fg-subtle); + @include pseudo-primer-icon('chevron-down'); + } + } } &.field-checkbox { padding-left: 20px; @@ -979,24 +1005,6 @@ $minimal-z-index: max( } } -// patches for Safari -.gitako-safari { - .#{$name}-side-bar { - .#{$name}-side-bar-body { - .#{$name}-settings-bar { - &-content { - .field { - select { - -webkit-appearance: none; - padding: 0 6px; - } - } - } - } - } - } -} - // gitee .git-project { // reset styles From 2492f4b13facaee32bc174f59bd5c426c8d91f76 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Tue, 8 Feb 2022 17:08:25 +0800 Subject: [PATCH 10/12] build: update xcode info --- Safari/Gitako/Gitako.xcodeproj/project.pbxproj | 8 ++++++-- Safari/Gitako/Gitako/Info.plist | 2 +- Safari/Gitako/Gitako/ViewController.swift | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Safari/Gitako/Gitako.xcodeproj/project.pbxproj b/Safari/Gitako/Gitako.xcodeproj/project.pbxproj index 6d9ffd4..e65d594 100644 --- a/Safari/Gitako/Gitako.xcodeproj/project.pbxproj +++ b/Safari/Gitako/Gitako.xcodeproj/project.pbxproj @@ -497,7 +497,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.3; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -552,7 +552,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.3; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; @@ -616,6 +616,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.14; + MARKETING_VERSION = 3.7.0; PRODUCT_BUNDLE_IDENTIFIER = enixcoda.Gitako; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -629,14 +630,17 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = Gitako/Gitako.entitlements; + CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = KVT97368XL; INFOPLIST_FILE = Gitako/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.14; + MARKETING_VERSION = 3.7.0; PRODUCT_BUNDLE_IDENTIFIER = enixcoda.Gitako; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; diff --git a/Safari/Gitako/Gitako/Info.plist b/Safari/Gitako/Gitako/Info.plist index d2385cc..4a87b6f 100644 --- a/Safari/Gitako/Gitako/Info.plist +++ b/Safari/Gitako/Gitako/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 1.0 + $(MARKETING_VERSION) CFBundleVersion 1 LSApplicationCategoryType diff --git a/Safari/Gitako/Gitako/ViewController.swift b/Safari/Gitako/Gitako/ViewController.swift index 0fe5f61..d84c4ea 100644 --- a/Safari/Gitako/Gitako/ViewController.swift +++ b/Safari/Gitako/Gitako/ViewController.swift @@ -27,7 +27,7 @@ class ViewController: NSViewController { DispatchQueue.main.async { if (state.isEnabled) { - self.appNameLabel.stringValue = "\(appName)'s extension is currently on." + self.appNameLabel.stringValue = "\(appName)'s extension is currently on. You can close this window now." } else { self.appNameLabel.stringValue = "\(appName)'s extension is currently off. You can turn it on in Safari Extensions preferences." } From 9732903a217871d7d7bb34ea1c9be862a2906436 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sat, 12 Feb 2022 20:50:26 +0800 Subject: [PATCH 11/12] build: fix build version --- Safari/Gitako/Gitako Extension/Info.plist | 4 ++-- Safari/Gitako/Gitako.xcodeproj/project.pbxproj | 8 +++++++- Safari/Gitako/Gitako/Info.plist | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Safari/Gitako/Gitako Extension/Info.plist b/Safari/Gitako/Gitako Extension/Info.plist index b3c30e9..6b030ef 100644 --- a/Safari/Gitako/Gitako Extension/Info.plist +++ b/Safari/Gitako/Gitako Extension/Info.plist @@ -17,9 +17,9 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 1.0 + $(MARKETING_VERSION) CFBundleVersion - 1 + $(MARKETING_VERSION) LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSExtension diff --git a/Safari/Gitako/Gitako.xcodeproj/project.pbxproj b/Safari/Gitako/Gitako.xcodeproj/project.pbxproj index e65d594..6ab018f 100644 --- a/Safari/Gitako/Gitako.xcodeproj/project.pbxproj +++ b/Safari/Gitako/Gitako.xcodeproj/project.pbxproj @@ -567,6 +567,7 @@ CODE_SIGN_ENTITLEMENTS = "Gitako Extension/Gitako_Extension.entitlements"; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; INFOPLIST_FILE = "Gitako Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -574,6 +575,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.14; + MARKETING_VERSION = 3.7.0; PRODUCT_BUNDLE_IDENTIFIER = enixcoda.Gitako.Extension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -587,6 +589,7 @@ CODE_SIGN_ENTITLEMENTS = "Gitako Extension/Gitako_Extension.entitlements"; CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; INFOPLIST_FILE = "Gitako Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -594,6 +597,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.14; + MARKETING_VERSION = 3.7.0; PRODUCT_BUNDLE_IDENTIFIER = enixcoda.Gitako.Extension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -610,6 +614,7 @@ CODE_SIGN_ENTITLEMENTS = Gitako/Gitako.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; INFOPLIST_FILE = Gitako/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -630,9 +635,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = Gitako/Gitako.entitlements; - CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = KVT97368XL; INFOPLIST_FILE = Gitako/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/Safari/Gitako/Gitako/Info.plist b/Safari/Gitako/Gitako/Info.plist index 4a87b6f..c748bf6 100644 --- a/Safari/Gitako/Gitako/Info.plist +++ b/Safari/Gitako/Gitako/Info.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 1 + $(MARKETING_VERSION) LSApplicationCategoryType public.app-category.productivity LSMinimumSystemVersion From 209d4dd74147aff01373ad0cff96238f5b94b20c Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sat, 12 Feb 2022 21:36:04 +0800 Subject: [PATCH 12/12] build: update safari build command --- Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 6d7894d..2e1677f 100755 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ build: rm -rf dist yarn build -safari: +copy-build-safari: rm -rf Safari/Gitako/Gitako\ Extension/Resources/* cd dist && cp -r . ../Safari/Gitako/Gitako\ Extension/Resources @@ -54,5 +54,3 @@ compress-env: compress-icons-into-source-for-mz-review: zip -r dist/source-$(FULL_VERSION).zip vscode-icons/icons - -.PHONY: safari