web-dev-qa-db-fra.com

Impossible de trouver le module pour la cible 'x86_64-Apple-ios-simulator'

J'ai mon cadre personnalisé et cela fonctionne correctement dans XCode 10. Je le reconstruis dans XCode 11 beta 3, puis intégré à l'application et j'obtiens l'erreur suivante:

Impossible de trouver le module "MyCustomFramework" pour la cible "x86_64-Apple-ios-simulator"; trouvé: arm64, arm64-Apple-ios

Y a-t-il des changements à apporter aux "architectures valides" dans le projet-cadre?

Mise à jour: Je ne peux pas choisir de réponse correcte car le cadre dans mon cas était vraiment minuscule (une classe, quelques méthodes) et presque pas utilisé, j'ai donc décidé de me débarrasser de et déplacer ces quelques méthodes dans le projet principal.

19
Oleshko

Pour résoudre ce problème, j'ai dû recréer une bibliothèque complète de mon framework personnalisé à l'aide des outils xcode 11.

Pour ce faire, j'ai fait ce qui suit:

1) Construire YourCustomFramework cible pour le simulateur iOS et extraire le framework du dossier produits sur votre bureau.

Xcode ▸ DerivedData ▸ Votre projet ▸ Build ▸ Produits ▸ Release-iphonesimulator

2) Construire YourCustomFramework cible pour le périphérique iOS générique et extraire le cadre du dossier produits sur votre bureau.

Xcode ▸ DerivedData ▸ Votre projet ▸ Build ▸ Produits ▸ Release-iphoneos

) Renommez le framework généré par le simulateur en YourCustomFramework-sim.framework pour pouvoir le distinguer plus tard.

4) Utilisez la commande lipo pour combiner les deux binaires en un seul fichier binaire gras. (cd sur votre bureau ou partout où se trouve votre fichier de cadre personnalisé)

$lipo -create ./YourCustomFramework-sim.framework/YourCustomFramework ./YourCustomFramework.framework/YourCustomFramework -output ./YourCustomFramework

5) Copiez YourCustomFramework fichier binaire créé à l'étape ci-dessus et remplacez-le par le binaire dans YourCustomFramework.framework dossier.

6) À partir du dossier

YourCustomFramework-sim.framework/Modules/YourCustomFramework.swiftmodule/

copiez tous les modules et collez-les dans

YourCustomFramework.framework/Modules/YourCustomFramework.swiftmodule/

Cela devrait résoudre votre problème.

17
willhess

Swift 5.0-5.1, Xcode 11
Ouvrez Xcode, <votre projet>, Paramètres de construction, Construire l'architecture active uniquement et passez à <NON> pour le débogage et la publication. Architectures définies/quittées dans l'architecture standard - $ (ARCHS_STANDART), l'étape suivante est importante:
Architecture valide: armv7, armv7s, amr64, amr64e, AJOUTER ici x86_64 et si vous avez besoin d'ajouter i386 pour le débogage et la publication. (Chaîne: armv7, armv7s, amr64, amr64e, x86_64)

Choisissez n'importe quel simulateur dans votre liste de simulateurs et CONSTRUISEZ-LE. TERMINÉ.

J'espère que cela fonctionne pour vous.


Description de l'architecture:

armv64: iPhoneX, iPhone 5s-8, iPad Air - iPad Pro

armv7: iPhone3Gs-5c, iPad WIFI (4e génération)

armv6: iPhone - iPhone3G

-le dessus si pour de vrais appareils

i386: simulateur 32 bits

x86_64: simulateur 64 bits

13
Serg Fugol

Veuillez vérifier votre Scheme assurez-vous d'exécuter le schéma correct.

Et puis vous devez ouvrir XCode > -Your Main Target- > Build Active Architecture Only et définissez 'NO' pour construire sur toutes les architectures.

Options:

YES - S'il est défini sur yes, Xcode détectera le périphérique connecté, déterminera l'architecture et s'appuiera uniquement sur cette architecture.

NO - S'il est défini sur no, il s'appuiera sur toutes les architectures.

2
emrcftci

Pour moi, c'était un paramètre manquant. Dans Xcode, accédez à: Fichier-> Paramètres de l'espace de travail. Dans Build System, remplacez-le par "Legacy Build system".

Exécutez-le à nouveau et copiez le nouveau Framework

0
Miguel Perera

Je résous par XCode> -Votre cible principale-> Construire une architecture active uniquement

Définir Oui

0
Sanjay Mishra

Si vous souhaitez automatiser le processus de votre projet, vous pouvez essayer le script ci-dessous que j'utilise dans mes projets de framework.

Il fonctionne à la fois Objective-C et les projets Swift . J'ai aussi testé sur iOS et tvOS.

Pour plus de détails et de mises à jour, veuillez suivre ma page repo .

Scénario

#!/bin/sh

######################
# Globals
######################

# Avilable Platforms/Architectures 
# macosx | iphoneos | iphonesimulator | appletvos | appletvsimulator | watchos | watchsimulator
DEVICE_Arch="iphoneos"
DEVICE_SIM_Arch="iphonesimulator"

