diff --git a/analysis_options.yaml b/analysis_options.yaml index 0fc66875..c274f714 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -11,6 +11,7 @@ include: package:flutter_lints/flutter.yaml analyzer: exclude: + - third_party/objective_c/** - third_party/super_native_extensions/** - third_party/**/example/** - third_party/**/test/** diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 94e5fbf7..3d5996de 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -249,6 +249,7 @@ 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, 93B26977D4D2EC7AFAB54C8E /* [CP] Embed Pods Frameworks */, + A1B2C3074F0A000100000001 /* Generate Missing Framework dSYMs */, ); buildRules = ( ); @@ -431,6 +432,25 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + A1B2C3074F0A000100000001 /* Generate Missing Framework dSYMs */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Generate Missing Framework dSYMs"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/bash \"${PROJECT_DIR}/../scripts/macos_generate_missing_dsyms.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -489,6 +509,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.0; OTHER_CFLAGS = ( "$(inherited)", @@ -508,6 +529,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.0; OTHER_CFLAGS = ( "$(inherited)", @@ -527,6 +549,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.0; OTHER_CFLAGS = ( "$(inherited)", @@ -583,6 +606,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; }; @@ -599,8 +623,8 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; ENABLE_APP_SANDBOX = YES; - ENABLE_INCOMING_NETWORK_CONNECTIONS = NO; - ENABLE_OUTGOING_NETWORK_CONNECTIONS = NO; + ENABLE_INCOMING_NETWORK_CONNECTIONS = YES; + ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES; ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO; ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO; ENABLE_RESOURCE_ACCESS_CALENDARS = NO; @@ -609,16 +633,19 @@ ENABLE_RESOURCE_ACCESS_LOCATION = NO; ENABLE_RESOURCE_ACCESS_PRINTING = NO; ENABLE_RESOURCE_ACCESS_USB = NO; + ENABLE_USER_SELECTED_FILES = readonly; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 11.5; OTHER_CFLAGS = ( "$(inherited)", "-Wno-ignored-attributes", ); PROVISIONING_PROFILE_SPECIFIER = ""; + RUNTIME_EXCEPTION_ALLOW_JIT = YES; SWIFT_VERSION = 5.0; }; name = Profile; @@ -627,6 +654,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 11.0; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Profile; @@ -682,6 +710,7 @@ MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; @@ -731,6 +760,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; }; @@ -747,8 +777,8 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; ENABLE_APP_SANDBOX = YES; - ENABLE_INCOMING_NETWORK_CONNECTIONS = NO; - ENABLE_OUTGOING_NETWORK_CONNECTIONS = NO; + ENABLE_INCOMING_NETWORK_CONNECTIONS = YES; + ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES; ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO; ENABLE_RESOURCE_ACCESS_BLUETOOTH = NO; ENABLE_RESOURCE_ACCESS_CALENDARS = NO; @@ -757,16 +787,19 @@ ENABLE_RESOURCE_ACCESS_LOCATION = NO; ENABLE_RESOURCE_ACCESS_PRINTING = NO; ENABLE_RESOURCE_ACCESS_USB = NO; + ENABLE_USER_SELECTED_FILES = readonly; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 11.5; OTHER_CFLAGS = ( "$(inherited)", "-Wno-ignored-attributes", ); PROVISIONING_PROFILE_SPECIFIER = ""; + RUNTIME_EXCEPTION_ALLOW_JIT = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; @@ -783,16 +816,22 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = N3G9T67W78; + ENABLE_APP_SANDBOX = YES; + ENABLE_INCOMING_NETWORK_CONNECTIONS = YES; + ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES; + ENABLE_USER_SELECTED_FILES = readonly; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); + MACOSX_DEPLOYMENT_TARGET = 11.5; OTHER_CFLAGS = ( "$(inherited)", "-Wno-ignored-attributes", ); PROVISIONING_PROFILE_SPECIFIER = ""; + RUNTIME_EXCEPTION_ALLOW_JIT = YES; SWIFT_VERSION = 5.0; }; name = Release; @@ -801,6 +840,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Manual; + MACOSX_DEPLOYMENT_TARGET = 11.0; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -809,6 +849,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; + MACOSX_DEPLOYMENT_TARGET = 11.0; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements index 39dcee08..b84f7313 100644 --- a/macos/Runner/DebugProfile.entitlements +++ b/macos/Runner/DebugProfile.entitlements @@ -2,17 +2,9 @@ - com.apple.security.app-sandbox - - com.apple.security.cs.allow-jit - com.apple.security.files.bookmarks.app-scope com.apple.security.files.user-selected.read-only - com.apple.security.network.client - - com.apple.security.network.server - diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements index 6abec674..0791a622 100644 --- a/macos/Runner/Release.entitlements +++ b/macos/Runner/Release.entitlements @@ -2,13 +2,7 @@ - com.apple.security.app-sandbox - com.apple.security.files.bookmarks.app-scope - com.apple.security.files.user-selected.read-only - - com.apple.security.network.client - diff --git a/pubspec.lock b/pubspec.lock index 2b77399e..9aff188c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -429,12 +429,11 @@ packages: source: hosted version: "0.17.5" objective_c: - dependency: transitive + dependency: "direct overridden" description: - name: objective_c - sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52" - url: "https://pub.dev" - source: hosted + path: "third_party/objective_c" + relative: true + source: path version: "9.3.0" package_info_plus: dependency: "direct main" diff --git a/pubspec.yaml b/pubspec.yaml index fda209f3..17184c95 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: xworkmate description: "XWorkmate desktop-first AI workspace shell." publish_to: 'none' -version: 1.0.0+1 +version: 1.0.0+2 build-date: 2026-03-27 build-id: dc1fb76 @@ -40,6 +40,10 @@ dev_dependencies: flutter_lints: ^6.0.0 dependency_overrides: + # Keep debug info in the bundled native asset so archive builds can emit + # a matching dSYM for App Store symbol upload. + objective_c: + path: third_party/objective_c # Use a local patch so Cargokit can recover from transient GitHub asset # download failures during macOS packaging. super_native_extensions: diff --git a/scripts/macos_generate_missing_dsyms.sh b/scripts/macos_generate_missing_dsyms.sh new file mode 100644 index 00000000..13e50ca9 --- /dev/null +++ b/scripts/macos_generate_missing_dsyms.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [[ "${DEBUG_INFORMATION_FORMAT:-}" != "dwarf-with-dsym" ]]; then + exit 0 +fi + +frameworks_dir="${TARGET_BUILD_DIR:-}/${WRAPPER_NAME:-}/Contents/Frameworks" +dsyms_dir="${DWARF_DSYM_FOLDER_PATH:-}" + +if [[ -z "${frameworks_dir}" || -z "${dsyms_dir}" || ! -d "${frameworks_dir}" ]]; then + exit 0 +fi + +shopt -s nullglob + +for framework in "${frameworks_dir}"/*.framework; do + framework_name="$(basename "${framework}")" + binary_name="${framework_name%.framework}" + binary_path="${framework}/${binary_name}" + + if [[ ! -f "${binary_path}" ]]; then + binary_path="${framework}/Versions/A/${binary_name}" + fi + + if [[ ! -f "${binary_path}" ]]; then + continue + fi + + if ! file "${binary_path}" | grep -q "Mach-O"; then + continue + fi + + dsym_path="${dsyms_dir}/${framework_name}.dSYM" + if [[ -d "${dsym_path}" ]]; then + continue + fi + + echo "Generating missing dSYM for ${framework_name}" + rm -rf "${dsym_path}" + xcrun dsymutil "${binary_path}" -o "${dsym_path}" +done