EAAccessoryManager accessory picker bug - ios

I'm trying to build an app that communicates with an external accessory (over bluetooth). To ensure the app is user-friendly I'd like him not to go to the settings to connect with the accessory but to show the Accessory picker that iOS 6.0 includes.
To achieve that, a simple call to :
[[EAAccessoryManager sharedAccessoryManager] showBluetoothAccessoryPickerWithNameFilter:nil completion:nil];
For now, I'm not using the filter and the completion (both can be nil according to the iOS Class Reference) - even if I tried using them too.
Now the problem is that my accessory appears for 2 to 10 seconds and then disappears from the list until I cancel the popup and show it again. Another problem is that sometimes it doesn't appear at all. I also made sure the device was already paired but not connected.
I tried using another accessory (one that I didn't make myself) and with different devices (iPhone 4, 4S, 5 - iPad - iPod Touch) with no success.
Does anyone has a similar issue? If yes how did you solve it? Is it an iOS bug? Is it an accessory bug?
Thanks for any reply.

I can confirm that iOS 7 BETA 4 has fixed this issue. If you are using the RN 42 APL bluetooth chip (which you must be as its the only one available on the MFI program)
The only thing you need to be aware of is that the firmware on the RN 42 module needs to be 5.36 and above (as it fully supports the iAP protocol)
I have updated my App (that talks to a custom build accessory) and the accessory picker dialog works a charm.... just thought I'd let you guys know!

Just got the answer from Apple to these questions.
Apple said that it's a bug and they are going to fix it with the future release of ios.
Not sure when this will happen. But do not waste time for this as it's bug.
until new fix, work around is pair the devices on the bluetooth setting screen and then use it in App.

I can confirm the bug is still present in iOS 6.1.3
We have designed a custom piece of hardware that uses the RN42 APL module (we are part of the MFI program). We have spoken to Roving Networks (now Microchip) and they have assured us the firmware on their module matches apples requirements... Microchip are still looking into the problem, but we are looking at the possibility that it is a bug with iOS 6.x
I will download iOS 7.0 and try it out... will report back guys
Cheers
Will

I have had the exact same problem and have been unable to solve it for the past week.
I'm using a Roving Networks RN-42-APL-X module, and I changed the Inquiry Scan Window and Page Scan Window of the module I was using to 100%, but still no luck.
showBluetootAccessoryPickerWithNameFilter will sometimes NOT find my device, and when it does, it loses the device anywhere between .5 seconds to 6 seconds after finding it...
2013-03-13 00:45:22.006 EADemo[356:907] BTM: found device "myDevice" 00:08:36:4B:A4:49
2013-03-13 00:45:22.631 EADemo[356:907] BTM: lost device "myDevice" 00:08:36:4B:A4:49

Related

Replay Kit iOS not working properly?

In ios 11 beta, we have an option for screen recording in the control panel. While selecting it, it should show the app lists which has enabled with Broadcast extensions(Replay kit).
But, in ios11 beta, it does not show any apps.
I have already installed the "MobCrush" app in my device. In wwdc 2017, apple showed the ReplayKit demo with this app only.
I don't know if any fix in the next version updates. Please share anything you know guys.
I don't know how Tamil solved the issue, but in my case by restarting the device it started showing my own Broadcast Extension in Screen Recording setup. But still no luck for MobCrush. Maybe it should be built with new XCode?

HomeKit accessoryDidUpdateReachability not working

does anyone has a working implementation with accessoryDidUpdateReachability unter iOS8 / XCode 6.3?
playing around with HomeKit shows me very unstable change state of accessory reachability.
Status mostly only changes after restarting the app.
Reachability appears to be mostly broken in iOS 8.x. You can stimulate it by attempting to read, but I think that's frowned upon by apple. Even when reads report some value, the reachability value doesn't appear to update.
The good news is that it seems to work much better in iOS 9.

iOS BLE disconnecting right after connection, only restarting device helps

My app uses BLE (Bluetooth 4) to connect to a physical peripheral.
My users and I have repeatedly encountered a bug where, at some point, the app stops connecting to the peripheral - you can see an indication that the BLE peripheral is discovered and the connection was established, but then few seconds after, the connection is dropped.
Things go back to normal only after restarting the iDevice.
I’ve done a very long work on checking it and researched this issue thoroughly, until I got to the conclusion that this must be a bug in iOS (tested with 7.1, but probably occurs on 8.0 as well).
My tests and findings:
Occurs with every BLE supporting iDevice.
Occurs with both my own BLE peripheral and with other 3rd party BLE products, both known to work perfectly in normal cases.
It can sometimes work well for even 50 launches, but then eventually it’ll fail.
Network & factory settings reset did not help.
Tested and occurred with various applications: ##
My own app.
Clean new Xcode project that’s only scanning for peripherals and trying to connect to the first and only discovered peripheral.
Apple’s BLE example app: Health Thermometer (with relevant modifications since I don’t have this particular peripheral).
3rd party apps, including the generic LightBlue.
Important note: Every one of the options above worked perfectly for a while (multiple launches), at some point suddenly stopped and then worked again after a restart of the device.
The connection procedure seems to fail when trying to discover the peripheral’s services - i.e. it gets discovered and connected normally, but when initiating discovery of services, it stops responding (didDiscoverServices isn't called).
I have of course tried many approaches found online with no luck.
Can anyone shed some light on this problem?
Is it a known issue?
Was it fixed in a recent iOS update?
Is it going to be fixed?
You can imagine the negative affect such an issue has on my users’ experience, as BLE connection is essential to the product.
I'll appreciate your advice and suggestions on how to solve it.
Thanks!
Update:
Apple responded to my tech support request:
Bottom line(s):
They said they had fixed some BLE related bugs in iOS 8 and urging us to test if it still happens in iOS 8.
They said to start with that and if not, try to diagnose the problem with a utility app they provide.
So far for me it didn't happen with iOS 8, but on the other hand I can see posts about other Bluetooth issues, that are not necessarily related but who knows.
Full answer:
I’m responding to your finding that you and your customers find that
after some point of use, iOS BLE fails to maintain a connection. You
indicate that the problem was identified with iOS 7.1. There have been
issue regarding iOS BLE which have been reported and have been fixed
with iOS 8.0. To best determine whether your issue has been addressed,
of course the simplest means would be to install iOS 8 and to see if
the issue can be replicated. However, as you report that you can
replicate the problem on your deivce with iOS 7.1 the first thing
would be to obtain the Bluetooth Server profile, install it to your
deivce, replicate the problem, then obtain a BLE Server log when the
problem occurs. The profile will have the BLE server report additional
logging details which can help to report issues that the server
encounters. We can see if the issue is one which has been reported
previously. Something to consider is that for all new bug report
issues, Core Bluetooth engineering is requesting that all issues be
regressed with the currently shipping version of iOS - that is 8.0.
For customers with iOS 7.x, there will be no more iOS 7 updates - all
software fixes and bug fixes will be with iOS 8. For this reason, only
issues which are reported with iOS 8 will be investigated. You can
obtain the BLE server profile from the Apple Developer bug report web
page https://developer.apple.com/bug-reporting/ios/bluetooth/. The
instructions for installing the profile and capturing the log, are
presented on the web page. If you capture a log with iOS 7.x, you can
send it to me for review. However, this will be somewhat of an
academic exercise - to know if iOS solves the issue, or whether it
persists, we will need to see if the issue occurs under iOS 8.
Something to keep in mind, once you update a device to iOS 8, you will
not be able to restore it to a previous version. I’m happy to
review your results. If however, the problem persists under iOS 8,
it’s best to submit a bug report to get Core Bluetooth engineering’s
attention on this matter. You can submit a bug report using the Apple
Developer bug report web page. - http://bugreport.apple.com
So it looks like the problem is solved with recent iOS update (either 8.0 or 8.1).

iOS Private API: lock device and power off the screen

I'm making an app for jailbreak that lock the device when the user launch the app. I've tried GSEventLockDevice(); from GraphicsServices.framework but this does not work properly because it locks the screen but does not power off the screen. Is there another way to lock the screen without MobileSubstrate?
Just as another alternative, check out this answer, which uses SBDimScreen(). You could use that in conjunction with GSEventLockDevice().
It appears that you may now (iOS 5+) need to add an entitlement to your app to use this call successfully. If you haven't done that before, here is an example of how to do so. Obviously, in this case, the entitlement in question must be changed to com.apple.backboard.client.
You also might see if #VictorRonin has experimented with this, as he commented on the question I linked to. I tested SBDimScreen() on a jailbroken iOS 4.2.1 device, but my newer devices are currently unavailable to run this test. I'll try it later on iOS 5.x and post an update.
Note: the answer I linked to from Elias has a different call altogether for iOS 6.
Look at these several questions:
Simulating System Wide Touch Events on iOS
Simulating System Wide Touch Events in iOS without jailbreaking the device
How to send a touch event to iPhone OS?
The idea is that you can simulate system wide events. One of events is power down event. If you simulate it, it will turn off device and will lock it.
BTW. You may be interested to google more on GSEvent which is the key for even simulation.
Here are couple of useful links:
http://iphonedevwiki.net/index.php/GSEvent
http://networkpx.blogspot.com/2009/08/gsevent-recording-and-playback-in-30.html
Also, this approach isn't limited to jailbroken phones. It works on jailed phone too (however, you won't be able to post it to AppStore).

Which blackberry for testing?

I have a t-mobile pre-paid sim and wifi. I'm working on a website that would like to target BB 6 and newer. One of the unique things about the BB is that many of the devices have a keyboard and touchpad.
Is there a device with a keyboard I can get that would work with my sim and wifi that would let me test websites? (without a data plan)
I looked at the BB Bold 9900. This seems to be the right type of device but that particular model is a bit pricey. Would be nice to go back a generation.
Just to be clear, my requirements are:
Work without a data plan (therefore wifi)
Keyboard / touchpad (touch screen optional but nice)
Compatible with t-mobile prepaid sim.
BlackBerry OS 6
I'd love to hear your suggestions, thanks!
BB 9700 - while launched with OS5, can meanwhile run OS6 too. No touch screen though
I'd just get the cheapest one. Not sure you need your SIM to work in it if you're just using WiFi.
FYI, you can download blackberry simulators from RIM. They're not quite the same as using the actual device (namely in terms of keyboard simulation) but they work in a pinch.
Why don't trying the 9930 Blackberry device running OS 7.0
It will meet all your requirements

Resources