Related Radar for more information: rdar://problem/26423121
We have a method that looks something like this and prepareChangelog isn’t smart enough to know that there are preprocessor macros in play here so it thinks the curly braces are all mismatched, thus hindering its ability to understand where the method ends and the next method begins. - (void)bar:(void (^)())block { #if __WHATEVER >= 12345 [blip foo:^(Fuzz *bar) { if (buzz) { dispatch_async(dispatch_get_main_queue(), ^{ #else [blip foo:^(NSData *bing) { if (buzz) { dispatch_async(dispatch_get_main_queue(), ^{ _blah = baz.firstObject; #endif }); } }]; }