Apple帮助创作

Kez*_*zer 2 xcode objective-c

我正在按照本指南公开一些Apple的帮助.我工作的应用程序已经内置了多年的帮助,但它突然停止工作,并且没有对应用程序plist或任何帮助文件进行任何更改.我们假设Apple改变了一些东西,所以我确保它符合Apple要求的规格.当我说"不工作"时,我的意思是我们的链接使用NSHelpManager将打开帮助查看器,但带回一个找不到的页面.

要查看清单的事情:

  1. 页面顶部有一个正确名称的锚点
  2. 文件夹结构是之前链接的文章的副本
  3. 我们正在重新索引帮助页面
  4. 我们确实清除了所有缓存

这是我们用来打开帮助页面的代码:

NSString *locBookName = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleHelpBookName"];
[[NSHelpManager sharedHelpManager] openHelpAnchor:@"mypage" inBook:locBookName];
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我们有一个<a name="mypage"></a>顶部有一个页面,所以它应该正确链接.我们的脚本如下:

hvfix(清除所有缓存):

rm -rf ~/Library/Caches/com.apple.help*
rm -rf ~/Library/Preferences/com.apple.help*
rm -rf ~/.Trash/*
killall helpd
defaults write com.apple.helpindexer IndexAnchors YES
Run Code Online (Sandbox Code Playgroud)

updatehelpindex.sh(重新生成索引)

#!/bin/sh
hiutil -C -f MyApp.help/Contents/Resources/English.lproj/MyApp.helpindex
MyApp.help/Contents/Resources/English.lproj/
Run Code Online (Sandbox Code Playgroud)

我们进行构建,将文件夹放入Applications文件夹中,以便注册应用程序+帮助.我们甚至尝试重启或注销/登录,但我们什么也得不到.我知道这是一个非常繁琐的过程,但我们尝试的任何东西似乎都没有用.我们希望能够做的就是使用NSHelpManager打开帮助锚点.毫无疑问,这可以在10.6+中运行,因为许多其他应用程序都这样做(一些报告表明它不适用于10.7/8,但它们必须是不真实的).

想法?

编辑(文件夹结构):

这是在MyProj.help文件夹中,该文件夹位于整个Cocoa项目的子目录中,名为"help".

+ Contents
     Info.plist
     + Resources
         + shrd
              (a bunch of image files)
         + English.lproj
               MyProj.helpindex
               index.html
               + css
               + pgs
               + gfx
Run Code Online (Sandbox Code Playgroud)

在文件夹中正是如预期的那样,'css'中有一堆CSS文件,'pgs'有HTML页面,'gfx'有图像文件.

Cod*_*aFi 5

在向系统注册HelpBook时,沙盒影响HelpViewer目录搜索的方式似乎是一个错误(如本错误报告中所述),这完全解释了为什么它出现在10.7和10.8,而不是10.6和更早版本.即便是Apple的NSAlertTest也会受到影响.不幸的是,由于错误报告在本文发布时尚未解决,因此没有可行的解决方案,但我运行的少数测试已确认NSHelpManager平局忽略了我机器上的沙盒帮助plist.