From 619353901dc30775d421cc969562e70d1693c3a2 Mon Sep 17 00:00:00 2001 From: Jatinjit Singh Date: Thu, 29 Oct 2026 12:10:42 +0900 Subject: [PATCH 1/2] Move to Xcode 26.2 / Swift 6.2 and com.istorry bundle IDs - Bundle IDs: com.istorry.Whisky, com.istorry.WhiskyCmd, com.istorry.Whisky.WhiskyThumbnail (incl. WhiskyKit fallback) - Drop upstream development team ID - Mark project and schemes as upgraded for Xcode 26.2; enable project-wide user script sandboxing and string catalog symbols, keeping sandboxing off for the Whisky target's SwiftLint phase - WhiskyKit: swift-tools-version 6.2, swiftLanguageModes, https dependency URL - SwiftLint: exclude nested .build directories --- .swiftlint.yml | 2 +- Whisky.xcodeproj/project.pbxproj | 28 +++++++++---------- .../xcshareddata/xcschemes/Whisky.xcscheme | 2 +- .../xcshareddata/xcschemes/WhiskyCmd.xcscheme | 2 +- .../xcschemes/WhiskyThumbnail.xcscheme | 2 +- WhiskyKit/Package.resolved | 9 +++--- WhiskyKit/Package.swift | 8 +++--- .../Extensions/Bundle+Extensions.swift | 2 +- 8 files changed, 28 insertions(+), 27 deletions(-) diff --git a/.swiftlint.yml b/.swiftlint.yml index 597ebfdbe..85d110e28 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -3,7 +3,7 @@ opt_in_rules: - file_header excluded: - - .build + - "**/.build" file_header: severity: error diff --git a/Whisky.xcodeproj/project.pbxproj b/Whisky.xcodeproj/project.pbxproj index ffb2d7075..9a782462a 100644 --- a/Whisky.xcodeproj/project.pbxproj +++ b/Whisky.xcodeproj/project.pbxproj @@ -474,8 +474,8 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1500; - LastUpgradeCheck = 1600; + LastSwiftUpdateCheck = 2620; + LastUpgradeCheck = 2620; TargetAttributes = { 6E40495129CCA19C006E3F1B = { CreatedOnToolsVersion = 14.2; @@ -688,6 +688,7 @@ DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; @@ -709,6 +710,7 @@ MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; @@ -753,6 +755,7 @@ 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_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -766,6 +769,7 @@ MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; }; @@ -785,9 +789,9 @@ DEAD_CODE_STRIPPING = YES; DEVELOPMENT_ASSET_PATHS = "\"Whisky/Preview Content\""; DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=macosx*]" = 92S3SG4PTH; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Whisky/Info.plist; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; @@ -801,7 +805,7 @@ ); MACOSX_DEPLOYMENT_TARGET = 14.0; MARKETING_VERSION = 2.3.5; - PRODUCT_BUNDLE_IDENTIFIER = com.isaacmarovitz.Whisky; + PRODUCT_BUNDLE_IDENTIFIER = com.istorry.Whisky; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_EMIT_LOC_STRINGS = YES; @@ -824,9 +828,9 @@ DEAD_CODE_STRIPPING = YES; DEVELOPMENT_ASSET_PATHS = "\"Whisky/Preview Content\""; DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=macosx*]" = 92S3SG4PTH; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Whisky/Info.plist; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; @@ -840,7 +844,7 @@ ); MACOSX_DEPLOYMENT_TARGET = 14.0; MARKETING_VERSION = 2.3.5; - PRODUCT_BUNDLE_IDENTIFIER = com.isaacmarovitz.Whisky; + PRODUCT_BUNDLE_IDENTIFIER = com.istorry.Whisky; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = Whisky; @@ -859,7 +863,6 @@ CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=macosx*]" = 92S3SG4PTH; ENABLE_HARDENED_RUNTIME = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -867,7 +870,7 @@ LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MACOSX_DEPLOYMENT_TARGET = 14.0; - PRODUCT_BUNDLE_IDENTIFIER = com.isaacmarovitz.WhiskyCmd; + PRODUCT_BUNDLE_IDENTIFIER = com.istorry.WhiskyCmd; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; @@ -886,7 +889,6 @@ CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=macosx*]" = 92S3SG4PTH; ENABLE_HARDENED_RUNTIME = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -894,7 +896,7 @@ LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MACOSX_DEPLOYMENT_TARGET = 14.0; - PRODUCT_BUNDLE_IDENTIFIER = com.isaacmarovitz.WhiskyCmd; + PRODUCT_BUNDLE_IDENTIFIER = com.istorry.WhiskyCmd; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; @@ -913,7 +915,6 @@ CURRENT_PROJECT_VERSION = 43; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=macosx*]" = 92S3SG4PTH; ENABLE_HARDENED_RUNTIME = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -928,7 +929,7 @@ ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 2.3.5; - PRODUCT_BUNDLE_IDENTIFIER = com.isaacmarovitz.Whisky.WhiskyThumbnail; + PRODUCT_BUNDLE_IDENTIFIER = com.istorry.Whisky.WhiskyThumbnail; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; @@ -949,7 +950,6 @@ CURRENT_PROJECT_VERSION = 43; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; - "DEVELOPMENT_TEAM[sdk=macosx*]" = 92S3SG4PTH; ENABLE_HARDENED_RUNTIME = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -964,7 +964,7 @@ ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 2.3.5; - PRODUCT_BUNDLE_IDENTIFIER = com.isaacmarovitz.Whisky.WhiskyThumbnail; + PRODUCT_BUNDLE_IDENTIFIER = com.istorry.Whisky.WhiskyThumbnail; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; diff --git a/Whisky.xcodeproj/xcshareddata/xcschemes/Whisky.xcscheme b/Whisky.xcodeproj/xcshareddata/xcschemes/Whisky.xcscheme index 75d05b17a..b6b317f26 100644 --- a/Whisky.xcodeproj/xcshareddata/xcschemes/Whisky.xcscheme +++ b/Whisky.xcodeproj/xcshareddata/xcschemes/Whisky.xcscheme @@ -1,6 +1,6 @@ Date: Thu, 29 Oct 2026 12:26:29 +0900 Subject: [PATCH 2/2] Add macOS CI: pinned SwiftLint and Xcode 26.2 builds Replaces the Ubuntu SwiftLint workflow, which used a years-old SwiftLint image and did not build the app, with a macos-26 job that lints with a checksum-verified SwiftLint 0.65.1 and builds Whisky and WhiskyCmd against the committed Package.resolved. Points the README badge at the fork. --- .github/workflows/CI.yml | 54 +++++++++++++++++++++++++++++++++ .github/workflows/SwiftLint.yml | 20 ------------ README.md | 2 +- 3 files changed, 55 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/CI.yml delete mode 100644 .github/workflows/SwiftLint.yml diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 000000000..3e899dce9 --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,54 @@ +name: CI + +on: + pull_request: + push: + branches: [main] + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +env: + DEVELOPER_DIR: /Applications/Xcode_26.2.app/Contents/Developer + SWIFTLINT_VERSION: 0.65.1 + SWIFTLINT_SHA256: c1e429b0599cf1b516f369a2d9ec04eaf0e436f3c12b637df8851fa52ff694d0 + +jobs: + build: + name: Lint and Build + runs-on: macos-26 + timeout-minutes: 30 + steps: + - uses: actions/checkout@v7 + + - name: Install SwiftLint + run: | + curl -fsSL -o "$RUNNER_TEMP/swiftlint.zip" \ + "https://github.com/realm/SwiftLint/releases/download/$SWIFTLINT_VERSION/portable_swiftlint.zip" + echo "$SWIFTLINT_SHA256 $RUNNER_TEMP/swiftlint.zip" | shasum -a 256 -c - + unzip -q "$RUNNER_TEMP/swiftlint.zip" -d "$RUNNER_TEMP/swiftlint" + echo "$RUNNER_TEMP/swiftlint" >> "$GITHUB_PATH" + + - name: Lint + run: swiftlint --strict --reporter github-actions-logging + + - name: Cache Swift packages + uses: actions/cache@v6 + with: + path: .build/SourcePackages + key: spm-${{ hashFiles('Whisky.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved', 'WhiskyKit/Package.swift') }} + + - name: Build Whisky + run: xcodebuild build -project Whisky.xcodeproj -scheme Whisky -configuration Release + -clonedSourcePackagesDirPath .build/SourcePackages -disableAutomaticPackageResolution + CODE_SIGNING_ALLOWED=NO CODE_SIGN_IDENTITY="" + + - name: Build WhiskyCmd + run: xcodebuild build -project Whisky.xcodeproj -scheme WhiskyCmd -configuration Release + -clonedSourcePackagesDirPath .build/SourcePackages -disableAutomaticPackageResolution + CODE_SIGNING_ALLOWED=NO CODE_SIGN_IDENTITY="" diff --git a/.github/workflows/SwiftLint.yml b/.github/workflows/SwiftLint.yml deleted file mode 100644 index 09ee6d7b2..000000000 --- a/.github/workflows/SwiftLint.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: SwiftLint - -concurrency: - group: pr-checks-${{ github.event.number }} - cancel-in-progress: true - -on: - pull_request: - push: - workflow_dispatch: - -jobs: - SwiftLint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: SwiftLint - uses: norio-nomura/action-swiftlint@3.2.1 - with: - args: --strict diff --git a/README.md b/README.md index c6babb86c..d2910cbf4 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # Whisky 🥃 *Wine but a bit stronger* - ![](https://img.shields.io/github/actions/workflow/status/IsaacMarovitz/Whisky/SwiftLint.yml?style=for-the-badge) + ![](https://img.shields.io/github/actions/workflow/status/iStorry/Whisky/CI.yml?branch=main&style=for-the-badge) [![](https://img.shields.io/discord/1115955071549702235?style=for-the-badge)](https://discord.gg/CsqAfs9CnM)