From 932c3f2f155ca1aefb5f790196c0e6ed458674cd Mon Sep 17 00:00:00 2001 From: Bruce Date: Sun, 7 Apr 2019 13:54:07 -0700 Subject: [PATCH] working safari prototype --- .../BlockerExtension.entitlements | 10 + .../ContentBlockerRequestHandler.swift | 22 + Safari/BlockerExtension/Info.plist | 37 ++ Safari/BlockerExtension/blockerList.json | 11 + Safari/HelloGoodbye.xcodeproj/project.pbxproj | 494 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 23987 bytes .../xcschemes/xcschememanagement.plist | 24 + Safari/HelloGoodbye/AppDelegate.swift | 22 + .../AppIcon.appiconset/Contents.json | 58 ++ .../Assets.xcassets/Contents.json | 6 + .../HelloGoodbye/Base.lproj/Main.storyboard | 164 ++++++ Safari/HelloGoodbye/HelloGoodbye.entitlements | 10 + Safari/HelloGoodbye/Info.plist | 32 ++ Safari/HelloGoodbye/ViewController.swift | 30 ++ 16 files changed, 935 insertions(+) create mode 100644 Safari/BlockerExtension/BlockerExtension.entitlements create mode 100644 Safari/BlockerExtension/ContentBlockerRequestHandler.swift create mode 100644 Safari/BlockerExtension/Info.plist create mode 100644 Safari/BlockerExtension/blockerList.json create mode 100644 Safari/HelloGoodbye.xcodeproj/project.pbxproj create mode 100644 Safari/HelloGoodbye.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Safari/HelloGoodbye.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Safari/HelloGoodbye.xcodeproj/project.xcworkspace/xcuserdata/bruceroettgers.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Safari/HelloGoodbye.xcodeproj/xcuserdata/bruceroettgers.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Safari/HelloGoodbye/AppDelegate.swift create mode 100644 Safari/HelloGoodbye/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Safari/HelloGoodbye/Assets.xcassets/Contents.json create mode 100644 Safari/HelloGoodbye/Base.lproj/Main.storyboard create mode 100644 Safari/HelloGoodbye/HelloGoodbye.entitlements create mode 100644 Safari/HelloGoodbye/Info.plist create mode 100644 Safari/HelloGoodbye/ViewController.swift diff --git a/Safari/BlockerExtension/BlockerExtension.entitlements b/Safari/BlockerExtension/BlockerExtension.entitlements new file mode 100644 index 00000000..f2ef3ae0 --- /dev/null +++ b/Safari/BlockerExtension/BlockerExtension.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + + diff --git a/Safari/BlockerExtension/ContentBlockerRequestHandler.swift b/Safari/BlockerExtension/ContentBlockerRequestHandler.swift new file mode 100644 index 00000000..784a78c5 --- /dev/null +++ b/Safari/BlockerExtension/ContentBlockerRequestHandler.swift @@ -0,0 +1,22 @@ +// +// ContentBlockerRequestHandler.swift +// BlockerExtension +// +// Created by Bruce Roettgers on 07.04.19. +// Copyright © 2019 Dirk Hulverscheidt. All rights reserved. +// + +import Foundation + +class ContentBlockerRequestHandler: NSObject, NSExtensionRequestHandling { + + func beginRequest(with context: NSExtensionContext) { + let attachment = NSItemProvider(contentsOf: Bundle.main.url(forResource: "blockerList", withExtension: "json"))! + + let item = NSExtensionItem() + item.attachments = [attachment] + + context.completeRequest(returningItems: [item], completionHandler: nil) + } + +} diff --git a/Safari/BlockerExtension/Info.plist b/Safari/BlockerExtension/Info.plist new file mode 100644 index 00000000..208be7c9 --- /dev/null +++ b/Safari/BlockerExtension/Info.plist @@ -0,0 +1,37 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + BlockerExtension + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSExtension + + NSExtensionPointIdentifier + com.apple.Safari.content-blocker + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).ContentBlockerRequestHandler + + NSHumanReadableCopyright + Copyright © 2019 Dirk Hulverscheidt. All rights reserved. + NSHumanReadableDescription + Add a description of what your extension does here. + + diff --git a/Safari/BlockerExtension/blockerList.json b/Safari/BlockerExtension/blockerList.json new file mode 100644 index 00000000..21f8272a --- /dev/null +++ b/Safari/BlockerExtension/blockerList.json @@ -0,0 +1,11 @@ +[ + { + "action": { + "type": "block" + }, + "trigger": { + "url-filter": ".*", + "resource-type": ["script"] + } + } +] diff --git a/Safari/HelloGoodbye.xcodeproj/project.pbxproj b/Safari/HelloGoodbye.xcodeproj/project.pbxproj new file mode 100644 index 00000000..6d9649f1 --- /dev/null +++ b/Safari/HelloGoodbye.xcodeproj/project.pbxproj @@ -0,0 +1,494 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + EDDE49D5225A9834005DE7A4 /* HelloGoodbye.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = EDDE49D4225A9834005DE7A4 /* HelloGoodbye.entitlements */; }; + EDDE49D7225A9834005DE7A4 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDDE49D6225A9834005DE7A4 /* AppDelegate.swift */; }; + EDDE49DA225A9834005DE7A4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EDDE49D8225A9834005DE7A4 /* Main.storyboard */; }; + EDDE49DC225A9834005DE7A4 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDDE49DB225A9834005DE7A4 /* ViewController.swift */; }; + EDDE49DE225A9836005DE7A4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EDDE49DD225A9836005DE7A4 /* Assets.xcassets */; }; + EDDE4A07225A98DF005DE7A4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EDDE49E9225A9836005DE7A4 /* Cocoa.framework */; }; + EDDE4A0A225A98DF005DE7A4 /* blockerList.json in Resources */ = {isa = PBXBuildFile; fileRef = EDDE4A09225A98DF005DE7A4 /* blockerList.json */; }; + EDDE4A0C225A98DF005DE7A4 /* ContentBlockerRequestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDDE4A0B225A98DF005DE7A4 /* ContentBlockerRequestHandler.swift */; }; + EDDE4A11225A98DF005DE7A4 /* BlockerExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = EDDE4A06225A98DF005DE7A4 /* BlockerExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + EDDE4A0F225A98DF005DE7A4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EDDE49C9225A9834005DE7A4 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EDDE4A05225A98DF005DE7A4; + remoteInfo = BlockerExtension; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + EDDE49FE225A9836005DE7A4 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + EDDE4A11225A98DF005DE7A4 /* BlockerExtension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + EDDE49D1225A9834005DE7A4 /* HelloGoodbye.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloGoodbye.app; sourceTree = BUILT_PRODUCTS_DIR; }; + EDDE49D4225A9834005DE7A4 /* HelloGoodbye.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HelloGoodbye.entitlements; sourceTree = ""; }; + EDDE49D6225A9834005DE7A4 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + EDDE49D9225A9834005DE7A4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + EDDE49DB225A9834005DE7A4 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + EDDE49DD225A9836005DE7A4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + EDDE49DF225A9836005DE7A4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EDDE49E9225A9836005DE7A4 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + EDDE4A06225A98DF005DE7A4 /* BlockerExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = BlockerExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + EDDE4A09225A98DF005DE7A4 /* blockerList.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = blockerList.json; sourceTree = ""; }; + EDDE4A0B225A98DF005DE7A4 /* ContentBlockerRequestHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentBlockerRequestHandler.swift; sourceTree = ""; }; + EDDE4A0D225A98DF005DE7A4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + EDDE4A0E225A98DF005DE7A4 /* BlockerExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = BlockerExtension.entitlements; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + EDDE49CE225A9834005DE7A4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EDDE4A03225A98DF005DE7A4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EDDE4A07225A98DF005DE7A4 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + EDDE49C8225A9834005DE7A4 = { + isa = PBXGroup; + children = ( + EDDE49D3225A9834005DE7A4 /* HelloGoodbye */, + EDDE4A08225A98DF005DE7A4 /* BlockerExtension */, + EDDE49E8225A9836005DE7A4 /* Frameworks */, + EDDE49D2225A9834005DE7A4 /* Products */, + ); + sourceTree = ""; + }; + EDDE49D2225A9834005DE7A4 /* Products */ = { + isa = PBXGroup; + children = ( + EDDE49D1225A9834005DE7A4 /* HelloGoodbye.app */, + EDDE4A06225A98DF005DE7A4 /* BlockerExtension.appex */, + ); + name = Products; + sourceTree = ""; + }; + EDDE49D3225A9834005DE7A4 /* HelloGoodbye */ = { + isa = PBXGroup; + children = ( + EDDE49D4225A9834005DE7A4 /* HelloGoodbye.entitlements */, + EDDE49D6225A9834005DE7A4 /* AppDelegate.swift */, + EDDE49D8225A9834005DE7A4 /* Main.storyboard */, + EDDE49DB225A9834005DE7A4 /* ViewController.swift */, + EDDE49DD225A9836005DE7A4 /* Assets.xcassets */, + EDDE49DF225A9836005DE7A4 /* Info.plist */, + ); + path = HelloGoodbye; + sourceTree = ""; + }; + EDDE49E8225A9836005DE7A4 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EDDE49E9225A9836005DE7A4 /* Cocoa.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + EDDE4A08225A98DF005DE7A4 /* BlockerExtension */ = { + isa = PBXGroup; + children = ( + EDDE4A09225A98DF005DE7A4 /* blockerList.json */, + EDDE4A0B225A98DF005DE7A4 /* ContentBlockerRequestHandler.swift */, + EDDE4A0D225A98DF005DE7A4 /* Info.plist */, + EDDE4A0E225A98DF005DE7A4 /* BlockerExtension.entitlements */, + ); + path = BlockerExtension; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + EDDE49D0225A9834005DE7A4 /* HelloGoodbye */ = { + isa = PBXNativeTarget; + buildConfigurationList = EDDE49FF225A9836005DE7A4 /* Build configuration list for PBXNativeTarget "HelloGoodbye" */; + buildPhases = ( + EDDE49CD225A9834005DE7A4 /* Sources */, + EDDE49CE225A9834005DE7A4 /* Frameworks */, + EDDE49CF225A9834005DE7A4 /* Resources */, + EDDE49FE225A9836005DE7A4 /* Embed App Extensions */, + ); + buildRules = ( + ); + dependencies = ( + EDDE4A10225A98DF005DE7A4 /* PBXTargetDependency */, + ); + name = HelloGoodbye; + productName = HelloGoodbye; + productReference = EDDE49D1225A9834005DE7A4 /* HelloGoodbye.app */; + productType = "com.apple.product-type.application"; + }; + EDDE4A05225A98DF005DE7A4 /* BlockerExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = EDDE4A12225A98DF005DE7A4 /* Build configuration list for PBXNativeTarget "BlockerExtension" */; + buildPhases = ( + EDDE4A02225A98DF005DE7A4 /* Sources */, + EDDE4A03225A98DF005DE7A4 /* Frameworks */, + EDDE4A04225A98DF005DE7A4 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BlockerExtension; + productName = BlockerExtension; + productReference = EDDE4A06225A98DF005DE7A4 /* BlockerExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + EDDE49C9225A9834005DE7A4 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1020; + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = "Dirk Hulverscheidt"; + TargetAttributes = { + EDDE49D0225A9834005DE7A4 = { + CreatedOnToolsVersion = 10.2; + }; + EDDE4A05225A98DF005DE7A4 = { + CreatedOnToolsVersion = 10.2; + }; + }; + }; + buildConfigurationList = EDDE49CC225A9834005DE7A4 /* Build configuration list for PBXProject "HelloGoodbye" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = EDDE49C8225A9834005DE7A4; + productRefGroup = EDDE49D2225A9834005DE7A4 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + EDDE49D0225A9834005DE7A4 /* HelloGoodbye */, + EDDE4A05225A98DF005DE7A4 /* BlockerExtension */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + EDDE49CF225A9834005DE7A4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EDDE49D5225A9834005DE7A4 /* HelloGoodbye.entitlements in Resources */, + EDDE49DE225A9836005DE7A4 /* Assets.xcassets in Resources */, + EDDE49DA225A9834005DE7A4 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EDDE4A04225A98DF005DE7A4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EDDE4A0A225A98DF005DE7A4 /* blockerList.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + EDDE49CD225A9834005DE7A4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EDDE49DC225A9834005DE7A4 /* ViewController.swift in Sources */, + EDDE49D7225A9834005DE7A4 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EDDE4A02225A98DF005DE7A4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EDDE4A0C225A98DF005DE7A4 /* ContentBlockerRequestHandler.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + EDDE4A10225A98DF005DE7A4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EDDE4A05225A98DF005DE7A4 /* BlockerExtension */; + targetProxy = EDDE4A0F225A98DF005DE7A4 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + EDDE49D8225A9834005DE7A4 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + EDDE49D9225A9834005DE7A4 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + EDDE49F9225A9836005DE7A4 /* 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_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; + CODE_SIGN_IDENTITY = "Mac Developer"; + 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.14; + 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; + }; + EDDE49FA225A9836005DE7A4 /* 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_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; + CODE_SIGN_IDENTITY = "Mac Developer"; + 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.14; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + EDDE4A00225A9836005DE7A4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = HelloGoodbye/HelloGoodbye.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = BN988BU552; + INFOPLIST_FILE = HelloGoodbye/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = hulverscheidtdirk.HelloGoodbye; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + EDDE4A01225A9836005DE7A4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = HelloGoodbye/HelloGoodbye.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = BN988BU552; + INFOPLIST_FILE = HelloGoodbye/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = hulverscheidtdirk.HelloGoodbye; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + EDDE4A13225A98DF005DE7A4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = BlockerExtension/BlockerExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = BN988BU552; + INFOPLIST_FILE = BlockerExtension/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = hulverscheidtdirk.HelloGoodbye.BlockerExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + EDDE4A14225A98DF005DE7A4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = BlockerExtension/BlockerExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = BN988BU552; + INFOPLIST_FILE = BlockerExtension/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = hulverscheidtdirk.HelloGoodbye.BlockerExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + EDDE49CC225A9834005DE7A4 /* Build configuration list for PBXProject "HelloGoodbye" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EDDE49F9225A9836005DE7A4 /* Debug */, + EDDE49FA225A9836005DE7A4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EDDE49FF225A9836005DE7A4 /* Build configuration list for PBXNativeTarget "HelloGoodbye" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EDDE4A00225A9836005DE7A4 /* Debug */, + EDDE4A01225A9836005DE7A4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EDDE4A12225A98DF005DE7A4 /* Build configuration list for PBXNativeTarget "BlockerExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EDDE4A13225A98DF005DE7A4 /* Debug */, + EDDE4A14225A98DF005DE7A4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = EDDE49C9225A9834005DE7A4 /* Project object */; +} diff --git a/Safari/HelloGoodbye.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Safari/HelloGoodbye.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..eddd8876 --- /dev/null +++ b/Safari/HelloGoodbye.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Safari/HelloGoodbye.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Safari/HelloGoodbye.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/Safari/HelloGoodbye.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Safari/HelloGoodbye.xcodeproj/project.xcworkspace/xcuserdata/bruceroettgers.xcuserdatad/UserInterfaceState.xcuserstate b/Safari/HelloGoodbye.xcodeproj/project.xcworkspace/xcuserdata/bruceroettgers.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..b49a5066ba025f1e71ff59a81649cfc0239a5eb0 GIT binary patch literal 23987 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 literal 0 HcmV?d00001 diff --git a/Safari/HelloGoodbye.xcodeproj/xcuserdata/bruceroettgers.xcuserdatad/xcschemes/xcschememanagement.plist b/Safari/HelloGoodbye.xcodeproj/xcuserdata/bruceroettgers.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 00000000..469c4104 --- /dev/null +++ b/Safari/HelloGoodbye.xcodeproj/xcuserdata/bruceroettgers.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,24 @@ + + + + + SchemeUserState + + BlockerExtension.xcscheme_^#shared#^_ + + orderHint + 2 + + HelloGoodbye Extension.xcscheme_^#shared#^_ + + orderHint + 1 + + HelloGoodbye.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/Safari/HelloGoodbye/AppDelegate.swift b/Safari/HelloGoodbye/AppDelegate.swift new file mode 100644 index 00000000..875fc7c5 --- /dev/null +++ b/Safari/HelloGoodbye/AppDelegate.swift @@ -0,0 +1,22 @@ +// +// AppDelegate.swift +// HelloGoodbye +// +// Created by Bruce Roettgers on 07.04.19. +// Copyright © 2019 Dirk Hulverscheidt. All rights reserved. +// + +import Cocoa + +@NSApplicationMain +class AppDelegate: NSObject, NSApplicationDelegate { + + func applicationDidFinishLaunching(_ aNotification: Notification) { + // Insert code here to initialize your application + } + + func applicationWillTerminate(_ aNotification: Notification) { + // Insert code here to tear down your application + } + +} diff --git a/Safari/HelloGoodbye/Assets.xcassets/AppIcon.appiconset/Contents.json b/Safari/HelloGoodbye/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..2db2b1c7 --- /dev/null +++ b/Safari/HelloGoodbye/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,58 @@ +{ + "images" : [ + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Safari/HelloGoodbye/Assets.xcassets/Contents.json b/Safari/HelloGoodbye/Assets.xcassets/Contents.json new file mode 100644 index 00000000..da4a164c --- /dev/null +++ b/Safari/HelloGoodbye/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Safari/HelloGoodbye/Base.lproj/Main.storyboard b/Safari/HelloGoodbye/Base.lproj/Main.storyboard new file mode 100644 index 00000000..7b91efd5 --- /dev/null +++ b/Safari/HelloGoodbye/Base.lproj/Main.storyboard @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Safari/HelloGoodbye/HelloGoodbye.entitlements b/Safari/HelloGoodbye/HelloGoodbye.entitlements new file mode 100644 index 00000000..f2ef3ae0 --- /dev/null +++ b/Safari/HelloGoodbye/HelloGoodbye.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + + + diff --git a/Safari/HelloGoodbye/Info.plist b/Safari/HelloGoodbye/Info.plist new file mode 100644 index 00000000..fe03be31 --- /dev/null +++ b/Safari/HelloGoodbye/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + Copyright © 2019 Dirk Hulverscheidt. All rights reserved. + NSMainStoryboardFile + Main + NSPrincipalClass + NSApplication + + diff --git a/Safari/HelloGoodbye/ViewController.swift b/Safari/HelloGoodbye/ViewController.swift new file mode 100644 index 00000000..5b16b646 --- /dev/null +++ b/Safari/HelloGoodbye/ViewController.swift @@ -0,0 +1,30 @@ +// +// ViewController.swift +// HelloGoodbye +// +// Created by Bruce Roettgers on 07.04.19. +// Copyright © 2019 Dirk Hulverscheidt. All rights reserved. +// + +import Cocoa +import SafariServices.SFSafariApplication + +class ViewController: NSViewController { + + @IBOutlet var appNameLabel: NSTextField! + + override func viewDidLoad() { + super.viewDidLoad() + self.appNameLabel.stringValue = "HelloGoodbye"; + } + + @IBAction func openSafariExtensionPreferences(_ sender: AnyObject?) { + SFSafariApplication.showPreferencesForExtension(withIdentifier: "hulverscheidtdirk.HelloGoodbye.BlockerExtension") { error in + if let _ = error { + // Insert code to inform the user that something went wrong. + + } + } + } + +}