【问题标题】:How do I correctly modify a custom cocoa framework?如何正确修改自定义可可框架?
【发布时间】:2010-03-18 10:15:58
【问题描述】:

我正在我的可可项目中使用非常有用的 ID3 框架。我想在其中修改一件小事,但我似乎无法将所做的更改应用于构建的框架。

框架提供的源代码带有一个 Xcode 项目,所以我打开了它,为了测试,在里面放了一个 NSLog(@"hello");。它肯定在一个会被调用的地方,还有其他 @987654322 @ 在框架中显示的调用,因此不仅仅是控制台输出被抑制。

要在修改后构建框架,我首先清理了构建文件夹,确保它实际上已删除文件,然后构建它。然后在我使用框架的 Xcode 项目中,我删除了旧的引用,并在新构建的框架中添加了一个新的引用。使用新构建的框架运行我的项目不会调用修改后的框架代码。我已经尝试过作为 Xcode 框架项目一部分的 Development 和 Deployment 构建。

我的直觉是框架代码编译成的可执行文件以某种方式被缓存。但由于我对框架的工作原理相当不熟悉,所以我不确定该去哪里找。

【问题讨论】:

    标签: objective-c cocoa frameworks


    【解决方案1】:

    Mac OS X 中的可执行文件或框架没有缓存。要调试正在发生的事情,有几个有用的技巧:

    在命令行上使用otool -L <path_to_your_executable>,了解加载命令(将库和框架加载到您的可执行文件中)。尝试找到ID3框架并检查路径。如果它以@executable_path 开头,则必须将框架复制到可执行文件的包装器中。

    要真正查看加载了哪些库以及从何处加载,请将环境变量 DYLD_PRINT_LIBRARIES 设置为 YES。您可以在 Xcode 中(在您的可执行文件设置中)或从终端执行此操作。

    您将看到由 dyld 加载的库及其路径。

    我的直觉是,您的可执行文件仍然从可执行文件的应用程序包装器或其他可能安装它的地方加载旧框架。尝试清理您的项目(使用框架的项目,而不是框架本身)。

    【讨论】:

    • 对,由于某种原因,我无法让 otool 工作,但 DYLD_PRINT_LIBRARIES 非常有用,表明它是从 Library/Frameworks/ 加载的。它似乎坚持在那里(即如果我从那里删除它不会编译),但我可以简单地在那里复制框架的新版本并且它工作正常。非常感谢。
    • 之所以要从那里加载框架是因为它是框架INSTALL_PATH构建设置。使用otool -L /Library/Frameworks/ID3.framework/ID3 应该会显示框架安装路径(输出的第一行)。您不必总是在那里复制框架,您可以使用框架构建目录中的那个。为了让你的主可执行文件加载这个框架,还有另一个环境变量:DYLD_FRAMEWORK_PATH。见man dyld
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2011-06-23
    • 2010-12-28
    • 1970-01-01
    相关资源
    最近更新 更多