我正在跟踪本指南,公开一些苹果的帮助。我工作的应用程序已经内置了多年的帮助,但它突然停止工作,并且没有对应用程序plist或任何帮助文件进行任何更改。我们假设苹果改变了一些东西,所以我确保它符合苹果所要求的规格。当我说“不起作用”时,我的意思是我们使用NSHelpManager的链接将打开帮助查看器,但返回一个未找到的页面。
清单上要核对的事情:
下面是我们用来打开帮助页面的代码:
NSString *locBookName = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleHelpBookName"];
[[NSHelpManager sharedHelpManager] openHelpAnchor:@"mypage" inBook:locBookName];在这个例子中,我们有一个顶部有一个<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 YESupdatehelpindex.sh (重新生成索引)
#!/bin/sh
hiutil -C -f MyApp.help/Contents/Resources/English.lproj/MyApp.helpindex
MyApp.help/Contents/Resources/English.lproj/我们做了一个构建,将文件夹放到应用程序文件夹中,以便注册应用程序+帮助。我们甚至尝试重新启动或注销/登录,但仍然一无所获。我知道这是一个非常微妙的过程,但我们所做的一切似乎都是行不通的。我们想要做的就是使用NSHelpManager打开一个帮助锚。毫无疑问,这在10.6+中是可行的,就像许多其他应用程序一样(一些报告显示,在10.7/8的时间里,它不起作用,但它们肯定是不正确的)。
想法?
编辑(文件夹结构):
它位于整个Cocoa项目“帮助”的子目录中的MyProj.help文件夹中。
+ Contents
Info.plist
+ Resources
+ shrd
(a bunch of image files)
+ English.lproj
MyProj.helpindex
index.html
+ css
+ pgs
+ gfx在文件夹中,“CSS”有一堆CSS文件,“pgs”有HTML页面,“gfx”有图像文件。
发布于 2013-04-16 10:54:19
好的,这是一个非常混乱的过山车,但它与您的文件夹结构设置的Xcode有关。以下是一些值得知道的事情:
如果你遵守上面的规则,事情就会很好。在ML中,创建一个.help文件夹似乎从现在开始就会破坏一切,所以基本上,不要遵循苹果指南。
发布于 2013-04-15 22:46:38
当HelpBook在系统中注册时(如这个错误报告中所述),沙箱似乎会影响HelpViewer的目录搜索,这完全解释了为什么它出现在10.7和10.8上,而不是10.6和更早版本。就连苹果的NSAlertTest也受到了影响。不幸的是,由于bug报告在撰写本文时仍未解决,因此没有可行的解决方案,但我运行的几个测试已经证实,NSHelpManager平面化忽略了我的计算机上的沙箱式帮助plist。
发布于 2017-10-12 15:54:29
我在这里加入这个答复,是因为我找到了一个非常愚蠢的方法来解决这个问题。通过使用苹果的hiutil命令行工具,我看到所有苹果的官方帮助书都使用某种索引,使用重定向文件:
$ hiutil -Df /Applications/Xcode.app/Contents/Resources/Xcode.help/Contents/Resources/en.lproj/search.helpindex
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
> <plist version="1.0">
> <dict>
> <key>dev01043b473</key>
> <array>
> <string>/redirect.html?topic=dev01043b473</string>
> </array>
> <key>dev0125622ec</key>
> <array>
> <string>/redirect.html?topic=dev0125622ec</string>
> </array>
> ...受此启发,我尝试手动生成一个.searchindex文件,使用NSUnarchiver打开hiutil创建的文件,对其进行更改,并使用NSArchiver将其写回文件,但我的锚仍然无法按我的要求工作。
我克隆了TextEdit的帮助书,它基于苹果未公开的“鹰”帮助引擎(/Library/Documentation/Resources/Eagle/index.html),它生成了所有苹果应用程序现在都使用的漂亮的帮助书。但是因为我使用HTML索引,我的锚将导致普通的HTML文件,这些文件不是由Eagle修饰的。

然后,我想到了一个愚蠢的想法:这是很多工作,但是如果您为每个锚创建一个单独的html文件,您可以像在redirect.html中一样使用元重定向头标记,除非您的重定向将是静态的。因此,对于我的editor-prefs.html文件,我创建了一个具有以下内容的editor-prefs-anchor.html文件:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Editor Options</title>
<meta http-equiv="refresh" content="0;url=../index.html?localePath=en.lproj#/editor-prefs" />
</head>
<body>
<a id="editor-prefs">
</body>
</html>元重定向标记负责重定向到适当的鹰驱动URL,而且它工作!

如果有人像我一样和鹰搏斗,我希望这对你有帮助!
https://stackoverflow.com/questions/15813958
复制相似问题