From fd458ae46092dfcdfb6984cd2ac8b0d4cedebd10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20Andra=C5=A1ec?= Date: Wed, 2 Oct 2024 13:37:27 +0200 Subject: [PATCH] Add mergeable libraries support to dynamic libraries (#4381) --- .github/workflows/build.yml | 2 +- CHANGELOG.md | 1 + scripts/build-xcframework.sh | 46 +++++++++++++++++++++++++++++++++--- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d8639d93275..6573959ad82 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,7 @@ on: - Sentry.xcodeproj/** - Gemfile.lock - 'Package.swift' - - 'scripts/build-xcframework' + - 'scripts/build-xcframework.sh' # https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value concurrency: diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cfd03f3b23..4e3e5ec6554 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Added breadcrumb.origin private field (#4358) - Custom redact modifier for SwiftUI (#4362) +- Add mergeable libraries support to dynamic libraries (#4381) ### Improvements diff --git a/scripts/build-xcframework.sh b/scripts/build-xcframework.sh index 6259b7595c8..85bab81b972 100755 --- a/scripts/build-xcframework.sh +++ b/scripts/build-xcframework.sh @@ -19,7 +19,8 @@ generate_xcframework() { local resolved_configuration="Release$configuration_suffix" local resolved_product_name="$scheme$configuration_suffix" - + local OTHER_LDFLAGS="" + if [ "$MACH_O_TYPE" = "staticlib" ]; then #For static framework we disabled symbols because they are not distributed in the framework causing warnings. GCC_GENERATE_DEBUGGING_SYMBOLS="NO" @@ -30,7 +31,27 @@ generate_xcframework() { for sdk in "${sdks[@]}"; do if grep -q "${sdk}" <<< "$ALL_SDKS"; then - xcodebuild archive -project Sentry.xcodeproj/ -scheme "$scheme" -configuration "$resolved_configuration" -sdk "$sdk" -archivePath "./Carthage/archive/${scheme}${suffix}/${sdk}.xcarchive" CODE_SIGNING_REQUIRED=NO SKIP_INSTALL=NO CODE_SIGN_IDENTITY= CARTHAGE=YES MACH_O_TYPE="$MACH_O_TYPE" ENABLE_CODE_COVERAGE=NO GCC_GENERATE_DEBUGGING_SYMBOLS="$GCC_GENERATE_DEBUGGING_SYMBOLS" + ## watchos, watchsimulator dont support make_mergeable: ld: unknown option: -make_mergeable + if [[ "$sdk" == "watchos" || "$sdk" == "watchsimulator" ]]; then + OTHER_LDFLAGS="" + elif [ "$MACH_O_TYPE" != "staticlib" ]; then + OTHER_LDFLAGS="-Wl,-make_mergeable" + fi + + xcodebuild archive \ + -project Sentry.xcodeproj/ \ + -scheme "$scheme" \ + -configuration "$resolved_configuration" \ + -sdk "$sdk" \ + -archivePath "./Carthage/archive/${scheme}${suffix}/${sdk}.xcarchive" \ + CODE_SIGNING_REQUIRED=NO \ + SKIP_INSTALL=NO \ + CODE_SIGN_IDENTITY= \ + CARTHAGE=YES \ + MACH_O_TYPE="$MACH_O_TYPE" \ + ENABLE_CODE_COVERAGE=NO \ + GCC_GENERATE_DEBUGGING_SYMBOLS="$GCC_GENERATE_DEBUGGING_SYMBOLS" \ + OTHER_LDFLAGS="$OTHER_LDFLAGS" createxcframework+="-framework Carthage/archive/${scheme}${suffix}/${sdk}.xcarchive/Products/Library/Frameworks/${resolved_product_name}.framework " @@ -55,8 +76,27 @@ generate_xcframework() { fi done + # for the case that watch* sdks are last in list + if [ "$MACH_O_TYPE" != "staticlib" ]; then + OTHER_LDFLAGS="-Wl,-make_mergeable" + fi + #Create framework for mac catalyst - xcodebuild -project Sentry.xcodeproj/ -scheme "$scheme" -configuration "$resolved_configuration" -sdk iphoneos -destination 'platform=macOS,variant=Mac Catalyst' -derivedDataPath ./Carthage/DerivedData CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES MACH_O_TYPE="$MACH_O_TYPE" SUPPORTS_MACCATALYST=YES ENABLE_CODE_COVERAGE=NO GCC_GENERATE_DEBUGGING_SYMBOLS="$GCC_GENERATE_DEBUGGING_SYMBOLS" + xcodebuild \ + -project Sentry.xcodeproj/ \ + -scheme "$scheme" \ + -configuration "$resolved_configuration" \ + -sdk iphoneos \ + -destination 'platform=macOS,variant=Mac Catalyst' \ + -derivedDataPath ./Carthage/DerivedData \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGN_IDENTITY= \ + CARTHAGE=YES \ + MACH_O_TYPE="$MACH_O_TYPE" \ + SUPPORTS_MACCATALYST=YES \ + ENABLE_CODE_COVERAGE=NO \ + GCC_GENERATE_DEBUGGING_SYMBOLS="$GCC_GENERATE_DEBUGGING_SYMBOLS" \ + OTHER_LDFLAGS="$OTHER_LDFLAGS" if [ "$MACH_O_TYPE" = "staticlib" ]; then local infoPlist="Carthage/DerivedData/Build/Products/$resolved_configuration-maccatalyst/${scheme}.framework/Resources/Info.plist"