Our QA department handles testing with physical devices. That kind of testing is also important.
The entire point of mocked objects is that you do not have to implement all of their functionality. In other frameworks you generate the mocked class with something like Mockito and then add a series of statements like this in your setup:
when(mockedObject.somefunction).thenreturn(foo)
What I'm talking about here is unit testing of a manager type class where its dependencies, such as instances of CBPeripheral and CBCentralManager are simulated or mocked in some way. We gate our PRs on successful runs of sets of unit tests and are looking for ways to increase coverage in order to reduce future maintenance headaches. The tests themselves are run automatically within the CI system. I understand that behind the scenes the CI system is running our iOS tests as integration tests on a physical iPhone sitting on a rack in a data center.