[RESOLU] Création des fichiers pour l'Aide

iLandesiLandes Membre
juin 2011 modifié dans Apple Developer Programs #1
Bonjour,

Je suis à  la recherche d'informations pour créer l'Aide de mon application.

D'avance, merci de votre aide.

Cordialement

Réponses

  • AliGatorAliGator Membre, Modérateur
    04:57 modifié #2
  • iLandesiLandes Membre
    04:57 modifié #3
    merci j'ai bien entendu fais cette recherche sur gg avant de poster. je cherche une explication moins confuse que celle proposée par apple
  • AliGatorAliGator Membre, Modérateur
    04:57 modifié #4
    Heu y'a pas plus clair et complet que la doc Apple. ???
  • tabliertablier Membre
    mai 2011 modifié #5
    Depuis 10.5, je ne m'embête pas avec des "Help Bundle", je fais comme le permet Apple dans sa documentation. J'ouvre directement les fichiers html avec le "Help Viewer":
    [[NSWorkspace sharedWorkspace] openFile:@chemin/fichier.html withApplication:@Help Viewer]
    Il faut juste changer le chemin du fichier.html suivant la langue, se souvenir que sous 10.5 l'application se nomme "HelpViewer" et sous 10.6 "Help Viewer".
    A noter que le "Help Viewer" ne connait pas le javascript et est incapable d'utiliser des liens en "mailto:....". C'est un visualisateur de html que je trouve très réduit.

    Néanmoins je te conseille (comme Aligator) de lire la doc du "Help Manager".
  • HerveHerve Membre
    04:57 modifié #6
    En 3 lignes :

    - (IBAction) alAide : (id) sender{<br />	NSWorkspace *aideDemande = [NSWorkspace sharedWorkspace];<br />	NSBundle *thisBundle = [NSBundle bundleForClass:[self class]];<br />	[aideDemande openFile:[thisBundle pathForResource:NSLocalizedString(@&quot;FICHIER_AIDE&quot;, @&quot;&quot;) ofType:@&quot;pdf&quot;]];<br />}
    


    les "FICHIERS_AIDE" en question étant des pdf de plusieurs pages, la notice (une en anglais, une en français, d'où le NSLocalizedSrtring)

    Connexion du menu dans IB bien sûr...
  • iLandesiLandes Membre
    04:57 modifié #7
    Merci pour vos réponses qui m'ont permis de réaliser simplement une aide minimale (une page html) mais tout de même localisable. Pour conclure le sujet voici le code que j'ai choisi d'implémenter (un petit mix de vos suggestions) :
    -(IBAction) openHelpFile:(id)sender<br />{<br />&nbsp; &nbsp; //Open Help viewer with localized help.html file<br />&nbsp; &nbsp; NSBundle *myBundle = [NSBundle mainBundle] ;<br />&nbsp; &nbsp; NSString *myHelpFileURL = [myBundle pathForResource:NSLocalizedString(@&quot;HELP_FILE&quot;, @&quot;&quot;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  ofType:@&quot;html&quot;];<br />&nbsp; &nbsp; [[NSWorkspace sharedWorkspace] openFile:myHelpFileURL withApplication:@&quot;HelpViewer&quot;];<br />&nbsp; <br />}<br />
    


    Le fichier Localizable.strings situé dans le répertoire en.lproj (anglais/défaut) contient le code suivant :
    &quot;HELP_FILE&quot; = &quot;help&quot;;
    


    Le fichier Localizable.strings situé dans le répertoire French.lproj (français) contient le code suivant :
    &quot;HELP_FILE&quot; = &quot;helpFR&quot;;
    


    Mes fichiers d'aide se trouvent à  la racine de mon projet. Ils se nomment help.html (anglais/défaut) et helpFR.html (français).

    Une dernière remarque :
    dans 1306071095:
    Il faut juste changer le chemin du fichier.html suivant la langue, se souvenir que sous 10.5 l'application se nomme "HelpViewer" et sous 10.6 "Help Viewer".


    Je suis sous 10.6.7 et j'utilise "HelpViewer" et non pas "Help Viewer". Est-ce un petit bug de  tablier ou cela vient-il de la configuration de mon mac ?

    Merci beaucoup pour vos réponses.
    Cordialement

    s
    e
    b
  • AliGatorAliGator Membre, Modérateur
    04:57 modifié #8
    Pourquoi mettre les fichiers d'aide tous à  la racine, et utiliser NSLocalizedString pour changer le nom du fichier à  charger suivant la langue ? Pourquoi ne pas directement mettre les fichiers d'aide dans les dossiers .lproj ?!
  • iLandesiLandes Membre
    juin 2011 modifié #9
    C'est vrai tu as raison. J'avais dans l'intention de rédiger un tuto la dessus mais tu viens de remettre en cause un partie de ce dernier

    Le tuto en chantier est là  http://ressources.mediabox.fr/tutoriaux/apple/helpviewer

    Mais du coup je ne sais pas comment retrouver l'url du fichier dans le dossier .lproj

    Je cherche
  • tabliertablier Membre
    04:57 modifié #10
    Ma solution n'est probablement pas la meilleure, mais elle marche bien.
    Tout les dossiers d'aide portent le même nom. Chacun est mis dans le dossier .lproj de la langue correspondante.
    le dossier "Aide" Anglais dans le dossier "English.lproj"
    le dossier "Aide" Français dans le dossier "French.lproj"
    .....  etc.
    Dans les dossiers.lproj ce trouvent également les fichiers Localized.strings.
    Dans "English.lproj" le fichier Localized.strings contient:  "aideHelp" = "English.lproj/Aide/index.html"
    Dans "French.lproj" le fichier Localized.strings contient:  "aideHelp" = "French.lproj/Aide/index.html"
    .....  etc

    L'appel de l'aide se fait suivant le principe ci-dessous:
    NSSring *toCal l =  [[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:<br /> [[NSBundle mainBundle] localizedStringForKey:@&quot;aideHelp&quot; value:@&quot;&quot; table:@&quot;Localized&quot; ;

    if ([[NSWorkspace sharedWorkspace] fullPathForApplication:@HelpViewer] != nil)
    { [[NSWorkspace sharedWorkspace] openFile:toCal l withApplication:@HelpViewer] ; }
    else if ([[NSWorkspace sharedWorkspace] fullPathForApplication:@Help Viewer] != nil)
    { [[NSWorkspace sharedWorkspace] openFile:toCal l withApplication:@Help Viewer] ; }
    else
    [[NSWorkspace sharedWorkspace] openFile:toCal l] ;
    Rien de transcendant! ça ouvre l'aide dans le bon viewer et en cas d'absence de viewer, ça ouvre l'aide dans le browser html par défaut.
  • AliGatorAliGator Membre, Modérateur
    04:57 modifié #11
    Mais je comprend toujours pas pourquoi vous passez par NSLocalizedString (ou localizedStringForKey:value:table:, c'est pareil) alors que [tt]- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension[/tt] fait déjà  tout pour vous et va chercher dans le bon lproj au besoin !!
    Nul besoin d'avoir une chaà®ne dans le Localized.strings ou quoi que ce soit, ni d'utiliser NSLocalizedString !

    The method first looks for a matching resource file in the non-localized resource directory of the specified bundle. (In Mac OS X, this directory is typically called Resources but in iOS, it is the main bundle directory.) If a matching resource file is not found, it then looks in the top level of any available language-specific “.lproj” directories. (The search order for the language-specific directories corresponds to the user's preferences.) It does not recurse through other subdirectories at any of these locations. For more details see Internationalization Programming Topics.


    Vous cherchez vraiment à  vous compliquez la vie en fait, non ? ^^
  • iLandesiLandes Membre
    04:57 modifié #12
    Désolé mais chez moi la fonction renvoi (null) ou que je place mes fichier index.html.

    Voici le code que j'ai essayé avec myBundle et thisBundle

    <br />NSBundle *myBundle = [NSBundle mainBundle] ;<br />NSBundle *thisBundle = [NSBundle bundleForClass:[self class]] ;<br />NSString *myHelpFileURL = [thisBundle pathForResource:@&quot;index&quot; ofType:@&quot;html&quot;] ;<br />NSLog(@&quot;url : %@&quot;,myHelpFileURL) ;<br />
    


    Tu peux être plus précis stp ?
  • tabliertablier Membre
    04:57 modifié #13
      ???  J'ai simplement la comprennette un peu lente. Vu ton observation, je vais modifier ça!
    Ah oui, je sais pourquoi j'ai fait comme ça. L'index est dans un dossier, pas directement dans le dossier .lproj et j'avais l'impression que la ressource à  trouver devait être au premier niveau du dossier .lproj. D'autre part, j'ai un cas ou j'ai deux dossiers d'aide par langue, tout deux dans le dossier lproj adéquat, et tout deux avec un fichier index.html comme point d'entrée.
  • iLandesiLandes Membre
    04:57 modifié #14
    Si on suit le raisonement d'AliGator pour toi il y a

    + (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)bundlePath<br />
    

    Mais chez moi ça ne marche pas, y a un bug....
  • tabliertablier Membre
    juin 2011 modifié #15
    Grillé par seb@tien!!!
    Bon ça marche chez moi sans passer par la localisation. J'ai modifié comme cela:
    NSString *toCall = [[NSBundle mainBundle] pathForResource:@index ofType:@html inDirectory:@Aide] ;

      if (![[NSWorkspace sharedWorkspace] openFile:toCall withApplication:@HelpViewer]l)
          if (![[NSWorkspace sharedWorkspace] openFile:toCall withApplication:@Help Viewer])
                [[NSWorkspace sharedWorkspace] openFile:toCall] ;
        :P  Je pense que cela plaira mieux à  AliGator.
  • iLandesiLandes Membre
    04:57 modifié #16
    xd chez moi ça ne marche pas toCall = (null)

  • tabliertablier Membre
    juin 2011 modifié #17
    Je compile avec le SDK (rien à  voir avec DSK!!) 10.5 et pas le 10.6.  Serait-ce le problème?
  • iLandesiLandes Membre
    04:57 modifié #18
    J'ai compilé avec 10.5 et j'ai le même résultat.

    Je suis sur xcode 4.0.2 avec le code suivant :
    &nbsp; NSString *toCall = [[NSBundle mainBundle] pathForResource:@&quot;index&quot; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  ofType:@&quot;html&quot; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inDirectory:@&quot;Aide&quot;] ;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; if (![[NSWorkspace sharedWorkspace] openFile:toCall withApplication:@&quot;HelpViewer&quot;])<br />&nbsp; &nbsp; &nbsp; &nbsp; if (![[NSWorkspace sharedWorkspace] openFile:toCall withApplication:@&quot;Help Viewer&quot;])<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[NSWorkspace sharedWorkspace] openFile:toCall] ;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; <br />&nbsp; &nbsp; NSLog(@&quot;url : %@&quot;,toCall) ;<br />
    


    Le log renvois (null) et HelpViewer s'affiche avec une page par défaut (aide générale sur le mac)

    Je laisse tomber le tuto pour le moment jusqu'à  trouver une solution correcte...

    Je sèche...
  • tabliertablier Membre
    04:57 modifié #19
    Juste pour essai: j'ai le 4.02 sur un disque externe bootable. Je vais essayer de faire un exemple sur ce இ¤@%♂༂� de machin mono-fenêtre.
  • Eddy58Eddy58 Membre
    04:57 modifié #20
    Et en retirant le paramètre inDirectory ça donne quoi ?

    &nbsp; NSString *toCall = [[NSBundle mainBundle] pathForResource:@&quot;index&quot; ofType:@&quot;html&quot;];
    

  • iLandesiLandes Membre
    04:57 modifié #21
    Même résultat.

    En espérant que la nuit porte conseil...

  • AliGatorAliGator Membre, Modérateur
    04:57 modifié #22
    Essaye de faire un clean de ton projet, voire mieux encore, supprime tout ton dossier de build (qui se trouve, par défaut, dans un dossier "build" à  côté du projet pour Xcode3, et qqpart dans ~/Library/Developer/.../DerivedData/..." pour des projets Xcode 4) pour supprimer tous les fichiers temporaires et le ".app" généré, et recompile ton projet de zéro.

    Car si ça ne marche pas, je présage que c'est parce qu'il trouve ton fichier "index.html" à  la racine des ressources de ton appli compilée, et même s'il y en a aussi un dans chaque fichier .lproj, bah comme l'indique la doc de "pathForResource:ofType:" dès qu'il y en a un à  la racine du dossier Resources il va pas chercher dans les .lproj !
    Donc il faut t'assurer que tu n'as pas un "index.html" qui traine à  la racine de tes "Resources", en plus de ceux que tu aurais mis dans chacun de tes .lproj.
  • iLandesiLandes Membre
    04:57 modifié #23
    J'ai essayé mais rien n'y fait.

    Afin d'être sûr que tout soit cleanné je suis reparti d'un projet neuf sous Xcode3 et sous Xcode4 rien n'y fait...

    Mon erreur doit être plus évidente mais je ne la vois pas. Je joints les deux projets sous les deux versions d'Xcode afin que vous puissiez voir si chez vous cela fonctionne.

    D'avance merci à  ceux qui pourront m'aider

    Cordialement

    Dans ce message le projet sous xCode 4
  • tabliertablier Membre
    04:57 modifié #24
    Tu as juste oublié de mettre le fichier html dans le projet Xcode. Je l'ai ajouté dans les "supporting files" et ça marche (compilé sous 3.2.6). Je te renvoie le projet modifié.
  • iLandesiLandes Membre
    04:57 modifié #25
    :D

    Merci à  tous ça marche. J'ai encore du mal dans xCode4 à  penser à  intégrer les fichiers. Je me sers trop souvent du Finder. J'aurais pu y penser car j'ai déjà  bugger avec une fichier png pour les mêmes raisons.

    Un grand merci à  tous.

    :p
  • iLandesiLandes Membre
    04:57 modifié #26
    Comme prévu pour remercier la communauté j'ai écris mon premier tutoriel sur le site. Il porte bien sur sur la création d'un système d'aide simple et localisé.

    Mon gros problème étant l'orthographe, surtout lorsque je réfléchis trop à  se que j'écris ; j'ai laissé la balise En Chantier dans le tuto.

    Le tuto étant en wiki, merci à  ceux qui pourront le relire et l'améliorer

    Voici l'adresse : http://ressources.mediabox.fr/tutoriaux/apple/helpviewer
Connectez-vous ou Inscrivez-vous pour répondre.