Nom de Classes en double après l'intégration d'un Framework

Bonjour à  tous,


 


Je suis en train de développer une application avec des classes qui représentent mon modèle et qui sont appelé un peu partout (i.e Event, User ...)


 


On voulais installer hier un Framework, Splunk Mint, pour le monitoring de l'application. Comme par hazard, le Framework contient des classes Event, User ... et pour le coup xCode considère ça comme une redéfinition ...


 


Y a t'il une solution pour contourner ce genre d'erreur ?


 


Merci d'avance 


Réponses

  • Hello,


     


    Oui y a une solution à  ça : c'est le conventions de hommage Apple. Il faut rajouter des prefix au noms de tes classes pour éviter les conflits avec les autres Frameworks.


     


    ALIEvent, ALIUser ( bon met pas Ali :)


     


    https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingBasics.html#//apple_ref/doc/uid/20001281-BBCHBFAH


  • Ouaip, Merci Samir. 


     


    Bizarrement, le mec qui a fait tout le modèle, n'a pas utilisé des préfixes !!!!


     


    Je vais devoir les changer dans ce cas ! et ça va piquer au yeux :/


     


    Merci et bonne soirée


  • CéroceCéroce Membre, Modérateur
    Je me marre... les gars pondent des Frameworks et ils sont même pas au courant qu'il faut préfixer les classes. Bon, j'imagine que tu n'as pas le choix, mais vu comme c'est gros, j'irais même pas plus loin et je mettrais Splunk Mint à  la poubelle. (En plus, ce n'est pas les concurrents qui manquent).

    Juste pour préciser: ne pas préfixer les classes de ton propre projet n'est pas forcément mal. C'est seulement mal quand le code est destiné à  être intégré dans d'autres applis.
  • AliGatorAliGator Membre, Modérateur
    octobre 2014 modifié #5
    Je plussoie les remarques de Céroce.

    Moi un framework qui (1) n'est pas en CocoaPods " pour éviter d'avoir des "duplicate symbols" au cas où plusieurs frameworks se basent sur une même librairie commune, genre 2 frameworks qui utilisent tous les deux AFNetworking et surtout qui (2) ne préfixe pas ses classes, moi c'est poubelle direct.

    Ca laisse en + de toute façon présager que les gars qui ont fait le framework sont un peu des branques, qui ne sont pas assez carrés et font pas un truc propre, et osent qd mm le publier... donc s'ils ont fait ça, ça laisse présager que le framework lui-même est sans doute mal foutu aussi, voire sans doute bugué (il a pas dû être très testé !)...
  • CéroceCéroce Membre, Modérateur
    octobre 2014 modifié #6
    On s'est compris avec AliGator, il faut mettre le Framework à  la poubelle, non pas par idéologie, mais parce que c'est l'arbre qui cache la forêt: il va y avoir beaucoup de soucis par la suite.
  • Pour changer le nom d'une classe, il faut utiliser les fonctions de refactorisation de xCode, ça va déjà  bien dégrossir le boulot, voire le faire complètement dans les cas simples.


  • LarmeLarme Membre
    mars 2016 modifié #8

    Je remonte ce vieux topic.


     


    Je risque d'être confronté à  ce soucis.


    Je suis en train de créer quelques pods privés, et malheureusement, j'ai bien peur d'avoir à  faire à  des duplicates symbols. Je m'y suis heurté quand j'ai commencé à  jouer avec sur des projets de tests, mais renommer une classe était facile.


    Mon but est de transformer en pods diverses parties " intéressantes " de différentes applications déjà  existantes, tout en permettant de continuer de suivre leurs évolutions au besoin.


    Alors, mes classes sont préfixées, mais avec le même préfixe (même boà®te), et du coup, avec le même nom au final.


     


    J'ai pas tout suivi le truc des namespaces, etc, mais est-ce que soucis a été résolu avec les nouvelles versions de CocoaPods, auquel cas je devrais rajouter un paramètre quelque part dans mon podspec peut-être ?


     


    Une autre piste serait peut-être à  regarder du côté de post_install, et de renommer mes classes de Pods en rajoutant un préfixe, ou un truc du genre, j'ai pas encore tout suivi.


  • CéroceCéroce Membre, Modérateur
    Ce n'est pas un problème de CocoaPods, c'est un problème d'Objective-C, qui " tout comme le langage C " n'a pas de namespaces.

    C'est assez simple en fait: au sein d'une même target, on ne peut pas avoir deux symboles globaux qui s'appellent pareil. J'entends par symbole: types, classes, fonctions, constantes. Sinon, le linker ne sait pas les distinguer.

    C'est pour cela que toutes les classes d'Apple sont préfixées différemment selon la framework qui les contient. Apple se réserve tous les préfixes à  2 lettres, mais même avec 3 lettres, on n'est pas forcément tranquille (hein SCN pour SceneKit...).

    Donc, les solutions sont de renommer ou d'utiliser Swift.


  • Ce n'est pas un problème de CocoaPods, c'est un problème d'Objective-C, qui " tout comme le langage C " n'a pas de namespaces.


    C'est assez simple en fait: au sein d'une même target, on ne peut pas avoir deux symboles globaux qui s'appellent pareil. J'entends par symbole: types, classes, fonctions, constantes. Sinon, le linker ne sait pas les distinguer.


    C'est pour cela que toutes les classes d'Apple sont préfixées différemment selon la framework qui les contient. Apple se réserve tous les préfixes à  2 lettres, mais même avec 3 lettres, on n'est pas forcément tranquille (hein SCN pour SceneKit...).


    Donc, les solutions sont de renommer ou d'utiliser Swift.




     


    Quand j'entendais " problème CocoaPods ", je me demandais si un workaround avait été effectué, un genre de renommage en mettant ses propres préfixes devant les classes (par exemple, c'est vrai que j'avais zappe les fonctions, constantes, etc.)


     


     


    ça va être parti pour le renommage alors :/

Connectez-vous ou Inscrivez-vous pour répondre.