The property you are talking about applies only to the audio input sources in the USB audio device attached via the iPad> connection kit, as indicated in the link of the AudioSessionServices class.
To get an array that is not null, you will need to test, say, USB Audio Workstation, which connects to the iPad camera kit.
Here is a link listing some of the hardware that uses the iPad Camera Connection Kit.
Connect USB audio interfaces using the Apple iPad Camera Connection Kit .
Also from class reference
If there is no audio source available from the supplied accessory, this property value is an empty array.
So, from the list found in the link above (scroll down to the list of some subtitles of compatible devices), the devices that are of interest to you will produce the result! nil, will be some device that offers audio input, such as Alesis iO4 , iO2 or iO2 express .
EDIT: There is merit in the answer provided by Sean Hershey regarding the use of the obsolete alternative to objective-c. However, you are most interested in the portType property of the AVAudioSessionPortDescription class. (available from iOS 6.0) Two constants of interest are AVAudioSessionPortLineIn and AVAudioSessionPortUSBAudio . The first one is mentioned for audio input through the dock connector that connects your test microphones.
In iOS 7.0 and later, you can request the property of an available entry of the AVAudioSession class. In iOS 6, you can only request the currentRoute property.
I found this Technical Q & Very Helpful - AVAudioSession - Microphone Selection
source share