Skip to content

Instantly share code, notes, and snippets.

@MapaX
Created April 26, 2021 10:45
Show Gist options
  • Save MapaX/5dc58ccb16ad1f772907154ae4991dca to your computer and use it in GitHub Desktop.
Save MapaX/5dc58ccb16ad1f772907154ae4991dca to your computer and use it in GitHub Desktop.
Shell script to create xcframeworks from MLKit frameworks
#!/bin/zsh
makeXCFramework () {
BASEDIR=$(pwd)
echo "Script location: ${BASEDIR}"
LIBNAME=$(basename $BASEDIR)
echo "lib is: $LIBNAME"
cd Frameworks
mkdir -p iphoneos
mkdir -p iphonesimulator
# Copy framework into the platform specific directories
cp -R $LIBNAME.framework/ iphoneos/$LIBNAME.framework
cp -R $LIBNAME.framework/ iphonesimulator/$LIBNAME.framework
xcrun lipo -remove x86_64 ./iphoneos/$LIBNAME.framework/$LIBNAME -o ./iphoneos/$LIBNAME.framework/$LIBNAME
xcrun lipo -remove arm64 ./iphonesimulator/$LIBNAME.framework/$LIBNAME -o ./iphonesimulator/$LIBNAME.framework/$LIBNAME
xcodebuild -create-xcframework -framework iphoneos/$LIBNAME.framework/ -framework iphonesimulator/$LIBNAME.framework/ -output ../../"$LIBNAME.xcframework"
cd ..
cd ..
}
cd MLKitCommon
makeXCFramework
cd MLKitVision
makeXCFramework
cd MLKitTextRecognition
makeXCFramework
@Alesete
Copy link

Alesete commented Dec 16, 2021

Hi! Thanks for this workaround, you save my day!

I had to make a fix in the script related the issue @AngryDuckFTW commented here. The only frameworks generated was the MLKit ones.

I found that the error "binaries with multiple platforms are not supported" was produced in the Google's dependencies because they have the armv7 architecture inside the frameworks (not only x86_64 and arm64), so the simulator fails because it has 2 architectures (x86_64 & armv7) of 2 different platform (device & simulator).

The fix in the script is quite easy. add the following line:

xcrun lipo -remove armv7 ./iphonesimulator/$LIBNAME.framework/$LIBNAME -o ./iphonesimulator/$LIBNAME.framework/$LIBNAME

below line 49.

I had also to change line 100 from this

if [[ $FrameworkBaseFolder == MLKit* ]] then

to this

if [[ $FrameworkBaseFolder == ML* ]] then

because I have MLImage as a dependency also

Thanks again, and best regards

@Mcrich23
Copy link

Mcrich23 commented Apr 5, 2022

How would I apply this to GoogleMLKit/Translate?

@MapaX
Copy link
Author

MapaX commented Apr 5, 2022

I think the easy way is to clone the https://github.com/nilsnilsnils/MLKitFrameworkTools repo, tune the Pod file and just follow the instructions in there.

I have not checked what the translate contains, but same approach should work just fine.

@huuchi207
Copy link

can anyone give me xcframework file of GoogleMLKit/FaceDetection. I tried the following script but in output folder, there is no framework at all :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment