mirror of
https://github.com/krzyzanowskim/OpenSSL.git
synced 2026-05-07 20:12:40 +00:00
bf493d4f28
This change updates the create-frameworks.sh script to copy supporting .dSYM files for each platform's built framework into the output directories. These debug symbol files are also included in the final XCFramework bundle using xcodebuild's -debug-symbols option for each platform. Including dSYM files enhances debugging and crash symbolication support.
262 lines
12 KiB
Bash
Executable File
262 lines
12 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
# set -x
|
|
|
|
XC_USER_DEFINED_VARS=""
|
|
|
|
while getopts ":s" option; do
|
|
case $option in
|
|
s) # Build XCFramework as static instead of dynamic
|
|
XC_USER_DEFINED_VARS="MACH_O_TYPE=staticlib"
|
|
esac
|
|
done
|
|
|
|
BASE_PWD="$PWD"
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
|
IDENTITY=$1
|
|
FWNAME="OpenSSL"
|
|
OUTPUT_DIR=$( mktemp -d )
|
|
COMMON_SETUP=" -project ${SCRIPT_DIR}/../${FWNAME}.xcodeproj -configuration Release BUILD_LIBRARY_FOR_DISTRIBUTION=YES $XC_USER_DEFINED_VARS"
|
|
|
|
# macOS
|
|
DERIVED_DATA_PATH=$( mktemp -d )
|
|
xcrun xcodebuild build \
|
|
$COMMON_SETUP \
|
|
-scheme "${FWNAME} (macOS)" \
|
|
-derivedDataPath "${DERIVED_DATA_PATH}" \
|
|
-destination 'generic/platform=macOS'
|
|
|
|
mkdir -p "${OUTPUT_DIR}/macosx"
|
|
rm -rf "${OUTPUT_DIR}/macosx/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release/${FWNAME}.framework" "${OUTPUT_DIR}/macosx/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release/${FWNAME}.framework.dSYM" "${OUTPUT_DIR}/macosx/${FWNAME}.framework.dSYM"
|
|
rm -rf "${DERIVED_DATA_PATH}"
|
|
|
|
# macOS Catalyst
|
|
DERIVED_DATA_PATH=$( mktemp -d )
|
|
xcrun xcodebuild build \
|
|
$COMMON_SETUP \
|
|
-scheme "${FWNAME} (Catalyst)" \
|
|
-derivedDataPath "${DERIVED_DATA_PATH}" \
|
|
-destination 'generic/platform=macOS,variant=Mac Catalyst'
|
|
|
|
mkdir -p "${OUTPUT_DIR}/macosx_catalyst"
|
|
rm -rf "${OUTPUT_DIR}/macosx_catalyst/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-maccatalyst/${FWNAME}.framework" "${OUTPUT_DIR}/macosx_catalyst/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-maccatalyst/${FWNAME}.framework.dSYM" "${OUTPUT_DIR}/macosx_catalyst/${FWNAME}.framework.dSYM"
|
|
rm -rf "${DERIVED_DATA_PATH}"
|
|
|
|
# iOS
|
|
DERIVED_DATA_PATH=$( mktemp -d )
|
|
xcrun xcodebuild build \
|
|
$COMMON_SETUP \
|
|
-scheme "${FWNAME} (iOS)" \
|
|
-derivedDataPath "${DERIVED_DATA_PATH}" \
|
|
-destination 'generic/platform=iOS'
|
|
|
|
rm -rf "${OUTPUT_DIR}/iphoneos"
|
|
mkdir -p "${OUTPUT_DIR}/iphoneos"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-iphoneos/${FWNAME}.framework" "${OUTPUT_DIR}/iphoneos/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-iphoneos/${FWNAME}.framework.dSYM" "${OUTPUT_DIR}/iphoneos/${FWNAME}.framework.dSYM"
|
|
rm -rf "${DERIVED_DATA_PATH}"
|
|
|
|
# iOS Simulator
|
|
DERIVED_DATA_PATH=$( mktemp -d )
|
|
xcrun xcodebuild build \
|
|
$COMMON_SETUP \
|
|
-scheme "${FWNAME} (iOS Simulator)" \
|
|
-derivedDataPath "${DERIVED_DATA_PATH}" \
|
|
-destination 'generic/platform=iOS Simulator'
|
|
|
|
rm -rf "${OUTPUT_DIR}/iphonesimulator"
|
|
mkdir -p "${OUTPUT_DIR}/iphonesimulator"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-iphonesimulator/${FWNAME}.framework" "${OUTPUT_DIR}/iphonesimulator/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-iphonesimulator/${FWNAME}.framework.dSYM" "${OUTPUT_DIR}/iphonesimulator/${FWNAME}.framework.dSYM"
|
|
rm -rf "${DERIVED_DATA_PATH}"
|
|
|
|
# visionOS
|
|
DERIVED_DATA_PATH=$( mktemp -d )
|
|
xcrun xcodebuild build \
|
|
$COMMON_SETUP \
|
|
-scheme "${FWNAME} (visionOS)" \
|
|
-derivedDataPath "${DERIVED_DATA_PATH}" \
|
|
-destination 'generic/platform=visionOS'
|
|
|
|
rm -rf "${OUTPUT_DIR}/visionos"
|
|
mkdir -p "${OUTPUT_DIR}/visionos"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-xros/${FWNAME}.framework" "${OUTPUT_DIR}/visionos/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-xros/${FWNAME}.framework.dSYM" "${OUTPUT_DIR}/visionos/${FWNAME}.framework.dSYM"
|
|
rm -rf "${DERIVED_DATA_PATH}"
|
|
|
|
# visionOS Simulator
|
|
DERIVED_DATA_PATH=$( mktemp -d )
|
|
xcrun xcodebuild build \
|
|
$COMMON_SETUP \
|
|
-scheme "${FWNAME} (visionOS Simulator)" \
|
|
-derivedDataPath "${DERIVED_DATA_PATH}" \
|
|
-destination 'generic/platform=visionOS Simulator'
|
|
|
|
rm -rf "${OUTPUT_DIR}/visionsimulator"
|
|
mkdir -p "${OUTPUT_DIR}/visionsimulator"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-xrsimulator/${FWNAME}.framework" "${OUTPUT_DIR}/visionsimulator/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-xrsimulator/${FWNAME}.framework.dSYM" "${OUTPUT_DIR}/visionsimulator/${FWNAME}.framework.dSYM"
|
|
rm -rf "${DERIVED_DATA_PATH}"
|
|
|
|
# tvOS
|
|
DERIVED_DATA_PATH=$( mktemp -d )
|
|
xcrun xcodebuild build \
|
|
$COMMON_SETUP \
|
|
-scheme "${FWNAME} (tvOS)" \
|
|
-derivedDataPath "${DERIVED_DATA_PATH}" \
|
|
-destination 'generic/platform=tvOS'
|
|
|
|
rm -rf "${OUTPUT_DIR}/appletvos"
|
|
mkdir -p "${OUTPUT_DIR}/appletvos"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-appletvos/${FWNAME}.framework" "${OUTPUT_DIR}/appletvos/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-appletvos/${FWNAME}.framework.dSYM" "${OUTPUT_DIR}/appletvos/${FWNAME}.framework.dSYM"
|
|
rm -rf "${DERIVED_DATA_PATH}"
|
|
|
|
# tvOS Simulator
|
|
DERIVED_DATA_PATH=$( mktemp -d )
|
|
xcrun xcodebuild build \
|
|
$COMMON_SETUP \
|
|
-scheme "${FWNAME} (tvOS Simulator)" \
|
|
-derivedDataPath "${DERIVED_DATA_PATH}" \
|
|
-destination 'generic/platform=tvOS Simulator'
|
|
|
|
rm -rf "${OUTPUT_DIR}/appletvsimulator"
|
|
mkdir -p "${OUTPUT_DIR}/appletvsimulator"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-appletvsimulator/${FWNAME}.framework" "${OUTPUT_DIR}/appletvsimulator/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-appletvsimulator/${FWNAME}.framework.dSYM" "${OUTPUT_DIR}/appletvsimulator/${FWNAME}.framework.dSYM"
|
|
rm -rf "${DERIVED_DATA_PATH}"
|
|
|
|
# watchOS
|
|
DERIVED_DATA_PATH=$( mktemp -d )
|
|
xcrun xcodebuild build \
|
|
$COMMON_SETUP \
|
|
-scheme "${FWNAME} (watchOS)" \
|
|
-derivedDataPath "${DERIVED_DATA_PATH}" \
|
|
-destination 'generic/platform=watchOS'
|
|
|
|
rm -rf "${OUTPUT_DIR}/watchos"
|
|
mkdir -p "${OUTPUT_DIR}/watchos"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-watchos/${FWNAME}.framework" "${OUTPUT_DIR}/watchos/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-watchos/${FWNAME}.framework.dSYM" "${OUTPUT_DIR}/watchos/${FWNAME}.framework.dSYM"
|
|
rm -rf "${DERIVED_DATA_PATH}"
|
|
|
|
# watchOS Simulator
|
|
DERIVED_DATA_PATH=$( mktemp -d )
|
|
xcrun xcodebuild build \
|
|
$COMMON_SETUP \
|
|
-scheme "${FWNAME} (watchOS Simulator)" \
|
|
-derivedDataPath "${DERIVED_DATA_PATH}" \
|
|
-destination 'generic/platform=watchOS Simulator'
|
|
|
|
rm -rf "${OUTPUT_DIR}/watchsimulator"
|
|
mkdir -p "${OUTPUT_DIR}/watchsimulator"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-watchsimulator/${FWNAME}.framework" "${OUTPUT_DIR}/watchsimulator/${FWNAME}.framework"
|
|
ditto "${DERIVED_DATA_PATH}/Build/Products/Release-watchsimulator/${FWNAME}.framework.dSYM" "${OUTPUT_DIR}/watchsimulator/${FWNAME}.framework.dSYM"
|
|
rm -rf "${DERIVED_DATA_PATH}"
|
|
|
|
#
|
|
|
|
rm -rf "${BASE_PWD}/Frameworks/iphoneos"
|
|
mkdir -p "${BASE_PWD}/Frameworks/iphoneos"
|
|
ditto "${OUTPUT_DIR}/iphoneos/${FWNAME}.framework" "${BASE_PWD}/Frameworks/iphoneos/${FWNAME}.framework"
|
|
ditto "${OUTPUT_DIR}/iphoneos/${FWNAME}.framework.dSYM" "${BASE_PWD}/Frameworks/iphoneos/${FWNAME}.framework.dSYM"
|
|
|
|
rm -rf "${BASE_PWD}/Frameworks/iphonesimulator"
|
|
mkdir -p "${BASE_PWD}/Frameworks/iphonesimulator"
|
|
ditto "${OUTPUT_DIR}/iphonesimulator/${FWNAME}.framework" "${BASE_PWD}/Frameworks/iphonesimulator/${FWNAME}.framework"
|
|
ditto "${OUTPUT_DIR}/iphonesimulator/${FWNAME}.framework.dSYM" "${BASE_PWD}/Frameworks/iphonesimulator/${FWNAME}.framework.dSYM"
|
|
|
|
rm -rf "${BASE_PWD}/Frameworks/visionos"
|
|
mkdir -p "${BASE_PWD}/Frameworks/visionos"
|
|
ditto "${OUTPUT_DIR}/visionos/${FWNAME}.framework" "${BASE_PWD}/Frameworks/visionos/${FWNAME}.framework"
|
|
ditto "${OUTPUT_DIR}/visionos/${FWNAME}.framework.dSYM" "${BASE_PWD}/Frameworks/visionos/${FWNAME}.framework.dSYM"
|
|
|
|
rm -rf "${BASE_PWD}/Frameworks/visionsimulator"
|
|
mkdir -p "${BASE_PWD}/Frameworks/visionsimulator"
|
|
ditto "${OUTPUT_DIR}/visionsimulator/${FWNAME}.framework" "${BASE_PWD}/Frameworks/visionsimulator/${FWNAME}.framework"
|
|
ditto "${OUTPUT_DIR}/visionsimulator/${FWNAME}.framework.dSYM" "${BASE_PWD}/Frameworks/visionsimulator/${FWNAME}.framework.dSYM"
|
|
|
|
rm -rf "${BASE_PWD}/Frameworks/appletvos"
|
|
mkdir -p "${BASE_PWD}/Frameworks/appletvos"
|
|
ditto "${OUTPUT_DIR}/appletvos/${FWNAME}.framework" "${BASE_PWD}/Frameworks/appletvos/${FWNAME}.framework"
|
|
ditto "${OUTPUT_DIR}/appletvos/${FWNAME}.framework.dSYM" "${BASE_PWD}/Frameworks/appletvos/${FWNAME}.framework.dSYM"
|
|
|
|
rm -rf "${BASE_PWD}/Frameworks/appletvsimulator"
|
|
mkdir -p "${BASE_PWD}/Frameworks/appletvsimulator"
|
|
ditto "${OUTPUT_DIR}/appletvsimulator/${FWNAME}.framework" "${BASE_PWD}/Frameworks/appletvsimulator/${FWNAME}.framework"
|
|
ditto "${OUTPUT_DIR}/appletvsimulator/${FWNAME}.framework.dSYM" "${BASE_PWD}/Frameworks/appletvsimulator/${FWNAME}.framework.dSYM"
|
|
|
|
rm -rf "${BASE_PWD}/Frameworks/watchos"
|
|
mkdir -p "${BASE_PWD}/Frameworks/watchos"
|
|
ditto "${OUTPUT_DIR}/watchos/${FWNAME}.framework" "${BASE_PWD}/Frameworks/watchos/${FWNAME}.framework"
|
|
ditto "${OUTPUT_DIR}/watchos/${FWNAME}.framework.dSYM" "${BASE_PWD}/Frameworks/watchos/${FWNAME}.framework.dSYM"
|
|
|
|
rm -rf "${BASE_PWD}/Frameworks/watchsimulator"
|
|
mkdir -p "${BASE_PWD}/Frameworks/watchsimulator"
|
|
ditto "${OUTPUT_DIR}/watchsimulator/${FWNAME}.framework" "${BASE_PWD}/Frameworks/watchsimulator/${FWNAME}.framework"
|
|
ditto "${OUTPUT_DIR}/watchsimulator/${FWNAME}.framework.dSYM" "${BASE_PWD}/Frameworks/watchsimulator/${FWNAME}.framework.dSYM"
|
|
|
|
rm -rf "${BASE_PWD}/Frameworks/macosx"
|
|
mkdir -p "${BASE_PWD}/Frameworks/macosx"
|
|
ditto "${OUTPUT_DIR}/macosx/${FWNAME}.framework" "${BASE_PWD}/Frameworks/macosx/${FWNAME}.framework"
|
|
ditto "${OUTPUT_DIR}/macosx/${FWNAME}.framework.dSYM" "${BASE_PWD}/Frameworks/macosx/${FWNAME}.framework.dSYM"
|
|
|
|
rm -rf "${BASE_PWD}/Frameworks/macosx_catalyst"
|
|
mkdir -p "${BASE_PWD}/Frameworks/macosx_catalyst"
|
|
ditto "${OUTPUT_DIR}/macosx_catalyst/${FWNAME}.framework" "${BASE_PWD}/Frameworks/macosx_catalyst/${FWNAME}.framework"
|
|
ditto "${OUTPUT_DIR}/macosx_catalyst/${FWNAME}.framework.dSYM" "${BASE_PWD}/Frameworks/macosx_catalyst/${FWNAME}.framework.dSYM"
|
|
|
|
# XCFramework
|
|
rm -rf "${BASE_PWD}/Frameworks/${FWNAME}.xcframework"
|
|
|
|
xcrun xcodebuild -create-xcframework \
|
|
-framework "${BASE_PWD}/Frameworks/iphoneos/${FWNAME}.framework" \
|
|
-debug-symbols "${BASE_PWD}/Frameworks/iphoneos/${FWNAME}.framework.dSYM" \
|
|
-framework "${BASE_PWD}/Frameworks/iphonesimulator/${FWNAME}.framework" \
|
|
-debug-symbols "${BASE_PWD}/Frameworks/iphonesimulator/${FWNAME}.framework.dSYM" \
|
|
-framework "${BASE_PWD}/Frameworks/visionos/${FWNAME}.framework" \
|
|
-debug-symbols "${BASE_PWD}/Frameworks/visionos/${FWNAME}.framework.dSYM" \
|
|
-framework "${BASE_PWD}/Frameworks/visionsimulator/${FWNAME}.framework" \
|
|
-debug-symbols "${BASE_PWD}/Frameworks/visionsimulator/${FWNAME}.framework.dSYM" \
|
|
-framework "${BASE_PWD}/Frameworks/appletvos/${FWNAME}.framework" \
|
|
-debug-symbols "${BASE_PWD}/Frameworks/appletvos/${FWNAME}.framework.dSYM" \
|
|
-framework "${BASE_PWD}/Frameworks/appletvsimulator/${FWNAME}.framework" \
|
|
-debug-symbols "${BASE_PWD}/Frameworks/appletvsimulator/${FWNAME}.framework.dSYM" \
|
|
-framework "${BASE_PWD}/Frameworks/watchos/${FWNAME}.framework" \
|
|
-debug-symbols "${BASE_PWD}/Frameworks/watchos/${FWNAME}.framework.dSYM" \
|
|
-framework "${BASE_PWD}/Frameworks/watchsimulator/${FWNAME}.framework" \
|
|
-debug-symbols "${BASE_PWD}/Frameworks/watchsimulator/${FWNAME}.framework.dSYM" \
|
|
-framework "${BASE_PWD}/Frameworks/macosx/${FWNAME}.framework" \
|
|
-debug-symbols "${BASE_PWD}/Frameworks/macosx/${FWNAME}.framework.dSYM" \
|
|
-framework "${BASE_PWD}/Frameworks/macosx_catalyst/${FWNAME}.framework" \
|
|
-debug-symbols "${BASE_PWD}/Frameworks/macosx_catalyst/${FWNAME}.framework.dSYM" \
|
|
-output "${BASE_PWD}/Frameworks/${FWNAME}.xcframework"
|
|
|
|
# Sign
|
|
# Using --deep to recursively sign all nested frameworks within the XCFramework bundle.
|
|
# This is necessary for Swift Package Manager to validate the distributed artifact.
|
|
#
|
|
# NOTE: --deep is deprecated for signing since macOS 13.0. Apple recommends signing
|
|
# each nested framework individually from inside-out instead. However, for pre-built
|
|
# XCFramework distribution (as opposed to Xcode build integration), this remains
|
|
# the most practical approach.
|
|
#
|
|
# Future solution when --deep is removed:
|
|
# find "${BASE_PWD}/Frameworks/${FWNAME}.xcframework" -depth -type d -name "*.framework" \
|
|
# -exec codesign --timestamp -s "${IDENTITY}" {} \;
|
|
# codesign --timestamp -s "${IDENTITY}" "${BASE_PWD}/Frameworks/${FWNAME}.xcframework"
|
|
echo "Signing xcframework as ${IDENTITY}"
|
|
xcrun codesign --timestamp --deep -s "${IDENTITY}" "${BASE_PWD}/Frameworks/${FWNAME}.xcframework"
|
|
|
|
# Zip archive
|
|
pushd "${BASE_PWD}/Frameworks"
|
|
zip --symlinks -r "./${FWNAME}.xcframework.zip" "./${FWNAME}.xcframework"
|
|
popd
|
|
|
|
rm -rf "${OUTPUT_DIR}"
|