2011-03-28 5 views
3

J'ai développé une application Cocoa pour Mac OS X. Je veux faire des plugins personnalisés (avec l'interface aussi) et les charger dynamiquement dans mon application. Mon application doit regarder dans un dossier et récupérer tous les fichiers (les plugins) et les rendre disponibles dans l'interface utilisateur.Charger dynamiquement des plugins personnalisés (bibliothèques) dans une application Cocoa

Quelqu'un peut-il me suggérer un point de départ?

Comment puis-je les charger dynamiquement, les plugins doivent être des bibliothèques dynamiques ou sth?

Merci.

Répondre

4

Vous voulez jeter un coup d'œil à NSBundle. Un projet de bundle chargeable (un framework est un bundle chargeable) produira ce que vous voulez. Si vous définissez la propriété principleClass de l'ensemble à la classe de niveau supérieur de votre module, vous pouvez récupérer une instance de la classe à partir de l'ensemble chargé. Vous pouvez charger un paquet à un chemin donné avec

id bundle = [NSBundle bundleWithPath:pathToBundle]; 
NSError *err; 
if(![bundle loadAndReturnError:&err]) { 
    // err contains error info 
} else { 
    // bundle loaded properly 
    Class pluginClass = [bundle principleClass]; 
    // instantiate pluginClass and off you go... 
} 
+1

Ceci. Vous pouvez également consulter Info.plist d'un bundle pour obtenir son nom à afficher dans un menu plugins, par exemple, sans charger son code - c'est pourquoi loadAndReturnError: est une étape distincte qui n'est pas effectuée automatiquement lorsque l'objet NSBundle est créé. Charger le code à la demande peut être utile si vous avez un * lot * de plugins, dont seulement quelques-uns seront utilisés pour une session donnée. –

+0

Merci - très utile – Vassilis

+1

Il y a un chapitre dédié, ** [Architectures de plug-in] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingCode/Concepts/Plugins.html) * * dans le guide de chargement de code [https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingCode.html#//apple_ref/doc/uid/10000052-SW1] d'Apple – Jay

Questions connexes