mon application fait bugger tous les menus contextuels !

mai 2006 modifié dans API AppKit #1
Bonjour !

j'ai fait il y a quelques mois un petit preferencePane sympathique, qui update votre avatar iChat et/ou Adium avec la pochette du CD que vous écoutez dans iTunes iChartwork ( http://yreuxsoftware.com/files/iChartwork2.0.zip )... Il marche très bien, et je n'ai aucun problème particulier sauf un truc très bizarre :

mon preferencePane lance un démon (iChartworkDaemon), et dès que ce démon est lancé, tous les menus en rapport avec les préférences système (modifier le fond d'écran quand on fait control-clic sur le bureau par exemple) ne font plus rien du tout ! ils sont toujours là , mais rien ne se passe. Dès que mon démon est killé, que ce soit par le terminal ou quand je décoche la case dans mon preferencePane, tout revient dans l'ordre aussitôt !

Si quelqu'un a une idée lumineuse ?!  :( :P

Edit : Encore plus bizarre en fait ! mon démon est rendu invisible dans le Dock par :
&lt;key&gt;LSUIElement&lt;/key&gt;<br />&lt;string&gt;1&lt;/string&gt;

dans le info.plist (c'est ce qui fait que mon application est un démon en quelque sorte)

Quand j'enlève cette option, le démon devient donc une application comme un autre.

Et bien cela m'a permis de voir qu'en fait, lorsque iChartworkDaemon est lancé (en mode application, c'est à  dire visible dans le Dock etc..) les menus contextuels comme "Modifier le fond d'écran..." appellent iChartworkDaemon au lieu des preferences système !!

Réponses

  • Eddy58Eddy58 Membre
    04:48 modifié #2
    Problème curieux, peut-être lié à  un problème de gestion mémoire, mais sans code il est difficile d'aboutir à  une conclusion... :o
  • elfelf Membre
    04:48 modifié #3
    Je suis désolé, je ne pense pas pouvoire régler ton problème mais je juste que le terme "Helper" serais plus adapté que "Deamon", car ton appli est en fait un helper!
  • MathMath Membre
    04:48 modifié #4
    dans 1149174208:

    Je suis désolé, je ne pense pas pouvoire régler ton problème mais je juste que le terme "Helper" serais plus adapté que "Deamon", car ton appli est en fait un helper!


    Ca n'a rien à  voir avec le sujet (désolé) mais qu'elle est la différence entre un deamon et un helper ? (parce qu'en fait j'en sais rien)

    Merci.
  • elfelf Membre
    04:48 modifié #5
    Un Helper est une application invisible qui tourne en tache de fond, et qui aide une application principale à  faire quelque chose quand elle n'est pas ouverte. Dans son cas l'apllication principale c'est le PreferencePane et le Helper l'app qui regarde si on change de track iTunes. Un autre exemple est avec Pod2Go qui a un helper (Pod2GoHelper) qui check quand l'iPod est connecté pour ensuite faire la syncronisation et qui met un petit menu!

    Un deamon c'est un truc plus bas-niveau, je ne suis pas tout à  fait sur mais c'est aussi quelque chose qui tourne en tache de fond, mais ce n'est plus une simple app dans ce cas, mais déjà  un truc qui n'a pas d'app principale, et qui s'occupe d'autre type d'affaire. Ensuite, de quoi je ne suis pas trop sur mais je pense que un de nos pro (n'est-ca pas ali?) peut nous dire plus en détails ce que c'est!
  • MathMath Membre
    04:48 modifié #6
    dans 1149228329:

    Un Helper est une application invisible qui tourne en tache de fond, et qui aide une application principale à  faire quelque chose quand elle n'est pas ouverte. Dans son cas l'apllication principale c'est le PreferencePane et le Helper l'app qui regarde si on change de track iTunes. Un autre exemple est avec Pod2Go qui a un helper (Pod2GoHelper) qui check quand l'iPod est connecté pour ensuite faire la syncronisation et qui met un petit menu!

    Un deamon c'est un truc plus bas-niveau, je ne suis pas tout à  fait sur mais c'est aussi quelque chose qui tourne en tache de fond, mais ce n'est plus une simple app dans ce cas, mais déjà  un truc qui n'a pas d'app principale, et qui s'occupe d'autre type d'affaire. Ensuite, de quoi je ne suis pas trop sur mais je pense que un de nos pro (n'est-ca pas ali?) peut nous dire plus en détails ce que c'est!


    Merci  <3
  • 04:48 modifié #7
    vi donc justement, c'est pas un helper : iChartworkDaemon est l'appli qui gère les avatars, etc... C'est elle qui fait tout, le prefPane n'est là  que pour gérer les préférences de l'appli, et qui permet à  l'utilisateur de démarrer ou quitter iChartworkDaemon "proprement" (comprendre sans utilisation du terminal à  coup de killall -9 lol)

    Sinon je vais essayer de lancer le debugger et de voir à  partir de quand mon appli fait déconner les préfs systèmes ( dès que je rentre chez moi :P :P ), mais il me semble que j'avais déjà  essayé, et qu'en fait dès que l'appli est lancée, avant même que le moindre code soit éxécuté, le problème existe déjà ... Ce que je peux essayer c'est de créer une appli vierge avec le même nom juste, car si ça se trouve c'est un niveau plus bas que ça déconne,et le système croà®t qu'iChartworkDaemon sert de substitut aux préférences Système... Mais bon j'ai quelques doutes lol... Bref je suis un peu perdu... Personne n'a connu ce problème ??

    Pour résumer :

    Quand mon application ne tourne pas, tout marche correctement dans le Système.
    Quand mon application run, tous les menus contextuels du système comme "Modifier le fond d'écran..." appellent mon application (iChartworkDaemon) au lieu des Préférences Système.

    :why?:
  • elfelf Membre
    04:48 modifié #8
    Ton application est un helper:

    Définition de wikipedia d'un daemon:
    Les démons sont souvent démarrés lors du chargement du système d'exploitation, et servent en général à  répondre à  des requêtes du réseau, à  l'activité du matériel ou à  d'autres programmes en exécutant certaines tâches. Sur Microsoft Windows, ces fonctions sont exécutées par des programmes appelés " services ", même si le terme " démon " semble de plus en plus utilisé.
    D'un côté strictement technique, un démon sur un système Unix ou unix-compatible peut être n'importe quel processus qui a le processus numéro 1 comme parent (init). Tout processus dont le parent meurt sans attendre le statut de son processus enfant est adopté par init. Une façon commune de lancer un démon est donc de " fourcher " (fork) une ou deux fois et de faire arrêter le parent quand l'enfant commence ses opérations normales. Cette façon de faire est quelques fois résumée par la phrase fork off and die (" fourcher et mourir "). Dans l'usage commun, un démon peut être n'importe quel processus qui fonctionne en arrière-plan, peu importe qu'il soit ou non un enfant de init.


  • juin 2006 modifié #9
    Bon mon appli n'est pas un daemon... Elle répond pas non plus à  la définition de Helper que tu m'as donnée..

    bref c'est bien mignon tout ça mais ça m'aide pas vraiment.... ^^ :(

    Edit : Dans le truc que tu m'as donné : "Dans l'usage commun, un démon peut être n'importe quel processus qui fonctionne en arrière-plan, peu importe qu'il soit ou non un enfant de init."

    Enfin tout ça c'est du chipotage, mais ça m'aide pas à  résoudre mon problème...
  • 04:48 modifié #10
    Bon j'ai debuggé donc :

    Si je mets un breakpoint dans le main.m tout marche encore correctement.
    Mais avant même d'exécuter le moindre code (avant la méthode init etc) il bloque déjà  les préférences.. C'est une histoire de fou !
  • BruBru Membre
    04:48 modifié #11
    dans 1149166646:

    Problème curieux, peut-être lié à  un problème de gestion mémoire, mais sans code il est difficile d'aboutir à  une conclusion... :o


    Comme toi Eddy,
    sans code, je ne peux pas dire grand'chose...

    .
  • juin 2006 modifié #12
    Bin je vois pas trop quoi vous donner comme code, sachant que le bug apparaà®t avant même que le init soit exécuté !

    Edit : ortho
  • Eddy58Eddy58 Membre
    juin 2006 modifié #13
    dans 1149325878:

    Bin je vois pas trop quoi vous donner comme code, sachant que le bug apparaà®t avant même que le init soit exécuté !

    Et si tu mets tout le code du projet en commentaire (sauf le main.m), ça fait quoi ? :o
  • 04:48 modifié #14
    la même chose ! c'est ça qui est dingue !
    Peut-être un nib corrompu ?! ... mouais... Vais essayer !
  • Eddy58Eddy58 Membre
    04:48 modifié #15
    En effet, tu dois sûrement avoir un ou plusieurs fichier(s) foireux dans ton projet, le mieux est de repartir d'un projet vierge, puis d'y transfèrer tes classes. Ensuite en laissant tout les réglages par défaut du projet, tu importes tes fichiers nib, et là  si ça foire encore en effet tu n'auras plus qu'a les refaire, ou a le refaire car il n'y en a peut-être qu'un seul de concerné. :crackboom:-
  • 04:48 modifié #16
    :( :( j'ai trouvé... C'est d'une bêtise !!

    En fait : iChartwork est un prefPane, donc ses préférences sont stockées dans com.apple.systempreferences
    du coup dans iChartworkDaemon, pusqu'il a besoin d'accéder aux préférences d'iChartwork, j'avais mis :
    <key>CFBundleIdentifier</key>
    <string>com.apple.systempreferences</string>

    Ce qui me permettait d'utiliser NSUserDefaultsController pour accéder aux préférences... Mais évidement, cela avait pour effet d'ouvrir iChartworkDaemon au lieu des préférences Système !
Connectez-vous ou Inscrivez-vous pour répondre.