In all my years (very many ...) of networking in general, and WiFi networking in particular, I have never, ever, come across a WiFi implementation as badly broken as Apple's, on all their devices.
I've had exactly the same problem, with iPods, iPads and iPhones on our networks here. Frequently, they simply will not recognise an AP at all, even when it's literally 6 feet away. When they eventually do connect, if ever, they'll typically show very low signal strength. Even a 10 year old HP "iPaq 4150" I happen still to have will connect perfectly, and show 100% strength, as will every single other WiFi enabled device we have. If any of our Apple devices do manage to connect, they frequently won't actually stay connected - with nothing changing (E.g., sitting on a docking station), they'll just randomly drop off the WiFi network for no reason at all, and then refuse to re-connect.
As I said above, I have never come across a WiFi implementation as badly broken as Apple's ...
If you have this problem, a few things I have discovered which might help other people.
- Don't use hidden networks. Yes, this can be a (slight) help to security, but it takes the already low chance of any Apple device ever connecting reliably and lowers it even further.
- If using WPA/WPA2, keep your PSK to less than 10 characters. It shouldn't make the slightest difference, but again I've seen keys (passwords) longer than that apparently make connections less reliable.
- Sometimes turning WiFi off, waiting about 10 seconds, then turning it back on again, will help.
- If you've got more than one AP, and you're using MAC based security (restricting connections by hardware - MAC - address), make sure you have the iXxxx device entered into the access tables of all APs.
- If possible (and this will depend entirely on how your network is configured, and whether you have any control over it), use a static IP address for all your iXxxx devices. Enter that static address into the network configuration for that wireless network on the device. The Apple DHCP implementation times out far too quickly and can report that it couldn't connect simply because the DHCP server providing a dynamic address didn't respond fast enough. It seems that Apple assume the AP will always be providing any DHCP server, and can respond "instantly"; if you have another device providing this service (a server, a DSL router which isn't also your AP, etc.) then the tiny extra delay that can engender seems to blow the Apple process of joining the network completely out of the water. This is a particularly stupid piece of implementation as many DHCP servers (and certainly any good one) will "ping" an IP address before returning it, to make sure it's not already in use - the extra delay from the DHCP server performing this "ping"-and-wait will completely prevent a typical Apple iXxxx device from successfully joining a network.
- Keep on trying. With our iXxxx devices here, it can sometimes take literally 50 consequtive attempts (with nothing changing between them) before a device will connect. Just keep hitting "Dismiss" then the network again - eventually you may well get lucky!
I hope that helps someone. Meanwhile I really hope Apple get around to fixing this some day (particularly the stupidly short DHCP timeout) as it is unbelievable that in 2013, with WiFi having been around for at least 15 years, that they simply cannot get it right. I notice there's been at least one iOS update specifically aimed at improving WiFi connectivity - made absolutely no difference whatsoever ...
Sigh ...