2011-07-13 2 views
10

Je travaille à la création d'une bibliothèque statique iOS que je souhaite vendre. J'ai parcouru les étapes pour les builds initiaux et j'ai généré la sortie .a/.h.Masquer le code dans la bibliothèque statique (iOS Obj-C)

Lorsque j'inclue ces fichiers dans un projet distinct, je ne vois aucun moyen de parcourir le contenu du fichier .a. Cependant, lorsqu'une ligne de code dans ma bibliothèque bloque l'application (comme je l'ai dit, elle est encore en développement), le débogueur me montre le fichier entier de la classe (.m). Qu'est-ce qui se passe avec ça?

Je ne comprends pas vraiment tout ce qui se passe dans les bibliothèques statiques, et je ne suis pas sûr d'avoir compilé cette version pour le simulateur et l'appareil. Est-ce que cela pourrait avoir quelque chose à voir avec ça? Si oui, quelqu'un pourrait-il expliquer pourquoi?

Merci !!!

+0

Supprimez le répertoire dSYM associé à votre bibliothèque, plantez votre application, aucun code source. C'est à dire. le dSYM - la table des symboles - fournit une carte entre la bibliothèque et la source. – bbum

+0

Le débogueur affiche le fichier dans votre projet Xcode. Le code source n'est pas stocké dans le fichier .a. (Pour ce faire, cela provoquerait un «gonflement du code» massif et serait donc indésirable même en ne tenant pas compte du problème de sécurité.) –

Répondre

18

Ne vous inquiétez pas, votre code source n'est pas inclus dans le fichier d'archive (.a).

Xcode est assez intelligent pour trouver le fichier de code source sur votre ordinateur, basé sur les informations de débogage incorporées dans le fichier. Si vous construisez la bibliothèque en utilisant la configuration "Release" (ou modifiez les paramètres de construction pour que les symboles de débogage soient supprimés) et que vous n'ayez pas la source sur la machine, le développeur devra utiliser sa connaissance de x86 ou ARM assemblage pour comprendre comment fonctionne votre code.

Soit dit en passant:

  • Comme beaucoup de Objective-C est traitée lors de l'exécution, beaucoup de noms noms de classe et le sélecteur sera visible dans votre bibliothèque. C'est juste comment ça fonctionne. Vous pourriez essayer de l'obscurcir, mais je pense que votre temps est mieux utilisé pour écrire du code plus utile à vendre. Si vous souhaitez donner aux utilisateurs une bibliothèque statique pour le développement iOS, vous devez créer des versions pour iOS Simulator (x86) et iOS Device (arm), puis utiliser lipo pour les combiner en un seul fichier. bibliothèque statique. Recherche autour de "lipo xcode bibliothèque statique de graisse" pour différentes façons de le faire. Certaines solutions sont plus alambiquées que d'autres.

+1

L'objectif c rend la tâche facile car il charge les informations d'appel directement dans les registres :) –

+0

OK, donc vous dites que XCode est en train de récurer mon ordinateur pour le code source JUSTE POUR FREAK ME OUT ??!?! @ !? J'ai regardé autour de moi et j'ai vu la bibliothèque "construire une grosse bibliothèque", mais je suis encore assez tôt dans le processus et je continue à tester ma bibliothèque. Fondamentalement, 1. Construire en mode de libération (pour simulateur et dispositif), 2. Importer la bibliothèque dans un projet séparé, 3. Assurez-vous que la source n'est pas sur la machine, et 4. Je ne serai pas en mesure de parcourir la classe si un l'échec se produit? Cool! Merci! – mbm29414

+0

En cas d'erreur vous obtenez une erreur mais pas dans un endroit spécifique, très probablement il vous donnera l'adresse de l'erreur et peut-être les données qui ont causé l'erreur (adresse invalide ou quelque chose) –

0

Si vous avez un projet de bibliothèque statique avec tous les fichiers .m sur votre ordinateur, chaque copie de cette bibliothèque (.a fichier) sera symbolicated avec son fichier .m pendant le débogage dans Xcode.

xCode ne recherche pas de fichier .m approprié sur tout votre disque. Il connaît la place du projet d'origine. Donc, si vous distribuez seulement la bibliothèque, elle cache entièrement votre code initial. Pour vous assurer que vous pouvez copier votre bibliothèque dans un nouveau projet, effacez le fichier .m dans le projet de bibliothèque. A partir de ce moment, toute tentative de déboguer les méthodes de la bibliothèque donnera un fichier vide à l'écran.

enter image description here

3

J'ai eu le même problème. @benzado a raison sur ce qu'il a mentionné. Mais j'ai dû supprimer les symboles de débogage pour résoudre le problème. Pour ce faire, j'ai dû modifier Build Settings de la bibliothèque de projet avant la construction comme mentionné ci-dessous.

Sélectionnez votre cible et passez à Paramètres de construction.Set

  1. 'bande de symboles de débogage lors de la copie' à OUI
  2. 'informations de débogage Format' à 'NAIN avec dSYM Fichier des'
  3. 'Générer Symboles de débogage 'à' N O '
  4. ' Symboles cachés par défaut 'à' OUI '

Pour voir quels sont ces derniers pour, reportez-vous Apple Build Setting Reference

Et construire la bibliothèque en utilisant la "Release" configuration. Cela a fonctionné pour moi.

Questions connexes