Oh, it is true:
CCShader.m contains the following code:
glGetActiveUniform(program, i, sizeof(cname), &length, &size, &type, cname);
NSCAssert(size == 1, @"Uniform arrays not supported. (yet?)");
Implementing it myself based on an earlier version doesn't work, because the framework introduced in 3.1 wants to sit between me and my shaders. The earlier shader mechanism just let me do what I wanted. The 3.1 version analyzes my vsh/fsh code in order to make it really easy to interface with. But if it encounters some portion of the spec that it can't handle, then game over. I don't see any fallback mechanism allowing me to tell CCShader to just let me handle manually the part it doesn't understand.
Steve Jobs saw the problem with third-party tools sitting between the programmer and Apple's technology. Unless and until those vendors add support for Apple's new features, those features may as well not exist.
Can I implement the uniform array support myself? Maybe. I would first need to get my head around how the mechanism works. And there might be a reason the implementor stopped short of supporting that part of the specification - it might be difficult for the framework to handle. I don't know - and can't know without putting in the time or hearing from the implementor.