Коллизии подключаемых модулей Cocoa / Objective-C

В моем приложении есть система плагинов, которая позволяет моим пользователям писать свои собственные плагины, которые загружаются во время выполнения. Обычно это нормально, но в некоторых случаях два плагина используют одни и те же библиотеки, которые вызывают конфликт между этими двумя.

Пример:

Плагин A хочет использовать TouchJSON для работы с JSON и, таким образом, создатель добавляет код TouchJSON в исходный код плагина, и он компилируется и связывается с двоичным файлом плагина. Позже Плагин B также хочет использовать ту же библиотеку и делает то же самое. Теперь, когда мое приложение загружает эти два разных плагина, оно обнаруживает это и выдает предупреждение вроде этого:

Класс CJSONScanner реализован в оба [path_to_plugin_a] и [путь_к_плагину_b]. Один из двух будет использоваться. Какой из них не определен.

Поскольку мое приложение просто загружает плагины и проверяет их соответствие определенному протоколу, я не могу контролировать, какие плагины загружаются, и если два или более используют одну и ту же библиотеку.

Пока оба плагина используют одну и ту же версию библиотеки это, вероятно, сработает, но как только API изменится в одном плагине, возникнет куча проблем.

Что я могу с этим сделать?

5
задан hjaltij 14 June 2011 в 14:47
поделиться