I am using Bluetooth Low Energy to communicate from my peripheral to Android and iOS, achieving a continuous serial port rate of 38.4kbps with iOS and 57.6kbps with android without packet loss, but for consistency I have set then both to 38.4kbps.
These are uart baud rates, so data rate is 30720bps - I believe you will struggle to get any more than that with an iPhone over BLE. I measured this on an iPhone 5 with iOS 9. I've read all sorts of comments about restrictions on minimum connection interval and number of packets per connection interval, so I can't guarantee this performance can still be matched on an iPhone 6.
The reason for using BLE was after a lot of investigation it seemed to be the only practical method (or at least the easiest method) to interface to iOS without joining the MFi program (this is likely to be a very important consideration).
BLE is extremely easy to get started with. My solution uses a Laird BL600 module in the peripheral and my mobile apps are based on Laird's example source code. It uses their proprietary Virtual Serial Port service. I don't work for Laird... there are similar offerings from Microchip, Blugiga, Cypress and various other manufacturers.
The current consumption while transmitting seems to be around 2mA at 3V, which seems excellent for my application, but obviously it depends on the Tx duty cycle.
If you need to transfer faster than that, then you can do it with Wifi or BT PAN profile (Serial Port Profile is only for MFi partners) but you might want to consider the extra effort required to implement the networking protocols on your peripheral vs a simple serial port.
Any questions, please ask and I can try to elaborate.
I have no experience of WiFi direct, but would be very interested to here others experience.