2010-12-06 21 views
7

Dans une application Cocoa, je voudrais utiliser la compilation conditionnelle, comme:compilation conditionnelle à l'aide MACOSX_DEPLOYMENT_TARGET dans Xcode pour une application Cocoa

#if MACOSX_DEPLOYMENT_TARGET <= MAC_OS_X_VERSION_10_4  
    [[NSFileManager defaultManager] removeFileAtPath:path handler:nil]; 
#else 
    [[NSFileManager defaultManager] removeItemAtPath:path error:NULL]; 
#endif 

Mon espoir est que cela évitera les avertissements du compilateur au sujet removeFileAtPath: dépréciés quand MACOSX_DEPLOYMENT_TARGET = 10.6, car il ne devrait pas compiler cette ligne.

Cela ne fonctionne pas.

Lorsque MACOSX_DEPLOYMENT_TARGET = 10.6, j'obtiens un avertissement indiquant que removeFileAtPath: est obsolète. Mais il ne devrait pas compiler cette ligne, donc il ne devrait pas être averti qu'il a une méthode obsolète!

(je suis en train MACOSX_DEPLOYMENT_TARGET dans les deux paramètres de construction du projet et les paramètres de construction cibles. Je BASE_SDK mis à 10.6 et précise GCC 4.2 à la fois, aussi.)

Qu'est-ce que je fais mal? Ai-je un malentendu fondamental de la compilation conditionnelle?

Répondre

11

MACOSX_DEPLOYMENT_TARGET est principalement utilisé pour effectuer une liaison faible. Vous devez utiliser MAC_OS_X_VERSION_MIN_REQUIRED au lieu d'effectuer la compilation conditionnelle:

#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 
    [[NSFileManager defaultManager] removeFileAtPath:path handler:nil]; 
#else 
    [[NSFileManager defaultManager] removeItemAtPath:path error:NULL]; 
#endif 

Voir Ensuring Backwards Binary Compatibility - Weak Linking and Availability Macros on Mac OS X d'Apple pour plus d'exemples.

+0

Parfait! Merci beaucoup. – user532477