Якоря в справочнике не работают
Я дважды проверил все и надеюсь, что кто-то может найти глупую ошибку, которую я не вижу.
Я пытаюсь создать раздел справки Apple для своего приложения, и он корректно переходит на целевую страницу, однако ни один из якорей не работает. Целевая страница называется index.html
а другая страница называется test.html
который расположен в pgs
каталог.
В index.html у меня есть:
<a href="help:anchor=support bookID=com.company.app_name.help">Link to another page</a>
В test.html у меня есть:
<a name="support"></a>
Итак, вот шаги, которые я выполнил, чтобы добраться туда, где я сейчас нахожусь:
1) Я создал каталог, как указано в документации Apple
AppName.help/
Contents/
Info.plist
Resources/
shrd/
English.lproj/
index.html
search.helpindex
pgs/
test.html
2) Я создал справочный Info.plist, как указано в документации Apple. Включенный в Info.plist, я установил CFBundleIdentifier
в com.company.app_name.help
,
3) В моем приложении Info.plist я установил CFBundleHelpBookFolder
в AppName.help
и установить CFBundleHelpBookName
в com.company.app_name.help
4) Затем я скопировал каталог, который я встроил в XCode, убедившись, что я выбрал опцию " Создать ссылки на папки для всех добавленных папок".
5) Затем я использовал Help Indexer для индексации каталога AppName.help
, Удостоверившись, что я выбрал опцию Индексировать информацию привязки во всех файлах. Затем я скопировал файл.helpindex в папку English.lproj, где он должен быть.
Вот и все. Есть несколько вещей, которые я заметил в своем приложении, если я поместил следующую ссылку в файл index.html, он работает правильно.
<a href="pgs/test.html">Click this link</a>
Также вот мой код для index.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>AppName Help</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex" />
<meta name="AppleTitle" content="AppName Help" />
<meta name="AppleIcon" content="../shrd/icon.png" />
</head>
<body>
<a href="help:anchor=support bookID=com.company.app_name.help">Link to another page</a>
</body>
Вот код для test.html.
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Testing Links</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="anchors" />
</head>
<body>
<a name="support"></a>Does linking work?<br/>
</body>
</html>
Вот Info.plist для моего файла справки.
<?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>CFBundleDevelopmentRegion</key>
<string>en_us</string>
<key>CFBundleIdentifier</key>
<string>com.company.app_name.help</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>AppName</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>2</string>
<key>CFBundleSignature</key>
<string>hbwr</string>
<key>CFBundleVersion</key>
<string>2</string>
<key>CFBundleHelpBookName</key>
<string>AppName Help</string>
<key>HPDBookAccessPath</key>
<string>index.html</string>
<key>HPDBookIconPath</key>
<string>shrd/icon.png</string>
<key>HPDBookIndexPath</key>
<string>search.helpindex</string>
<key>HPDBookKBProduct</key>
<string>app_name1</string>
<key>HPDBookKBURL</key>
<string>http://www.company.com</string>
<key>HPDBookRemoteURL</key>
<string>http://www.company.com</string>
<key>HPDBookTitle</key>
<string>AppName Help</string>
<key>HPDBookType</key>
<string>3</string>
</dict>
</plist>
Кроме того, я следил за этим постом: http://www.cocoabuilder.com/archive/cocoa/312037-updating-an-app-help.html чтобы очистить кэш каждый раз, когда я делаю изменения в дополнение к повторной индексации каталога,
Спасибо всем!
2 ответа
Конечно Дэвид, спасибо за напоминание.
Из того, что я помню, и из моей небрежной документации я запускаю следующую команду для индексации файлов справочной документации:
hiutil -vCaf ./search.helpindex English.lproj
Однако я понял, что утилита индекса будет жаловаться каждый раз, когда
символ используется. Вместо этого заменить персонажа  
Я думаю, что это была ошибка в моем случае.
Если все правильно и все еще, если помощь не работает, используйте код ниже. Не уверен насчет проблем безопасности, возможно, вам придется изучить возможность удаления файлов из приложения. Иногда приложение при обновлении не обновляет файлы справки и отображает кэшированную копию более старого файла справки, который не содержит новых привязок. Следовательно, приведенный ниже код очищает кэш справки. Также есть еще один более чистый метод, при котором вы увеличиваете версию сборки файла справки в Info.plist, который находится внутри пакета справки, а не в списке сведений о приложении. Эти поля являются CFBundleShortVersionString CFBundleVersion
-(void)clearCacheHelp {
NSArray *arguments1 = [NSArray arrayWithObjects:@"helpd",nil];
NSTask * list1 = [[NSTask alloc] init];
[list1 setLaunchPath:@"/usr/bin/killall"];
[list1 setArguments:arguments1];
NSPipe * out1 = [NSPipe pipe];
[list1 setStandardOutput:out1];
[list1 launch];
[list1 waitUntilExit];
NSString *home = [self homeDirectory];
home = [home stringByAppendingPathComponent:@"Library/Caches/com.apple.helpd"];
NSArray *arguments = [NSArray arrayWithObjects:@"-rf",home,nil];
NSTask * list = [[NSTask alloc] init];
[list setLaunchPath:@"/bin/rm"];
[list setArguments:arguments];
NSPipe * out = [NSPipe pipe];
[list setStandardOutput:out];
[list launch];
[list waitUntilExit];
NSString *home2 = [self homeDirectory];
home2 = [home2 stringByAppendingPathComponent:@"Library/Caches/com.apple.helpviewer"];
NSArray *arguments2 = [NSArray arrayWithObjects:@"-rf",home2,nil];
NSTask * list2 = [[NSTask alloc] init];
[list2 setLaunchPath:@"/bin/rm"];
[list2 setArguments:arguments2];
NSPipe * out2 = [NSPipe pipe];
[list2 setStandardOutput:out2];
[list2 launch];
[list2 waitUntilExit];
NSArray *arguments3 = [NSArray arrayWithObjects:@"-rf",@"~/Library/Caches/com.apple.helpd",nil];
NSTask * list3 = [[NSTask alloc] init];
[list3 setLaunchPath:@"/bin/rm"];
[list3 setArguments:arguments3];
NSPipe * out3 = [NSPipe pipe];
[list3 setStandardOutput:out3];
[list3 launch];
[list3 waitUntilExit];
NSArray *arguments4 = [NSArray arrayWithObjects:@"-rf",@"~/Library/Caches/com.apple.helpviewer",nil];
NSTask * list4 = [[NSTask alloc] init];
[list4 setLaunchPath:@"/bin/rm"];
[list4 setArguments:arguments4];
NSPipe * out4 = [NSPipe pipe];
[list4 setStandardOutput:out4];
[list4 launch];
[list4 waitUntilExit];
}