# De la qualité du support pour développeurs (DTS) chez Apple



## Lio70 (3 Février 2016)

Bonsoir,

Certains d'entre vous ont-ils deja fait appel au DTS pour un problème avec leur projet Xcode ?
J'ai l'impression qu'il y a la-bas un nombre croissant de guignols.

1. Je développe depuis quelques années mais en 2013 je n'en sortais pas avec ma premiere utilisation d'EventKit sur OSX. Apres m'être arrache les cheveux pendant des semaines, j'ai fait appel pour la premiere fois de ma vie au DTS.

Reponse: le bonhomme me renvoie mon code corrige, impeccable, en spécifiant deux manières de faire mon truc, dont aucune ne correspondait aux exemples de la doc Apple ni de la session WWDC. Faut dire qu'Apple venait de remplacer CalendarStore par le nouveau EventKit cree a l'origine pour iOS et qui comportait encore des lacunes. Au passage, il m'égratigne un peu dans les commentaires qu'il ajoute a mon code pour un truc d’importance secondaire: "Beaucoup de blabla pour rien" .

Le bonhomme donne meme son numero de telephone dans la réponse, et on peut l'appeler pour discuter de la solution. Wow, support impeccable. Je le cherche dans Google et trouve qu'il est chez Apple au moins depuis les années 90, voire meme 80, un peu hippie et un drapeau a tete de mort sur son mur. Bref, du bon vieux Apple.

2. Rencontrant un nouveau problème avec EventKit depuis le passage a El Capitan, je recontacte DTS il y a un mois. Une fille, cette fois, genre blabla aseptise politiquement correct: "Merci d'avoir envoye ton projet qui montre effectivement le problème que tu as décrit". (ah bon, j’utiliserais donc mes requêtes DTS payantes pour exposer un problème que je n’ai pas ?! )

Sa premiere réponse me dit que j'ai oublie d'utiliser une méthode et qu'une deuxième est deprecated.
Manque de pot pour elle: la premiere méthode est pour iOS mais pas pour OSX. Quant a la méthode deprecated, je ne l'utilise pas dans mon projet donc j’ignore pourquoi elle en parle. J'en déduis qu'elle est allée lire la doc d'EventKit pour iOS et a recopie ce qu'elle a cru se trouver dans mon projet. Hum. Et puis, "elle me recontactera pour la suite"...

Apres deux semaines, j'écris pour demander ce qu'il en est. Elle me répond qu'elle creuse toujours dans mon code. Ca sent le "j'y pige que dalle et j'attends que mon collègue competent rentre de vacances". Apres trois semaines (en tout) je reçois la réponse finale. C'était plutôt une connerie due a ma distraction mais passons, le truc fonctionne enfin et je lui réponds pour dire merci.

3. Toujours ce mois de janvier, vu que mon abonnement Dev arrive a expiration et que j’ai encore une requête DTS a utiliser, je me dit pourquoi pas, car j'ai un problème de Core Data et je suis assez pris par le temps, donc autant refiler la patate. Je fais du Core Data depuis 5 ans mais ici, c'est assez sophistique et je ne vois pas ce qui cloche.

Un chinois me répond: "Voila ce qui ne va pas:.........." en recopiant ce qui était écrit dans le message d'erreur visible sur la capture d'écran que je lui avais envoyee.
C'est gentil mais je sais lire. Si je te l'envoie, c'est que, meme en retournant le truc dans tous les sens, je n'arrive pas a le régler.
Reponse suivante: c’est typiquement une erreur se produisant quant on utilise deux managed object contexts et qu’on tente de mettre a jour un objet qui se trouve dans l’un a partir de la valeur d’un autre objet qui se trouve dans l’autre context.
Manque de pot, mon app n’utilise qu’un seul contexte. tu l’aurais vu si tu avais ouvert le projet joint, “contenant le code et l’API illustrant le problème” pour reprendre les mots de la procedure DTS.

Le bonhomme m’oriente vers la doc Apple et un exemple en particulier. Super. c’est un exemple pour iOS avec une entity contenant des attributs de type string et date, alors que j’ai un problème avec un projet OSX contenant deux entités en relation parent/child, avec un problème resultant d’operations sur des decimalnumber dans les deux entities. Je veux bien, mais c’est un peu court pour comprendre comment appliquer la théorie a mon projet.

