Using VoiceOver with XCode

App Development and Programming
Hi All, I have recently got a Mac, mainly with the view of app development. I have downloaded the latest version of XCode, however I'm wondering if there are any quick reference guides to using XCode with VoiceOver on the Mac? I have searched, and cannot seem to find anything very useful. Any help would be greatly appreciated. Macky



Submitted by Eirik the Red on Monday, October 22, 2012

Hi. I use XCode almost every day, as my job includes quite a lot of iOS development. I've found XCode to be pretty accessible, but the code completion feature can get a bit annoying. Although turning it off means that you have to do more typing, the code editor behaves much more predictably. If you plan to develop for iOS, you'll need to use VO's mouse emulation features quite a bit, but they're pretty easy to get the hang of. I'd be happy to give you more info about this if you contact me directly. Good luck with using XCode. I think it's a great tool, especially compared to Visual Studio on the Windows side.

Submitted by Harry on Monday, December 24, 2012

Hello, guys, I am new here, and am also new to programming. I wish to start learning how to program applications, but as I play around with learning code, etc. I want to make sure I am using Xcode 4.5.2 in the most helpful way possible. I have repeatedly seen that the Interface Builder is not useable by VoiceOver users. Do I need to learn how to program all of these elements instead? Otherwise, how is this accomplished? General tips/advice is appreciated. As an aside, is it more helpful to study C or C++ before I try to learn Objective C? Again, completely new to programming. I am a fairly proficient VoiceOver user in general. I am familiar with routing the mouse pointer to the VO cursor and clicking with VO-shift-space, for example. What seems to be the problem in Interface Builder, just from first glance and extensive web searches is the ability to drag and drop elements. Xcode and programming in general, with attention to OSX, from a blindness perspective, is appreciated. If I have posted this in the wrong place, I apologize. Best regards, Harry

Submitted by Donnacha on Wednesday, December 26, 2012

Hi Harry, I wouldn't exactly consider myself an expert in this area but from my own messing around with XCode, the interface builder is completely inaccessible with VoiceOver (if there is anyone out there who begs to differ, feel free to comment!) As a result its necessary to build the interface for any apps manually through code... This isn't very difficult though, just time consuming! Regarding whether it is necessary to learn C or C++ before starting on Objective C, I wouldn't consider it necessary to learn nither. if you just get a good book on Objective C programming it will take you through the basics of the language anyway which is very similar to both the afore mentioned languages. If you need any further help, send me a mail. I also hope to do a tutorial on using XCode some time in the near future, once I get the time. I found it very fustrating getting started myself as there is a lack of any comprehensive tutorial out there at the moment. Cheers D

Submitted by Harry on Wednesday, December 26, 2012

Hi Donnacha, Thanks so much for your response! I downloaded a book from Booksahre about Objective-C published in 2012, but is there any place to find information about how to go about programming the menus and the general interface w&o using the Interface Builder? Since I am completely new to all things programming, I don't even know waht files to edit, or waht to edit in them, since they usually already contain some code in them referring to header files and the like. As I understand them, header files are files which allow you to use other features, like printf&cout to show text on the screen, but that is about the extent of my understanding. :) Thank you so much for any help. I am starting from the ground up, here, but it is very exciting, nevertheless. Do you have much experience programming, or programming in this way? If you would like to e-mail me, my address is Thanks, Harry

Submitted by The Sky Dancer on Wednesday, December 26, 2012

I am interested in this topic as well. I do have previous experience programming for windows using visual studio. Granted, I'm not sure if this is a help or not though. I am familiar with c#, and c++. I too have downloaded xcode onto my macbook and look forward to any good information.

Submitted by Eirik the Red on Wednesday, December 26, 2012

In reply to by Harry

Hi, Harry. I hope you don't mind, but I'd like to make a suggestion. Before tackling Xcode, you might find it more helpful to read through your Objective C book thoroughly and just work through some examples. This is what I did when I was first learning, as I found Xcode to be a bit overwhelming. Actually, you don't have to use Xcode to play with Objective C. You can use it to download a package called "commandline tools," which includes an Objective C compiler for use in the Terminal app. Go to Xcode's preferences, interact with the toolbar, move to the downloads button, click it, and you should see a screen where you can choose to install various additional packages and documentation. To download the commandline tools, move to the right until you find the components button, click it, and move to the right until you find a table. Interact with the table, and navigate around until you find a row containing the words "commandline tools." Move to the right and you should see an install button. Click this and Xcode will download and install the commandline tools package for you. Once this has been done, you should be able to write Objective C programs in Textedit and use the Terminal to compile and run them. I'd definitely recommend that you should do this and become familiar with Objective C before plunging into Xcode. On an unrelated note, you don't have to write iOS apps using Objective C. There are a few alternatives, one of the most interesting being Ruby Motion. If you're more familiar wit high level languages like Python or PHP, then Ruby Motion could be a better solution for you. It costs around 100 USD to buy, and you'll also need an Apple developer account to run the sample code on an iDevice. If you want to know more about Ruby Motion, just Google it and you should see its homepage and developer site.

