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
@nilsnilsnils
Copy link

I created my own MLKit Package.

  1. Read Readme.md and create Package
  2. Compile for Sim
  3. Compile for device over Xcode
  4. Upload archive to Apple for Testflight. Some errors only occur during the upload. See Readme.md
  5. Test your App using the Testflight version

Readme & Tools

@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