Сделать Xcode 4.3 предупреждающим о необъявленных методах, которые существуют в текущем @implementation - PullRequest
8 голосов
/ 05 марта 2012

Xcode 4.3 не предупреждает о необъявленных методах, когда они существуют в текущем @implementation, что является отличной новой функцией. Однако, это вызывает проблему при определенных обстоятельствах при использовании моего проекта на Xcode 4.2.

Как повторно включить предупреждения для необъявленных методов?

Например:

@interface MashTun : NSObject
- (void)foo;
@end

@implementation MashTun
- (void)foo {
    CGRect rect = [self smallRect];
    NSLog(@"My Small Rect: %@", NSStringFromCGRect(rect));
}

- (CGRect)smallRect {
    return CGRectMake(0, 0, 100, 100);
}
@end

В Xcode 4.2 это терпит неудачу:

warning: instance method '-smallRect' not found (return type defaults to 'id')
error: initializing 'CGRect' (aka 'struct CGRect') with an expression of incompatible type 'id' 

Я полностью понимаю предупреждение и ошибку в Xcode 4.2, поскольку он не позволяет искать методы в текущей области действия @implementation. (Исправление простое: либо поместите метод smallRect над методом foo, либо объявите метод smallRect в категории или в заголовке.)

Но как мне включить предупреждение в Xcode 4.3, чтобы перехватить эту ошибку, прежде чем передать ее коллегам, работающим с 4.2?

Ответы [ 3 ]

0 голосов
/ 10 июля 2012

Я не знаю, может ли у меня быть смешная сборка, но мой компилятор LLVM 3.1 имеет флаг незадекларированного селектора под предупреждениями компилятора.На данный момент работает 4.3.2.LLVM 4.0 не имеет, хотя.

0 голосов
/ 10 июля 2012

один вариант во время такого перехода будет кросс-компиляция с другим компилятором / версией. gcc-llvm - это одна из распространенных предустановленных альтернатив. другим подходом будет установка нескольких версий xcode и сборка с использованием этого набора инструментов.

0 голосов
/ 14 марта 2012

Новый компилятор LLVM 3.1 не заботится об этом. Неважно, если вы разместите метод выше / ниже или есть прототип. Так что, если у всех ваших коллег Xcode обновлен до версии не ниже 4.3. Это действительно не должно быть проблемой.

Другой вариант - создать собственное предупреждение, используя код ниже. Вы холодно сообщите им об этой проблеме, и проблема под рукой. Это может быть простой способ донести сообщение.

#warning "warning message"

Надеюсь, это поможет.

...