Hi, Sky Dancer. Personally, I find developing with Xcode to be a more satisfying experience than using Visual Studio. However, as others have said, Interface Builder does seem to be mostly inaccessible. I get around this by adding UI elements programatically and then asking a sighted colleague to check them for visual appeal. Unfortunately, due to Apple's HID guidelines, you will also need to do this before you submit an app to Apple for review. Regarding previous experience with C and C++, I certainly think that it's a bonus. After all, Objective C is a superset of C, and you'll still occasionally use C functions in your Objective C code. It's also possible to use C and C++ third party libraries in Objective C projects, especially if the iOS frameworks don't already include a language feature or library that your app needs. When I was learning Objective C, the main difficulty I had was getting used to method declarations, the use of bracket syntax to message objects, and the various memory management strategies that iOS apps have to employ.

Submitted by Florian on Thursday, December 27, 2012

Hello, I am encouraged to see that people have actually managed to get going writing iOS apps even though interfaceBuilder is completely unusable. Once I got my mac I was looking forward to learning how to code in objective-C for it as well as the iPhone, but I soon ran into wall after wall. Drag the connections? Drag a control onto your canvas? Everyone who does manual UI coding is acting masochistic? The only other way is a half-working framework that barely anyone has ever heard of? These were somewhat annoyed, exasperated and surprised thoughts running through my mind. Mind you, we are talking 2010 here. Please, if anyone would be willing to give me a few pointers on learning to work around the various limitations fully blind prospective Apple device developers have to face, it would be very much appreciated. Here are the problems I ran into: - Information on how to code without interfaceBuilder is old, hard to find and outdated, as well as written for programmers who know what they are doing. - Many if not all programming books I found on the subject back then used interfaceBuilder to illustrate their examples. Since I am a learn-by-doing kinda guy, this made me throw away the book in disgust everytime I realized I would not be able to follow along with the teachings contained therein. - Nobody really knew who to ask for help, and the answers I did get were terse, uninformative and too high-level for my skill level in programming in general at the time, mostly due to a lack of time on their part. If anyone could shed some light on the shadows surrounding these issues, it would very much be appreciated. Furthermore I would like to ask if it matters if you use objective-C or a previously mentioned project RubyMotion or something similar, when it comes to both accessibility for development as well as for the end user? Arigatou, Florian

Hi, Florian. As far as I can tell, Ruby Motion offers the same level of accessibility that you get when you develop using Objective C. It still uses the iOS SDK, but there's a translation layer between the Ruby code and the SDK frameworks. When you run a Ruby Motion project on an iDevice, a lot of optimisation happens behind the scenes to make sure that the code runs quickly and efficiently. One of my acquaintances is a totally blind developer who says that Ruby Motion lets him design user interfaces much more easily than is possible with Objective C and Interface Builder. Regarding Interface Builder, the canvas itself is inaccessible but, if you enable the Document Outline in the Editor menu, you will get a table that shows a hierarchical view of the objects on the canvas. You can then highlight an object and alter its properties using the inspector. Of course, you can only do this if you've added the UI elements to the canvas by dragging and dropping. If you've done it programatically, they won't appear in the table. To drop a UI element on the canvas, navigate to the library view near the bottom of the screen and choose the object you want. Next route the mouse to it by pressing ctrl + VO + f5, and lock the mouse button by pressing ctrl + shift + VO + space. Now navigate to the table which shows the objects, interact with it, and move down until you hear "view." This is the top level view object of the UI interface. If you press ctrl + shift + VO + space here, you can drop the UI element you've just selected onto the view object, which will embed the object inside it. The view should then have an expansion triangle next to it to show that it contains other objects. Let's say that you've just added a UILabel to the canvas, and now you want to connect it to your code. Here's what you'd have to do: 1. Go to the view menu and enable the assistant editor. In the source code area, you should now have two editors: the Interface Builder document and the view controller's header file. 2. Interact with the Interface Builder document, find the objects table, and move to the object you want to connect. 3. Stop interacting with the Interface Builder document and the source code area, and move right until you find the inspector. Interact with this and move right until you find the "connections inspector" button and press it. 4. Now move right again until VO says "scrole area." Interact with this, and navigate until VO says "new referencing outlet." Move right one more time so that you're positioned on the "unknown" element just to the right of the "new referencing outlet" label. 5. When you're over the "unknown" element, lock the mouse by pressing ctrl + shift + VO + space. 6. Now stop interacting with the scrole area and inspector and go back to the source code view. This time, find the view controler's header file (it should still be visible in the source code area), interact with it, and find the source code text. 7. Interact with the source code's text area and use VO to navigate through it until you're on the blank line between the "@implementation" and "@end" tags, then click the mouse button by pressing shift + VO + space. 8. A dialogue box should now appear in which you can name the UI element that you want to connect. Use VO to find the text field where you can type the object's name, and give it a name that complies with Objective C's naming conventions. You can probably leave the other options unmodified for now. 9. Move to the ok button, press it, and your UI element will be connected up. If everything worked as it should, you'll see a line in the view controller's header file that looks something like this: @property (nonatomic, strong) UILabel *lblText; You can then refer to it in your code. As an example, if you've connected a UILabel called lblText, you could set its text property like this: [lblText setText: @"Hello world"]; This may sound like a rather lengthy process and indeed it is, but it becomes second nature after a while. It isn't really necessary to use Interface Builder to design a UI. It's convenient because it provides a point-and-click method of rapid UI development, but you can do everything programatically that you can do with Interface Builder. One thing to bear in mind is the size in points of the iDevice's display, and the amount of space that each UI element will take up. Unfortunately, I don't think there's a substitute for sighted help when proofing your UI.

