Comment utiliser ldid?
Je suis en train de lancer unsigned application sur iOS 5.1/4s iPhone (jailbreaké). Ce que j'ai fait:
- Désactiver la signature de code dans XCode.
- Construit unsigned application iPhone.
- Copié sur mon iPhone via SSH sur l'emplacement de l'Utilisateur/me/développement/HelloWorld.app
- Maintenant, j'essaie de simuler sa signature pour exécuter cette application sur l'iPhone. - Je exécuter les commandes suivantes:
.
cd /User/me/development
chmod -R 777 HelloWorld.app
ldid -S HelloWorld
Cependant, je reçois l'erreur suivante:
util/ldid.cpp(567): _assert(78:arch != NULL)
Ce sont des raisons possibles de cette erreur et maintenant pour corriger ce problème?
OriginalL'auteur Vitaliy | 2012-10-07
Vous devez vous connecter pour publier un commentaire.
1) à l'Aide de
ldid -S
est le corriger d'utilisation. Pas minuscules (-s
).2) Habituellement, lorsque je reçois cette erreur, c'est parce que j'ai construit mon application avec le mauvais architectures. La plupart des anciennes versions de
ldid
que j'ai utilisé ne peut pas signer graisse binaires (mais voir mise à Jour ci-dessous). Les gros fichiers binaires sont ceux avec plus d'une architecture à l'intérieur. Par exemple, un doublearmv6
etarmv7
exécutable. Ou avec Xcode 4.5, c'est probablement par défautarvm7
etarmv7s
.Dans le projet de construire des paramètres, utilisez les Architectures, Valide Architectures et Construire Active Seulement l'Architecture paramètres pour déterminer l'architecture de l'exécutable est construit. Pour le jailbreak de développement, j'ai l'habitude de définir Construire Active Seulement l'Architecture à
YES
. Et valide archictures ensemble dearmv6
etarmv7
.3) Aussi, certaines versions plus anciennes de
ldid
ne peuvent pas signerarmv7
exécutables. Si vous obtenez le pré-construit copie de KennyTM du site ici, il prend en chargearmv7
. Notez que cetteldid
est construit pour Mac OS X, il est donc conçu pour être exécuté sur le fichier exécutable sur votre Mac, après la construction sans signature dans Xcode, mais avant vous téléchargez sur votre iPhone.Les plus récents téléphones peuvent généralement exécuter les fichiers exécutables construit pour des architectures plus anciennes, mais pas l'inverse. Alors, construire pour l'architecture la plus ancienne que vous voulez soutenir. Tu va juste perdre quelques optimisations dans les nouvelles architectures (qui la plupart des gens ne se soucient pas trop sur ... laissez-moi savoir si votre application a besoin de ces optimisations, et je vais poster plus).
Donc, si vous voulez soutenir les anciens appareils (iPhone < 3GS), je mettrais Architectures à seulement
armv6
, pour être sûr de supprimer le paramètre par défaut de$(ARCHS_STANDARD_32_BIT)
. Si vous avez seulement besoin de soutien pour relativement nouveau, puis choisissezarmv7
, mais assurez-vous que vous utilisez une version deldid
que vous pouvez signerarmv7
binaires.Edit: pour déterminer si le fichier exécutable que vous essayez de vous connecter a un gros, exécuter cette ligne de commande:
Comme vous pouvez le voir ci-dessus sortie, mon
HelloJB
exécutable n'est pas la graisse, et n'a armv7 code.Mise à jour
Je crois que la pré-version intégrée de ldid trouvé ici peut maintenant signer la graisse exécutables, bien qu'il existe encore
ldid
versions flottant autour qui ne le peuvent pas. Aussi, je pense que si vous installez une version récente de iOSOpenDev, il vous donnera une version deldid
qui peut signer la graisse exécutables (emplacement d'installation par défaut de/opt/iOSOpenDev/bin/ldid
).armv7
, puis laissezldid
code signe que non de la graisse de l'exécutable.href="http://stackoverflow.com/q/12537617/119114">il y a d'autres façons de vérifier pour un gros binaire, trop. Pouvez-vous essayer l'un de ces, et voir si ce n'est le problème? Ou tout simplement regarder votre Xcode paramètres de construction, et de voir si vous êtes configuré pour construire pour une seule architecture?
si c' uniquement listes
armv7
, puis c'est pas un gros binaire. PROCESSEUR type et sous-type sont juste deux descripteurs différents, maisarmv7
est le seul architecture je vois dans ce que vous avez posté, donc c'est pas de la graisse."cputype (12) cpusubtype (11)" est armv7s.
xcrun -sdk iphoneos lipo -info ...
d'un dumping de la valeur correctement. Un radar existe pour/usr/bin/lipo
'incapacité de reconnaître le processeur et l'architecture.Je peux confirmer la mise à jour ldid apparaît à signer les gros fichiers binaires. N'oubliez pas de faire un chmod de votre binaire aussi avec les autorisations d'exécution. Enfin, si vous n'avez pas de Mac, vous pouvez accomplir cela en utilisant Travis CI maintenant, comme on le verra dans le github.com/OneBusAway/onebusaway-iphone peu de temps.
OriginalL'auteur Nate
À partir de ce qui semble Xcode 4.5-là, peut-être dès 4.4 n'ai pas vérifié, pour le pseudo-code de signer à l'aide de la ldid outil, vous devez télécharger et installer en Ligne de Commande, Outils de ici ou vous pouvez le télécharger à partir dans Xcode, les Préférences->Téléchargements
Sinon vous aurez des erreurs comme
Vous avez encore besoin pour s'assurer qu'il n'est pas un "gros" binaire et seulement armv7 comme armv6 n'est plus supporté.
ldid -S ExampleApp
OriginalL'auteur Omar
L'erreur assert(2:faux) vient du fait que HelloJB (pas HelloJB.app) est protégé en écriture!
OriginalL'auteur Urs Koster