首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >苹果帮助创作

苹果帮助创作
EN

Stack Overflow用户
提问于 2013-04-04 14:23:44
回答 4查看 1.4K关注 0票数 2

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

清单上要核对的事情:

  1. 页面顶部有一个具有正确名称的锚。
  2. 文件夹结构是前面链接的那篇文章中的副本。
  3. 我们正在重新编制帮助页的索引。
  4. 我们确实清除了所有的隐藏室

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

代码语言:javascript
复制
NSString *locBookName = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleHelpBookName"];
[[NSHelpManager sharedHelpManager] openHelpAnchor:@"mypage" inBook:locBookName];

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

hvfix (清除所有缓存):

代码语言:javascript
复制
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

updatehelpindex.sh (重新生成索引)

代码语言:javascript
复制
#!/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文件夹中。

代码语言:javascript
复制
+ Contents
     Info.plist
     + Resources
         + shrd
              (a bunch of image files)
         + English.lproj
               MyProj.helpindex
               index.html
               + css
               + pgs
               + gfx

在文件夹中,“CSS”有一堆CSS文件,“pgs”有HTML页面,“gfx”有图像文件。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-16 10:54:19

好的,这是一个非常混乱的过山车,但它与您的文件夹结构设置的Xcode有关。以下是一些值得知道的事情:

  • 人们选择把它放在English.lproj中。别这么做,有几个原因。首先,如果将帮助文件夹拖到文件列表中,它将不会显示Xcode中的子目录/文件,其次,该文件夹中的内容应该是平面的,而不是结构化的。
  • 在根目录中创建一个“帮助”文件夹,并将您的文件放在其中。然后,如果您需要本地化,可以将它们放在一个名为"English.lproj“的子目录中。
  • 不要创建一个包含所有帮助文件的".help“文件夹。这似乎破坏了索引。我们不知道为什么。
  • 相反,让/help/Content/stuff并将该文件夹拖放到您的项目目录列表中(我的文件夹在"Resources“组中)。确保它是一个蓝色文件夹,并且您可以看到整个目录(所有HTML等等)。
  • 对它运行帮助索引器以生成.helpindex文件
  • 确保您的plist条目反映了该文件夹的名称和index.html文件中指定的元标记名。

如果你遵守上面的规则,事情就会很好。在ML中,创建一个.help文件夹似乎从现在开始就会破坏一切,所以基本上,不要遵循苹果指南。

票数 2
EN

Stack Overflow用户

发布于 2013-04-15 22:46:38

当HelpBook在系统中注册时(如这个错误报告中所述),沙箱似乎会影响HelpViewer的目录搜索,这完全解释了为什么它出现在10.7和10.8上,而不是10.6和更早版本。就连苹果的NSAlertTest也受到了影响。不幸的是,由于bug报告在撰写本文时仍未解决,因此没有可行的解决方案,但我运行的几个测试已经证实,NSHelpManager平面化忽略了我的计算机上的沙箱式帮助plist。

票数 5
EN

Stack Overflow用户

发布于 2017-10-12 15:54:29

我在这里加入这个答复,是因为我找到了一个非常愚蠢的方法来解决这个问题。通过使用苹果的hiutil命令行工具,我看到所有苹果的官方帮助书都使用某种索引,使用重定向文件:

代码语言:javascript
复制
$ 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文件:

代码语言:javascript
复制
<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,而且它工作!

如果有人像我一样和鹰搏斗,我希望这对你有帮助!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15813958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档