【问题标题】:Duplicate conflicting frameworks in cocoa plug-ins可可插件中重复的冲突框架
【发布时间】:2010-05-04 17:25:46
【问题描述】:

我目前正在为我的应用程序编写插件框架。我希望能够在不必更新我的应用程序的情况下发布插件,并且我打算使该框架可用于第三方插件。当两个插件附带相同的框架时,我目前遇到了问题。加载插件时,运行时会感到困惑,因为框架被加载了两次。缓解此问题的最佳方法是什么?

【问题讨论】:

    标签: objective-c cocoa plugins nsbundle


    【解决方案1】:

    有点不清楚你在问什么。你的意思是插件都包含你的框架,还是其他第三方框架?

    如果它们都包含你的框架,那么你不应该那样做;他们应该引用嵌入在您的应用程序中的框架。您可以通过@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 命名空间冲突提供了几种解决方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多