2011-06-26 14 views
6

Tengo algunas constantes obsoletas en mi proyecto. Ellos necesitan quedarse. No quiero que me avisen sobre ellos, pero quiero que me avisen si otras constantes obsoletas deberían aparecer en mi proyecto más adelante.Xcode/iOS: ¿se deshace de las advertencias de desactivación de las constantes específicas?

cabecera de Apple los declara como sigue:

extern NSString * const NameOfStringConstant __OSX_AVAILABLE_BUT_DEPRECATED(version availability info here) 

¿Cómo puedo silenciar la advertencia?

respuesta relacionado para silenciar el aviso de un método en desuso here
respuesta relacionado para silenciar la advertencia sobre una conversión de cadenas en desuso here

Respuesta

1

La respuesta correcta a esta pregunta es no utilizar constantes en desuso. Consulte la documentación de la forma recomendada para lograr algo ahora. En los métodos obsoletos/constantes/lo que sea, casi siempre hay un enlace al "reemplazo" si se quiere. Usa eso en cambio. De esta forma, su código no se rompe misteriosamente cuando desaparecen para siempre, pero sus usuarios todavía tienen una compilación desarrollada contra el antiguo SDK, y ahora su código se bloquea o, peor aún, hace cosas extrañas.

+6

Tengo que usar las constantes, porque las versiones anteriores de iOS no tienen las que no están en desuso. Verifico la existencia del no desaprobado y lo uso si está disponible. De lo contrario, tengo que recurrir a la constante obsoleta. El código de muestra de Apple lo hace de la misma manera. –

+0

¿Qué tan temprano? ¿No me digas que eres una de las personas que aún apoya 3.x? Según la mayoría de las personas, menos del 2% de los usuarios usan iOS 3.x (que también cuenta con usuarios de iPad), y menos del 40% tiene un dispositivo que * CAN RUN * iOS 3.x – jer

+1

introducido en 4.0 –

2

Añadir a las opciones del compilador:

-Wno-deprecated-declarations 

o, en Xcode, seleccione "No" en la opción de ajuste de la construcción:

Warn About Deprecated Functions 

y luego, si nos fijamos en el resultado de generación (Apple +7 en Xcode 4), observará el indicador del compilador antes mencionado.

1

Esta es la respuesta # 1 en google y creo que hay algunos casos faire cuando el uso de un método en desuso es útil y cuando quiere evitar las advertencias para mantener la compilación "limpia". Esta solución está inspirada en: http://vgable.com/blog/2009/06/15/ignoring-just-one-deprecated-warning/

La idea es declarar un nuevo protocolo que tiene el mismo método (pero no obsoleto, por supuesto) y convertir el objeto a ese protocolo. De esta forma puede llamar al método sin recibir la advertencia y sin deshacerse de todas las advertencias de depreciación.

Ejemplo: si desea integrar TestFlight en su aplicación, la documentación del SDK sugiere transmitir el uniqueIdentifier del dispositivo mientras está en BETA. Esto puede ayudar a rastrear qué probador tuvo problemas. Apple ha desaprobado este método (y no le permitirán enviar la aplicación), pero creo que este es un buen ejemplo del uso de un método obsoleto.

en su aplicación Delegado:

/* This is to avoid a warning when calling uniqueIdentifier for TestFlight */ 
@protocol UIDeviceHack <NSObject> 

- (NSString*) uniqueIdentifier; 

@end 


@implementation MyAppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [TestFlight takeOff:@"Your-Testflight-team-id"]; 
    // TODO: Remove this in production (forbidden APIs) - Used here to improve beta reporting. 
    [TestFlight setDeviceIdentifier:[(id<UIDeviceHack>)[UIDevice currentDevice] uniqueIdentifier]]; 

    // ... 
} 
+0

La pregunta era sobre las constantes. –

+0

De hecho ... lo siento. Todavía salió primero en mi búsqueda de Google. Podría ayudar a alguien. Gracias por los comentarios. – sarfata

+0

+1: bueno :) Todavía usaría [esta receta] (http://blog.goosoftware.co.uk/2012/04/18/unique-identifier-no-warnings/) –

23

Sé que esto es un viejo tema, pero hoy estaba tratando con la misma molestia.

Ejemplo: desea deshacerse de la advertencia de obsolescencia molesto, pero solo para [[UIDevice currentDevice] uniqueIdentifier]], ya que lo más probable es que desee utilizarlo en fase de desarrollo con TestFlight. Aún desea que el compilador le avise si usa alguna otra declaración obsoleta por error.

Me gusta sarfata's answer: hace el trabajo.Pero hay más políticamente correcto manera disponible:

La siguiente receta proviene de The Goo Software Blog.

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wdeprecated-declarations" 
    [TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]]; 
#pragma clang diagnostic pop 

Asegúrese de comentar estas líneas antes de compilar para su distribución. O simplemente use una macro de preprocesador para excluir estas líneas de una versión de lanzamiento.

Cuestiones relacionadas