From 0d314cfe90f01c7efef9bcc5c2837ada27f2f174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesu=CC=81s=20A=2E=20A=CC=81lvarez?= Date: Mon, 25 Mar 2024 20:27:26 +0100 Subject: [PATCH] add empty watch app project --- .../Micro vMac.xcodeproj/project.pbxproj | 468 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../Micro vMac WatchKit App.xcscheme | 78 +++ .../AppIcon.appiconset/Contents.json | 123 +++++ .../Assets.xcassets/Contents.json | 6 + Micro vMac/Mini vMac WatchKit App/Info.plist | 33 ++ .../Interface.storyboard | 27 + .../Circular.imageset/Contents.json | 25 + .../Contents.json | 53 ++ .../Extra Large.imageset/Contents.json | 25 + .../Graphic Bezel.imageset/Contents.json | 20 + .../Graphic Circular.imageset/Contents.json | 20 + .../Graphic Corner.imageset/Contents.json | 20 + .../Contents.json | 25 + .../Contents.json | 20 + .../Modular.imageset/Contents.json | 25 + .../Utilitarian.imageset/Contents.json | 25 + .../Assets.xcassets/Contents.json | 6 + .../ExtensionDelegate.h | 14 + .../ExtensionDelegate.m | 82 +++ .../Mini vMac WatchKit Extension/Info.plist | 36 ++ .../InterfaceController.h | 19 + .../InterfaceController.m | 111 +++++ 23 files changed, 1268 insertions(+) create mode 100644 Micro vMac/Micro vMac.xcodeproj/project.pbxproj create mode 100644 Micro vMac/Micro vMac.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Micro vMac/Micro vMac.xcodeproj/xcshareddata/xcschemes/Micro vMac WatchKit App.xcscheme create mode 100644 Micro vMac/Mini vMac WatchKit App/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit App/Assets.xcassets/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit App/Info.plist create mode 100644 Micro vMac/Mini vMac WatchKit App/Interface.storyboard create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Extra Large.imageset/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Contents.json create mode 100644 Micro vMac/Mini vMac WatchKit Extension/ExtensionDelegate.h create mode 100644 Micro vMac/Mini vMac WatchKit Extension/ExtensionDelegate.m create mode 100644 Micro vMac/Mini vMac WatchKit Extension/Info.plist create mode 100644 Micro vMac/Mini vMac WatchKit Extension/InterfaceController.h create mode 100644 Micro vMac/Mini vMac WatchKit Extension/InterfaceController.m diff --git a/Micro vMac/Micro vMac.xcodeproj/project.pbxproj b/Micro vMac/Micro vMac.xcodeproj/project.pbxproj new file mode 100644 index 0000000..10c7959 --- /dev/null +++ b/Micro vMac/Micro vMac.xcodeproj/project.pbxproj @@ -0,0 +1,468 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 2887384A2190D22D00E24DC3 /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 288738492190D22D00E24DC3 /* Interface.storyboard */; }; + 28E020EC2173E0EC00C556D6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 28E020EB2173E0EC00C556D6 /* Assets.xcassets */; }; + 28E020F32173E0EC00C556D6 /* Mini vMac WatchKit Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 28E020F22173E0EC00C556D6 /* Mini vMac WatchKit Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 28E020F92173E0EC00C556D6 /* InterfaceController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28E020F82173E0EC00C556D6 /* InterfaceController.m */; }; + 28E020FC2173E0EC00C556D6 /* ExtensionDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 28E020FB2173E0EC00C556D6 /* ExtensionDelegate.m */; }; + 28E020FE2173E0ED00C556D6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 28E020FD2173E0ED00C556D6 /* Assets.xcassets */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 28E020F42173E0EC00C556D6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 28E020C52173E0EB00C556D6 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 28E020F12173E0EC00C556D6; + remoteInfo = "Mini vMac WatchKit Extension"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 28E021052173E0ED00C556D6 /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 28E020F32173E0EC00C556D6 /* Mini vMac WatchKit Extension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 288738492190D22D00E24DC3 /* Interface.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Interface.storyboard; sourceTree = ""; }; + 28BF818F25338E0C007341A3 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; + 28E020E32173E0EC00C556D6 /* Mini vMac WatchKit App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Mini vMac WatchKit App.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 28E020EB2173E0EC00C556D6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 28E020ED2173E0EC00C556D6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 28E020F22173E0EC00C556D6 /* Mini vMac WatchKit Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Mini vMac WatchKit Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 28E020F72173E0EC00C556D6 /* InterfaceController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InterfaceController.h; sourceTree = ""; }; + 28E020F82173E0EC00C556D6 /* InterfaceController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InterfaceController.m; sourceTree = ""; }; + 28E020FA2173E0EC00C556D6 /* ExtensionDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExtensionDelegate.h; sourceTree = ""; }; + 28E020FB2173E0EC00C556D6 /* ExtensionDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExtensionDelegate.m; sourceTree = ""; }; + 28E020FD2173E0ED00C556D6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 28E020FF2173E0ED00C556D6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 28E020EF2173E0EC00C556D6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4259EE64740C16BAEA209B84 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 28E020C42173E0EB00C556D6 = { + isa = PBXGroup; + children = ( + 28E020E72173E0EC00C556D6 /* Mini vMac WatchKit App */, + 28E020F62173E0EC00C556D6 /* Mini vMac WatchKit Extension */, + 28E020CE2173E0EB00C556D6 /* Products */, + 3479A43CE16567273D08B6EA /* Frameworks */, + ); + sourceTree = ""; + }; + 28E020CE2173E0EB00C556D6 /* Products */ = { + isa = PBXGroup; + children = ( + 28E020E32173E0EC00C556D6 /* Mini vMac WatchKit App.app */, + 28E020F22173E0EC00C556D6 /* Mini vMac WatchKit Extension.appex */, + ); + name = Products; + sourceTree = ""; + }; + 28E020E72173E0EC00C556D6 /* Mini vMac WatchKit App */ = { + isa = PBXGroup; + children = ( + 288738492190D22D00E24DC3 /* Interface.storyboard */, + 28E020EB2173E0EC00C556D6 /* Assets.xcassets */, + 28E020ED2173E0EC00C556D6 /* Info.plist */, + ); + path = "Mini vMac WatchKit App"; + sourceTree = ""; + }; + 28E020F62173E0EC00C556D6 /* Mini vMac WatchKit Extension */ = { + isa = PBXGroup; + children = ( + 28E020F72173E0EC00C556D6 /* InterfaceController.h */, + 28E020F82173E0EC00C556D6 /* InterfaceController.m */, + 28E020FA2173E0EC00C556D6 /* ExtensionDelegate.h */, + 28E020FB2173E0EC00C556D6 /* ExtensionDelegate.m */, + 28E020FD2173E0ED00C556D6 /* Assets.xcassets */, + 28E020FF2173E0ED00C556D6 /* Info.plist */, + ); + path = "Mini vMac WatchKit Extension"; + sourceTree = ""; + }; + 3479A43CE16567273D08B6EA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 28BF818F25338E0C007341A3 /* SwiftUI.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 28E020E22173E0EC00C556D6 /* Mini vMac WatchKit App */ = { + isa = PBXNativeTarget; + buildConfigurationList = 28E021062173E0ED00C556D6 /* Build configuration list for PBXNativeTarget "Mini vMac WatchKit App" */; + buildPhases = ( + 28E020E12173E0EC00C556D6 /* Resources */, + 28E021052173E0ED00C556D6 /* Embed App Extensions */, + 4259EE64740C16BAEA209B84 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 28E020F52173E0EC00C556D6 /* PBXTargetDependency */, + ); + name = "Mini vMac WatchKit App"; + productName = "Mini vMac WatchKit App"; + productReference = 28E020E32173E0EC00C556D6 /* Mini vMac WatchKit App.app */; + productType = "com.apple.product-type.application.watchapp2"; + }; + 28E020F12173E0EC00C556D6 /* Mini vMac WatchKit Extension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 28E021022173E0ED00C556D6 /* Build configuration list for PBXNativeTarget "Mini vMac WatchKit Extension" */; + buildPhases = ( + 28E020EE2173E0EC00C556D6 /* Sources */, + 28E020EF2173E0EC00C556D6 /* Frameworks */, + 28E020F02173E0EC00C556D6 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Mini vMac WatchKit Extension"; + productName = "Mini vMac WatchKit Extension"; + productReference = 28E020F22173E0EC00C556D6 /* Mini vMac WatchKit Extension.appex */; + productType = "com.apple.product-type.watchkit2-extension"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 28E020C52173E0EB00C556D6 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1210; + LastUpgradeCheck = 1000; + ORGANIZATIONNAME = namedfork; + TargetAttributes = { + 28E020E22173E0EC00C556D6 = { + CreatedOnToolsVersion = 10.0; + }; + 28E020F12173E0EC00C556D6 = { + CreatedOnToolsVersion = 10.0; + }; + }; + }; + buildConfigurationList = 28E020C82173E0EB00C556D6 /* Build configuration list for PBXProject "Micro vMac" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 28E020C42173E0EB00C556D6; + productRefGroup = 28E020CE2173E0EB00C556D6 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 28E020E22173E0EC00C556D6 /* Mini vMac WatchKit App */, + 28E020F12173E0EC00C556D6 /* Mini vMac WatchKit Extension */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 28E020E12173E0EC00C556D6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2887384A2190D22D00E24DC3 /* Interface.storyboard in Resources */, + 28E020EC2173E0EC00C556D6 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 28E020F02173E0EC00C556D6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 28E020FE2173E0ED00C556D6 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 28E020EE2173E0EC00C556D6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 28E020FC2173E0EC00C556D6 /* ExtensionDelegate.m in Sources */, + 28E020F92173E0EC00C556D6 /* InterfaceController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 28E020F52173E0EC00C556D6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 28E020F12173E0EC00C556D6 /* Mini vMac WatchKit Extension */; + targetProxy = 28E020F42173E0EC00C556D6 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 28E021002173E0ED00C556D6 /* 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 = "iPhone 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; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + WATCHOS_DEPLOYMENT_TARGET = 5.0; + }; + name = Debug; + }; + 28E021012173E0ED00C556D6 /* 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 = "iPhone 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; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + WATCHOS_DEPLOYMENT_TARGET = 5.0; + }; + name = Release; + }; + 28E021032173E0ED00C556D6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = UJXNDZ5TNU; + INFOPLIST_FILE = "Mini vMac WatchKit Extension/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = net.namedfork.minivmac.watchkitapp.watchkitextension; + PRODUCT_NAME = "${TARGET_NAME}"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = watchos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 5.0; + }; + name = Debug; + }; + 28E021042173E0ED00C556D6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = UJXNDZ5TNU; + INFOPLIST_FILE = "Mini vMac WatchKit Extension/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = net.namedfork.minivmac.watchkitapp.watchkitextension; + PRODUCT_NAME = "${TARGET_NAME}"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = watchos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 5.0; + }; + name = Release; + }; + 28E021072173E0ED00C556D6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = UJXNDZ5TNU; + IBSC_MODULE = Minivmac_WatchKit_Extension; + INFOPLIST_FILE = "Mini vMac WatchKit App/Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = net.namedfork.minivmac.watchkitapp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 5.0; + }; + name = Debug; + }; + 28E021082173E0ED00C556D6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = UJXNDZ5TNU; + IBSC_MODULE = Minivmac_WatchKit_Extension; + INFOPLIST_FILE = "Mini vMac WatchKit App/Info.plist"; + PRODUCT_BUNDLE_IDENTIFIER = net.namedfork.minivmac.watchkitapp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 5.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 28E020C82173E0EB00C556D6 /* Build configuration list for PBXProject "Micro vMac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 28E021002173E0ED00C556D6 /* Debug */, + 28E021012173E0ED00C556D6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 28E021022173E0ED00C556D6 /* Build configuration list for PBXNativeTarget "Mini vMac WatchKit Extension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 28E021032173E0ED00C556D6 /* Debug */, + 28E021042173E0ED00C556D6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 28E021062173E0ED00C556D6 /* Build configuration list for PBXNativeTarget "Mini vMac WatchKit App" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 28E021072173E0ED00C556D6 /* Debug */, + 28E021082173E0ED00C556D6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 28E020C52173E0EB00C556D6 /* Project object */; +} diff --git a/Micro vMac/Micro vMac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Micro vMac/Micro vMac.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..6f620b4 --- /dev/null +++ b/Micro vMac/Micro vMac.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Micro vMac/Micro vMac.xcodeproj/xcshareddata/xcschemes/Micro vMac WatchKit App.xcscheme b/Micro vMac/Micro vMac.xcodeproj/xcshareddata/xcschemes/Micro vMac WatchKit App.xcscheme new file mode 100644 index 0000000..2f259ee --- /dev/null +++ b/Micro vMac/Micro vMac.xcodeproj/xcshareddata/xcschemes/Micro vMac WatchKit App.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Micro vMac/Mini vMac WatchKit App/Assets.xcassets/AppIcon.appiconset/Contents.json b/Micro vMac/Mini vMac WatchKit App/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..78d9460 --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit App/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,123 @@ +{ + "images" : [ + { + "idiom" : "watch", + "role" : "notificationCenter", + "scale" : "2x", + "size" : "24x24", + "subtype" : "38mm" + }, + { + "idiom" : "watch", + "role" : "notificationCenter", + "scale" : "2x", + "size" : "27.5x27.5", + "subtype" : "42mm" + }, + { + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "watch", + "role" : "notificationCenter", + "scale" : "2x", + "size" : "33x33", + "subtype" : "45mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "40x40", + "subtype" : "38mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "44x44", + "subtype" : "40mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "46x46", + "subtype" : "41mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "50x50", + "subtype" : "44mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "51x51", + "subtype" : "45mm" + }, + { + "idiom" : "watch", + "role" : "appLauncher", + "scale" : "2x", + "size" : "54x54", + "subtype" : "49mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "86x86", + "subtype" : "38mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "98x98", + "subtype" : "42mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "108x108", + "subtype" : "44mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "117x117", + "subtype" : "45mm" + }, + { + "idiom" : "watch", + "role" : "quickLook", + "scale" : "2x", + "size" : "129x129", + "subtype" : "49mm" + }, + { + "idiom" : "watch-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Micro vMac/Mini vMac WatchKit App/Assets.xcassets/Contents.json b/Micro vMac/Mini vMac WatchKit App/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit App/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Micro vMac/Mini vMac WatchKit App/Info.plist b/Micro vMac/Mini vMac WatchKit App/Info.plist new file mode 100644 index 0000000..c12775f --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit App/Info.plist @@ -0,0 +1,33 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Mini vMac + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + WKCompanionAppBundleIdentifier + net.namedfork.minivmac + WKWatchKitApp + + + diff --git a/Micro vMac/Mini vMac WatchKit App/Interface.storyboard b/Micro vMac/Mini vMac WatchKit App/Interface.storyboard new file mode 100644 index 0000000..a99cdc8 --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit App/Interface.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json new file mode 100644 index 0000000..26454ca --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json @@ -0,0 +1,25 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "auto-scaling" : "auto" + } +} diff --git a/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Contents.json b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Contents.json new file mode 100644 index 0000000..e8b3252 --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Contents.json @@ -0,0 +1,53 @@ +{ + "assets" : [ + { + "filename" : "Circular.imageset", + "idiom" : "watch", + "role" : "circular" + }, + { + "filename" : "Extra Large.imageset", + "idiom" : "watch", + "role" : "extra-large" + }, + { + "filename" : "Graphic Bezel.imageset", + "idiom" : "watch", + "role" : "graphic-bezel" + }, + { + "filename" : "Graphic Circular.imageset", + "idiom" : "watch", + "role" : "graphic-circular" + }, + { + "filename" : "Graphic Corner.imageset", + "idiom" : "watch", + "role" : "graphic-corner" + }, + { + "filename" : "Graphic Extra Large.imageset", + "idiom" : "watch", + "role" : "graphic-extra-large" + }, + { + "filename" : "Graphic Large Rectangular.imageset", + "idiom" : "watch", + "role" : "graphic-large-rectangular" + }, + { + "filename" : "Modular.imageset", + "idiom" : "watch", + "role" : "modular" + }, + { + "filename" : "Utilitarian.imageset", + "idiom" : "watch", + "role" : "utilitarian" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json new file mode 100644 index 0000000..26454ca --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json @@ -0,0 +1,25 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "auto-scaling" : "auto" + } +} diff --git a/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json new file mode 100644 index 0000000..6e184db --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "auto-scaling" : "auto" + } +} diff --git a/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json new file mode 100644 index 0000000..6e184db --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "auto-scaling" : "auto" + } +} diff --git a/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json new file mode 100644 index 0000000..6e184db --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "auto-scaling" : "auto" + } +} diff --git a/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Extra Large.imageset/Contents.json b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Extra Large.imageset/Contents.json new file mode 100644 index 0000000..26454ca --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Extra Large.imageset/Contents.json @@ -0,0 +1,25 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "auto-scaling" : "auto" + } +} diff --git a/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json new file mode 100644 index 0000000..6e184db --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "auto-scaling" : "auto" + } +} diff --git a/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json new file mode 100644 index 0000000..26454ca --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json @@ -0,0 +1,25 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "auto-scaling" : "auto" + } +} diff --git a/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json new file mode 100644 index 0000000..26454ca --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json @@ -0,0 +1,25 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">183" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "auto-scaling" : "auto" + } +} diff --git a/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Contents.json b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Micro vMac/Mini vMac WatchKit Extension/ExtensionDelegate.h b/Micro vMac/Mini vMac WatchKit Extension/ExtensionDelegate.h new file mode 100644 index 0000000..c06a18f --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/ExtensionDelegate.h @@ -0,0 +1,14 @@ +// +// ExtensionDelegate.h +// Mini vMac WatchKit Extension +// +// Created by Jesús A. Álvarez on 14/10/2018. +// Copyright © 2018 namedfork. All rights reserved. +// + +#import +#import + +@interface ExtensionDelegate : NSObject + +@end diff --git a/Micro vMac/Mini vMac WatchKit Extension/ExtensionDelegate.m b/Micro vMac/Mini vMac WatchKit Extension/ExtensionDelegate.m new file mode 100644 index 0000000..cfc8a5c --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/ExtensionDelegate.m @@ -0,0 +1,82 @@ +// +// ExtensionDelegate.m +// Mini vMac WatchKit Extension +// +// Created by Jesús A. Álvarez on 14/10/2018. +// Copyright © 2018 namedfork. All rights reserved. +// + +#import "ExtensionDelegate.h" +#import "InterfaceController.h" + +@implementation ExtensionDelegate + +- (void)applicationDidFinishLaunching { + // Perform any final initialization of your application. + [WCSession defaultSession].delegate = self; +} + +- (void)applicationDidBecomeActive { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + [[WCSession defaultSession] activateSession]; +} + +- (void)applicationWillResignActive { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, etc. +} + +- (void)handleBackgroundTasks:(NSSet *)backgroundTasks { + // Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set, so loop through and process each one. + for (WKRefreshBackgroundTask * task in backgroundTasks) { + // Check the Class of each task to decide how to process it + if ([task isKindOfClass:[WKApplicationRefreshBackgroundTask class]]) { + // Be sure to complete the background task once you’re done. + WKApplicationRefreshBackgroundTask *backgroundTask = (WKApplicationRefreshBackgroundTask*)task; + [backgroundTask setTaskCompletedWithSnapshot:NO]; + } else if ([task isKindOfClass:[WKSnapshotRefreshBackgroundTask class]]) { + // Snapshot tasks have a unique completion call, make sure to set your expiration date + WKSnapshotRefreshBackgroundTask *snapshotTask = (WKSnapshotRefreshBackgroundTask*)task; + [snapshotTask setTaskCompletedWithDefaultStateRestored:YES estimatedSnapshotExpiration:[NSDate distantFuture] userInfo:nil]; + } else if ([task isKindOfClass:[WKWatchConnectivityRefreshBackgroundTask class]]) { + // Be sure to complete the background task once you’re done. + WKWatchConnectivityRefreshBackgroundTask *backgroundTask = (WKWatchConnectivityRefreshBackgroundTask*)task; + [backgroundTask setTaskCompletedWithSnapshot:NO]; + } else if ([task isKindOfClass:[WKURLSessionRefreshBackgroundTask class]]) { + // Be sure to complete the background task once you’re done. + WKURLSessionRefreshBackgroundTask *backgroundTask = (WKURLSessionRefreshBackgroundTask*)task; + [backgroundTask setTaskCompletedWithSnapshot:NO]; + } else if ([task isKindOfClass:[WKRelevantShortcutRefreshBackgroundTask class]]) { + // Be sure to complete the relevant-shortcut task once you’re done. + WKRelevantShortcutRefreshBackgroundTask *relevantShortcutTask = (WKRelevantShortcutRefreshBackgroundTask*)task; + [relevantShortcutTask setTaskCompletedWithSnapshot:NO]; + } else if ([task isKindOfClass:[WKIntentDidRunRefreshBackgroundTask class]]) { + // Be sure to complete the intent-did-run task once you’re done. + WKIntentDidRunRefreshBackgroundTask *intentDidRunTask = (WKIntentDidRunRefreshBackgroundTask*)task; + [intentDidRunTask setTaskCompletedWithSnapshot:NO]; + } else { + // make sure to complete unhandled task types + [task setTaskCompletedWithSnapshot:NO]; + } + } +} + +#pragma mark - + +- (void)session:(WCSession *)session didReceiveFile:(WCSessionFile *)file { + +} + +- (void)session:(nonnull WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(nullable NSError *)error { + +} + +- (void)sessionReachabilityDidChange:(WCSession *)session { + // pass change to runtime + dispatch_async(dispatch_get_main_queue(), ^{ + InterfaceController *interfaceController = (InterfaceController*)[WKExtension sharedExtension].rootInterfaceController; + [interfaceController sessionReachabilityDidChange:session]; + }); +} + +@end diff --git a/Micro vMac/Mini vMac WatchKit Extension/Info.plist b/Micro vMac/Mini vMac WatchKit Extension/Info.plist new file mode 100644 index 0000000..d8fef85 --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/Info.plist @@ -0,0 +1,36 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Mini vMac WatchKit Extension + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSExtension + + NSExtensionAttributes + + WKAppBundleIdentifier + net.namedfork.minivmac.watchkitapp + + NSExtensionPointIdentifier + com.apple.watchkit + + WKExtensionDelegateClassName + ExtensionDelegate + + diff --git a/Micro vMac/Mini vMac WatchKit Extension/InterfaceController.h b/Micro vMac/Mini vMac WatchKit Extension/InterfaceController.h new file mode 100644 index 0000000..9d4ae0e --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/InterfaceController.h @@ -0,0 +1,19 @@ +// +// InterfaceController.h +// Mini vMac WatchKit Extension +// +// Created by Jesús A. Álvarez on 14/10/2018. +// Copyright © 2018 namedfork. All rights reserved. +// + +#import +#import +#import + +@class WCSession; + +@interface InterfaceController : WKInterfaceController + +- (void)sessionReachabilityDidChange:(WCSession *)session; + +@end diff --git a/Micro vMac/Mini vMac WatchKit Extension/InterfaceController.m b/Micro vMac/Mini vMac WatchKit Extension/InterfaceController.m new file mode 100644 index 0000000..052b4dd --- /dev/null +++ b/Micro vMac/Mini vMac WatchKit Extension/InterfaceController.m @@ -0,0 +1,111 @@ +// +// InterfaceController.m +// Mini vMac WatchKit Extension +// +// Created by Jesús A. Álvarez on 14/10/2018. +// Copyright © 2018 namedfork. All rights reserved. +// + +#import "InterfaceController.h" + +@import ObjectiveC.runtime; +@import WatchConnectivity; + +@interface NSObject (fs_override) ++(id)sharedApplication; +-(id)keyWindow; +-(id)rootViewController; +-(NSArray *)viewControllers; +-(id)view; +-(NSArray *)subviews; +-(id)timeLabel; +-(id)layer; +-(void)addSubview:(id)subview; +-(CGPoint)center; +-(NSString*)timeText; +-(id)sharedPUICApplication; +-(void)_setStatusBarTimeHidden:(BOOL)hidden animated:(BOOL)animated completion:(void (^)(void))completion; +@end + +@interface InterfaceController () + +@end + +@implementation InterfaceController +{ +} + ++ (void)load { + /* Hack to make the digital time overlay disappear (on watchOS 6) */ + Class CLKTimeFormatter = NSClassFromString(@"CLKTimeFormatter"); + if ([CLKTimeFormatter instancesRespondToSelector:@selector(timeText)]) { + Method m = class_getInstanceMethod(CLKTimeFormatter, @selector(timeText)); + method_setImplementation(m, imp_implementationWithBlock(^NSString*(id self, SEL _cmd) { return @" "; })); + } +} + +- (void)awakeWithContext:(id)context { + [super awakeWithContext:context]; +} + +- (void)hideTimeLabel { + /* Hack to make the digital time overlay disappear (on watchOS 5) */ + id fullScreenView = [self fullScreenView]; + if ([fullScreenView respondsToSelector:@selector(timeLabel)]) { + [[[fullScreenView timeLabel] layer] setOpacity:0]; + } + + /* Hack to make the digital time overlay disappear (on watchOS 7) */ + Class PUICApplication = NSClassFromString(@"PUICApplication"); + if ([PUICApplication instancesRespondToSelector:@selector(_setStatusBarTimeHidden:animated:completion:)]) { + [[PUICApplication sharedApplication] _setStatusBarTimeHidden:YES animated:NO completion:nil]; + } + +} + +- (id)fullScreenView { + id parentView = [[[[[[NSClassFromString(@"UIApplication") sharedApplication] keyWindow] rootViewController] viewControllers] firstObject] view]; + id view = [self findDescendantViewOfClass:NSClassFromString(@"SPFullScreenView") inView:parentView]; // watchOS 5 + if (view == nil) { + view = [self findDescendantViewOfClass:NSClassFromString(@"SPInterfaceRemoteView") inView:parentView]; // watchOS 6 + } + return view; +} + +- (id)findDescendantViewOfClass:(Class)viewClass inView:(id)parentView { + for (NSObject *view in [parentView subviews]) { + if ([view isKindOfClass:viewClass]) { + return view; + } else { + id foundView = [self findDescendantViewOfClass:viewClass inView:view]; + if (foundView != nil) return foundView; + } + } + return nil; +} + +- (void)didAppear { + [self hideTimeLabel]; + /*if (runtime == nil) { + [self loadWatchface]; + }*/ +} + + +- (void)willActivate { + if ([WKExtension sharedExtension].applicationState == WKApplicationStateActive) { + //[runtime resume]; + } +} + +- (void)didDeactivate { + // This method is called when watch view controller is no longer visible + [super didDeactivate]; + //[runtime pause]; +} + +- (void)sessionReachabilityDidChange:(WCSession *)session { + uint32_t connected = session.activationState == WCSessionActivationStateActivated && session.reachable; +} + +@end