2010-05-04 32 views
1

我目前正在寫我的應用程序插件框架。我希望能夠釋放的插件,而無需更新我的申請,我打算使可用於第三方插件的框架。當兩個插件附帶相同的框架時,我正在遇到問題。當加載插件時,運行時會因爲框架被加載兩次而感到困惑。減輕這個問題的最佳方法是什麼?可可插件重複衝突的框架

回答

2

這是一個有點不清楚你在問什麼。你的意思是插件都包含框架或其他第三方框架?

如果他們都包含你的框架,那麼你不應該這樣做;他們應該引用嵌入在您的應用程序中的框架。您可以通過@executable_path參考框架捆綁所以它是相對於你的應用程序(例如@executable_path/../Frameworks/MyFramework.framework/)。

這裏的Lightroom中的例子:

% otool -L Applications/Adobe\ Lightroom\ 2.app/Contents/PlugIns/Web.lrmodule/Contents/MacOS/Web 
Applications/Adobe Lightroom 2.app/Contents/PlugIns/Web.lrmodule/Contents/MacOS/Web: 
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0) 
    /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 136.0.0) 
    @executable_path/../Frameworks/AgSubstrate.framework/Versions/A/AgSubstrate (compatibility version 1.0.0, current version 1.0.0) 
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0) 

如果他們都包含其他第三方Objective-C框架,這是在插件中的錯誤; Objective-C運行時沒有命名空間,當加載具有相同名稱的多個類時,您不能指望任何有效的響應。這在this question,它提供了多種解決方法ObjC命名空間衝突的討論。