2010-01-24 2 views
2

Comme vous le savez, il est courant d'inclure à la fois des versions de débogage et de publication des bibliothèques dans leurs SDK. Ma question est la suivante: existe-t-il une façon standard de procéder pour un framework Mac OS X en termes de distribution et éventuellement d'intégration de Xcode?Intégration d'une version de débogage dans le SDK Mac OS X d'une bibliothèque

Une option consiste à expédier une deuxième structure entièrement séparée, par ex. MyLibrary.framework et MyLibraryDebug.framework. Si c'est la bonne façon de procéder, y a-t-il un truc pour dire à Xcode d'utiliser le bon? Lors de l'ajout d'un framework à un projet Xcode, il ne semblait pas possible de l'ajouter à une seule configuration de build, et il semble évident de devoir utiliser manuellement l'option de ligne de commande -framework MyLibrary[Debug] pour les configurations respectives!

Merci.

Répondre

3

L'éditeur de liens dynamique Mac OS X (dyld) dispose d'une fonctionnalité dans ce but: DYLD_IMAGE_SUFFIX. Cela vous permettra de charger dynamiquement la version de débogage de n'importe quel framework ou bibliothèque partagée que vous avez lié. Ensuite, vous n'avez pas besoin d'un bundle .framework entièrement séparé; créez simplement une autre bibliothèque partagée nommée MyLibrary_debug. Par exemple, CoreFoundation dans Tiger comprend des variantes de débogage et de profilage (qui ressemblent à ne pas avoir reçu des mises à jour de sécurité, mais de toute façon):

% ls -l /System/Library/Frameworks/CoreFoundation.framework/Versions/A/ 
total 20080 
-rwxr-xr-x 1 root wheel  1M Sep 10 17:55 CoreFoundation* 
-rwxr-xr-x 1 root wheel  6M Apr 24 2007 CoreFoundation_debug* 
-rwxr-xr-x 1 root wheel  2M Apr 24 2007 CoreFoundation_profile* 

Avec les cadres d'Apple comme ci-dessus, le suffixe standard « debug » est _debug. (Le paramètre "Utiliser le suffixe [debug] lors du chargement des cadres" dans le volet Général d'un exécutable dans les ensembles Xcode DYLD_IMAGE_SUFFIX=_debug).

Vous pourriez penser en utilisant _debug comme cela est bien une bonne idée, mais je vous suggère de ne pas, parce que Apple a rompu les _debug versions de leurs cadres à plusieurs reprises (someexamples). De Leopard seulement libSystem, libmx et libmathCommon viennent avec des variantes de débogage, mais dans Snow Leopard, ils se sont cassés à nouveau (je suis tombé sur this problem moi-même). Si vous choisissez un suffixe différent pour votre bibliothèque de débogage, vous ne devez pas déclencher les bogues d'Apple et pouvoir partager le reste de votre infrastructure (en-têtes, ressources, etc.) entre les variantes normale et de débogage.