[Xcode 7] universal Framework

Bonjour à  tous.


 


Jusqu'à  présent, pour les SDK communs aux applications,  j'utilisais des lib static (une en Release, une en Debug, et une en debug-simulateur).


 


Aujourd'hui, nous devons passer par un framework qui regroupe toutes les architectures.


 


Malheuresement, malgré les tutoriels trouvé à  droite à  gauche (souvent obsolète), je ne parvient pas à  réunir toutes les architectures dans un seul framework.


 


pour xCode 7, j'ai trouver les tuto suivant :


https://kodmunki.wordpress.com/2015/09/22/ios-9-universal-cocoa-touch-frameworks/


http://blog.flaviocaetano.com/post/building-an-universal-framework/


 


Mais ils propose de rajouter un script dans la partie archive des schemes, or je ne peux pas fabriquer d'archive quand je suis dans un projet de type framework...


Et posé ces script dans la partie build ne fait pas grand chose...


 


Bref, je suis un peu perdus dans la gestion des outils xcode pour fabriquer un framework universel :-(


 


Merci de votre aide.


 


D.H.


Réponses

  • J'ai trouvé un début de solution via le lien suivant : http://stackoverflow.com/questions/28652650/how-to-build-cocoa-touch-framework-for-i386-and-x86-64-architecture


     


    Que j'ai modifier comme suit :



    UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

    if [ "true" == ${ALREADYINVOKED:-false} ]
    then
    echo "RECURSION: Detected, stopping"
    else
    export ALREADYINVOKED="true"

    # 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}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" 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}/"

    # Step 3. Copy Swift modules (from iphonesimulator build) to the copied framework directory (only if Swift modules exist)
    if [ -f "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/."]
    then
    cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/." "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule"
    fi

    # Step 4. Create universal binary file using lipo and place the combined executable in the copied framework directory
    if [ -f "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}"]
    then
    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}"
    else
    echo "No simulator file at path : ${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}"
    exit 1
    fi

    # Step 5. Convenience step to copy the framework to the project's directory
    cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" "${PROJECT_DIR}"

    # Step 6. Rename framewok with debug if configuration is debug
    if [ ${CONFIGURATION} == "Debug" ]
    then
    mv ${PROJECT_DIR}/${PROJECT_NAME}.framework ${PROJECT_DIR}/${PROJECT_NAME}-debug.framework
    fi

    # Step final. Convenience step to open the project's directory in Finder
    open "${PROJECT_DIR}"

    fi

    Le problème étant que le fichier compiler de iphonesimulator n'est jamais trouvé alors qu'il est bien présent dans le finder (quand je compile en simulateur), et qu'un lipo -info fonctionne dessus.


     


    Avez-vous des idées ?

Connectez-vous ou Inscrivez-vous pour répondre.