如果框架从应用程序中删除会发生什么?

时间:2013-02-22 11:46:20

标签: objective-c macos cocoa frameworks

我被问到一个问题,当您的设备意外删除框架时会发生什么情况可能是iPhone或Mac?

您的应用程序是否崩溃或是否可以正常运行?

请给我解释说明。

3 个答案:

答案 0 :(得分:4)

您可能会收到链接错误。如果框架文件夹在应用程序内部意味着其运行时链接。

  

OS X在每个动态库中嵌入“安装名称”。这个   安装名称是dyld时可以找到库的路径   需要加载它。当您构建链接到的应用程序时   动态库,将此安装名称复制到应用程序中   二进制文件。应用程序运行时,将复制安装名称   用于定位库或框架。

   $ otool -D /Applications/Google\ Drive.app/Contents/Frameworks/Python.framework/Versions/2.6/Python 
    /Applications/Google Drive.app/Contents/Frameworks/Python.framework/Versions/2.6/Python:
    @executable_path/../Frameworks/Python.framework/Versions/2.6/Python  

因此,如果您要删除Frameworks文件夹,您将收到Dyld Error。

Dyld Error Message:
  Library not loaded: @loader_path/../Frameworks/Sparkle.framework/Versions/A/Sparkle
  Referenced from: /Applications/Transmission.app/Contents/MacOS/Transmission
  Reason: image not found  

enter image description here

enter image description here

答案 1 :(得分:1)

如果删除框架,则只会影响链接到该框架的软件。 如果它是系统框架,则期望您的系统开始失败。 如果是第三方框架,则应限制其影响范围。 如果它位于您的应用包中,并且您的应用已经过代码签名,则删除捆绑的框架会阻止您的应用启动。

答案 2 :(得分:0)

这取决于应用程序是否需要访问您已删除的框架。 如果您的应用程序需要框架,那么它将无法编译。 如果你不需要它,它将像平常一样编译。