When I lately upgraded Xcode to 7.3.1 I suddenly got a lot of errors in one of my older project I wanted to rebuild.

Declaration uses __weak, but ARC is disabled

It’s a standard error if we are using MRR libraries with weak references in ARC project, and it can be fixed pretty easy. So I set Weak References in Manual Retain Release to YES in my project and the CocoaPods configuration and I expected the error to be solved, but unfortunately a new one appeared. 😅

Existing instance variable 'state' for property 'state' with assign attribute must be __unsafe_unretained

SBJSON is using the old concept of dealing with weak references and there is something like that in the source code:

@property (nonatomic, assign)  SBJsonStreamParserState *state; // Private

Pretty strange, isn’t it? We have a reference to some object and the assign property modifier. But actually it was a very common practice in iOS 4 and older when there was no weak modifier.

In the newer Objective-C standard we have weak modifier so the bug was easy to fix, but it made me think for a while about iOS toolkit evolution and those little changes that are being silently introduced from time to time. Something that was unnoticed for about 4 years in the project suddenly appeared as an error in the newest Xcode.