CLJ et Cordova
::
Salut,
Pour une application tournant sur Cordova 2.5 j'ai besoin de récupérer les logs dans un fichier pour les réceptionner côté serveur.
J'utilise CLJ pour les mettre dans un fichier, j'ai donc écrasé la def de NSLog pour qu'ils soit redirect sur DDLogVerbose.
#define NSLog DDLogVerbose
Les logs xcode sont bien détectés et mis dans le fichier, mais les logs issue de :
Cordova/CDVDebugConsole.m
N'apparaissent pas, le NSLog dans ce fichier n'est donc pas redirigé par le define.
Je précise que je passe par cocoapods pour l'utilisation de mes libs.
Si quelqu'un pouvait me donner une piste parce que là je sèche total...
Merci!
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si c'est dans le pch de ton projet, cela n'affectera que les fichiers qui sont dans ton projet.
Or si jamais tu utilises CocoaPods pour importer la dépendance de Cordova, Cordova et ses sources seront inclus dans le Pods.xcodeproj et pas dans TonApp.xcodeproj et donc ton #define n'aura pas d'effet dessus.
Et c'est normal, quand tu utilises des Pods tu n'es pas sensé modifier les sources des pods que tu inclus, le but c'est que ce soit des libs indépendantes et que tu ne risques pas de les casser en mettant tes propres macros dans ton code (sinon imagine tu faisais un "#define UnNomDeClasseDUneLibTierce pouet" ça casserait complètement la lib tierce...)
Tu peux toujours rajouter "NSLog=DDLogVerbose" dans le Build Setting "Preprocessor Macro Definitions" du projet dans lequel est inclus tes sources Cordova, mais si c'est le Pods.xcodeproj il sera écrasé lors de ton prochain "pod update"...
::
Mmh je me doutais bien que les lib cocoapods étaient encapsulées.
Je vais utiliser ta technique dans le Build setting.
Merci!
::
Salut,
Après incorporation de la macro je récupère des erreurs sur chaque NSLog :
`NSLog(@..., error.domain, error.error);` -> Use of underclared identifier '_cmd'; did you mean 'rcmd'?
Je ne vois pas trop comment résoudre le problème. j'ai défini dans le `pods-prefix.pch` le ddLogLevel à LOG_LEVEL_VERBOSE
Si quelqu'un à une idée
Merci!
Pour faire des logs dans une fonction C, CLJ propose les macros DDLogCError/DDLogCWarn/... " qui elles utilisent __PRETTY_FUNCTION__ pour savoir dans quelle fonction C tu es (plutôt que _cmd pour savoir dans méthode ObjC tu es)
::
SAlut,
Mais du coup comment parametrer mon Pod pour qu'il utilise DDLogCVerbose et pas DDLogVerbose?
DDLogVerbose et DDLogCVerbose sont 2 macros définies par CLJ.
Ce ne sont pas des pods, ce sont des macros. Quand tu récupères le Pod de CLJ et donc tout le code qui va avec, ça te permet de profiter de la lib et donc entre autres d'utiliser les macros DDLogVerbose et DDLogCVerbose & co dans ton code quand tu as besoin de les appeler, c'est tout.
A toi d'appeler la bonne macro selon le contexte, si tu écris une fonction C et qu'à un moment donné tu veux faire des logs tu écriras DDLogCVerbose(@ton message), et si tu écris une méthode Objective-C et que tu veux faire des logs tu utiliseras DDLogVerbose(@ton message)
Après bien-sûr si tu remplaces aveuglément tous tes NSLog par des DDLogVerbose, déjà je ne vois pas trop l'intérêt d'être passé à CLJ car si tu mets tous tes logs en Verbose plutôt que de ventiler au cas par cas en DDLogVerbose/DDLogError/DDLogWarning/DDLogInfo ça perd de son intérêt, mais en plus les NSLogs qui étaient dans des méthodes et ceux qui étaient dans des fonctions ne doivent pas être remplacés par la même macro.
::
Je passe par CLJ pour profiter de ses avantages dans mes propres class, mais j'ai besoin de récupèrer les logs de cordova (dont le NSLog est contenu dans son pod), je souhaites donc rediriger les NSLogs issue des pods vers DDLog pour pouvoir les stocker dans un fichier.
Le remplacement des NSLog par DDLogVerbose via macro pose problème. Je ne vois pas comment définir la macro pour DDLogCVerbose.
Je ne sais pas si tu vois de quoi je parle
Là il n'y a pas de règle miracle puisque normalement il faut utiliser DDLogVerbose ou DDLogCVerbose selon le contexte... Bon tu peux toujours tricher, faire une macro un peu plus complexe qui regarde si tu es dans une méthode ou une fonction et appelle l'une ou l'autre selon le cas, mais ça va commencer à être compliqué... Du coup je suis même pas sûr que ça soit possible...
::
Oui c'est exactement ça...
Je sens que je ne vais pas pouvoir en effet...
Je vais devoir redirigé les console.log javascript vers une de mes class pour pouvoir les log correctement
::
Cool je viens enfin de réussir à bien récupérer les logs. Il reste encore quelques problèmes d'encodage de retour chariot mais bon... je vais pas trop chipoter...