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.
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.
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
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.
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
Je résous par XCode> -Votre cible principale-> Construire une architecture active uniquement
Définir Oui
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 .
#!/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.