From eb40b32231d5265b7f24a645240099873ea41e1e Mon Sep 17 00:00:00 2001 From: Mark Gregory Date: Thu, 22 Oct 2026 15:40:17 +0100 Subject: [PATCH] Updates to scanner with CVE saving and auto update --- PHPGuard.xcodeproj/project.pbxproj | 3 +- .../project.pbxproj.bak-20261022-153703 | 235 ++++++++++++++++++ Scripts/release.sh | 44 +++- 3 files changed, 270 insertions(+), 12 deletions(-) create mode 100644 PHPGuard.xcodeproj/project.pbxproj.bak-20261022-153703 diff --git a/PHPGuard.xcodeproj/project.pbxproj b/PHPGuard.xcodeproj/project.pbxproj index c89e554..bc40d38 100644 --- a/PHPGuard.xcodeproj/project.pbxproj +++ b/PHPGuard.xcodeproj/project.pbxproj @@ -61,7 +61,8 @@ 000000000000000000000068 /* ContentView.swift */, B10000000000000000000002 /* ReportPDF.swift */, B10000000000000000000001 /* SettingsView.swift */, - ); + + C10000000000000000000001 /* Assets.xcassets */,); path = PHPGuard; sourceTree = ""; }; diff --git a/PHPGuard.xcodeproj/project.pbxproj.bak-20261022-153703 b/PHPGuard.xcodeproj/project.pbxproj.bak-20261022-153703 new file mode 100644 index 0000000..c89e554 --- /dev/null +++ b/PHPGuard.xcodeproj/project.pbxproj.bak-20261022-153703 @@ -0,0 +1,235 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + C10000000000000000000002 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C10000000000000000000001 /* Assets.xcassets */; }; + A10000000000000000000002 /* VulnerabilityService.swift in Sources */ = { + isa = PBXBuildFile; + fileRef = A10000000000000000000001 /* VulnerabilityService.swift */; + }; + + 0000000000000000000000C8 /* PHPGuardApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 000000000000000000000064 /* PHPGuardApp.swift */; }; + 0000000000000000000000C9 /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 000000000000000000000065 /* Models.swift */; }; + 0000000000000000000000CA /* SSHScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 000000000000000000000066 /* SSHScanner.swift */; }; + 0000000000000000000000CB /* AuditStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 000000000000000000000067 /* AuditStore.swift */; }; + 0000000000000000000000CC /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 000000000000000000000068 /* ContentView.swift */; }; + B20000000000000000000001 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10000000000000000000001 /* SettingsView.swift */; }; + B20000000000000000000002 /* ReportPDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10000000000000000000002 /* ReportPDF.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + C10000000000000000000001 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + A10000000000000000000001 /* VulnerabilityService.swift */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.swift; + path = VulnerabilityService.swift; + sourceTree = ""; + }; + + 000000000000000000000030 /* PHPGuard.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PHPGuard.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 000000000000000000000064 /* PHPGuardApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PHPGuardApp.swift; sourceTree = ""; }; + 000000000000000000000065 /* Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = ""; }; + 000000000000000000000066 /* SSHScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SSHScanner.swift; sourceTree = ""; }; + 000000000000000000000067 /* AuditStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuditStore.swift; sourceTree = ""; }; + 000000000000000000000068 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + B10000000000000000000001 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; + B10000000000000000000002 /* ReportPDF.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportPDF.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + 000000000000000000000010 = { + isa = PBXGroup; + children = ( + 000000000000000000000011 /* PHPGuard */, + 000000000000000000000012 /* Products */, + ); + sourceTree = ""; + }; + 000000000000000000000011 /* PHPGuard */ = { + isa = PBXGroup; + children = ( + 000000000000000000000064 /* PHPGuardApp.swift */, + 000000000000000000000065 /* Models.swift */, + 000000000000000000000066 /* SSHScanner.swift */, + 000000000000000000000067 /* AuditStore.swift */, + A10000000000000000000001 /* VulnerabilityService.swift */, + 000000000000000000000068 /* ContentView.swift */, + B10000000000000000000002 /* ReportPDF.swift */, + B10000000000000000000001 /* SettingsView.swift */, + ); + path = PHPGuard; + sourceTree = ""; + }; + 000000000000000000000012 /* Products */ = { + isa = PBXGroup; + children = ( + 000000000000000000000030 /* PHPGuard.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 000000000000000000000020 /* PHPGuard */ = { + isa = PBXNativeTarget; + buildConfigurationList = 000000000000000000000042 /* Build configuration list for PBXNativeTarget "PHPGuard" */; + buildPhases = ( + 000000000000000000000021 /* Sources */, + B10000000000000000000003 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PHPGuard; + productName = PHPGuard; + productReference = 000000000000000000000030 /* PHPGuard.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 000000000000000000000001 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1600; + TargetAttributes = { + 000000000000000000000020 = { + CreatedOnToolsVersion = 16.0; + }; + }; + }; + buildConfigurationList = 000000000000000000000041 /* Build configuration list for PBXProject "PHPGuard" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 000000000000000000000010; + productRefGroup = 000000000000000000000012 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 000000000000000000000020 /* PHPGuard */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + B10000000000000000000003 /* Resources */ = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + C10000000000000000000002 /* Assets.xcassets in Resources */, + ); runOnlyForDeploymentPostprocessing = 0; }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 000000000000000000000021 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0000000000000000000000C8 /* PHPGuardApp.swift in Sources */, + 0000000000000000000000C9 /* Models.swift in Sources */, + 0000000000000000000000CA /* SSHScanner.swift in Sources */, + 0000000000000000000000CB /* AuditStore.swift in Sources */, + 0000000000000000000000CC /* ContentView.swift in Sources */, + A10000000000000000000002 /* VulnerabilityService.swift in Sources */, + B20000000000000000000002 /* ReportPDF.swift in Sources */, + B20000000000000000000001 /* SettingsView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 000000000000000000000051 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + MACOSX_DEPLOYMENT_TARGET = 15.0; + SDKROOT = macosx; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 000000000000000000000052 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + MACOSX_DEPLOYMENT_TARGET = 15.0; + SDKROOT = macosx; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 000000000000000000000053 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 39R6U3437D; + ENABLE_APP_SANDBOX = NO; + GENERATE_INFOPLIST_FILE = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_KEY_CFBundleIconName = AppIcon; + INFOPLIST_KEY_CFBundleDisplayName = PHPGuard; + MARKETING_VERSION = 1.9.0; + CURRENT_PROJECT_VERSION = 10; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; + MACOSX_DEPLOYMENT_TARGET = 15.0; + PRODUCT_BUNDLE_IDENTIFIER = net.absdev.PHPGuard; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 000000000000000000000054 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 39R6U3437D; + ENABLE_APP_SANDBOX = NO; + GENERATE_INFOPLIST_FILE = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_KEY_CFBundleIconName = AppIcon; + INFOPLIST_KEY_CFBundleDisplayName = PHPGuard; + MARKETING_VERSION = 1.9.0; + CURRENT_PROJECT_VERSION = 10; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; + MACOSX_DEPLOYMENT_TARGET = 15.0; + PRODUCT_BUNDLE_IDENTIFIER = net.absdev.PHPGuard; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 000000000000000000000041 /* Build configuration list for PBXProject "PHPGuard" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 000000000000000000000051 /* Debug */, + 000000000000000000000052 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 000000000000000000000042 /* Build configuration list for PBXNativeTarget "PHPGuard" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 000000000000000000000053 /* Debug */, + 000000000000000000000054 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 000000000000000000000001 /* Project object */; +} diff --git a/Scripts/release.sh b/Scripts/release.sh index 49eb035..71dfa9a 100755 --- a/Scripts/release.sh +++ b/Scripts/release.sh @@ -4,9 +4,10 @@ ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "$ROOT" command -v xcodebuild >/dev/null || { echo "Xcode is required" >&2; exit 1; } command -v hdiutil >/dev/null || { echo "hdiutil missing" >&2; exit 1; } -IDENTITY="${SIGNING_IDENTITY:-$(security find-identity -v -p codesigning | sed -nE 's/.*"(Developer ID Application: [^"]+)".*/\1/p' | head -1)}" +# Use the certificate fingerprint to avoid ambiguous Keychain identities. +IDENTITY="${SIGNING_IDENTITY:-$(security find-identity -v -p codesigning | awk '/Developer ID Application:/ {print $2; exit}')}" [[ -n "$IDENTITY" ]] || { echo "Developer ID Application signing identity required. Set SIGNING_IDENTITY." >&2; exit 1; } -PROFILE="${NOTARY_PROFILE:-}" +PROFILE="${NOTARY_PROFILE:-orion-notary}" [[ -n "$PROFILE" ]] || { echo "Set NOTARY_PROFILE to an existing notarytool keychain profile." >&2; exit 1; } DERIVED="$ROOT/.build" xcodebuild -project "$ROOT/PHPGuard.xcodeproj" -scheme PHPGuard -configuration Release -derivedDataPath "$DERIVED" CODE_SIGNING_ALLOWED=NO build @@ -15,19 +16,40 @@ APP="$DERIVED/Build/Products/Release/PHPGuard.app" echo "=== VERIFY APPLICATION ICON ===" -APP_ICON_NAME=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIconFile" "$APP/Contents/Info.plist" 2>/dev/null || true) +ASSET_CATALOG="$APP/Contents/Resources/Assets.car" -if [[ -z "$APP_ICON_NAME" ]]; then - echo "ERROR: Application icon is missing from Info.plist" >&2 - exit 1 -fi - -echo "Application icon: $APP_ICON_NAME" - -if [[ ! -f "$APP/Contents/Resources/Assets.car" ]]; then +if [[ ! -f "$ASSET_CATALOG" ]]; then echo "ERROR: Compiled asset catalog missing" >&2 exit 1 fi + +APP_ICON_NAME=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIconName" "$APP/Contents/Info.plist" 2>/dev/null || true) + +APP_ICON_FILE=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIconFile" "$APP/Contents/Info.plist" 2>/dev/null || true) + +if [[ -n "$APP_ICON_NAME" ]]; then + echo "Application icon asset: $APP_ICON_NAME" +elif [[ -n "$APP_ICON_FILE" ]]; then + echo "Application icon file: $APP_ICON_FILE" +else + echo "WARNING: No application icon key in Info.plist." + echo "Checking Xcode asset catalog configuration..." + + ICON_SETTING=$(xcodebuild -project "$ROOT/PHPGuard.xcodeproj" -scheme PHPGuard -configuration Release -showBuildSettings 2>/dev/null | + sed -n 's/^[[:space:]]*ASSETCATALOG_COMPILER_APPICON_NAME = //p' | + head -1) + + if [[ -z "$ICON_SETTING" ]]; then + echo "ERROR: No application icon configured in Xcode." >&2 + exit 1 + fi + + echo "Configured icon asset: $ICON_SETTING" +fi + +echo "Compiled asset catalog present." +echo "Application icon configuration verified." + VERSION="$(/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' "$APP/Contents/Info.plist")" mkdir -p "$ROOT/dist" STAGING="$(mktemp -d)"