Submitted by Harry on Friday, December 28, 2012

In reply to by Eirik the Red

Hello, everyone, Thanks to everyone who ahs offered suggestions. I ahve downloaded the Pocket Guide to Objective C from Bookshare, but I have decided to start with the tutorials offered on How Stuff Works about C programming, since the books says that many of the features are based off of C concepts&the C environment. I have been opening the unix executible in the Terminal and testing through there. It sounds like the command line tools might make that a bit easier, though, so I'll check those out, as well. Thanks, especially, to the person who provided the detailed help about moving objects into position for creating menus and how to rearrange/edit them. Thanks again, Harry

Submitted by mehgcap on Friday, January 18, 2013

Member of the AppleVis Editorial Team
Hi, I want to thank you for your dtailed help in moving interface objects into the different views. Unfortunately, it does not work for me. I turn off cursor tracking, route the mouse to the element I want in the objects browser, then click the mouse down with vo-cmd-shift-space. I move to the "view" element in the table in the source code group and press the same keystroke to release the mouse, but nothing happens aside from the click of the mouse being released. Am I missing a step? Thanks.

Submitted by Mani on Friday, January 25, 2013

Hello all: I am new to AppleVis and I am so glad to have discovered it. I am deaf/blind and am in the process of learning iOS development. My problem is that I do not have much problem learning Objective-C and iOS development but I know very little VoiceOver. I am learning iOS development by hanging on to the tiny bit of vision I have and believe me, it is frustrating. When I discovered this forum, I was filled with joy to learn that Xcode could be used with VoiceOver. Somebody mentioned in this thread that he would develop a tutorial in the near future. That would be a blessing for me. I did learn the rudiments of VoiceOver some time ago but lost it all due to disuse and my tendency to hang on to the tiny vision I have. Besides the lack of good hearing does not help me greatly with VoiceOver. But I think I will have to bite the bullet soon. Any suggestions, ideas on how do I embark on this new journey will be very much appreciated. Also, can someone tell me how I can contact other members privately? Thanks, mani

Submitted by mehgcap on Friday, January 25, 2013

Member of the AppleVis Editorial Team
I would like to write a full tutorial, but it would not make sense to release one until I'm sure I can work with Interface Builder. I'm working on the tutorial, but without IB support it would be hard to follow many examples you'd find online or in books. Follow @appleVis on Twitter so you can be notified of new content, or follow @VOTips where I'll post a link when the tutorial is ready. As to privately contacting members, I don't think you can. I could be wrong though; you may want to ask @appleVis on Twitter to be sure.

Hi. Someone else asked me about this a few days ago, but I can't remember in which thread he or she posted the question. Anyway, I'm guessing the reason you couldn't drop the interface element was because you had cursor tracking turned off. Try it again with cursor tracking turned on, and remember to do a "mouse down" (control + shift + option + command + space) on the element you want in the object library. If you've done this successfully, you should hear a swooshing sound as you move the VO cursor to the table containing the hierarchical view. You can then interact with the table, move the VO cursor to the "view" row, and press the same "mouse down" key combination to drop the object onto the view. If everything has worked as it should, you should notice two extra rows inside the "view" object. The first row represents the object you've just added, and the one beneath it is a kind of layout object which lets you specify the layout relationship between your new element and the other UI components in the interface.

Hi all and thanks for all of your suggestions. I'm very new to the forum and to the programmation. I would like to write and test my simple scripts in Python, using my mac. I've already tested EMACS 24.3 and Vim but they seems both unaccessible. I tried Python running from the app store and it allows me to do something but it has no basic features like automatic indentation and code completation. I know Xcode has these features but I don't know how to use it with Python. Any suggestion, both here or in private, will be very very much appreciated. Thank you in advance. GB

Hi, I wonder if you can help?
I am having difficulties working out how to get Xcode to drop a stub for a UI button function into the .M file.
Visually, it is done by having the "StoryBoard" and the corresponding .M file side-by-side and just drag the object from the StoryBoard to the .m file and it should do it. Well at least this is how it is described in a tutorial I am trying to get to work.
Unfortunately, I cannot figure out how to achieve the same using VO.
Any help would be appreciated.

Hello Eirik, Do you use until xCode to develop for iOS? I am a beginner and I have difficulties in making the connections of the Interface objects. with xCode 7 and xCode 8 it was so easy because I can use the ruller but in xCode 9 it is disappeared. Can you tell me, please, how can I do to make the connections? Thank you very much!