#!/bin/zsh -x

# see https://stackoverflow.com/questions/72920519/turn-package-swift-file-into-binary-xcframework

PACKAGE_DIRECTORY=$1
SCHEME=$2
FRAMEWORK_RELATIVE_DIRECTORY=$3

CONFIGURATION=Release

# Value is ignored, only the definition of the variable is considered
#
export SPM_GENERATE_FRAMEWORK=1

function buildframework {


### Build/Intermediates.noindex/SwiftPackageTest.build/Release-iphoneos/SwiftPackageTest.build/Objects-normal/arm64/SwiftPackageTest-Swift.h

	# build package as framework
	#
    (cd $PACKAGE_DIRECTORY &amp;&amp; xcodebuild -scheme $1 -destination $2 -sdk $3 -configuration $CONFIGURATION -derivedDataPath &#34;${FRAMEWORK_DIRECTORY}/.build&#34; \
    	SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_SWIFT_FLAGS=&#34;-no-verify-emitted-module-interface&#34; SYMROOT=&#34;$FRAMEWORK_DIRECTORY&#34;) || exit -1

#     (cd $PACKAGE_DIRECTORY &amp;&amp; xcodebuild archive -scheme $1 -destination $2 -sdk $3 -archivePath $1.xcarchive -configuration $CONFIGURATION \
#     	SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES OTHER_SWIFT_FLAGS=-no-verify-emitted-module-interface ) || exit -1

   BUILD_PATH=$FRAMEWORK_DIRECTORY/${CONFIGURATION}-${3}
   BUILD_FRAMEWORK_PATH=$BUILD_PATH/PackageFrameworks/${SCHEME}.framework/
   BUILD_FRAMEWORK_HEADERS=$BUILD_FRAMEWORK_PATH/Headers

   mkdir $BUILD_FRAMEWORK_HEADERS
   SWIFT_HEADER=&#34;${FRAMEWORK_DIRECTORY}/.build/Build/Intermediates.noindex/$1.build/${CONFIGURATION}-${3}/$1.build/Objects-normal/arm64/${1}-Swift.h&#34;

   if [ -f &#34;$SWIFT_HEADER&#34; ]
   then
       cp -p $SWIFT_HEADER $BUILD_FRAMEWORK_HEADERS || exit -2
   fi

   # copy package headers (if any) to generated framework
   #
   PACKAGE_INCLUDE_DIRS=$(find $PACKAGE_DIRECTORY -path &#34;*/Sources/*/include&#34; -type d)

   if [ -n &#34;$PACKAGE_INCLUDE_DIRS&#34; ]
   then
       cp -prv $PACKAGE_DIRECTORY/Sources/*/include/* $BUILD_FRAMEWORK_HEADERS || exit -2
   fi
   
   # handle swiftmodule or modulemap file
   #
   mkdir $BUILD_FRAMEWORK_PATH/Modules
   
   SWIFT_MODULE_DIRECTORY=$BUILD_PATH/${1}.swiftmodule
   
   if [ -d $SWIFT_MODULE_DIRECTORY ]
   then
   		cp -prv $SWIFT_MODULE_DIRECTORY $BUILD_FRAMEWORK_PATH/Modules
   else
       # create module.modulemap file
	   echo &#34;framework module $SCHEME {
umbrella \&#34;Headers\&#34;
export *

module * { export * }
}&#34;     &gt; $BUILD_FRAMEWORK_PATH/Modules/module.modulemap
	fi

   # Copy bundle
   BUNDLE_DIRECTORY=$BUILD_PATH/${1}_${1}.bundle
   if [ -d $BUNDLE_DIRECTORY ]
   then
       cp -prv $BUNDLE_DIRECTORY $BUILD_FRAMEWORK_PATH
   fi

}

##
##

mkdir -p $FRAMEWORK_RELATIVE_DIRECTORY
FRAMEWORK_DIRECTORY=`readlink -f $FRAMEWORK_RELATIVE_DIRECTORY`

buildframework $SCHEME &#34;generic/platform=iOS&#34; &#34;iphoneos&#34;
buildframework $SCHEME &#34;generic/platform=iOS Simulator&#34; &#34;iphonesimulator&#34;

xcodebuild -create-xcframework \
        -framework &#34;${FRAMEWORK_DIRECTORY}/${CONFIGURATION}-iphoneos/PackageFrameworks/${SCHEME}.framework&#34; \
        -framework &#34;${FRAMEWORK_DIRECTORY}/${CONFIGURATION}-iphonesimulator/PackageFrameworks/${SCHEME}.framework&#34; \
        -output &#34;${FRAMEWORK_DIRECTORY}/${SCHEME}.xcframework&#34;
