diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ee7735..8fb3049 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,12 +19,12 @@ jobs: - name: Select Xcode version uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: '16' + xcode-version: '26' - name: Build and Test run: xcodebuild build test -scheme JESideMenuController -destination "platform=iOS Simulator,name=${SIMULATOR_NAME}" -enableCodeCoverage YES env: - SIMULATOR_NAME: 'iPhone SE (3rd generation)' + SIMULATOR_NAME: 'iPhone 17' - name: Generate code coverage files for codecov uses: sersoft-gmbh/swift-coverage-action@v5 diff --git a/Example/SideMenuControllerExample.xcodeproj/project.pbxproj b/Example/SideMenuControllerExample.xcodeproj/project.pbxproj index e821c56..2e5f91c 100644 --- a/Example/SideMenuControllerExample.xcodeproj/project.pbxproj +++ b/Example/SideMenuControllerExample.xcodeproj/project.pbxproj @@ -3,297 +3,220 @@ archiveVersion = 1; classes = { }; - objectVersion = 63; + objectVersion = 77; objects = { /* Begin PBXBuildFile section */ - 89397EFA2CB0250B00CAF50B /* MessageConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89397EF92CB0250500CAF50B /* MessageConfiguration.swift */; }; - 89397EFC2CB0252C00CAF50B /* MessageContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89397EFB2CB0252300CAF50B /* MessageContentView.swift */; }; - 89397EFE2CB0259200CAF50B /* UITableViewCell+messageConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89397EFD2CB0257800CAF50B /* UITableViewCell+messageConfiguration.swift */; }; - 89758B1822DB6AB50073288C /* MenuTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89758B1722DB6AB50073288C /* MenuTableViewController.swift */; }; - 89758B1E22DB73180073288C /* ProfileTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89758B1D22DB73180073288C /* ProfileTableViewController.swift */; }; - 89758B2922DCF4460073288C /* HomeTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89758B2822DCF4460073288C /* HomeTableViewController.swift */; }; - 89758B3522DCFC640073288C /* Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89758B3422DCFC640073288C /* Message.swift */; }; - 89758B3722DCFE6F0073288C /* Messages.json in Resources */ = {isa = PBXBuildFile; fileRef = 89758B3622DCFE6F0073288C /* Messages.json */; }; - 89988F402CB00AB200B02A7D /* JESideMenuController in Frameworks */ = {isa = PBXBuildFile; productRef = 89988F3F2CB00AB200B02A7D /* JESideMenuController */; }; - 899B06C122CD1E040048CDFB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 899B06C022CD1E040048CDFB /* AppDelegate.swift */; }; - 899B06C322CD1E040048CDFB /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 899B06C222CD1E040048CDFB /* DetailViewController.swift */; }; - 899B06C622CD1E040048CDFB /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 899B06C422CD1E040048CDFB /* Main.storyboard */; }; - 899B06C822CD1E060048CDFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 899B06C722CD1E060048CDFB /* Assets.xcassets */; }; - 899B06CB22CD1E060048CDFB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 899B06C922CD1E060048CDFB /* LaunchScreen.storyboard */; }; - 89DBFE7125D03819001285EA /* DataLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89C35A862497C2F2000DEB78 /* DataLoader.swift */; }; - 89E158F322DFA4FA00FADB91 /* SettingsTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89E158F222DFA4FA00FADB91 /* SettingsTableViewController.swift */; }; + DDBB33CA2F8919D300842B5D /* JESideMenuController in Frameworks */ = {isa = PBXBuildFile; productRef = DDBB33C92F8919D300842B5D /* JESideMenuController */; }; /* End PBXBuildFile section */ -/* Begin PBXCopyFilesBuildPhase section */ - 89EE6D1A22CD23A200A7F666 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( +/* Begin PBXFileReference section */ + DDBB32F82F8910B000842B5D /* SideMenuControllerExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SideMenuControllerExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ + DDBB330A2F8910B200842B5D /* Exceptions for "SideMenuControllerExample" folder in "SideMenuControllerExample" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; + target = DDBB32F72F8910B000842B5D /* SideMenuControllerExample */; }; -/* End PBXCopyFilesBuildPhase section */ +/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ -/* Begin PBXFileReference section */ - 89397EF92CB0250500CAF50B /* MessageConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageConfiguration.swift; sourceTree = ""; }; - 89397EFB2CB0252300CAF50B /* MessageContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageContentView.swift; sourceTree = ""; }; - 89397EFD2CB0257800CAF50B /* UITableViewCell+messageConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableViewCell+messageConfiguration.swift"; sourceTree = ""; }; - 89758B1722DB6AB50073288C /* MenuTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuTableViewController.swift; sourceTree = ""; }; - 89758B1D22DB73180073288C /* ProfileTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileTableViewController.swift; sourceTree = ""; }; - 89758B2822DCF4460073288C /* HomeTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTableViewController.swift; sourceTree = ""; }; - 89758B3422DCFC640073288C /* Message.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Message.swift; sourceTree = ""; }; - 89758B3622DCFE6F0073288C /* Messages.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = Messages.json; sourceTree = ""; }; - 899B06BD22CD1E040048CDFB /* SideMenuControllerExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SideMenuControllerExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 899B06C022CD1E040048CDFB /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 899B06C222CD1E040048CDFB /* DetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = ""; }; - 899B06C522CD1E040048CDFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 899B06C722CD1E060048CDFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 899B06CA22CD1E060048CDFB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 899B06CC22CD1E060048CDFB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 89C35A862497C2F2000DEB78 /* DataLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataLoader.swift; sourceTree = ""; }; - 89E158F222DFA4FA00FADB91 /* SettingsTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsTableViewController.swift; sourceTree = ""; }; -/* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedRootGroup section */ + DDBB32FA2F8910B000842B5D /* SideMenuControllerExample */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + DDBB330A2F8910B200842B5D /* Exceptions for "SideMenuControllerExample" folder in "SideMenuControllerExample" target */, + ); + path = SideMenuControllerExample; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ - 899B06BA22CD1E040048CDFB /* Frameworks */ = { + DDBB32F52F8910B000842B5D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 89988F402CB00AB200B02A7D /* JESideMenuController in Frameworks */, + DDBB33CA2F8919D300842B5D /* JESideMenuController in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 89758B2222DCF38C0073288C /* Home */ = { - isa = PBXGroup; - children = ( - 89758B2722DCF3960073288C /* ViewControllers */, - 89758B2D22DCF47E0073288C /* Views */, - 89758B2B22DCF4660073288C /* Model */, - 89DBFE7025D0378A001285EA /* Services */, - ); - path = Home; - sourceTree = ""; - }; - 89758B2722DCF3960073288C /* ViewControllers */ = { - isa = PBXGroup; - children = ( - 89758B2822DCF4460073288C /* HomeTableViewController.swift */, - ); - path = ViewControllers; - sourceTree = ""; - }; - 89758B2A22DCF44D0073288C /* Menu */ = { - isa = PBXGroup; - children = ( - 89758B1722DB6AB50073288C /* MenuTableViewController.swift */, - ); - path = Menu; - sourceTree = ""; - }; - 89758B2B22DCF4660073288C /* Model */ = { - isa = PBXGroup; - children = ( - 89758B3422DCFC640073288C /* Message.swift */, - 89758B3622DCFE6F0073288C /* Messages.json */, - ); - path = Model; - sourceTree = ""; - }; - 89758B2D22DCF47E0073288C /* Views */ = { - isa = PBXGroup; - children = ( - 89397EF92CB0250500CAF50B /* MessageConfiguration.swift */, - 89397EFB2CB0252300CAF50B /* MessageContentView.swift */, - 89397EFD2CB0257800CAF50B /* UITableViewCell+messageConfiguration.swift */, - ); - path = Views; - sourceTree = ""; - }; - 899B06B422CD1E040048CDFB = { + DDBB32EF2F8910B000842B5D = { isa = PBXGroup; children = ( - 899B06BF22CD1E040048CDFB /* SideMenuControllerExample */, - 899B06BE22CD1E040048CDFB /* Products */, + DDBB32FA2F8910B000842B5D /* SideMenuControllerExample */, + DDBB32F92F8910B000842B5D /* Products */, ); sourceTree = ""; }; - 899B06BE22CD1E040048CDFB /* Products */ = { + DDBB32F92F8910B000842B5D /* Products */ = { isa = PBXGroup; children = ( - 899B06BD22CD1E040048CDFB /* SideMenuControllerExample.app */, + DDBB32F82F8910B000842B5D /* SideMenuControllerExample.app */, ); name = Products; sourceTree = ""; }; - 899B06BF22CD1E040048CDFB /* SideMenuControllerExample */ = { - isa = PBXGroup; - children = ( - 899B06C022CD1E040048CDFB /* AppDelegate.swift */, - 89758B2222DCF38C0073288C /* Home */, - 89758B2A22DCF44D0073288C /* Menu */, - 89E158F022DFA4B900FADB91 /* Profile */, - 89E158F122DFA4CD00FADB91 /* Settings */, - 899B06C422CD1E040048CDFB /* Main.storyboard */, - 899B06C722CD1E060048CDFB /* Assets.xcassets */, - 899B06C922CD1E060048CDFB /* LaunchScreen.storyboard */, - 899B06CC22CD1E060048CDFB /* Info.plist */, - ); - path = SideMenuControllerExample; - sourceTree = ""; - }; - 89DBFE7025D0378A001285EA /* Services */ = { - isa = PBXGroup; - children = ( - 89C35A862497C2F2000DEB78 /* DataLoader.swift */, - ); - path = Services; - sourceTree = ""; - }; - 89E158F022DFA4B900FADB91 /* Profile */ = { - isa = PBXGroup; - children = ( - 89758B1D22DB73180073288C /* ProfileTableViewController.swift */, - 899B06C222CD1E040048CDFB /* DetailViewController.swift */, - ); - path = Profile; - sourceTree = ""; - }; - 89E158F122DFA4CD00FADB91 /* Settings */ = { - isa = PBXGroup; - children = ( - 89E158F222DFA4FA00FADB91 /* SettingsTableViewController.swift */, - ); - path = Settings; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 899B06BC22CD1E040048CDFB /* SideMenuControllerExample */ = { + DDBB32F72F8910B000842B5D /* SideMenuControllerExample */ = { isa = PBXNativeTarget; - buildConfigurationList = 899B06CF22CD1E060048CDFB /* Build configuration list for PBXNativeTarget "SideMenuControllerExample" */; + buildConfigurationList = DDBB330B2F8910B200842B5D /* Build configuration list for PBXNativeTarget "SideMenuControllerExample" */; buildPhases = ( - 899B06B922CD1E040048CDFB /* Sources */, - 899B06BA22CD1E040048CDFB /* Frameworks */, - 899B06BB22CD1E040048CDFB /* Resources */, - 89EE6D1A22CD23A200A7F666 /* Embed Frameworks */, + DDBB32F42F8910B000842B5D /* Sources */, + DDBB32F52F8910B000842B5D /* Frameworks */, + DDBB32F62F8910B000842B5D /* Resources */, ); buildRules = ( ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + DDBB32FA2F8910B000842B5D /* SideMenuControllerExample */, + ); name = SideMenuControllerExample; + packageProductDependencies = ( + DDBB33C92F8919D300842B5D /* JESideMenuController */, + ); productName = SideMenuControllerExample; - productReference = 899B06BD22CD1E040048CDFB /* SideMenuControllerExample.app */; + productReference = DDBB32F82F8910B000842B5D /* SideMenuControllerExample.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 899B06B522CD1E040048CDFB /* Project object */ = { + DDBB32F02F8910B000842B5D /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = YES; - LastSwiftUpdateCheck = 1020; - LastUpgradeCheck = 1600; - ORGANIZATIONNAME = JE; + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 2640; + LastUpgradeCheck = 2640; TargetAttributes = { - 899B06BC22CD1E040048CDFB = { - CreatedOnToolsVersion = 10.2.1; + DDBB32F72F8910B000842B5D = { + CreatedOnToolsVersion = 26.4; }; }; }; - buildConfigurationList = 899B06B822CD1E040048CDFB /* Build configuration list for PBXProject "SideMenuControllerExample" */; - compatibilityVersion = "Xcode 15.3"; + buildConfigurationList = DDBB32F32F8910B000842B5D /* Build configuration list for PBXProject "SideMenuControllerExample" */; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 899B06B422CD1E040048CDFB; + mainGroup = DDBB32EF2F8910B000842B5D; + minimizedProjectReferenceProxies = 1; packageReferences = ( - 89988F3E2CB00AB200B02A7D /* XCLocalSwiftPackageReference "../../JESideMenuController" */, + DDBB33C82F8919D300842B5D /* XCLocalSwiftPackageReference "../../JESideMenuController" */, ); - productRefGroup = 899B06BE22CD1E040048CDFB /* Products */; + preferredProjectObjectVersion = 77; + productRefGroup = DDBB32F92F8910B000842B5D /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 899B06BC22CD1E040048CDFB /* SideMenuControllerExample */, + DDBB32F72F8910B000842B5D /* SideMenuControllerExample */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 899B06BB22CD1E040048CDFB /* Resources */ = { + DDBB32F62F8910B000842B5D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 899B06CB22CD1E060048CDFB /* LaunchScreen.storyboard in Resources */, - 89758B3722DCFE6F0073288C /* Messages.json in Resources */, - 899B06C822CD1E060048CDFB /* Assets.xcassets in Resources */, - 899B06C622CD1E040048CDFB /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 899B06B922CD1E040048CDFB /* Sources */ = { + DDBB32F42F8910B000842B5D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 899B06C322CD1E040048CDFB /* DetailViewController.swift in Sources */, - 899B06C122CD1E040048CDFB /* AppDelegate.swift in Sources */, - 89397EFE2CB0259200CAF50B /* UITableViewCell+messageConfiguration.swift in Sources */, - 89397EFC2CB0252C00CAF50B /* MessageContentView.swift in Sources */, - 89758B3522DCFC640073288C /* Message.swift in Sources */, - 89758B1822DB6AB50073288C /* MenuTableViewController.swift in Sources */, - 89397EFA2CB0250B00CAF50B /* MessageConfiguration.swift in Sources */, - 89E158F322DFA4FA00FADB91 /* SettingsTableViewController.swift in Sources */, - 89758B1E22DB73180073288C /* ProfileTableViewController.swift in Sources */, - 89758B2922DCF4460073288C /* HomeTableViewController.swift in Sources */, - 89DBFE7125D03819001285EA /* DataLoader.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXVariantGroup section */ - 899B06C422CD1E040048CDFB /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 899B06C522CD1E040048CDFB /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; +/* Begin XCBuildConfiguration section */ + DDBB330C2F8910B200842B5D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = SideMenuControllerExample/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = de.je.SideMenuControllerExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; }; - 899B06C922CD1E060048CDFB /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 899B06CA22CD1E060048CDFB /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; + DDBB330D2F8910B200842B5D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = SideMenuControllerExample/Info.plist; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = de.je.SideMenuControllerExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 899B06CD22CD1E060048CDFB /* Debug */ = { + DDBB330E2F8910B200842B5D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; @@ -319,13 +242,12 @@ 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; ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_C_LANGUAGE_STANDARD = gnu17; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -339,25 +261,25 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.6; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; }; name = Debug; }; - 899B06CE22CD1E060048CDFB /* Release */ = { + DDBB330F2F8910B200842B5D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; @@ -383,13 +305,12 @@ 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; ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_C_LANGUAGE_STANDARD = gnu17; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -397,68 +318,33 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.6; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; VALIDATE_PRODUCT = YES; }; name = Release; }; - 899B06D022CD1E060048CDFB /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = SideMenuControllerExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = de.je.SideMenuControllerExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 899B06D122CD1E060048CDFB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = ""; - CODE_SIGN_STYLE = Automatic; - INFOPLIST_FILE = SideMenuControllerExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = de.je.SideMenuControllerExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 899B06B822CD1E040048CDFB /* Build configuration list for PBXProject "SideMenuControllerExample" */ = { + DDBB32F32F8910B000842B5D /* Build configuration list for PBXProject "SideMenuControllerExample" */ = { isa = XCConfigurationList; buildConfigurations = ( - 899B06CD22CD1E060048CDFB /* Debug */, - 899B06CE22CD1E060048CDFB /* Release */, + DDBB330E2F8910B200842B5D /* Debug */, + DDBB330F2F8910B200842B5D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 899B06CF22CD1E060048CDFB /* Build configuration list for PBXNativeTarget "SideMenuControllerExample" */ = { + DDBB330B2F8910B200842B5D /* Build configuration list for PBXNativeTarget "SideMenuControllerExample" */ = { isa = XCConfigurationList; buildConfigurations = ( - 899B06D022CD1E060048CDFB /* Debug */, - 899B06D122CD1E060048CDFB /* Release */, + DDBB330C2F8910B200842B5D /* Debug */, + DDBB330D2F8910B200842B5D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -466,18 +352,18 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 89988F3E2CB00AB200B02A7D /* XCLocalSwiftPackageReference "../../JESideMenuController" */ = { + DDBB33C82F8919D300842B5D /* XCLocalSwiftPackageReference "../../JESideMenuController" */ = { isa = XCLocalSwiftPackageReference; relativePath = ../../JESideMenuController; }; /* End XCLocalSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 89988F3F2CB00AB200B02A7D /* JESideMenuController */ = { + DDBB33C92F8919D300842B5D /* JESideMenuController */ = { isa = XCSwiftPackageProductDependency; productName = JESideMenuController; }; /* End XCSwiftPackageProductDependency section */ }; - rootObject = 899B06B522CD1E040048CDFB /* Project object */; + rootObject = DDBB32F02F8910B000842B5D /* Project object */; } diff --git a/Example/SideMenuControllerExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Example/SideMenuControllerExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/Example/SideMenuControllerExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Example/SideMenuControllerExample.xcodeproj/xcshareddata/xcschemes/SideMenuControllerExample.xcscheme b/Example/SideMenuControllerExample.xcodeproj/xcshareddata/xcschemes/SideMenuControllerExample.xcscheme deleted file mode 100644 index 4d83fb3..0000000 --- a/Example/SideMenuControllerExample.xcodeproj/xcshareddata/xcschemes/SideMenuControllerExample.xcscheme +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/SideMenuControllerExample/AppDelegate.swift b/Example/SideMenuControllerExample/AppDelegate.swift index e956526..2ce56f9 100644 --- a/Example/SideMenuControllerExample/AppDelegate.swift +++ b/Example/SideMenuControllerExample/AppDelegate.swift @@ -2,8 +2,7 @@ // AppDelegate.swift // SideMenuControllerExample // -// Created by JE on 03.07.19. -// Copyright © 2019 JE. All rights reserved. +// Created by JE on 10.04.26. // import UIKit @@ -11,8 +10,6 @@ import UIKit @main final class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? @@ -20,4 +17,25 @@ final class AppDelegate: UIResponder, UIApplicationDelegate { // 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/Example/SideMenuControllerExample/Assets.xcassets/AccentColor.colorset/Contents.json b/Example/SideMenuControllerExample/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/Example/SideMenuControllerExample/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Example/SideMenuControllerExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/Example/SideMenuControllerExample/Assets.xcassets/AppIcon.appiconset/Contents.json index d8db8d6..2305880 100644 --- a/Example/SideMenuControllerExample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Example/SideMenuControllerExample/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,98 +1,35 @@ { "images" : [ { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "83.5x83.5", - "scale" : "2x" - }, - { - "idiom" : "ios-marketing", - "size" : "1024x1024", - "scale" : "1x" + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/Example/SideMenuControllerExample/Base.lproj/LaunchScreen.storyboard b/Example/SideMenuControllerExample/Base.lproj/LaunchScreen.storyboard index bfdbbd8..865e932 100644 --- a/Example/SideMenuControllerExample/Base.lproj/LaunchScreen.storyboard +++ b/Example/SideMenuControllerExample/Base.lproj/LaunchScreen.storyboard @@ -1,33 +1,25 @@ - - - + + - - + - - + - - - + + + - - + + - + - + - - - - - diff --git a/Example/SideMenuControllerExample/Home/ViewControllers/HomeTableViewController.swift b/Example/SideMenuControllerExample/Home/ViewControllers/HomeTableViewController.swift index acc8e1d..8e6d24e 100644 --- a/Example/SideMenuControllerExample/Home/ViewControllers/HomeTableViewController.swift +++ b/Example/SideMenuControllerExample/Home/ViewControllers/HomeTableViewController.swift @@ -15,6 +15,7 @@ final class HomeTableViewController: UIViewController { static let identifier = String(describing: UITableViewCell.self) } + nonisolated private struct Item: Hashable, Sendable { let text: String let hasImage: Bool diff --git a/Example/SideMenuControllerExample/Info.plist b/Example/SideMenuControllerExample/Info.plist index 8928fed..dd3c9af 100644 --- a/Example/SideMenuControllerExample/Info.plist +++ b/Example/SideMenuControllerExample/Info.plist @@ -2,44 +2,24 @@ - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + diff --git a/Example/SideMenuControllerExample/Menu/MenuTableViewController.swift b/Example/SideMenuControllerExample/Menu/MenuTableViewController.swift index 51a3076..12082cd 100644 --- a/Example/SideMenuControllerExample/Menu/MenuTableViewController.swift +++ b/Example/SideMenuControllerExample/Menu/MenuTableViewController.swift @@ -16,6 +16,7 @@ final class MenuTableViewController: UIViewController { static let topSpacing: CGFloat = 44.0 } + nonisolated private struct Item: Hashable, Sendable { let image: UIImage? let title: String diff --git a/Example/SideMenuControllerExample/SceneDelegate.swift b/Example/SideMenuControllerExample/SceneDelegate.swift new file mode 100644 index 0000000..cf6ab8d --- /dev/null +++ b/Example/SideMenuControllerExample/SceneDelegate.swift @@ -0,0 +1,52 @@ +// +// SceneDelegate.swift +// SideMenuControllerExample +// +// Created by JE on 10.04.26. +// + +import UIKit + +final 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 necessarily 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/README.md b/README.md index 57092cd..57c92d5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # JESideMenuController -![CI](https://github.com/jaeilers/JESideMenuController/actions/workflows/ci.yml/badge.svg?branch=main) [![codecov](https://codecov.io/gh/jaeilers/JESideMenuController/branch/main/graph/badge.svg?token=uiHfbQtqm0)](https://codecov.io/gh/jaeilers/JESideMenuController) ![](https://img.shields.io/badge/license-MIT-lightgrey.svg) ![](https://img.shields.io/badge/Swift-6.0-orange.svg) ![](https://img.shields.io/badge/Xcode-16+-blue.svg) ![](https://img.shields.io/badge/iOS-15+-blue.svg) +![CI](https://github.com/jaeilers/JESideMenuController/actions/workflows/ci.yml/badge.svg?branch=main) [![codecov](https://codecov.io/gh/jaeilers/JESideMenuController/branch/main/graph/badge.svg?token=uiHfbQtqm0)](https://codecov.io/gh/jaeilers/JESideMenuController) ![](https://img.shields.io/badge/license-MIT-lightgrey.svg) ![](https://img.shields.io/badge/Swift-6.0-orange.svg) ![](https://img.shields.io/badge/Xcode-26+-blue.svg) ![](https://img.shields.io/badge/iOS-15+-blue.svg) The `JESideMenuController` is a custom container controller that manages a side menu and the currently selected content. It supports different styles such as: slide-out, slide-in (navigation drawer) and slide-out the menu and content simultaneously. This controller supports initialization via storyboards or in code and is Safe Area compatible.