diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 969200a..8fb4ea6 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -5,7 +5,8 @@ on:
branches: [main]
pull_request:
branches: [main]
-
+ workflow_dispatch:
+
jobs:
build:
runs-on: macos-15
@@ -24,7 +25,7 @@ jobs:
- name: Build native XCFramework
run: |
cd UsbSerialForMacOS/Native
- ./build-native.sh
+ ./build-dylib.sh
- name: Install .NET workloads
run: |
diff --git a/.github/workflows/publish-nuget.yaml b/.github/workflows/publish-nuget.yaml
index 827976e..ee5ac51 100644
--- a/.github/workflows/publish-nuget.yaml
+++ b/.github/workflows/publish-nuget.yaml
@@ -29,7 +29,7 @@ jobs:
- name: Build native XCFramework
run: |
cd UsbSerialForMacOS/Native
- ./build-native.sh
+ ./build-dylib.sh
- name: Install .NET workloads
run: |
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6af89ca..39e1ff6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,54 +1,3 @@
# Change Log
-All notable changes to this project will be documented in this file. See [versionize](https://github.com/versionize/versionize) for commit guidelines.
-
-
-## [0.9.1](https://www.github.com/akinbender/UsbSerialForMacOS/releases/tag/v0.9.1) (2025-07-31)
-
-### Bug Fixes
-
-* nuget package ([dab3073](https://www.github.com/akinbender/UsbSerialForMacOS/commit/dab30731a8e848b078ba729694ef0ff9fe455186))
-
-
-## [0.9.0](https://www.github.com/akinbender/UsbSerialForMacOS/releases/tag/v0.9.0) (2025-07-31)
-
-### Bug Fixes
-
-* nuget readme ([838edc0](https://www.github.com/akinbender/UsbSerialForMacOS/commit/838edc0081322a7d9420cc586af4c8eae9d94798))
-
-
-## [0.9.0-test-prerelease.1](https://www.github.com/akinbender/UsbSerialForMacOS/releases/tag/v0.9.0-test-prerelease.1) (2025-07-31)
-
-### Bug Fixes
-
-* push to nuget ([9bb0b01](https://www.github.com/akinbender/UsbSerialForMacOS/commit/9bb0b01d0995f60307212df0a204ee37348c66c9))
-
-
-## [0.9.0-test-prerelease.0](https://www.github.com/akinbender/UsbSerialForMacOS/releases/tag/v0.9.0-test-prerelease.0) (2025-07-31)
-
-### Features
-
-* nuget ([30663e8](https://www.github.com/akinbender/UsbSerialForMacOS/commit/30663e8e4a393004594a5007265ff252acba9b6b))
-
-
-## [0.8.1-test-prerelease.1](https://www.github.com/akinbender/UsbSerialForMacOS/releases/tag/v0.8.1-test-prerelease.1) (2025-07-31)
-
-### Bug Fixes
-
-* csproj ([c0150df](https://www.github.com/akinbender/UsbSerialForMacOS/commit/c0150df14d51ab8d5e0ccd3f0d0d39f1be47346d))
-
-
-## [0.8.1-test-prerelease.0](https://www.github.com/akinbender/UsbSerialForMacOS/releases/tag/v0.8.1-test-prerelease.0) (2025-07-31)
-
-### Bug Fixes
-
-* minor fixes ([f27e578](https://www.github.com/akinbender/UsbSerialForMacOS/commit/f27e5781882b7f7135a1419ed439131205ff6aef))
-* versionize ([d913255](https://www.github.com/akinbender/UsbSerialForMacOS/commit/d91325527ea9e6ac63f18ee1a362b0e665951224))
-
-
-## [0.8.0](https://www.github.com/akinbender/UsbSerialForMacOS/releases/tag/v0.8.0) (2025-07-28)
-
-### Bug Fixes
-
-* Update project file and build scripts for mac ([d3fc1f2](https://www.github.com/akinbender/UsbSerialForMacOS/commit/d3fc1f2b84a2f68482b5ee7c1323d149f5f7fb35))
-
+All notable changes to this project will be documented in this file. See [versionize](https://github.com/versionize/versionize) for commit guidelines.
\ No newline at end of file
diff --git a/UsbSerialForMacOS/Native/UsbSerialForMacOS.xcodeproj/project.pbxproj b/UsbSerialForMacOS/Native/UsbSerialForMacOS.xcodeproj/project.pbxproj
index f00968d..7b4503d 100644
--- a/UsbSerialForMacOS/Native/UsbSerialForMacOS.xcodeproj/project.pbxproj
+++ b/UsbSerialForMacOS/Native/UsbSerialForMacOS.xcodeproj/project.pbxproj
@@ -7,32 +7,19 @@
objects = {
/* Begin PBXFileReference section */
- 8282F9592E36B9C900AE2839 /* UsbSerialForMacOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UsbSerialForMacOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 825383582E3E340B00F62FAA /* libUsbSerialForMacOS.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libUsbSerialForMacOS.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
-/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
- 8282F95E2E36B9C900AE2839 /* Exceptions for "UsbSerialForMacOS" folder in "UsbSerialForMacOS" target */ = {
- isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
- publicHeaders = (
- UsbSerialForMacOS.h,
- );
- target = 8282F9582E36B9C900AE2839 /* UsbSerialForMacOS */;
- };
-/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
-
/* Begin PBXFileSystemSynchronizedRootGroup section */
- 8282F95B2E36B9C900AE2839 /* UsbSerialForMacOS */ = {
+ 8253835E2E3E342C00F62FAA /* UsbSerialForMacOS */ = {
isa = PBXFileSystemSynchronizedRootGroup;
- exceptions = (
- 8282F95E2E36B9C900AE2839 /* Exceptions for "UsbSerialForMacOS" folder in "UsbSerialForMacOS" target */,
- );
path = UsbSerialForMacOS;
sourceTree = "";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
- 8282F9562E36B9C900AE2839 /* Frameworks */ = {
+ 825383562E3E340B00F62FAA /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -45,23 +32,15 @@
8282F94F2E36B9C900AE2839 = {
isa = PBXGroup;
children = (
- 8282F95B2E36B9C900AE2839 /* UsbSerialForMacOS */,
- 8282F95A2E36B9C900AE2839 /* Products */,
+ 825383582E3E340B00F62FAA /* libUsbSerialForMacOS.dylib */,
+ 8253835E2E3E342C00F62FAA /* UsbSerialForMacOS */,
);
sourceTree = "";
};
- 8282F95A2E36B9C900AE2839 /* Products */ = {
- isa = PBXGroup;
- children = (
- 8282F9592E36B9C900AE2839 /* UsbSerialForMacOS.framework */,
- );
- name = Products;
- sourceTree = "";
- };
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
- 8282F9542E36B9C900AE2839 /* Headers */ = {
+ 825383542E3E340B00F62FAA /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -71,28 +50,27 @@
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
- 8282F9582E36B9C900AE2839 /* UsbSerialForMacOS */ = {
+ 825383572E3E340B00F62FAA /* UsbSerialForMacOS */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 8282F95F2E36B9C900AE2839 /* Build configuration list for PBXNativeTarget "UsbSerialForMacOS" */;
+ buildConfigurationList = 825383592E3E340B00F62FAA /* Build configuration list for PBXNativeTarget "UsbSerialForMacOS" */;
buildPhases = (
- 8282F9542E36B9C900AE2839 /* Headers */,
- 8282F9552E36B9C900AE2839 /* Sources */,
- 8282F9562E36B9C900AE2839 /* Frameworks */,
- 8282F9572E36B9C900AE2839 /* Resources */,
+ 825383542E3E340B00F62FAA /* Headers */,
+ 825383552E3E340B00F62FAA /* Sources */,
+ 825383562E3E340B00F62FAA /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
- 8282F95B2E36B9C900AE2839 /* UsbSerialForMacOS */,
+ 8253835E2E3E342C00F62FAA /* UsbSerialForMacOS */,
);
name = UsbSerialForMacOS;
packageProductDependencies = (
);
productName = UsbSerialForMacOS;
- productReference = 8282F9592E36B9C900AE2839 /* UsbSerialForMacOS.framework */;
- productType = "com.apple.product-type.framework";
+ productReference = 825383582E3E340B00F62FAA /* libUsbSerialForMacOS.dylib */;
+ productType = "com.apple.product-type.library.dynamic";
};
/* End PBXNativeTarget section */
@@ -103,9 +81,8 @@
BuildIndependentTargetsInParallel = 1;
LastUpgradeCheck = 1640;
TargetAttributes = {
- 8282F9582E36B9C900AE2839 = {
+ 825383572E3E340B00F62FAA = {
CreatedOnToolsVersion = 16.4;
- LastSwiftMigration = 1640;
};
};
};
@@ -119,27 +96,17 @@
mainGroup = 8282F94F2E36B9C900AE2839;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 77;
- productRefGroup = 8282F95A2E36B9C900AE2839 /* Products */;
+ productRefGroup = 8282F94F2E36B9C900AE2839;
projectDirPath = "";
projectRoot = "";
targets = (
- 8282F9582E36B9C900AE2839 /* UsbSerialForMacOS */,
+ 825383572E3E340B00F62FAA /* UsbSerialForMacOS */,
);
};
/* End PBXProject section */
-/* Begin PBXResourcesBuildPhase section */
- 8282F9572E36B9C900AE2839 /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
/* Begin PBXSourcesBuildPhase section */
- 8282F9552E36B9C900AE2839 /* Sources */ = {
+ 825383552E3E340B00F62FAA /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -149,71 +116,32 @@
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
- 8282F9602E36B9C900AE2839 /* Debug */ = {
+ 8253835A2E3E340B00F62FAA /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
- COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- ENABLE_MODULE_VERIFIER = YES;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_KEY_NSHumanReadableCopyright = "";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- "@loader_path/Frameworks",
- );
- MARKETING_VERSION = 1.0;
- MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
- MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
- PRODUCT_BUNDLE_IDENTIFIER = akinbender.UsbSerialForMacOS;
- PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ EXECUTABLE_PREFIX = lib;
+ PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
SUPPORTS_MACCATALYST = YES;
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 6.0;
TARGETED_DEVICE_FAMILY = 2;
};
name = Debug;
};
- 8282F9612E36B9C900AE2839 /* Release */ = {
+ 8253835B2E3E340B00F62FAA /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
- COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- ENABLE_MODULE_VERIFIER = YES;
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_KEY_NSHumanReadableCopyright = "";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/../Frameworks",
- "@loader_path/Frameworks",
- );
- MARKETING_VERSION = 1.0;
- MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
- MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
- PRODUCT_BUNDLE_IDENTIFIER = akinbender.UsbSerialForMacOS;
- PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ EXECUTABLE_PREFIX = lib;
+ PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
SUPPORTS_MACCATALYST = YES;
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_VERSION = 6.0;
TARGETED_DEVICE_FAMILY = 2;
};
name = Release;
@@ -251,6 +179,7 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_STYLE = Manual;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
@@ -277,6 +206,7 @@
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
+ SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
@@ -315,6 +245,7 @@
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_STYLE = Manual;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -334,6 +265,7 @@
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = macosx;
+ SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
@@ -342,20 +274,20 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
- 8282F9532E36B9C900AE2839 /* Build configuration list for PBXProject "UsbSerialForMacOS" */ = {
+ 825383592E3E340B00F62FAA /* Build configuration list for PBXNativeTarget "UsbSerialForMacOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 8282F9622E36B9C900AE2839 /* Debug */,
- 8282F9632E36B9C900AE2839 /* Release */,
+ 8253835A2E3E340B00F62FAA /* Debug */,
+ 8253835B2E3E340B00F62FAA /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 8282F95F2E36B9C900AE2839 /* Build configuration list for PBXNativeTarget "UsbSerialForMacOS" */ = {
+ 8282F9532E36B9C900AE2839 /* Build configuration list for PBXProject "UsbSerialForMacOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 8282F9602E36B9C900AE2839 /* Debug */,
- 8282F9612E36B9C900AE2839 /* Release */,
+ 8282F9622E36B9C900AE2839 /* Debug */,
+ 8282F9632E36B9C900AE2839 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
diff --git a/UsbSerialForMacOS/Native/UsbSerialForMacOS.xcodeproj/project.xcworkspace/xcuserdata/akinbender.xcuserdatad/UserInterfaceState.xcuserstate b/UsbSerialForMacOS/Native/UsbSerialForMacOS.xcodeproj/project.xcworkspace/xcuserdata/akinbender.xcuserdatad/UserInterfaceState.xcuserstate
index c149f61..ae81db7 100644
Binary files a/UsbSerialForMacOS/Native/UsbSerialForMacOS.xcodeproj/project.xcworkspace/xcuserdata/akinbender.xcuserdatad/UserInterfaceState.xcuserstate and b/UsbSerialForMacOS/Native/UsbSerialForMacOS.xcodeproj/project.xcworkspace/xcuserdata/akinbender.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/UsbSerialForMacOS/Native/build-dylib-x64.sh b/UsbSerialForMacOS/Native/build-dylib-x64.sh
new file mode 100755
index 0000000..f63906a
--- /dev/null
+++ b/UsbSerialForMacOS/Native/build-dylib-x64.sh
@@ -0,0 +1,43 @@
+#!/bin/zsh
+
+set -e
+
+# Clean previous builds
+envdir=build/dylib
+rm -rf build
+rm -rf UsbSerialForMacOS.framework
+rm -rf UsbSerialForMacOS.xcframework
+
+# Build for Mac Catalyst x86_64 as .dylib
+xcodebuild -scheme UsbSerialForMacOS \
+ -sdk macosx \
+ -configuration Release \
+ -destination 'platform=macOS,variant=Mac Catalyst,arch=x86_64' \
+ MACH_O_TYPE=mh_dylib \
+ CODE_SIGN_IDENTITY="" \
+ CODE_SIGNING_REQUIRED=NO \
+ CODE_SIGNING_ALLOWED=NO \
+ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
+ clean build \
+ CONFIGURATION_BUILD_DIR=$envdir/maccatalyst/x86_64
+
+# Build for macOS x86_64 as .dylib
+xcodebuild -scheme UsbSerialForMacOS \
+ -sdk macosx \
+ -configuration Release \
+ -arch x86_64 \
+ MACH_O_TYPE=mh_dylib \
+ CODE_SIGN_IDENTITY="" \
+ CODE_SIGNING_REQUIRED=NO \
+ CODE_SIGNING_ALLOWED=NO \
+ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
+ clean build \
+ CONFIGURATION_BUILD_DIR=$envdir/macos/x86_64
+
+# Combine into universal .dylib
+xcodebuild -create-xcframework \
+ -library $envdir/macos/x86_64/libUsbSerialForMacOS.dylib \
+ -library $envdir/maccatalyst/x86_64/libUsbSerialForMacOS.dylib \
+ -output UsbSerialForMacOS.xcframework
+
+echo "Universal .dylib created at UsbSerialForMacOS.dylib"
diff --git a/UsbSerialForMacOS/Native/build-dylib.sh b/UsbSerialForMacOS/Native/build-dylib.sh
new file mode 100755
index 0000000..2fb6282
--- /dev/null
+++ b/UsbSerialForMacOS/Native/build-dylib.sh
@@ -0,0 +1,89 @@
+#!/bin/zsh
+
+set -e
+
+# Clean previous builds
+envdir=build/dylib
+rm -rf build
+rm -rf UsbSerialForMacOS.framework
+rm -rf UsbSerialForMacOS.xcframework
+mkdir -p $envdir/macos/arm64 $envdir/macos/x86_64 $envdir/macos/universal
+mkdir -p $envdir/maccatalyst/arm64 $envdir/maccatalyst/x86_64 $envdir/maccatalyst/universal
+
+xattr -w com.apple.xcode.CreatedByBuildSystem true build/dylib/macos/arm64 || true
+xattr -w com.apple.xcode.CreatedByBuildSystem true build/dylib/macos/x86_64 || true
+xattr -w com.apple.xcode.CreatedByBuildSystem true build/dylib/maccatalyst/arm64 || true
+xattr -w com.apple.xcode.CreatedByBuildSystem true build/dylib/maccatalyst/x86_64 || true
+
+# Build for macOS arm64 as .dylib
+xcodebuild -scheme UsbSerialForMacOS \
+ -sdk macosx \
+ -configuration Release \
+ -arch arm64 \
+ MACH_O_TYPE=mh_dylib \
+ CODE_SIGN_IDENTITY="" \
+ CODE_SIGNING_REQUIRED=NO \
+ CODE_SIGNING_ALLOWED=NO \
+ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
+ clean build \
+ CONFIGURATION_BUILD_DIR=$envdir/macos/arm64
+
+# Build for macOS x86_64 as .dylib
+xcodebuild -scheme UsbSerialForMacOS \
+ -sdk macosx \
+ -configuration Release \
+ -arch x86_64 \
+ MACH_O_TYPE=mh_dylib \
+ CODE_SIGN_IDENTITY="" \
+ CODE_SIGNING_REQUIRED=NO \
+ CODE_SIGNING_ALLOWED=NO \
+ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
+ clean build \
+ CONFIGURATION_BUILD_DIR=$envdir/macos/x86_64
+
+# Combine into universal macOS .dylib
+lipo -create \
+ $envdir/macos/arm64/libUsbSerialForMacOS.dylib \
+ $envdir/macos/x86_64/libUsbSerialForMacOS.dylib \
+ -output $envdir/macos/UsbSerialForMacOS.dylib
+
+# Build for Mac Catalyst arm64 as .dylib
+xcodebuild -scheme UsbSerialForMacOS \
+ -sdk macosx \
+ -configuration Release \
+ -destination 'platform=macOS,variant=Mac Catalyst,arch=arm64' \
+ MACH_O_TYPE=mh_dylib \
+ CODE_SIGN_IDENTITY="" \
+ CODE_SIGNING_REQUIRED=NO \
+ CODE_SIGNING_ALLOWED=NO \
+ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
+ clean build \
+ CONFIGURATION_BUILD_DIR=$envdir/maccatalyst/arm64
+
+# Build for Mac Catalyst x86_64 as .dylib
+xcodebuild -scheme UsbSerialForMacOS \
+ -sdk macosx \
+ -configuration Release \
+ -destination 'platform=macOS,variant=Mac Catalyst,arch=x86_64' \
+ MACH_O_TYPE=mh_dylib \
+ CODE_SIGN_IDENTITY="" \
+ CODE_SIGNING_REQUIRED=NO \
+ CODE_SIGNING_ALLOWED=NO \
+ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
+ clean build \
+ CONFIGURATION_BUILD_DIR=$envdir/maccatalyst/x86_64
+
+# Combine into universal Mac Catalyst .dylib
+lipo -create \
+ $envdir/maccatalyst/arm64/libUsbSerialForMacOS.dylib \
+ $envdir/maccatalyst/x86_64/libUsbSerialForMacOS.dylib \
+ -output $envdir/maccatalyst/UsbSerialForMacOS.dylib
+
+xcodebuild -create-xcframework \
+ -library build/dylib/macos/UsbSerialForMacOS.dylib \
+ -library build/dylib/maccatalyst/UsbSerialForMacOS.dylib \
+ -output UsbSerialForMacOS.xcframework
+
+echo "Universal .dylib created at:"
+echo " $envdir/macos/UsbSerialForMacOS.dylib (macOS)"
+echo " $envdir/maccatalyst/UsbSerialForMacOS.dylib (Mac Catalyst)"
diff --git a/UsbSerialForMacOS/UsbSerialForMacOS.csproj b/UsbSerialForMacOS/UsbSerialForMacOS.csproj
index 109d16f..e9c988e 100644
--- a/UsbSerialForMacOS/UsbSerialForMacOS.csproj
+++ b/UsbSerialForMacOS/UsbSerialForMacOS.csproj
@@ -45,8 +45,9 @@
-
-
-
+
+
+
+