From cc2657efa5428c1266142911ceeed52b00584428 Mon Sep 17 00:00:00 2001 From: Mattia541993 Date: Sun, 19 Apr 2020 22:19:30 +0200 Subject: [PATCH] ios custom action on VC --- .../iOSCustomAction.xcodeproj/project.pbxproj | 345 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 22412 bytes .../xcschemes/xcschememanagement.plist | 14 + .../iOSCustomAction/AppDelegate.swift | 37 ++ .../AppIcon.appiconset/Contents.json | 98 +++++ .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../Base.lproj/Main.storyboard | 49 +++ .../iOSCustomAction/Info.plist | 64 ++++ .../iOSCustomAction/SceneDelegate.swift | 53 +++ .../iOSCustomAction/ViewController.swift | 48 +++ 13 files changed, 754 insertions(+) create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.pbxproj create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.xcworkspace/xcuserdata/mattiaducci.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/xcuserdata/mattiaducci.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/AppDelegate.swift create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Assets.xcassets/Contents.json create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Base.lproj/LaunchScreen.storyboard create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Base.lproj/Main.storyboard create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Info.plist create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/SceneDelegate.swift create mode 100644 CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/ViewController.swift diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.pbxproj b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.pbxproj new file mode 100644 index 00000000..422dfcf1 --- /dev/null +++ b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.pbxproj @@ -0,0 +1,345 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 4BF7E964244CE4F70008565D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BF7E963244CE4F70008565D /* AppDelegate.swift */; }; + 4BF7E966244CE4F70008565D /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BF7E965244CE4F70008565D /* SceneDelegate.swift */; }; + 4BF7E968244CE4F70008565D /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BF7E967244CE4F70008565D /* ViewController.swift */; }; + 4BF7E96B244CE4F70008565D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4BF7E969244CE4F70008565D /* Main.storyboard */; }; + 4BF7E96D244CE4F90008565D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4BF7E96C244CE4F90008565D /* Assets.xcassets */; }; + 4BF7E970244CE4F90008565D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4BF7E96E244CE4F90008565D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 4BF7E960244CE4F70008565D /* iOSCustomAction.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iOSCustomAction.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4BF7E963244CE4F70008565D /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 4BF7E965244CE4F70008565D /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 4BF7E967244CE4F70008565D /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 4BF7E96A244CE4F70008565D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 4BF7E96C244CE4F90008565D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 4BF7E96F244CE4F90008565D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 4BF7E971244CE4F90008565D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 4BF7E95D244CE4F70008565D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 4BF7E957244CE4F70008565D = { + isa = PBXGroup; + children = ( + 4BF7E962244CE4F70008565D /* iOSCustomAction */, + 4BF7E961244CE4F70008565D /* Products */, + ); + sourceTree = ""; + }; + 4BF7E961244CE4F70008565D /* Products */ = { + isa = PBXGroup; + children = ( + 4BF7E960244CE4F70008565D /* iOSCustomAction.app */, + ); + name = Products; + sourceTree = ""; + }; + 4BF7E962244CE4F70008565D /* iOSCustomAction */ = { + isa = PBXGroup; + children = ( + 4BF7E963244CE4F70008565D /* AppDelegate.swift */, + 4BF7E965244CE4F70008565D /* SceneDelegate.swift */, + 4BF7E967244CE4F70008565D /* ViewController.swift */, + 4BF7E969244CE4F70008565D /* Main.storyboard */, + 4BF7E96C244CE4F90008565D /* Assets.xcassets */, + 4BF7E96E244CE4F90008565D /* LaunchScreen.storyboard */, + 4BF7E971244CE4F90008565D /* Info.plist */, + ); + path = iOSCustomAction; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 4BF7E95F244CE4F70008565D /* iOSCustomAction */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4BF7E974244CE4F90008565D /* Build configuration list for PBXNativeTarget "iOSCustomAction" */; + buildPhases = ( + 4BF7E95C244CE4F70008565D /* Sources */, + 4BF7E95D244CE4F70008565D /* Frameworks */, + 4BF7E95E244CE4F70008565D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iOSCustomAction; + productName = iOSCustomAction; + productReference = 4BF7E960244CE4F70008565D /* iOSCustomAction.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 4BF7E958244CE4F70008565D /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1140; + LastUpgradeCheck = 1140; + ORGANIZATIONNAME = "Mattia Ducci"; + TargetAttributes = { + 4BF7E95F244CE4F70008565D = { + CreatedOnToolsVersion = 11.4; + }; + }; + }; + buildConfigurationList = 4BF7E95B244CE4F70008565D /* Build configuration list for PBXProject "iOSCustomAction" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 4BF7E957244CE4F70008565D; + productRefGroup = 4BF7E961244CE4F70008565D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 4BF7E95F244CE4F70008565D /* iOSCustomAction */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 4BF7E95E244CE4F70008565D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BF7E970244CE4F90008565D /* LaunchScreen.storyboard in Resources */, + 4BF7E96D244CE4F90008565D /* Assets.xcassets in Resources */, + 4BF7E96B244CE4F70008565D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 4BF7E95C244CE4F70008565D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4BF7E968244CE4F70008565D /* ViewController.swift in Sources */, + 4BF7E964244CE4F70008565D /* AppDelegate.swift in Sources */, + 4BF7E966244CE4F70008565D /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 4BF7E969244CE4F70008565D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 4BF7E96A244CE4F70008565D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 4BF7E96E244CE4F90008565D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 4BF7E96F244CE4F90008565D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 4BF7E972244CE4F90008565D /* 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; + 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; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 4BF7E973244CE4F90008565D /* 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; + 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; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 4BF7E975244CE4F90008565D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 4EN39QDU46; + INFOPLIST_FILE = iOSCustomAction/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.iOSCustomAction; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 4BF7E976244CE4F90008565D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 4EN39QDU46; + INFOPLIST_FILE = iOSCustomAction/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.iOSCustomAction; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4BF7E95B244CE4F70008565D /* Build configuration list for PBXProject "iOSCustomAction" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4BF7E972244CE4F90008565D /* Debug */, + 4BF7E973244CE4F90008565D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4BF7E974244CE4F90008565D /* Build configuration list for PBXNativeTarget "iOSCustomAction" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4BF7E975244CE4F90008565D /* Debug */, + 4BF7E976244CE4F90008565D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 4BF7E958244CE4F70008565D /* Project object */; +} diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..057c3b55 --- /dev/null +++ b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.xcworkspace/xcuserdata/mattiaducci.xcuserdatad/UserInterfaceState.xcuserstate b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction.xcodeproj/project.xcworkspace/xcuserdata/mattiaducci.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..3049f35a0840aa25e5fdd3a5d26f23bff18b8299 GIT binary patch literal 22412 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 + + + + SchemeUserState + + iOSCustomAction.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/AppDelegate.swift b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/AppDelegate.swift new file mode 100644 index 00000000..ccd1d9e1 --- /dev/null +++ b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/AppDelegate.swift @@ -0,0 +1,37 @@ +// +// AppDelegate.swift +// iOSCustomAction +// +// Created by Mattia Ducci on 19/04/2020. +// Copyright © 2020 Mattia Ducci. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Assets.xcassets/AppIcon.appiconset/Contents.json b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..9221b9bb --- /dev/null +++ b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Assets.xcassets/Contents.json b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Base.lproj/LaunchScreen.storyboard b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..865e9329 --- /dev/null +++ b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Base.lproj/Main.storyboard b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Base.lproj/Main.storyboard new file mode 100644 index 00000000..36787046 --- /dev/null +++ b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Base.lproj/Main.storyboard @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Info.plist b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Info.plist new file mode 100644 index 00000000..2a3483c0 --- /dev/null +++ b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/Info.plist @@ -0,0 +1,64 @@ + + + + + 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 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/SceneDelegate.swift b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/SceneDelegate.swift new file mode 100644 index 00000000..2c077b7c --- /dev/null +++ b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/SceneDelegate.swift @@ -0,0 +1,53 @@ +// +// SceneDelegate.swift +// iOSCustomAction +// +// Created by Mattia Ducci on 19/04/2020. +// Copyright © 2020 Mattia Ducci. All rights reserved. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/ViewController.swift b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/ViewController.swift new file mode 100644 index 00000000..73a4a0c4 --- /dev/null +++ b/CustomAction/iOSAccessibilityCustomAction/iOSCustomAction/iOSCustomAction/ViewController.swift @@ -0,0 +1,48 @@ +// +// ViewController.swift +// iOSCustomAction +// +// Created by Mattia Ducci on 19/04/2020. +// Copyright © 2020 Mattia Ducci. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + var curCnt:Int! = 0{ + willSet{ + DispatchQueue.main.async { + self.counterLbl.text = "\(newValue!)" + } + } + } + + + @IBOutlet weak var counterLbl: UILabel! + + override func viewDidLoad() { + super.viewDidLoad() + initAccessibility() + } + + private func initAccessibility(){ + let up = UIAccessibilityCustomAction(name: "Increment", target: self, selector: #selector(increment)) + let down = UIAccessibilityCustomAction(name: "Decrement", target: self, selector: #selector(decrement)) + self.accessibilityCustomActions = [up,down] + } + + @objc private func increment() -> Bool{ + curCnt += 1 + return true + } + + @objc private func decrement() -> Bool{ + guard curCnt > 0 else {return false} + curCnt -= 1 + return true + } + + +} + -- 2.18.1