TL;DR: For bad settings, GCM sends null to the app, but shows the default value to the user, and this isn't okay.
I know this will be a controversial bug report, but please hear me out.
If a setting is defined as "numeric" and the user enters something non-numeric in GCM iOS, like an empty string, "abcd" or "2adsf", that property will apparently be returned as to the app as null.
This is problematic for reasons to go beyond the obvious, IMO. Obviously it's trivial for the app to check if the returned property was null. But what value is it actually supposed to use (internally) now?
1) It could use 0 or null, assuming those are valid values
2) It could use the real default, but how does it know what the real default is?
The problem with 1) is that when you return to the app settings page in GCM, it shows that setting as the default value. So now the setting in GCM and the setting in the app are different, which is not expected behaviour. Devs will have to tell users to send settings a second time if the first time didn't "take". I bet this has happened already.
The problem with 2) is you have to duplicate all your non-zero numeric defaults in both the properties.xml and the app code....
I think if GCM is going to show you the default value for a bad setting when you return to the settings page, it should also have sent the default value to the app in the first place.
This is just my opinion, but I think apps should be able to assume that GCM enforces all the settings constraints defined in the XML, such as the type, range and default value, otherwise what was the point of defining them there? A perfectly behaved app would have to have two copies of all its numerical defaults, but I bet nobody does that....
Hopefully I didn't miss something here.