web-dev-qa-db-fra.com

Xcode: Copier les en-têtes: public vs privé vs projet?

Je crée une bibliothèque statique Cocoa Touch. Comment dois-je décider de copier un fichier d'en-tête en tant que projet public, privé ou projet?

68
ma11hew28

Public: L'interface est finalisée et destinée à être utilisée par les clients de votre produit. Un en-tête public est inclus dans le produit en tant que code source lisible sans restriction.

Private: L'interface n'est pas destinée à vos clients ou elle en est aux premiers stades de développement. Un en-tête privé est inclus dans le produit, mais il est marqué "privé". Ainsi, les symboles sont visibles pour tous les clients, mais les clients doivent comprendre qu'ils ne sont pas censés les utiliser.

Project: L'interface est réservée aux fichiers d'implémentation du projet en cours. Un en-tête de projet n'est pas inclus dans la cible, sauf dans le code objet. Les symboles ne sont pas visibles du tout pour les clients, seulement pour vous.

Source: Bibliothèque de développeurs Xcode> Outils et langues> IDE> Aide de l'éditeur de projet> Définition de la visibilité d'un fichier d'en-tête

102

La réponse de Randy est bonne et vous donne toutes les informations pertinentes. Je voulais ajouter quelques informations pour vous aider en fonction de la façon dont vous pensez que votre bibliothèque sera utilisée.

PROJET: Si vous distribuez votre projet et que vous attendez des utilisateurs qu'ils incluent votre projet en tant que sous-projet, vous devez vous assurer que vos en-têtes sont marqués comme "projet". Ne pas le faire entraînera des problèmes comme celui-ci: Xcode 4 Archive Version Unspecified

Notez que cela s'applique à chaque sous-projet ... y compris les sous-projets de sous-projets, récursivement.

PUBLIC: Si vous vous attendez à ce que les utilisateurs de votre bibliothèque se lient uniquement à votre objet (et N'ONT PAS votre projet d'origine), assurez-vous que vos en-têtes sont marqués comme ' public "(uniquement pour les en-têtes auxquels ils devront se référer).

25
William Power

Public - Permet d'accéder au code dans le même module, ou à un autre module qui importe le module dans lequel le code est déclaré.

Internal - Permet d'accéder au code dans le même module, mais pas à n'importe quel autre module. Il s'agit du niveau d'accès par défaut de Swift.

Private - Restreint l'accès au fichier source dans lequel le code est déclaré. Bien qu'il soit typique d'avoir une seule classe, structure, énumération, etc. définie dans un fichier de code source, vous pouvez en déclarer plusieurs par fichier.

enter image description here

Ces titres sont un peu trompeurs - tous les en-têtes seront réellement visibles par vos clients et explorables dans le Finder, mais rendre explicitement les en-têtes publics est nécessaire pour les importer dans l'en-tête parapluie. [À propos de l'adhésion cible]

La source est ici et ici

0
yoAlex5