Je viens de mettre à jour mon logiciel iPhone 4S pour iOS 7 Bêta 2 alors que j'étais en train de mettre la dernière main à une nouvelle application (Phonegap) .. pas une bonne idée!
Cela fait, Xcode n'a pas détecté mon iPhone et j'ai donc installé Xcode 5 beta. Après avoir bricolé avec elle, je finis par le faire détecter mon téléphone. Le seul problème est qu’il ya une erreur avec l’architecture utilisée.
Voici les erreurs en cours de production:
ld: warning: ignoring file /Users/-----------/Library/Developer/Xcode/DerivedData/testtest-bmnbmujiosugcmgeiceofgcfmsec/Build/Products/Debug-iphoneos/libCordova.a, file was built for archive which is not the architecture being linked (armv7s): /Users/--------/Library/Developer/Xcode/DerivedData/testtest-bmnbmujiosugcmgeiceofgcfmsec/Build/Products/Debug-iphoneos/libCordova.a
Undefined symbols for architecture armv7s:
"_OBJC_METACLASS_$_CDVCommandDelegateImpl", referenced from:
_OBJC_METACLASS_$_MainCommandDelegate in MainViewController.o
"_CDVLocalNotification", referenced from:
-[AppDelegate application:didReceiveLocalNotification:] in AppDelegate.o
"_OBJC_CLASS_$_CDVCommandDelegateImpl", referenced from:
_OBJC_CLASS_$_MainCommandDelegate in MainViewController.o
"_OBJC_CLASS_$_CDVCommandQueue", referenced from:
_OBJC_CLASS_$_MainCommandQueue in MainViewController.o
"_OBJC_METACLASS_$_CDVViewController", referenced from:
_OBJC_METACLASS_$_MainViewController in MainViewController.o
"_OBJC_METACLASS_$_CDVCommandQueue", referenced from:
_OBJC_METACLASS_$_MainCommandQueue in MainViewController.o
"_CDVPluginHandleOpenURLNotification", referenced from:
-[AppDelegate application:handleOpenURL:] in AppDelegate.o
"_OBJC_CLASS_$_CDVViewController", referenced from:
_OBJC_CLASS_$_MainViewController in MainViewController.o
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Des idées sur ce en quoi l'architecture devrait être changée afin de la faire fonctionner sur mon téléphone? (ça fonctionne bien sur l'émulateur)
Réponse courte:
Réponse détaillée:
Le problème est que votre bibliothèque statique 'libCordova.a' à laquelle vous liez dans votre application principale est uniquement compilée pour une architecture (armv7, mais pas armv7).
Vous avez probablement laissé Xcode effectuer toutes les modifications recommandées pour votre projet de bibliothèques statiques sans lire ce qu’elles sont réellement. Pour ma part, je n'ai jamais pris la peine de regarder de plus près cette boîte de dialogue d'informations (capture d'écran ci-dessous), lorsque je suis passée à une nouvelle version de Xcode - jusqu'à maintenant.
Le problème est que l'exécution de ces modifications active pour le débogage génère une nouvelle fonctionnalité appelée Construire une architecture active uniquement (la clé du paramètre de configuration de la construction est 'ONLY_ACTIVE_Arch'). En principe, il s’agit d’une amélioration très intéressante de Xcode, car son paramétrage sur OUI entraîne des temps de construction plus courts, car Xcode compile uniquement l’architecture de l’appareil connecté que vous avez sélectionné en haut lorsque vous cliquez sur le bouton Exécuter.
Cependant, lorsque vous acceptez aveuglément ce nouveau paramètre dans une bibliothèque statique, vous pouvez rencontrer ce bogue. Le bogue survient lorsque vous avez créé la version de débogage d’une bibliothèque statique tout en connectant un périphérique armv7, puis lors du débogage de votre application principale, vous avez connecté un périphérique armv7 (ou inversement). Ensuite, vous obtiendrez l'erreur ci-dessus (ou une erreur similaire).
Ma recommandation est donc de supprimer complètement la valeur au niveau du projet pour Construire une architecture active uniquement de tous les paramètres de construction du projet de vos bibliothèques statiques. Parce que si vous regardez le défaut iOS, c'est NON. Bien entendu, vous pouvez également remplacer le paramètre par "NO" pour vous assurer qu'il est correct, même si, à l'avenir, la valeur par défaut changera (voir la 1ère capture d'écran).
Si votre projet a été construit avec Cordova 2.x et Xcode 4.x et que vous recevez l'erreur mentionnée par l'OP, cette solution a fonctionné pour moi. (J'éprouvais l'erreur avec Cordova 2.5 et Xcode 5).
https://issues.Apache.org/jira/browse/CB-3768
Accédez à votre projet Cordova
Dossier racine -> CordovaLib -> Clic droit sur CordovaLib.xcodeproj -> Afficher le contenu du paquet -> Ouvrir project.pbxproj
Remplacez toutes les occurrences de (j'avais 4)
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;//in 2 out of 4 occurrences
"ARCHS[sdk=iphoneos*]" = armv7;
"ARCHS[sdk=iphoneos6.*]" = (
armv7,
armv7s,
);
/* other settings here */
};
Avec ceci
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;//in 2 out of 4 occurrences
"ARCHS[sdk=iphoneos*]" = armv7;
"ARCHS[sdk=iphoneos7.*]" = (
armv7,
armv7s,
);
"ARCHS[sdk=iphoneos6.*]" = (
armv7,
armv7s,
);
/* other settings here */
};
Maintenant, votre projet va bien se construire!
J'ai enlevé armv7s
de valid architectures
section et cela a fonctionné pour moi.
Paramètres de construction -> Architectures -> Architectures valides
J'utilise Xcode 5 pour iOS SDK 7. La solution qui fonctionnait pour moi consistait simplement à supprimer l'architecture arm64.
Sélectionnez la cible du projet (PAS CordovaLib.xcodeproj) et dans les paramètres de construction> Architectures valides, supprimez arm64 s'il se trouve dans la liste. Voici le mien après avoir supprimé l'architecture arm64.
Parce que mon lib.a est pour seulement armv7
ce que j'ai fait était
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
"ARCHS[sdk=iphoneos*]" = (
armv7s,
armv7,
);
"ARCHS[sdk=iphoneos6.*]" = (
armv7s,
armv7,
);
"ARCHS[sdk=iphoneos7.*]" = (
armv7,
armv7s,
);
il a été construit et archivé bien
j'espère que ça aide
njtman avait une réponse correcte. Je n'ai pas le représentant à commenter alors j'ajoute plus de détails.
Vous avez besoin d'un SDK iOS 7 pour utiliser les architectures standard (armv7, armv7s).
Mon projet était par défaut sur (armv7), sans compter les armv7.
Pour résoudre ce problème, ouvrez CordovaLib.xcodeproj, sous Paramètres de construction (un des menus de la rangée supérieure, alignement centré) sous Architectures, Architectures, Débogage et édition, AJOUTEZ iOS 7.0 à l'aide d'architectures standard.
Dans les paramètres de construction ...
Strip Debug Symbols During Copy:
Debug: No
Release: No