Objective c 为自定义Obj-C对象创建Xcode数据格式化程序包

Objective c 为自定义Obj-C对象创建Xcode数据格式化程序包,objective-c,xcode,chdatastructures,data-formatters,Objective C,Xcode,Chdatastructures,Data Formatters,为了帮助简化Xcode调试器窗口中的调试,我使用和Xcode的内置数据格式化程序作为指南,为每个对象创建了一组数据格式化程序字符串 如果我使用Xcode附带的数据格式化程序将其放入/Developer/Library/Xcode/CustomDataViews/中,效果会非常好。然而,我不希望这样做,因为用户可能并没有对该目录的写入权限,并且混合使用自定义格式化程序和内置格式化程序可能会让人困惑。类似地,将我自己的条目添加到~/Library/Application Support/Apple/

为了帮助简化Xcode调试器窗口中的调试,我使用和Xcode的内置数据格式化程序作为指南,为每个对象创建了一组数据格式化程序字符串

如果我使用Xcode附带的数据格式化程序将其放入/Developer/Library/Xcode/CustomDataViews/中,效果会非常好。然而,我不希望这样做,因为用户可能并没有对该目录的写入权限,并且混合使用自定义格式化程序和内置格式化程序可能会让人困惑。类似地,将我自己的条目添加到~/Library/Application Support/Apple/Developer Tools/CustomDataViews/CustomDataViews.plist也可以,但该文件用于覆盖默认值的用户定义值,其条目会被Xcode调试器GUI中的更改所破坏。我真正想要的是能够将带有我的数据格式化程序的文件放在一个位置,以便Xcode能够识别它们,但如果需要,用户仍然可以选择性地覆盖我的设置(在另一个文件中)

问题是,当我创建一个捆绑包(遵循的示例)并安装它(在/Developer/Library/Xcode/CustomDataViews/或任何库/应用程序支持/Apple/Developer Tools/CustomDataViews/路径中)时,Xcode无法识别或使用自定义格式化程序


关于数据格式化程序包细节的文档有点少(主要是Xcode.app/Contents/PlugIns/gdbmidegulation.xcplugin中的单个头文件),可能是因为该功能不是Xcode的主要功能之一任何帮助都将不胜感激。

从Xcode 2.5和3.0开始,这些东西的位置已经改变,以支持在一个系统上共存的多个版本的Xcode。您应该将自定义数据格式化程序放入本地(
/
)或用户(
~
)域中的目录“
库/应用程序支持/开发人员/共享/自定义数据视图”
”;然后,它们应该在下次启动Xcode时可用


上面路径中的
共享
可以是一个版本号,例如
3.0
3.1
,如果您正在创建特定于某个Xcode版本的内容。

我最近能够回到这一点,我相信我已经找到了答案

我已经知道数据格式化程序包必须在内部包含名为“Contents/Resources/*.plist”的属性列表文件。但是,为了使捆绑包真正工作,它还必须包含一个可执行文件,该文件名与目录/MacOS/中的捆绑包名相同。据我所知,只要编译并链接二进制文件,即使是一个完全空的
foo.c
文件也足够了。对于Xcode中的stock CFPlugin Bundle项目,我甚至不必触摸Info.plist,只需在目标资源中包含CustomDataViews.plist

因为我不需要定义C函数来显示我正在处理的任何对象和结构,所以更简单的方法是将plist文件(任何名称都可以-我的是
CHDataStructures.plist
)放在两个位置之一:

  • ~/Library/Application Support/Developer/Shared/Xcode/CustomDataViews/
  • /Library/Application Support/Developer/Shared/Xcode/CustomDataViews/

简单的plist文件更小,创建起来更简单,更容易修改。另外,与使用bundle时不同,在添加、删除或修改plist时,我不必重新启动Xcode;仅仅启动一个新的调试会话就足以导致更新新的数据格式化程序。我想我只是创建了一个bundle,因为这是示例代码所显示的,但我无法确定我的场景有什么优势,所以我坚持使用plist。

了解更改(及其背后的原因)很好,但我仍然无法使其在本地域或用户域中工作。我确信这些都是正确的位置,但请记住,捆绑包在/Developer/Library/Xcode/CustomDataViews/中也不起作用。现在,当我在内置位置调试包时,它会在Xcode中导致一个内部错误。这似乎是捆绑包本身的问题。我最终在Library/Application Support/Developer/Shared/Xcode/CustomDataView中使用了捆绑包和裸plists/(注意路径中的“Xcode”)。可能只是一个简单的打字错误,但如果没有你的帮助,我可能不会找到正确的路径。谢谢!:-)正如您所指出的,它没有必要工作,但是最好的做法可能是声明一个类型为
\u pbxgdb\u plugin\u function\u list*
的指针,并使用符号
\u pbxgdb\u plugin\u functions
,即使它是空的。