#!/bin/bash

set -x
set -e

# Pass scheme name as the first argument to the script
NAME=$1


cd ..

# Build the scheme for all platforms that we plan to support
for PLATFORM in &#34;iOS&#34; &#34;iOS Simulator&#34;; do

    echo &#34;$PLATFORM&#34;

    case $PLATFORM in
    &#34;iOS&#34;)
    RELEASE_FOLDER=&#34;Release-iphoneos&#34;
    ;;
    &#34;iOS Simulator&#34;)
    RELEASE_FOLDER=&#34;Release-iphonesimulator&#34;
    ;;
    esac

    ARCHIVE_PATH=$RELEASE_FOLDER

    # Rewrite Package.swift so that it declaras dynamic libraries, since the approach does not work with static libraries
    perl -i -p0e &#39;s/type: .static,//g&#39; Package.swift
    perl -i -p0e &#39;s/type: .dynamic,//g&#39; Package.swift
    perl -i -p0e &#39;s/(library[^,]*,)/$1 type: .dynamic,/g&#39; Package.swift
    
    xcodebuild archive -workspace . -scheme $NAME \
            -destination &#34;generic/platform=$PLATFORM&#34; \
            -archivePath $ARCHIVE_PATH \
            -configuration Release \
            -derivedDataPath &#34;.build/$RELEASE_FOLDER&#34; \
            SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES

    FRAMEWORK_PATH=&#34;$ARCHIVE_PATH.xcarchive/Products/usr/local/lib/$NAME.framework&#34;
    MODULES_PATH=&#34;$FRAMEWORK_PATH/Modules&#34;
    HEADERS_PATH=&#34;$FRAMEWORK_PATH/Headers&#34;
    mkdir -p $MODULES_PATH
    mkdir -p $HEADERS_PATH

    BUILD_PRODUCTS_PATH=&#34;.build/$RELEASE_FOLDER/Build/Intermediates.noindex/ArchiveIntermediates/$NAME/BuildProductsPath&#34;
    INTERMEDIATE_BUILD_FILES_PATH=&#34;.build/$RELEASE_FOLDER/Build/Intermediates.noindex/ArchiveIntermediates/$NAME/IntermediateBuildFilesPath/$NAME.build/$RELEASE_FOLDER&#34;
    RELEASE_PATH=&#34;$BUILD_PRODUCTS_PATH/$RELEASE_FOLDER&#34;
    SWIFT_MODULE_PATH=&#34;$RELEASE_PATH/$NAME.swiftmodule&#34;
    RESOURCES_BUNDLE_PATH=&#34;$RELEASE_PATH/${NAME}_${NAME}.bundle&#34;

    # Copy Swift modules
    if [ -d &#34;$SWIFT_MODULE_PATH&#34; ]
    then
        cp -r $SWIFT_MODULE_PATH $MODULES_PATH
    fi
    
        # Copy ObjC Headers
    if [ -d &#34;$HEADERS_PATH&#34; ]
    then
        for EXPORTED_MODULE in &#34;ModuleA&#34; &#34;ModuleB&#34; &#34;ModuleC&#34; &#34;ModuleD&#34;; do
            
            cp -r &#34;$INTERMEDIATE_BUILD_FILES_PATH/$EXPORTED_MODULE.build/$EXPORTED_MODULE.modulemap&#34; $HEADERS_PATH
            
            EXPORTED_HEADER=&#34;$INTERMEDIATE_BUILD_FILES_PATH/$EXPORTED_MODULE.build/Objects-normal/arm64/$EXPORTED_MODULE-Swift.h&#34;
            cp $EXPORTED_HEADER  $HEADERS_PATH

              HEADER_TO_MODIFY=&#34;$HEADERS_PATH/$EXPORTED_MODULE-Swift.h&#34;

              sed -i &#39;&#39; &#39;s/@import MyFramework;/#import &lt; MyFramework\/ModuleA-Swift.h&gt;/&#39; $HEADER_TO_MODIFY
              sed -i &#39;&#39; &#39;s/@import ModuleH;/#import &lt; MyFramework\/ModuleH-Swift.h&gt;/&#39; $HEADER_TO_MODIFY
              sed -i &#39;&#39; &#39;s/@import ModuleC;/#import &lt; MyFramework\/ModuleC-Swift.h&gt;/&#39; $HEADER_TO_MODIFY
              sed -i &#39;&#39; &#39;s/@import ModuleA;/#import &lt; MyFramework\/ModuleA-Swift.h&gt;/&#39; $HEADER_TO_MODIFY
        done
    fi
         

#     Copy resources bundle, if exists
    if [ -e $RESOURCES_BUNDLE_PATH ]
    then
        cp -r $RESOURCES_BUNDLE_PATH $FRAMEWORK_PATH
    fi

done

xcodebuild -create-xcframework \
-framework Release-iphoneos.xcarchive/Products/usr/local/lib/$NAME.framework \
-framework Release-iphonesimulator.xcarchive/Products/usr/local/lib/$NAME.framework \
-output $NAME.xcframework
