This is possible since I am currently developing universal frameworks on iOS, watchOS and tvOS on Xcode 8.
The way I do this is to create an Aggregate target (cross platform) and add a run script to my build phase. script basically compiles iOS target for iphonesimulator and iphoneos
After that, a new binary file is created that combines both of them (lipo -create -output)
Could you post the current build script to create a universal framework so that I can lead you to what you are doing wrong?
Bear in mind that the script may not be your problem here, your problem may be to create the right architectures, your architectures, or even how you sign the goal. At the moment, I recommend leaving the option “Automatically manage subscription” in the general settings of your target goal and manually configure your training profiles and certificates.
Run script:
#!/bin/sh UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal # make sure the output directory exists mkdir -p "${UNIVERSAL_OUTPUTFOLDER}/iOS" # Step 1. Build Device and Simulator versions on iOS xcodebuild -workspace "${PROJECT_NAME}.xcworkspace" -scheme "${PROJECT_NAME}" -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' clean build xcodebuild -workspace "${PROJECT_NAME}.xcworkspace" -scheme "${PROJECT_NAME}" -sdk iphoneos clean build # Step 2. Copy the framework structure (from iphoneos build) to the universal folder cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/iOS" # Step 3. Create universal binary file using lipo and place the combined executable in the copied framework directory lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/iOS/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}" # Step 4. Convenience step to copy the framework to the project directory mkdir -p "${TMPDIR}/${PROJECT_NAME}/Frameworks/iOS" cp -R "${UNIVERSAL_OUTPUTFOLDER}/iOS/${PROJECT_NAME}.framework" "${TMPDIR}/${PROJECT_NAME}/Frameworks/iOS" # Step 6. Create .tar.gz file for posting on the binary repository cd "${TMPDIR}" # We nest the framework inside a Frameworks folder so that it unarchives correctly tar -zcf "${PROJECT_NAME}.framework.tar.gz" "${PROJECT_NAME}/Frameworks/" mv "${PROJECT_NAME}.framework.tar.gz" "${PROJECT_DIR}/" # Step 7. Convenience step to open the project directory in Finder #open "${PROJECT_DIR}"
Bear in mind that I set the Build Build Architecture to only NO in the build settings, also valid architectures are set as arm64, x86_64, i386, armv7, armv7s. Architecture - $ {ARCHS_STANDARD} armv7s.
I also set the user-defined installation bit code to BITCODE_GENERATION_MODE. With this build setting, I will definitely create binaries with bit code enabled.
source share