【问题标题】:What will happen if a framework get deleted from an app?如果从应用程序中删除框架会发生什么?
【发布时间】:2013-02-08 00:44:08
【问题描述】:

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

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

请给我答案和解释。

【问题讨论】:

  • 如果这是一个工作面试问题,您可能需要添加工作面试标签。它存在但尚未使用。如果某些问题会被标记为这样,这可能会很有用。 (只是一个意见)
  • @rokjarc 我们不再使用那个标签了;它与编程无关,真的。将标签视为程序员具有专业知识并希望“关注”以查找问题的东西。
  • @Anoop 见我上面的评论;我正在删除 interview-question 标签。
  • @AndrewBarber :好吧,这不是问题,我认为它会让其他人过滤/搜索。 :)
  • @AnoopVaidya 是的,NP!

标签: objective-c macos cocoa frameworks


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      OS X 在每个动态库中嵌入了一个“安装名称”。这 install name 是 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  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-18
        • 1970-01-01
        • 2012-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-24
        • 1970-01-01
        相关资源
        最近更新 更多