Je supprime un truc dans un fichier, selon les instructions du bonhomme. Mon problème ne se produit plus, mais il en cree un autre, incomprehensible car sans plantage donc sans message d’erreur.
Le bonhomme me répond alors de faire un truc. Je le fais, et ca plante l’application. Je lui envoie mon projet modifie.
Il me répond que le role de DTS n’est pas de régler des problèmes de code ou de faire du debuggage, me dit que ca ne sert a rien d’ouvrir mon projet et d’analyser mon code, et me renvoie a nouveau vers l’exemple obscur de la doc, et son code a telecharger (qui, par ailleurs, contient des warnings  ).

Bon, que fait-on avec un connard pareil, a part prendre le premier avion pour Cupertino et le flinguer au 44 magnum?

Et vous, vos requêtes auprès de DTS, ca donne quoi?


----------



## Mboum (6 Février 2016)

Lio70 a dit:


> ...



Bonjour,

le DTS, cela fait longtemps que je ne l'ai plus utilisé, cela fonctionnait bien du coter noyau et IOKit pour ceux qui font du driver ; pour le reste les forums et listes sont fréquentés par des gens plus compétent que les clowns du support d'Apple.

Comme je l'avais dis dans une autre discussion, de plus en plus de Hipsters imbus d'eux même et incompétents mais avec un beau diplôme acheté par leurs parents qui se sont endettés ; ce qui les pousse dans cette désillusion : ils se pensent intelligents, alors qu'ils sont vide de tout et limités intellectuellement parlant et ceci les études n'y fixeront rien ; c'est de naissance.

Je devrais mettre publiquement la réponse d'un clown qui racontait n'importe quoi (il n'a même pas identifié la complexité du problème et/ou au moins essayé de demander autour de lui) alors que j'avais montré un énorme bug concernant le YALM parser de la version Apple de LLVM concernant le nom respect d'entités dans leurs contextes respectifs ; ce qui est une violation du standard C++ entre autre chose et source de bugs.

Donc j'ai été chez LLVM et bien sur ; ils ont confirmé... mais que cela n'importait que le fork Apple.

Pour le CoreData il n'est pas thread-safe ; essayer vous d'updater le contexte depuis deux threads différents?, il faut toujours updater dans le thread ou le contexte a été déclaré ; j'ai écris une class worker pour CoreData qui ne reçoit que des messages sur le même thread donc toutes les transactions restent ``ordered``.

Cordialement.


----------



## Lio70 (7 Février 2016)

Mboum a dit:


> Pour le CoreData il n'est pas thread-safe ; essayer vous d'updater le contexte depuis deux threads différents?, il faut toujours updater dans le thread ou le contexte a été déclaré


Je sais.

Le problème que je rencontre est bizarre. C'est une app de facturation que j'ai développée pour mon business avec Xcode 3.2 sous Snow Leopard, en 2010, et un peu modernisee depuis lors. Fonctionne avec une database SQLite et CoreData.

Pour faire simple: deux entities en relation parent/child To-Many.

1. Parent: contient le sous-total, le montant de la taxe et le total de la facture.
2. Child: chaque child correspond a un service vendu, ajoute a la facture. Comprend le prix unitaire, la quantité, discount éventuel (pourcentage) et le taux de taxe (pourcentage).

Donc dans le parent, le sous-total et le montant taxe sont calcules d'après addition des children.

Probleme:
Quand j'ajoute un child, le parent est updaté correctement.
Quand je modifie un child, idem.
Quand je supprime un child, le parent n'est pas updaté. Pourquoi ? Mystère. J'ai deux methodes addObject et removeObject pour le child, qui suivent la meme logique. Si le problème se produisait dans tous les cas (ajouter, modifier, supprimer), la cause serait plus claire.

A l'époque, j'ai réglé le problème en ajoutant une gestion KVO (startObserving, stopObserving...) mais ce n'est pas une bonne utilisation de KVO dans le cas de CoreData. La preuve, l'app se plante quand je supprime un parent (et ses children, par cascade). En réalité, le bug ne se manifeste pas car en pratique je ne supprime pas de facture. Néanmoins je sais que le bug existe donc j'ai quand meme envie de le régler, pour comprendre ce que j'ai mal fait au depart...


----------



## Mboum (9 Février 2016)

Bonjour,

pouvez-vous présenter le message? ne serait-ce pas un problème concernant les droits d'écriture? 

Cordialement.


----------



## Lio70 (9 Février 2016)

Mboum a dit:


> pouvez-vous présenter le message? ne serait-ce pas un problème concernant les droits d'écriture?


Bonjour, je vais créer une nouvelle discussion pour exposer cela puisque cette discussion-ci était prevue pour discuter du DTS.


----------

