There is nothing wrong with the assets catalog. The trouble is in the way you are testing for the size of the image.
Looking at your code you have
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background"]];
NSLog(@"Image size should be: %@", [[UIScreen mainScreen] scale] == 1 ? @"1136x1024":@"2732x2048");
NSLog(@"Image size is:%@", NSStringFromCGSize(imageView.image.size));
But imageView.image.size
returns the logical size (in points, not pixels) for the image from iOS 4 onwards. So your test is always returning the screen size in points, whether it loads the retina image or not. Use different images for retina and non-retina graphics if you want a real test of what is being loaded.
Here's a corrected version of your test project: https://www.dropbox.com/s/ns6ci3b5htkhvi6/AssetsCatalogWrongImageLoad.zip
What I've done here is to put the text "@2x" on the retina sized image so when you run it on a retina iPad you can actually see that a different image is being used rather than incorrectly checking the size of the image.