NS_BLOCK_ASSERTIONS in Objective-C

debugging, iphone, objective-c, xcode

Solution

If you created your Xcode project based on one of the standard templates, the Cocoa headers (including `NSException.h` which contains the `NSAssert` macros) will get preprocessed before any other files in the project. A `#define NS_BLOCK_ASSERTIONS` in any of the project's header or implementation files therefore has no effect on the `NSAssert` macros.

Try putting `NS_BLOCK_ASSERTIONS` into the preprocessor macros of your target or even project (for the release configuration only):

Or put `#define NS_BLOCK_ASSERTIONS` into the prefix (.pch) header before the `#import <Cocoa/Cocoa.h>` or `#import <Foundation/Foundation.h>` lines.

Problem

I am using NSAssert() calls within an iPhone application and my understanding from the Apple docs is that assertions are not compiled into the code if NS_BLOCK_ASSERTIONS is defined. To turn off assertions, in a header file I declare: #define NS_BLOCK_ASSERTIONS However, the assert code still seems to run. Is there something I am missing here? Thanks John

Original source

Related problems