FRAMEWORK_NAME="${PROJECT_NAME}"
DEVICE_LIBRARY_PATH=${BUILD_DIR}/${CONFIGURATION}-${DEVICE_Arch}/${FRAMEWORK_NAME}.framework
SIMULATOR_LIBRARY_PATH=${BUILD_DIR}/${CONFIGURATION}-${DEVICE_SIM_Arch}/${FRAMEWORK_NAME}.framework
UNIVERSAL_LIBRARY_DIR=${BUILD_DIR}/${CONFIGURATION}-Universal
SUCCESS=true
EXIT_MESSAGE=$?
ROW_STRING="\n##################################################################\n"

echoPaths() 
{
    echo "${ROW_STRING}"
    echo "DEVICE_LIBRARY_PATH: ${DEVICE_LIBRARY_PATH}"
    echo "SIMULATOR_LIBRARY_PATH: ${SIMULATOR_LIBRARY_PATH}"
    echo "UNIVERSAL_LIBRARY_DIR: ${UNIVERSAL_LIBRARY_DIR}"
    echo "${ROW_STRING}"
}

checkSuccess()
{
    if [[ -z $EXIT_MESSAGE ]]; then
        SUCCESS=false
        exitWithMessage
        exit 1
    fi
}

exitWithMessage() 
{
    echo "${ROW_STRING}"

    if [ "$SUCCESS" = true ] ; then
        echo "\n\n\n ???? Completed with Success! ????"
    else
        echo "\n\n\n ???? Completed with Errors! Please check line above for details:"
        echo "${EXIT_MESSAGE}"
    fi

    open /tmp/${FRAMEWORK_NAME}_archive.log
    echo "\n ???? For more details you can always check the /tmp/${FRAMEWORK_NAME}_archive.log file. ???? \n\n\n"
    echo "${ROW_STRING}"
}

######################
######################
######################



######################
# Starting the logging
######################

exec > /tmp/${FRAMEWORK_NAME}_archive.log 2>&1
echo "\n ⏱ Starting the Universal Framework work... \n\n\n"

######################
# Echo the PATHS
######################

echoPaths

######################
# Make sure the output directory exists
######################

mkdir -p "${UNIVERSAL_LIBRARY_DIR}"

######################
# Step 1: Build Frameworks
######################

echo "${ROW_STRING}"
echo "\n\n\n ???? Step 1-1: Building for ${DEVICE_SIM_Arch}"
echo "${ROW_STRING}"

EXIT_MESSAGE="$(xcodebuild BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -workspace "${WORKSPACE_PATH}" -scheme "${TARGET_NAME}" -configuration ${CONFIGURATION} -sdk ${DEVICE_SIM_Arch} ONLY_DEVICE_Arch=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" -UseModernBuildSystem=NO clean build)"

checkSuccess

echo "${ROW_STRING}"
echo "\n\n\n ???? Step 1-2: Building for ${DEVICE_Arch} \n\n\n"

EXIT_MESSAGE="$(xcodebuild BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -workspace "${WORKSPACE_PATH}" -scheme "${TARGET_NAME}" ONLY_DEVICE_Arch=NO -configuration ${CONFIGURATION} -sdk ${DEVICE_Arch}  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" -UseModernBuildSystem=NO clean build)"

checkSuccess


######################
# Step 2. Copy the frameworks
######################

echo "${ROW_STRING}"
echo "\n\n\n ???? Step 2: Copy the framework structure for ${DEVICE_Arch}"
echo "${ROW_STRING}"

cp -R "${DEVICE_LIBRARY_PATH}" "${UNIVERSAL_LIBRARY_DIR}/"



######################
# Step 3. Create the universal binary
######################

echo "${ROW_STRING}"
echo "\n\n\n ???? Step 3: The LIPO Step"
echo "${ROW_STRING}"

lipo -create "${SIMULATOR_LIBRARY_PATH}/${FRAMEWORK_NAME}" "${DEVICE_LIBRARY_PATH}/${FRAMEWORK_NAME}" -output "${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework/${FRAMEWORK_NAME}"



######################
# Step 4. Copy the Swiftmodules. 
# This step is necessary only if your project is Swift. For the Swift framework, Swiftmodule needs to be copied in the universal framework. 
######################
echo "${ROW_STRING}"
echo "\n\n\n ???? Step 4: Copy the Swiftmodules"
echo "${ROW_STRING}"


if [ -d "${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then

cp -f ${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo

else 
    echo "ℹ️ Couldn't any Swift module file for SIMULATOR!"
fi


if [ -d "${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then

cp -f ${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo

else 
    echo "ℹ️ Couldn't any Swift module file for DEVICE!"
fi



######################
# Step 5. Remove the existing copy of the Universal framework and copy the framework to the project's directory
######################

echo "${ROW_STRING}"
echo "\n\n\n ???? Step 5 Copying in the project directory"
echo "${ROW_STRING}"

rm -rf "${PROJECT_DIR}/${FRAMEWORK_NAME}.framework"

yes | cp -Rf "${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework" "${PROJECT_DIR}"


######################
# Step 6. Open the project's directory
######################

echo "${ROW_STRING}"
open "${PROJECT_DIR}"
echo "${ROW_STRING}"



######################
# Step 7. Open the log file on Console application
######################

exitWithMessage

Meilleur.

0
mgyky

J'ai ajouté deux architectures i386 et x86_64. Et définissez Yes sur "Build Active Architecture Only". Cela fonctionne pour moi de construire sur tous les appareils de simulation.

enter image description here

0
AshWinee Dhakad