Re: WTF is happening?
Re: WTF is happening?
- Subject: Re: WTF is happening?
- From: Fritz Anderson <email@hidden>
- Date: Mon, 15 Dec 2014 12:45:47 -0600
I can be dense. Do I understand correctly that
- You have an application that ideally should run continually.
- It accepts plugins that provide one or more classes.
- Those classes must at least observe a protocol; otherwise there would be no sensible way to use them.
- They must have unique names.
- As is typical of ObjC plugins, the classes are packaged in a dynamic library; and as is typical, the library is wrapped in a package directory, which your application has registered with Launch Services as a package, of a certain type and edit/view/associate relationship to your application. I'm sure this is so in your case, as plugins typically need to carry resource files.
- If a package, the plugin might carry an Info.plist file — plugins commonly do.
- You mean to load and unload plugins dynamically, as they appear and disappear in a designated directory, without interrupting the application.
Do I follow you so far? If so, I have some comments.
You can't unscramble the egg: Dynamically-loaded classes can be loaded any time you like, but they cannot be reloaded or unloaded. Surely you know this; surely I misunderstand (or am behind the times).
If you are (practically) committed to a package structure with an Info.plist, why can't you add an <array> key listing the names of the provided classes? Or for that matter, a text file containing the names? That's one of the things NSBundle is for. It is a universal practice. "Just works" is a great ideal, but one can expect someone who knows how to build a dynamic library to understand such things.
The declared classes might not implement the required methods, but that's easy and safe to detect once they are loaded. If you must reject, your duty ends when you log the problem and put up an alert.
Am I missing something?
— F
> On Dec 15, 2014, at 11:59 AM, Maxthon Chan <email@hidden> wrote:
>
> What I am doing here is to determine a format handling class based on file extension. I want to achieve a drop-to-plugin-folder-and-it-will-work effect and allow one plugin to include multiple format handling classes. Also since I am creating an open system I don’t want to require other plugin writers to register their classes, instead the main code shall discover plugins on its own.
>
> This means that the main code will not be able to call any plugin classes methods so +initialize never get called. Also your approach means that the main code will hold a strong reference to the plugin code which prevents plugin unloading.
>
> Class walking may be fragile, but it is fragile enough to allow plugins to come and go easily without having to restart the main code.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden