安装自定义cocoa框架的最佳方法

Eli*_*oij 7 xcode cocoa frameworks xcodebuild

我有一个自定义框架,遵循Apple的框架编程指南>> 安装框架中的建议我安装在/ Library/Frameworks中.我通过使用以下脚本添加Run Script构建阶段来完成此操作:

cp -R  build/Debug/MyFramework.framework /Library/Frameworks
Run Code Online (Sandbox Code Playgroud)

在我的项目中,我然后链接/ Library/Frameworks/MyFramework并将其导入我的类中,如下所示:

#import <MyFramework/MyFramework.h>
Run Code Online (Sandbox Code Playgroud)

这非常有效,除了我总是在调试器控制台中看到以下消息:

将程序加载到调试器中... sharedlibrary apply-load-rules所有警告:无法读取"/Users/elisevanlooij/Library/Frameworks/MyFramework.framework/Versions/A/MyFramework"(未找到文件)的符号.警告:无法读取"MyFramework"中的符号(尚未映射到内存中).程序已加载.

显然,编译器首先查看/ Users/elisevanlooij/Library/Frameworks,找不到MyFramework,然后查看/ Library/Frameworks,找到MyFramework并继续其快乐的方式.到目前为止,这更像是一个烦恼而不是真正的问题,但是当运行单元测试时,gdb停止(文件未找到)并拒绝继续.我通过在Run Script Phase中添加一行来解决这个问题

cp -R  build/Debug/MyFramework.framework ~/Library/Frameworks
Run Code Online (Sandbox Code Playgroud)

但是感觉就像是在拍摄一些不应该被打破的东西.我怎样才能解决这个问题?

Eli*_*oij 12

在过去的几个月里,我学到了很多关于框架的知识,所以我重写了这个答案.请注意,我在谈论安装框架作为开发工作流程的一部分.

安装公共框架(即将由多个应用程序或软件包使用的框架)的首选位置是/ Library/Frameworks [link text],因为"编译时编译器会自动发现此位置的框架"和运行时的动态链接器."[框架编程指南].最优雅的方法是在Build设置的Deployment部分.

在处理框架时,有时您希望在执行构建时更新框架,而有时则不希望更新框架.因此,我仅在发布配置中更改部署设置.所以:

  1. 双击框架目标以显示"目标信息"窗口并切换到"构建"选项卡.
  2. 在"配置"选择框中选择"发布".
  3. 向下滚动到"部署"部分,然后输入以下值:

部署位置=是(单击复选框)

安装构建产品位置= /

安装目录=/Library/Frameworks

Installation Build Products Location用作安装的根目录.它的默认值是某个/ tmp目录:如果不将其更改为系统根目录,则永远不会看到已安装的框架,因为它隐藏在/ tmp中.

现在,您可以在调试配置中按照自己的意愿处理框架而不会破坏其他项目,当您准备发布所有需要做的事情时,请切换到Release并执行Build.

Xcode 4警告 自切换到Xcode 4以来,我的自定义框架遇到了许多问题.大多数情况下,他们将GDB中的警告链接起来,这些警告并没有真正干扰框架的有用性,除非在运行内置单元测试时.我在一周前向Apple提交了技术支持票,他们仍在调查.当我得到一个有效的解决方案时,我会更新这个答案,因为这个问题已经证明非常受欢迎(1 kViews和计数).