From 137feece657ee33a5675a2ede985a2adcfa4db11 Mon Sep 17 00:00:00 2001 From: Enrico Zannini Date: Wed, 31 Jan 2024 15:37:52 +0100 Subject: [PATCH] Fix warnings with TealiumDelegateProxy pointers and add surfile for creating the xcframeworks --- builder/SM/Surfile | 636 ++++++++++++++++++ .../xcshareddata/swiftpm/Package.resolved | 16 - builder/xcframeworks.sh | 152 +---- tealium/core/TealiumDelegateProxy.swift | 15 +- 4 files changed, 649 insertions(+), 170 deletions(-) create mode 100644 builder/SM/Surfile delete mode 100644 builder/tealium-swift.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/builder/SM/Surfile b/builder/SM/Surfile new file mode 100644 index 000000000..02d81efa4 --- /dev/null +++ b/builder/SM/Surfile @@ -0,0 +1,636 @@ + + + + + output_path + sm-frameworks + frameworks + + + name + TealiumCore + targets + + + sdk + iOS + workspace + tealium-swift.xcworkspace + scheme + TealiumCore + + + sdk + iOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumCore + + + sdk + watchSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumCore + + + sdk + watchOS + workspace + tealium-swift.xcworkspace + scheme + TealiumCore + + + sdk + macOS + workspace + tealium-swift.xcworkspace + scheme + TealiumCore + + + sdk + macOSCatalyst + workspace + tealium-swift.xcworkspace + scheme + TealiumCore + + + sdk + tvOS + workspace + tealium-swift.xcworkspace + scheme + TealiumCore + + + sdk + tvOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumCore + + + + + name + TealiumAttribution + targets + + + sdk + iOS + workspace + tealium-swift.xcworkspace + scheme + TealiumAttribution + + + sdk + iOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumAttribution + + + sdk + macOSCatalyst + workspace + tealium-swift.xcworkspace + scheme + TealiumAttribution + + + + + name + TealiumAutotracking + targets + + + sdk + iOS + workspace + tealium-swift.xcworkspace + scheme + TealiumAutotracking + + + sdk + iOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumAutotracking + + + sdk + watchSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumAutotracking + + + sdk + watchOS + workspace + tealium-swift.xcworkspace + scheme + TealiumAutotracking + + + sdk + macOS + workspace + tealium-swift.xcworkspace + scheme + TealiumAutotracking + + + sdk + macOSCatalyst + workspace + tealium-swift.xcworkspace + scheme + TealiumAutotracking + + + sdk + tvOS + workspace + tealium-swift.xcworkspace + scheme + TealiumAutotracking + + + sdk + tvOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumAutotracking + + + + + name + TealiumCollect + targets + + + sdk + iOS + workspace + tealium-swift.xcworkspace + scheme + TealiumCollect + + + sdk + iOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumCollect + + + sdk + watchSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumCollect + + + sdk + watchOS + workspace + tealium-swift.xcworkspace + scheme + TealiumCollect + + + sdk + macOS + workspace + tealium-swift.xcworkspace + scheme + TealiumCollect + + + sdk + macOSCatalyst + workspace + tealium-swift.xcworkspace + scheme + TealiumCollect + + + sdk + tvOS + workspace + tealium-swift.xcworkspace + scheme + TealiumCollect + + + sdk + tvOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumCollect + + + + + name + TealiumInAppPurchase + targets + + + sdk + iOS + workspace + tealium-swift.xcworkspace + scheme + TealiumInAppPurchase + + + sdk + iOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumInAppPurchase + + + sdk + watchSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumInAppPurchase + + + sdk + watchOS + workspace + tealium-swift.xcworkspace + scheme + TealiumInAppPurchase + + + sdk + macOS + workspace + tealium-swift.xcworkspace + scheme + TealiumInAppPurchase + + + sdk + macOSCatalyst + workspace + tealium-swift.xcworkspace + scheme + TealiumInAppPurchase + + + sdk + tvOS + workspace + tealium-swift.xcworkspace + scheme + TealiumInAppPurchase + + + sdk + tvOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumInAppPurchase + + + + + name + TealiumLifecycle + targets + + + sdk + iOS + workspace + tealium-swift.xcworkspace + scheme + TealiumLifecycle + + + sdk + iOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumLifecycle + + + sdk + watchSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumLifecycle + + + sdk + watchOS + workspace + tealium-swift.xcworkspace + scheme + TealiumLifecycle + + + sdk + macOS + workspace + tealium-swift.xcworkspace + scheme + TealiumLifecycle + + + sdk + macOSCatalyst + workspace + tealium-swift.xcworkspace + scheme + TealiumLifecycle + + + sdk + tvOS + workspace + tealium-swift.xcworkspace + scheme + TealiumLifecycle + + + sdk + tvOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumLifecycle + + + + + name + TealiumLocation + targets + + + sdk + iOS + workspace + tealium-swift.xcworkspace + scheme + TealiumLocation + + + sdk + iOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumLocation + + + sdk + macOSCatalyst + workspace + tealium-swift.xcworkspace + scheme + TealiumLocation + + + + + name + TealiumMedia + targets + + + sdk + iOS + workspace + tealium-swift.xcworkspace + scheme + TealiumMedia + + + sdk + iOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumMedia + + + sdk + watchSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumMedia + + + sdk + watchOS + workspace + tealium-swift.xcworkspace + scheme + TealiumMedia + + + sdk + macOS + workspace + tealium-swift.xcworkspace + scheme + TealiumMedia + + + sdk + macOSCatalyst + workspace + tealium-swift.xcworkspace + scheme + TealiumMedia + + + sdk + tvOS + workspace + tealium-swift.xcworkspace + scheme + TealiumMedia + + + sdk + tvOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumMedia + + + + + name + TealiumRemoteCommands + targets + + + sdk + iOS + workspace + tealium-swift.xcworkspace + scheme + TealiumRemoteCommands + + + sdk + iOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumRemoteCommands + + + sdk + macOSCatalyst + workspace + tealium-swift.xcworkspace + scheme + TealiumRemoteCommands + + + + + name + TealiumTagManagement + targets + + + sdk + iOS + workspace + tealium-swift.xcworkspace + scheme + TealiumTagManagement + + + sdk + iOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumTagManagement + + + sdk + macOSCatalyst + workspace + tealium-swift.xcworkspace + scheme + TealiumTagManagement + + + + + name + TealiumVisitorService + targets + + + sdk + iOS + workspace + tealium-swift.xcworkspace + scheme + TealiumVisitorService + + + sdk + iOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumVisitorService + + + sdk + watchSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumVisitorService + + + sdk + watchOS + workspace + tealium-swift.xcworkspace + scheme + TealiumVisitorService + + + sdk + macOS + workspace + tealium-swift.xcworkspace + scheme + TealiumVisitorService + + + sdk + macOSCatalyst + workspace + tealium-swift.xcworkspace + scheme + TealiumVisitorService + + + sdk + tvOS + workspace + tealium-swift.xcworkspace + scheme + TealiumVisitorService + + + sdk + tvOSSimulator + workspace + tealium-swift.xcworkspace + scheme + TealiumVisitorService + + + + + finalActions + + openDirectory + + + \ No newline at end of file diff --git a/builder/tealium-swift.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/builder/tealium-swift.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index df60774c6..000000000 --- a/builder/tealium-swift.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,16 +0,0 @@ -{ - "object": { - "pins": [ - { - "package": "GSPlayer", - "repositoryURL": "https://github.com/wxxsw/GSPlayer", - "state": { - "branch": null, - "revision": "95c5498ac7be1101cbe5520a2bf5536352a3b1a0", - "version": "0.2.18" - } - } - ] - }, - "version": 1 -} diff --git a/builder/xcframeworks.sh b/builder/xcframeworks.sh index 9742b0413..9f45bb741 100755 --- a/builder/xcframeworks.sh +++ b/builder/xcframeworks.sh @@ -6,153 +6,10 @@ # variable declarations BUILD_PATH="build" +SURMAGIC_PATH="sm-frameworks" XCFRAMEWORK_PATH="tealium-xcframeworks" ZIP_PATH="tealium.xcframework.zip" -XCODE_PROJECT="tealium-swift" -MACOS_SDKROOT="SDKROOT = macosx;" -IOS_SDKROOT="SDKROOT = \"iphoneos\";" -LATEST_MAJOR="2." -PREVIOUS_MAJOR="1." -IOS_ONLY_PRODUCTS="TealiumAttributionTealiumAutotrackingTealiumLocationTealiumCrashTealiumRemoteCommandsTealiumTagManagement" -declare -a PRODUCT_NAME -# destinations -IOS_SIM_DESTINATION="generic/platform=iOS Simulator" -IOS_DESTINATION="generic/platform=iOS" -TVOS_SIM_DESTINATION="generic/platform=tvOS Simulator" -TVOS_DESTINATION="generic/platform=tvOS" -WATCHOS_SIM_DESTINATION="generic/platform=watchOS Simulator" -WATCHOS_DESTINATION="generic/platform=watchOS" -MACOS_DESTINATION="generic/platform=macOS" -# xcarchives -IOS_SIM_ARCHIVE="ios-sim.xcarchive" -IOS_ARCHIVE="ios.xcarchive" -TVOS_SIM_ARCHIVE="tvos-sim.xcarchive" -TVOS_ARCHIVE="tvos.xcarchive" -WATCHOS_SIM_ARCHIVE="watchos-sim.xcarchive" -WATCHOS_ARCHIVE="watchos.xcarchive" -MACOS_ARCHIVE="macos.xcarchive" -# function declarations -function define_product_name { - case $1 in - *"$LATEST_MAJOR"*) - PRODUCT_NAME=(TealiumCore TealiumAttribution TealiumAutotracking TealiumCollect TealiumInAppPurchase TealiumLifecycle TealiumLocation TealiumMedia TealiumRemoteCommands TealiumTagManagement TealiumVisitorService) - ;; - *"$PREVIOUS_MAJOR"*) - PRODUCT_NAME=(TealiumCore TealiumAppData TealiumAttribution TealiumAutotracking TealiumCollect TealiumConsentManager TealiumCrash TealiumDelegate TealiumDeviceData TealiumDispatchQueue TealiumLifecycle TealiumLocation TealiumLogger TealiumPersistentData TealiumRemoteCommands TealiumTagManagement TealiumVisitorService TealiumVolatileData) - ;; - *) - echo "ERROR, VERSION NUMBER INVALID" - ;; - esac -} - -function clean_build_folder { - if [[ -d "${BUILD_PATH}" ]]; then - rm -rf "${BUILD_PATH}" - fi - if [[ -d "${XCFRAMEWORK_PATH}" ]]; then - rm -rf "${XCFRAMEWORK_PATH}" - fi - if [[ -d "${ZIP_PATH}" ]]; then - rm "${ZIP_PATH}" - fi - mkdir "${XCFRAMEWORK_PATH}" -} - -function check_architecture { - local archs=( "$@" ) - for arch in "${archs[@]}" - do - if ! echo "$1" | grep -q "${arch}"; then - echo "ERROR, ARCHITECTURE MISSING!!!" - else # uncomment for debugging - echo "+found ${arch}" - fi - done -} - -# create indv archive -function archive { - xcodebuild archive \ - -project "${XCODE_PROJECT}.xcodeproj" \ - -scheme "${1}" \ - -destination "${2}" \ - -archivePath "${3}" \ - -sdk "${4}" \ - SKIP_INSTALL=NO \ - BUILD_LIBRARY_FOR_DISTRIBUTION=YES \ - BUILD_SCRIPT=YES - echo "Archiving ${1} ${2} ${3} ${4}" -} - -# create xcframeworks for ios only products -function create_xcframework_ios_only { - xcodebuild -create-xcframework \ - -framework "${BUILD_PATH}/${IOS_SIM_ARCHIVE}/Products/Library/Frameworks/${1}.framework" \ - -framework "${BUILD_PATH}/${IOS_ARCHIVE}/Products/Library/Frameworks/${1}.framework" \ - -output "${XCFRAMEWORK_PATH}/${1}".xcframework; -} - -# create xcframeworks for products supporting all platforms -function create_xcframework_all { - xcodebuild -create-xcframework \ - -framework "${BUILD_PATH}/${IOS_SIM_ARCHIVE}/Products/Library/Frameworks/${1}.framework" \ - -framework "${BUILD_PATH}/${IOS_ARCHIVE}/Products/Library/Frameworks/${1}.framework" \ - -framework "${BUILD_PATH}/${TVOS_SIM_ARCHIVE}/Products/Library/Frameworks/${1}.framework" \ - -framework "${BUILD_PATH}/${TVOS_ARCHIVE}/Products/Library/Frameworks/${1}.framework" \ - -framework "${BUILD_PATH}/${WATCHOS_SIM_ARCHIVE}/Products/Library/Frameworks/${1}.framework" \ - -framework "${BUILD_PATH}/${WATCHOS_ARCHIVE}/Products/Library/Frameworks/${1}.framework" \ - -framework "${BUILD_PATH}/${MACOS_ARCHIVE}/Products/Library/Frameworks/${1}.framework" \ - -output "${XCFRAMEWORK_PATH}/${1}".xcframework; -} - -# create xcframework for each product that contains all supported platforms -function create_xcframework { - if [[ "$IOS_ONLY_PRODUCTS" == *"$1"* ]]; then - create_xcframework_ios_only "${1}" - else - create_xcframework_all "${1}" - fi -} - -# create archives for ios only products -function create_archives_ios_only { - archive "$1" "${IOS_SIM_DESTINATION}" "${BUILD_PATH}/${IOS_SIM_ARCHIVE}" "iphonesimulator" - archive "$1" "${IOS_DESTINATION}" "${BUILD_PATH}/${IOS_ARCHIVE}" "iphoneos"; - create_xcframework "$1" -} - -# create archives for products supporting all platforms -function create_archives_all { - archive "$1" "${IOS_SIM_DESTINATION}" "${BUILD_PATH}/${IOS_SIM_ARCHIVE}" "iphonesimulator" - archive "$1" "${IOS_DESTINATION}" "${BUILD_PATH}/${IOS_ARCHIVE}" "iphoneos" - archive "$1" "${TVOS_SIM_DESTINATION}" "${BUILD_PATH}/${TVOS_SIM_ARCHIVE}" "appletvsimulator" - archive "$1" "${TVOS_DESTINATION}" "${BUILD_PATH}/${TVOS_ARCHIVE}" "appletvos" - archive "$1" "${WATCHOS_SIM_DESTINATION}" "${BUILD_PATH}/${WATCHOS_SIM_ARCHIVE}" "watchsimulator" - archive "$1" "${WATCHOS_DESTINATION}" "${BUILD_PATH}/${WATCHOS_ARCHIVE}" "watchos" - archive "$1" "${MACOS_DESTINATION}" "${BUILD_PATH}/${MACOS_ARCHIVE}" "macosx" - create_xcframework "$1" -} - -# create all archives for each product and platform -function create_archives { - if [ -z "$1" ] - then - echo "WARNING, NO VERSION NUMBER ENTERED. ASSUMING LATEST." - define_product_name "${LATEST_MAJOR}" - else - define_product_name "$1" - fi - for i in "${PRODUCT_NAME[@]}"; - do - if [[ "$IOS_ONLY_PRODUCTS" == *"$i"* ]]; then - create_archives_ios_only "$i" - else - create_archives_all "$i" - fi - done -} # zip all the xcframeworks function zip_xcframeworks { @@ -162,11 +19,10 @@ function zip_xcframeworks { fi } -#### start #### -clean_build_folder - # do the work -create_archives "$1" +surmagic xcf + +mv "${SURMAGIC_PATH}" "${XCFRAMEWORK_PATH}" zip_xcframeworks mv "${ZIP_PATH}" "../" diff --git a/tealium/core/TealiumDelegateProxy.swift b/tealium/core/TealiumDelegateProxy.swift index dbcc62b1e..e0e04a9bd 100644 --- a/tealium/core/TealiumDelegateProxy.swift +++ b/tealium/core/TealiumDelegateProxy.swift @@ -16,8 +16,11 @@ public class TealiumDelegateProxy: NSProxy { static var contexts: Set? private struct AssociatedObjectKeys { - static var originalClass = "Tealium_OriginalClass" - static var originalImplementations = "Tealium_OriginalImplementations" + // https://forums.swift.org/t/handling-the-new-forming-unsaferawpointer-warning/65523/7 + // swiftlint:disable force_unwrapping + static let originalClass = malloc(1)! + static let originalImplementations = malloc(1)! + // swiftlint:enable force_unwrapping } static private(set) var sceneEnabled = false @@ -160,7 +163,7 @@ private extension TealiumDelegateProxy { self.overrideDescription(in: subClass) // Store the original class - objc_setAssociatedObject(originalDelegate, &AssociatedObjectKeys.originalClass, originalClass, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + objc_setAssociatedObject(originalDelegate, AssociatedObjectKeys.originalClass, originalClass, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) guard class_getInstanceSize(originalClass) == class_getInstanceSize(subClass) else { return nil @@ -228,7 +231,7 @@ private extension TealiumDelegateProxy { } // Store original implementations - objc_setAssociatedObject(originalDelegate, &AssociatedObjectKeys.originalImplementations, originalImplementationsStore, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + objc_setAssociatedObject(originalDelegate, AssociatedObjectKeys.originalImplementations, originalImplementationsStore, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } static func overrideDescription(in subClass: AnyClass) { @@ -286,7 +289,7 @@ private extension TealiumDelegateProxy { } static func originalMethodImplementation(for selector: Selector, object: Any) -> NSValue? { - let originalImplementationsStore = objc_getAssociatedObject(object, &AssociatedObjectKeys.originalImplementations) as? [String: NSValue] + let originalImplementationsStore = objc_getAssociatedObject(object, AssociatedObjectKeys.originalImplementations) as? [String: NSValue] return originalImplementationsStore?[NSStringFromSelector(selector)] } } @@ -328,7 +331,7 @@ private extension TealiumDelegateProxy { @objc func originalDescription() -> String { - if let originalClass = objc_getAssociatedObject(self, &AssociatedObjectKeys.originalClass) as? AnyClass { + if let originalClass = objc_getAssociatedObject(self, AssociatedObjectKeys.originalClass) as? AnyClass { let originalClassName = NSStringFromClass(originalClass) let pointerHex = String(format: "%p", unsafeBitCast(self, to: Int.self)) return "<\(originalClassName): \(pointerHex)>"