iosios-universal-framework

How to create universal framework in xcode6


I know how to create a framework in Xcode 5. But in Xcode 6 how to combine both a simulator framework & a device framework? When I try to combine I get a code signing error. When I use lipo to combine both framework, I also get an error.

Error: Command /bin/sh failed with exit code 65


Solution

  • My solution to create universal framework in xcode6.

    Try these steps:

    Step 1:

    File—> 
        New —> 
           Project —> 
               Framework & Library —> 
                   Next —> 
                          Product Name
    

    Step 2: Create custom class files

    Step 3:

    Target -> 
           Build phase -> 
               Headers, 
    

    Makes all header files into public. Now build in simulator & device.

    Step 4:

    File ->
        New ->
               Target ->
                   iOS ->
                          Other -> 
                              Aggrigate ->somename eg: framework
    

    Step 5:

    From Targets —> 
        Custom aggregate target(Eg: Framework)—> 
               Build Phase—> 
                   Add Run script
    

    Step 6: Add following shell code in run script

    ///
    
    UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
    
    # make sure the output directory exists
    mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
    
    # Step 1. Build Device and Simulator versions
    xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
    xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator -arch x86_64 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
    
    # Step 2. Copy the framework structure to the universal folder
    cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/"
    
    # Step 3. Create universal binary file using lipo and place the combined executable in the copied framework directory
    lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"
    

    Step 7:

    Goto active scheme —> 
        Custom aggregate —> 
               Build
    

    Step 8: Now right click framework from products in Xcode & click show in finder.

    Check "Debug-universal” folder & get universal framework.