Is it possible to write new accessibility services for iOS? It's easy to find info about how to make write apps so they are accessible, but I want to write a new service that has capabilities like a screen reader would have, and that works with existing apps.
From what I can tell, it's possible on Android with the Accessibility Service, on Windows with UI Automation, and OS X with Accessibility Framework. But I can't figure out if iOS has a similar capability.
The short answer is no. The long answer is what you are asking to do is a system utility and on the iOS platform developers are only allowed to write applications that are for the most part sandboxed I.E. they can only interact with themselves or apps by the same developer. They are forbidden from accessing data from other apps on the device. Developers also have no access to what so ever to system files that control things like font size and text to speech. Apple exercises tight control over their OS to maintain a stable platform.
Hope this answered your question!
You can't define a new system-wide service, but you can customize the existing services pretty heavily in your apps.
You can disable the default accessibility controls for a view:
view.accessibilityTraits = UIAccessibilityTraitAllowsDirectInteraction;
view.isAccessibilityElement = YES;
You can use the informal accessibility protocol to define your own VO cursor frames, and post UIAccessibilityLayoutChangedNotification notifications to make VoiceOver speak.
Related
Android OS Accessibility allows developers to integrate their own tts engines into eyes-free api. I want to add a custom text-to-speech engine (and voices) also into ios environment, with the same API used by Voiceover. Lets say, I just want to go to
Settings -> General -> Accessibility -> Speak Selection -> select custom X engine & voice
Is it possible?
No, it is currently not possible. If you are interested in the answer to this question changing in the future, I suggest you file a bug with Apple asking them to implement a publish such an extension point (it would take effect probably not only in VoiceOver, but also in Siri and in general in AVSpeechSynthesizer). I am sure some TTS companies already did file such a bug (at least), but the more people complain about it, the more likely or soon this feature will be implemented.
Let's say I develop audio player for iPod Touch 4/iPhone. Currently it can be controlled with standard panel (double click Home and scroll left).
But how can I control that with built-in voice control (long click on Home)?
Apple has a VoiceServices framework (more info here) that may do what you want. Unfortunately, the VoiceServices framework is not part of the public SDK and it can't be used in apps submitted to the store.
how can I control that with built-in voice control
There's a new iOS 13 feature called Voice Control that may help you to control your application and your device more generally with your voice.
Activate this feature in your device settings Accessibility - Voice Control as follows:
Take a look at the Customize Commands menu to dive into the vocal commands.
The only thing to do as a developer is eventually to adapt the accessibilityUserInputLabels properties if you need specific names to be displayed for some items.
The Voice Control feature is definitely THE built-in tool to reach your purpose.
Is it possible to take advantage of the international keyboard feature for the iPhone and create a custom keyboard that can be used over the entire phone not just within a particular app?
Similar to the Emoji keyboard but I'm under the impression that's somehow native to iOS and is just disabled by default?
I've looked at a lot of the questions on here regarding this, I'd just like to get a definitive answer.
As per Apple's submission guidelines:
2.5 Apps that use non-public APIs will be rejected
2.6 Apps that read or write data outside its designated container area will be rejected
There are no public APIs to add an additional keyboard.
The files that store keyboard data are definitely stored outside of your app's container.
In short: There is no way to implement a custom global keyboard on a non-jailbroken iOS device at this point in time.
As of iOS 8 you can now create custom keyboard extensions: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html
#0x90
this App adds an international keyboard to iOS (a keyboard you will see in your iOS general settings)
http://itunes.apple.com/us/app/emoji-free!/id332509635?mt=8
how did they manage to do it?
--
EDIT: i'm sorry for not searching it before, this should be the answer
Making An Emoji Enabeling App
The best way i found is to add shortcuts.
Go in the keyboard setting and paste the symbols you copied from a document or safari and give it a shortcut. For exemple: for √ i used ss. So i just double the first letter of the thing. Or for an exponent like ², i just use 22.
It takes a while to setup but its an easy way instead of switching between the symbol app and do a copy and paste every time. And for greek symbols, i just installed the greek keyboard.
Have fun.
Is it possible to share on-disk data between iOS applications, or are they truly sandboxed? In other words if I wanted to make a shared repository of data to be accessed (and/or modified) by one or more of my apps, could it be done?
One of the listings on the iOS features page is "Share Data Among Apps", but is this what I'm looking for, and what are the related APIs?
Googling hasn't turned up much else in this area and I know I can construct a path to just about anywhere in the iDevice directory structure. Would it be against Apple's TOA, leading my apps directly to rejection, or is there hope for such an architecture?
Nothing too easy unless your app is iPad only. Otherwise this thing speaks about URL Prefixing. See "Implementing Custom URL Schemes" http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StandardBehaviors/StandardBehaviors.html%23//apple_ref/doc/uid/TP40007072-CH4-SW7.
Here is some info on the iPad only Doc support: http://developer.apple.com/library/ios/#documentation/General/Conceptual/iPadProgrammingGuide/CoreApplication/CoreApplication.html%23//apple_ref/doc/uid/TP40009370-CH6-SW2 see "Document Support on iPad Devices". This DOES NOT work on iPhone/iPod
That looks like marketing speak. The only way to share data locally is to pass it in the URL when launching another app. Otherwise, you need an internet server based solution.
Another thought: can you use TCP locally between apps with the new multitasking support? Apps like Air Sharing are allowed to create listening sockets.
using ios keyChain you can share data between apps.
The Android platform has a RatingBar widget. I believe there is a similar field for BlackBerry because BlackBerry AppWorld uses a rating bar. What field are they are using for that?
I was browsing another question on StackOverflow and found a reference to a BlackBerry knowledge base article that includes sample code for a RatingField.
The corollary to an Android Widget on the BlackBerry is a Field. The BlackBerry Widget SDK is meant for doing web development specifically for BlackBerry devices. I've edited your question to reflect this.
The important aspect to know about BlackBerry development is that the operating system is not open-source. RIM has chosen to make some APIs available for app developers, but they have not opened up the entire platform. RIM is able to access the entire operating system when they write an app themselves - such as the Facebook or Twitter apps, but if you are writing an app as a third-party developer, you are limited to what has been exposed in their developer JDE.
AppWorld may well use a built-in field that does the rating stars, but, if it exists, that field is not available for third-party developers.
It is actually pretty common in the BlackBerry culture to write your own Field objects. There is a ButtonField in the JDE, for example. It works well if you want a button with text. But if you want to make a button that contains only an image, there is no built-in ImageButtonField to use, and you cannot set an image on a plain ButtonField. You have to write your own button field to handle this.