7

有人问我一个问题,如果从您的设备中意外删除框架可能是 iphone 或 mac 会发生什么?

您的应用程序是否崩溃或它会正常工作而没有任何错误?

请给我答案和解释。

4

3 回答 3

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 错误。

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  

在此处输入图像描述

在此处输入图像描述

于 2013-02-22T12:37:30.567 回答
1

如果删除框架,则只有链接到该框架的软件会受到影响。如果它是一个系统框架,预计您的系统会开始失败。如果是第 3 方框架,则应限制影响范围。如果它在您的应用程序包中,并且您的应用程序是代码签名的,那么删除捆绑的框架应该会阻止您的应用程序启动。

于 2013-02-22T11:50:43.313 回答
0

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

于 2013-02-22T11:51:58.893 回答