diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d8639d9327..6573959ad8 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 4cfd03f3b2..4e3e5ec655 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 6259b7595c..85bab81b97 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"