I have one from Xtool (iOBD2), it has a specific app for BMW codes, similar to Peake. No airbag reset, but it reads and clears everything else. There are specific bricks for BMW and VAG (Volkswagen Audi Group) and a generic one for plain old OBD2 codes.
Plug the little brick into the OBD2 port, look for the WiFi and connect, then open the app in an iPhone/iPad (after getting it from the AppStore) It will also read generic OBD2 codes for anything non-BMW, but it's a separate app. Streams live data too, stuff like fuel trims and VANOS timing. Apps are all free, the brick is about $90
I use it all the time to help diagnose coworkers issues in the parking lot.