diff --git a/.github/workflows/buildEmerge.yml b/.github/workflows/buildEmerge.yml new file mode 100644 index 00000000..cc0e15ac --- /dev/null +++ b/.github/workflows/buildEmerge.yml @@ -0,0 +1,24 @@ +name: Build Emerge +on: + push: + branches: [develop] +jobs: + build: + name: Build XCFramework + runs-on: macos-latest + env: + PRODUCT_NAME: BSWInterfaceKit + steps: + - uses: actions/checkout@v4 + - name: Setup Xcode + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: latest-stable + - name: Build XCFramework + run: sh build.sh $PRODUCT_NAME + - name: Upload artifact to Emerge + uses: EmergeTools/emerge-upload-action@v1.1.0 + with: + build_type: release + artifact_path: ./build/${{ env.PRODUCT_NAME }}.xcframework.zip + emerge_api_key: ${{ secrets.EMERGE_API_KEY }} diff --git a/.gitignore b/.gitignore index a9ee6d36..6d16bcaa 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,7 @@ Carthage/Build fastlane/report.xml fastlane/screenshots .DS_Store + +BSWInterfaceKit-*.xcarchive +BSWInterfaceKit.xcframework.zip +BSWInterfaceKit.xcframework \ No newline at end of file diff --git a/Sources/BSWInterfaceKit/SwiftUI/DataSource/InfiniteScrollingDataSource.swift b/Sources/BSWInterfaceKit/SwiftUI/DataSource/InfiniteScrollingDataSource.swift index aaee1d56..db9fc0e3 100644 --- a/Sources/BSWInterfaceKit/SwiftUI/DataSource/InfiniteScrollingDataSource.swift +++ b/Sources/BSWInterfaceKit/SwiftUI/DataSource/InfiniteScrollingDataSource.swift @@ -1,6 +1,7 @@ #if canImport(SwiftUI) import SwiftUI +import Combine /// As of iOS 18 and aligned releases, this is no longer recommended as /// there are cleaner alternatives like `InfiniteVerticalScrollView` diff --git a/build.sh b/build.sh new file mode 100644 index 00000000..af4b7348 --- /dev/null +++ b/build.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd -P)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" + +PROJECT_BUILD_DIR="${PROJECT_BUILD_DIR:-"${PROJECT_ROOT}/build"}" +XCODEBUILD_BUILD_DIR="$PROJECT_BUILD_DIR/xcodebuild" +XCODEBUILD_DERIVED_DATA_PATH="$XCODEBUILD_BUILD_DIR/DerivedData" + +PACKAGE_NAME=$1 +if [ -z "$PACKAGE_NAME" ]; then + echo "No package name provided. Using the first scheme found in the Package.swift." + PACKAGE_NAME=$(xcodebuild -list | awk 'schemes && NF>0 { print $1; exit } /Schemes:$/ { schemes = 1 }') + echo "Using: $PACKAGE_NAME" +fi + +backup_package_swift() { + cp Package.swift Package.swift.bak +} + +restore_package_swift() { + mv Package.swift.bak Package.swift +} + +modify_package_swift() { + sed -i '' 's/type: .static,//g' Package.swift + sed -i '' 's/type: .dynamic,//g' Package.swift + sed -i '' -e ':a' -e 'N' -e '$!ba' -e 's/\(library[^,]*name: [^,]*,\)/\1 type: .dynamic,/g' Package.swift +} + +build_framework() { + local sdk="$1" + local destination="$2" + local scheme="$3" + + local XCODEBUILD_ARCHIVE_PATH="./$scheme-$sdk.xcarchive" + + rm -rf "$XCODEBUILD_ARCHIVE_PATH" + + xcodebuild archive \ + -scheme $scheme \ + -archivePath $XCODEBUILD_ARCHIVE_PATH \ + -derivedDataPath "$XCODEBUILD_DERIVED_DATA_PATH" \ + -sdk "$sdk" \ + -destination "$destination" \ + BUILD_LIBRARY_FOR_DISTRIBUTION=YES \ + INSTALL_PATH='Library/Frameworks' \ + OTHER_SWIFT_FLAGS=-no-verify-emitted-module-interface + + FRAMEWORK_MODULES_PATH="$XCODEBUILD_ARCHIVE_PATH/Products/Library/Frameworks/$scheme.framework/Modules" + mkdir -p "$FRAMEWORK_MODULES_PATH" + cp -r \ + "$XCODEBUILD_DERIVED_DATA_PATH/Build/Intermediates.noindex/ArchiveIntermediates/$scheme/BuildProductsPath/Release-$sdk/$scheme.swiftmodule" \ + "$FRAMEWORK_MODULES_PATH/$scheme.swiftmodule" + # Delete private swiftinterface + rm -f "$FRAMEWORK_MODULES_PATH/$scheme.swiftmodule/*.private.swiftinterface" +} + +echo "Modifying Package.swift" +backup_package_swift +modify_package_swift + +build_framework "iphonesimulator" "generic/platform=iOS Simulator" "$PACKAGE_NAME" +build_framework "iphoneos" "generic/platform=iOS" "$PACKAGE_NAME" + +echo "Builds completed successfully." + +rm -rf "$PACKAGE_NAME.xcframework" +xcodebuild -create-xcframework -framework $PACKAGE_NAME-iphonesimulator.xcarchive/Products/Library/Frameworks/$PACKAGE_NAME.framework -framework $PACKAGE_NAME-iphoneos.xcarchive/Products/Library/Frameworks/$PACKAGE_NAME.framework -output $PACKAGE_NAME.xcframework + +cp -r $PACKAGE_NAME-iphonesimulator.xcarchive/dSYMs $PACKAGE_NAME.xcframework/ios-arm64_x86_64-simulator +cp -r $PACKAGE_NAME-iphoneos.xcarchive/dSYMs $PACKAGE_NAME.xcframework/ios-arm64 + +zip -r "$PACKAGE_NAME.xcframework.zip" "$PACKAGE_NAME.xcframework" + +echo "Restoring Package.swift" +restore_package_swift