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