¿Cómo inhabilito la auto-síntesis de propiedad de properties en Xcode 5?

He escrito una biblioteca para generar automáticamente los accesores NSUserDefaults basados ​​en @dynamic properties @dynamic que declara en una class de 'preferences' (consulte las references a PAP ). Escribe la propiedad en un file .m como este:

 @property (nonatomic, assign) BOOL hasSeenIntro; 

y luego agregue esto al file .h:

 @dynamic hasSeenIntro; 

Esto funciona bien, pero si el usuario accidentalmente olvida colocar la línea @dynamic , el comstackdor generará automáticamente una línea de @synthesize equivalente. No habrá advertencias pero, por supuesto, no se invocará mi código para esa propiedad.

Me gustaría saber si hay una manera de deshabilitar la síntesis automática de properties solo para esta class.

Actualizar:

Gracias a la respuesta de Nikolai, recordé que es posible promocionar las advertencias de LLVM a los errores y envolver la statement con ese error logra el efecto que estaba buscando (se generará un error si el usuario olvida especificar la línea de @dynamic ):

 // Ensure we get an error if we forget to add @dynamic for each property #pragma clang diagnostic push #pragma clang diagnostic error "-Wobjc-missing-property-synthesis" @interface Preferences : PAPreferences @property (nonatomic, assign) BOOL hasSeenIntro; @property (nonatomic, assign) NSInteger pressCount; @end #pragma clang diagnostic pop 

No hay forma de hacerlo a través del código.

Hay una advertencia del comstackdor (controlada a través de la configuration de compilation de Xcode "Propiedades sintetizadas implícitas", CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS ), pero debe configurar esto manualmente en el file de implementación, por lo que para su caso eso no es realmente útil.

Aquí hay otra idea: Cambie su implementación para agregar las properties usando una categoría en PAPreferences lugar de una subclass. Entonces, el comstackdor no puede sintetizar los @dynamic y emitirá una advertencia si falta el @dynamic .

 @interface PAPreferences (SynthesizedProperties) @property int foo; @end @implementation PAPreferences (SynthesizedProperties) @end 

Resultado:

 > warning: property 'foo' requires method 'foo' to be defined - use @dynamic or provide a method implementation in this category 

Además (o en su lugar) puede introspectar la propiedad durante el time de ejecución para detectar accesores sintetizados accidentalmente y emitir una advertencia en este caso.

AFAIK no hay forma de hacerlo, como en las versiones anteriores de Xcode, no había forma de señalar si se había olvidado de @sintetizar una propiedad específica. Solo en el time de ejecución tendrías un error de selección de Unrecognize.