2009-07-13 10 views
7

Je voudrais écrire du code Objective-C pour la distribution. Quelle est la meilleure façon d'emballer la sortie. En Java, vous pouvez empaqueter votre code dans un fichier JAR et le distribuer. Quel serait l'équivalent en Objective-C?Comment partager/distribuer du code Objective-C compilé (comme un JAR en Java)?

Le lien suivant est proche, mais semble traiter plus des problèmes d'espace de noms qui ne me concernent pas. Je suis surtout préoccupé par la mise en place du code pour une distribution facile.

Objective-C equivalent of Java packages?

Répondre

7

Un cadre est presque certainement le chemin à parcourir. L'un des avantages de Frameworks sur OS X est qu'il peut regrouper le code exécutable, les en-têtes, les métadonnées, les images, les icônes, etc. en un seul paquet. De plus, les frameworks peuvent être inclus dans */Library/Frameworks/ ou même à l'intérieur de votre bundle d'applications pour se découpler complètement de la dépendance de toute autre application sur une version donnée du framework.

Framework Programming Guide Apple est le meilleur endroit pour commencer avec les cadres.

La création d'une structure est simple. Fondamentalement, dans Xcode vous choisissez Fichier> Nouveau projet ... et sélectionnez Framework, puis Cocoa Framework. Cela va mettre en place un nouveau projet avec la cible de la structure et automatiquement emballer tout pour vous lorsque vous construisez. N'oubliez pas que la documentation et les tests unitaires sont une bonne chose, en particulier pour les frameworks, qui sont intrinsèquement plus susceptibles d'être utilisés par plusieurs clients que la plupart des codes d'utilisateurs finaux. Vous pouvez ajouter plus de cibles à votre projet Xcode de framework pour le documenter et le tester.

Depuis que vous cherchez des exemples, consultez CHDataStructures.framework (un projet que je développe) et PSMTabBarControl.framework (qui comprend beaucoup de ressources supplémentaires dans le cadre). Les deux sont open-source, et devraient fournir des exemples adéquats pour rouler les vôtres.Un mot de conseil pour vous épargner un peu de grattage: vos fichiers d'en-tête ne seront pas copiés dans le framework construit à moins que vous ne cliquiez sur la cible du framework et que vous changiez Rôle en "Public" (ou "Privé") .

+0

J'ai coché cela parce que les liens fournis sont plus ou moins cassés. CHDataStructures.framework WebSVN ne contient rien et PSMTabBarControl.framework about 404. –

5

Vous voulez créer un cadre. Il y a un point de départ dans Xcode pour un nouveau projet pour en créer un. Il y a quelques mises en garde et pièges, mais dans l'ensemble, le processus est simple.

Modifier: Pour clarifier: Si vous envisagez de le distribuer en tant que SSOBL; l'emballer dans un cadre pourrait être exagéré; le simple fait de distribuer le code source pourrait être une option plus sensée et plus simple. Mais si vous souhaitez garder la source pour vous ou la distribuer avec une collection de ressources pertinentes, un cadre pourrait certainement être une bonne idée.

remodifier: Pour une introduction, voir http://developer.apple.com/documentation/MacOSX/Conceptual/BPFrameworks/

+0

Connaissez-vous de bons points de référence pour commencer? – banno

1

Vous ne dit pas si elle était pour iPhone ou non. Sur l'iPhone, il doit s'agir d'une .sa (bibliothèque liée statiquement) - mais je pense que la distribution normale le serait par .dylib ou .so

+0

Ce serait, en fait, un .framework; qui est un .dylib emballé dans une hiérarchie de dossiers avec des fichiers d'en-tête pertinents et des ressources. –

+0

Principalement iphone - mais je voudrais peut-être le rendre assez générique pour fonctionner sur le Mac aussi. – banno

-1

Les programmes Java s'exécutent dans le contexte d'une machine virtuelle. Jar contient des bytecodes abstraits qui doivent être convertis en code machine natif par la machine virtuelle.

Objective-C, comme C, est compilé en code machine natif, tel qu'un fichier Win .exe, directement exécutable par le système d'exploitation.

La plupart des programmes de toute complexité sont constitués de plusieurs fichiers et comprennent des DLL, des fichiers d'icônes, etc. La configuration de vos fichiers pour la distribution est généralement gérée par un utilitaire de configuration.

+1

La dernière partie de cela semble totalement sans rapport avec Objective-C. Il n'y a pas d '"utilitaire d'installation", et heureusement, pas de DLL dans le même sens que Windows. Les bibliothèques dynamiques sur OS X peuvent en réalité contenir plusieurs versions, ce qui permet aux clients de se lier spécifiquement à une version donnée et de ne pas casser si la bibliothèque doit violer la rétrocompatibilité. Les cadres sont la voie à suivre. –

+0

Objective-C n'est pas exclusif à OS X. – Buggieboy

0

Vous pouvez le compiler en tant que Framework ou en tant que bibliothèque statique (.so je crois).