How to Remove Noise With Audacity

Download Audacity

You’ve got your recording finished and realized there’s a hum or hiss on one half of the recording. This quick tutorial will walk you how to import your audio into Audacity, split the stereo track and remove the noise.

Start by downloading Audacity from http://audacity.sourceforge.net for your operating system (Mac, Linux or Windows).

Open up Your Stereo Recording in Audacity

In this case we have an mp3 that was recorded from Skype via Piezo from Rogue Amoeba. It records your mic on one channel, and the Skype caller on the other channel.

Continue reading “How to Remove Noise With Audacity”

How to Configure Verizon FiOS Router to Give Network Control to Airport Extreme

Introduction

Bart Busschots of http://bartb.ie helped me figure out this configuration that so many people are requesting. Bart’s diagram shows the end condition. The screenshots in the tutorial are from an Actiontec router supplied by Verizon running firmware version 40.20.7 in 2013.

In this tutorial we’re going to:

  • Turn off Wireless on the Verizon router
  • Change the IP range that the Verizon router serves out to start at 192.168.1.10
  • Enable the DMZ on the Verizon router and set it to 192.168.1.2
  • Set the Airport Extreme to static IP and assign it to 192.168.1.2

This combination of steps will allow the Airport Extreme to control your home network serving out IP addresses, and to execute port forwarding (without having to also do that on the Verizon router).

Introduction

Log into Verizon Router at 192.168.1.1

User Name and password are taped to the side of the router

Log into Verizon Router at 192.168.1.1

Select Wireless Settings

Select Wireless Settings

Under Basic Security Settings Turn Off Wireless on the Verizon Router

Under Basic Security Settings Turn Off Wireless on the Verizon Router

Select Advanced

Select Advanced

Proceed

Proceed

Select IP Address Distribution

Select IP Address Distribution

Select Action next to the Dynamic IP Range

Select Action next to the Dynamic IP Range

Change the Starting IP Address to 192.168.1.10

Change the Starting IP Address to 192.168.1.10

Click on Firewall Settings

Click on Firewall Settings

Proceed

Proceed

Enable DMZ Host IP Address

  1. Click the checkbox
  2. Set DMZ Host IP Address to 192.168.1.2
  3. Click Apply
Enable DMZ Host IP Address

Open AirPort Utility

Click on the image of the router or the name to reveal the Edit button

Open AirPort Utility

Click Edit

Click Edit

Select the Internet Tab

Select the Internet Tab

Set the APE to a Static IP

  1. Select Static for Connect Using
  2. Change the IP address to 192.168.1.2 (as we set up in the DMZ on the Verizon router

don’t click Update just yet

Set the APE to a Static IP

Select Network Tab

And change router Mode to DHCP and NAT and click Update

Select Network Tab

Ignore Double NAT

You will get a warning (a red circle with a number in it) that if clicked will say Double NAT. This can be ignored by clicking on the router, hovering over Double NAT, Clicking and selecting Ignore. You are now free to play about the Internet.

Ignore Double NAT

How To Set Up a VPN Server Using a Mac

These instructions may seem arcane and complex but they’re really easy if you just follow along step by step. Donald Burr of Otaku No Podcast (otakunopodcast.com) created all of these instructions in text form, Allison just created the ScreenSteps tutorial!

I’ll be focusing on using a Mac on your home network using an Airport Extreme Router (of course any router will work but the screenshots will be for the Airport). If you have a router capable of installing the Tomato Router Firmware, you should look at Donald’s full instructions because you may not need to use a Mac at all for this, your router can do it all. See Donald’s notes for other options.

Read Donald’s instructions ===> here.

If you’d rather download this manual for easy off line reference, click here.

If you’ve installed the VPN Server but would like to UNinstall it, click here for instructions.
If you can connect to your VPN server but can’t get outside your network, click here.

Let’s get started already!

SECTION 1 – Setting Up a Static IP for the Server on the LAN Side

These instructions should be completed on the machine that will become the VPN server.

Open Network Preferences

wpid4031-media_1365280662765.png

Select Advanced

wpid4032-media_1365280675209.png

Copy the Mac Address

wpid4033-media_1365280721095.png

Open AirPort Utility

wpid4028-media_1365280516371.png

Click on your router, in my case it’s called White Dart.

Select Enter Router Password

wpid4029-media_1365280554220.png

Enter your password when prompted and click OK.

Select Edit

wpid4030-media_1365280584891.png

Select the Network Tab and Click the + Button

wpid4034-media_1365280882600.png

Paste in the Mac Address You Copied Earlier

wpid4035-media_1365280918919.png

Select Update

wpid4036-media_1365280952190.png

Select Continue

wpid4037-media_1365280961141.png

Quit Airport Utility when this operation completes.

SECTION 2 – Creating Account at No-IP.com

wpid4038-media_1365281321183.png

Navigate to http://www.noip.com and select Sign Up.

Create a Username and Password

wpid4039-media_1365281419227.png

Enter your Email address. Note the host name shown which is free, but if you want to pay you can get more options. Scroll down to the bottom of the page.

Select Sign Up

wpid4040-media_1365281428527.png

Email Confirmation Will be Sent

wpid4041-media_1365281518624.png

Click the Link in the Email

wpid4042-media_1365281542237.png

Download the Update Client

wpid4043-media_1365281570364.png

This client will run in the background and check to see if your IP address has changed, and if it has, will send it to no-ip.com

Download and Install the Client

wpid4044-media_1365282117739.png

Enter Your No-iP.com Account Info You Just Created

wpid4045-media_1365282485030.png

This menu should pop up automatically.

Click OK

wpid4046-media_1365282491538.png

Click on Hosts and Check the Box Next to the Host Name You Chose

wpid4047-media_1365282517357.png

It may take a few moments for the host name you selected at no-ip.com to show up. Make sure you note this name, you’ll need it later.

Select Update Now

wpid4048-media_1365282533083.png

Turn on the Daemon

wpid4049-media_1365282588526.png

I chose this rather than running the application in the background all the time.

SECTION 3 – Installing Xcode and Running Command Line Tools

Find Xcode in the Mac App Store

Install Xcode

wpid4050-media_1365282711107.png

Install Java

wpid4051-media_1365284749241.png

Xcode only installs the standalone Java, and it does NOT include the Java Web plugin that has been the subject of so many security vulnerabilities lately.

Select Install Next to Command Line Tools

wpid4052-media_1365285864062.png

Wait till the installation finishes and quit X-Code

Type xcodebuild -license to Open the License Agreement

wpid4053-media_1365287350119.png

Start Hitting the Space Bar to Scroll Through the EULA – A LOT of Times

wpid4054-media_1365287366580.png

Type Agree

wpid4055-media_1365287392448.png

Type agree

Joy of Agreement

wpid4056-media_1365287403891.png

SECTION 4 – Installing MacPorts

wpid4057-media_1365287788717.png

Navigate to https://distfiles.macports.org/MacPorts/ and scroll to the bottom to download the installer file for your OS.

Install MacPorts

wpid4058-media_1365288008992.png

Enter These Commands in the Terminal

wpid4059-media_1365288274692.png

To run the self update to Macports enter:

  source ~/.profile
then
  sudo port -v selfupdate

and enter your administrator password

Success

wpid4060-media_1365288401688.png

Open the VPN Software

wpid4061-media_1365288464077.png

Enter

  sudo port -v install openvpn2

and watch a lot of glop go by…

SECTION 5 – Installing Tuntap Drivers

wpid4062-media_1365288693615.png

Open the Package File (in the folder after tuntap expands)

wpid4063-media_1365288872704.png

Gatekeeper won’t let you just double click on the installer package (it will complain that it is from an unknown source), you have to right click on the installer package and choose “open”.

SECTION 6 – Donald’s Nifty Scripts of Doom

Download Donald’s scripts from: https://dl.dropbox.com/u/169813/openvpn-mac.tar.bz2

Type These Commands to Unarchive the Scripts

wpid4064-media_1365289258876.png

cd ~/Downloads
tar xvjf openvpn-mac.tar.bz2

Setting Up OpenVPN Server

wpid4065-media_1365290046566.png

We’re now going to run Donald’s scripts. Enter this command:

  cd openvpn-mac && sudo bash setup-openvpn-server

Name your Server (I’ve entered kyles-mac-vpn)
Enter the dynamic dns host name you noted back on no-ip.com (you DID note it, right?)

Keep Answering Questions

wpid4066-media_1365290326768.png

The first time through you need to answer these. These steps will be duplicated MANY times, but after this the answers will be there and you can simply hit Enter for each questions.

Hit Enter for All These Questions for an RSA Key

wpid4068-media_1365290494060.png

And Again for Some Reason

wpid4067-media_1365290461185.png

Keep Answering…

wpid4069-media_1365290595513.png

And Again

wpid4070-media_1365290809777.png

And Again…

wpid4071-media_1365290886144.png

Whew!

wpid4072-media_1365290948754.png

Enter passphrase and password as many times as they ask for it!

Finder Window Opens Showing config-files

wpid4073-media_1365291120916.png

Copy this file to Dropbox. It will be the first connection file you test. It would be good to name it something associated with the device on which you’ll use it (you’ll be creating one of these for each of your devices).

Create a New VPN Connection Document for Each Device You Have

In Terminal, enter:

  sudo setup-openvpn-client connection-name

where connection-name means something to you for each different device you’ll want to connect to the VPN server. Move each of these files to Dropbox to be picked up on your devices.

SECTION 7 – Opening up UDP Port 1194

wpid4074-media_1365291286486.png

Open Airport Utility again, select your Airport again, Select Edit again. Select the Network tab, and select the + under Port Settings

Enter Information As Shown

wpid4075-media_1365291365335.png

Select Update

wpid4076-media_1365291371431.png

Wait until your Airport updates.

SECTION 8 – Install VPN Software on iOS

wpid4021-IMG_5127.png

Download OpenVPN Connect from the iTunes App Store.

Open Dropbox

wpid4022-IMG_5128.png

Find the file you created and moved into Dropbox and tap on it.

Select the Open In Button in the Bottom Right

wpid4023-IMG_5129.png

Select Open in OpenVPN

wpid4024-IMG_5130.png

Click the Green Plus Button to Import the File

wpid4025-IMG_5131.png

Enter the Password

wpid4026-IMG_5133.png

Enter the Password you created in the creation of the file, and tap the Save switch to turn it on. Finally tap the Off Switch to Connect to the VPN.

Connected!

wpid4027-IMG_5134.png

SECTION 9 – Install VPN Software on OSX

wpid4077-media_1365292563757.png

Two options for a VPN application on the Mac. Donald recommended Viscosity from http://www.sparklabs.com/viscosity/download/ which is $9 per Mac.

After the show Dr. Matt suggested the free TunnelBlick from http://code.google.com/p/tunnelblick. I installed both and they both work well. This tutorial will be for Viscosity, but if you try Tunnelblick you have to do one thing to make it work. In the Settings, Configuration tab, select Advanced and then uncheck the box to use TunnelBlick’s tun/tap drivers.

Let’s keep going with Viscosity as our example.

Install Viscosity

wpid4078-media_1365292763152.png

Click on the icon for Viscosity in the menubar and choose Preferences.

In the Connection Tab Click on the Plus Button at the Bottom

wpid4079-media_1365292787379.png

Select Import Connection From File…

wpid4080-media_1365292806653.png

Navigate to the File You Created for This Device

wpid4081-media_1365292836675.png

In my case I called it alsmac so I could tell which one to open

Connection Imported

wpid4082-media_1365292845976.png

Connect Using Menu Bar App

wpid4083-media_1365293050152.png

Enter the Password You Created

wpid4084-media_1365293071771.png

No clue which one of the 198 I entered, luckily I typed the same one over and over again.

Fleeting Notification of Connection

wpid4086-media_1365293260928.png

To test mine at home I used a Mifi so I was on a different network.

Use the Menubar Icon to Disconnect When You’re Through

wpid4085-media_1365293105700.png

If you want to prove to yourself that you’re on VPN – go to http://ipchicken.com before and after you VPN and you’ll find that your IP changes to your home IP. Congratulations!

How to Set Up Signed and Encrypted Email

In Episode 412 of the NosillaCast on 31 March 2013, Bart walked us through how to set up signed and encrypted email on Mail.app on the Mac, and also on iOS. Below are three Clarify Tutorials designed to give you the step by step instructions. Bart and I worked on this together, and we decided breaking this up into three separated tutorials made sense.

First we’ll teach you first how to obtain a certificate and generate a private key and then send signed and encrypted email from Mail.app:

How to Set Up Encrypted and Signed Email in Apple Mail

You can stop there, but if you want to use a second Mac to send email or use a different email client, or even iOS, you’ll need to know how to export your certificate:

How to Export Your Certificate and Private Key

Finally if you want to read encrypted email, and sign your emails, you’ll need the last tutorial. Unfortunately, iOS isn’t at all easy to maintain for actually sending emails encrypted, but you’ll still be able to send them:

How to Read Encrypted and Send Signed Emails on iOS

How to Make iTunes Refresh Podcasts on a Schedule

The problem to be solved here is that it’s a hassle to remember to tell iTunes to update your podcasts before you sync your iPod or iPhone to get the latest shows. The easiest thing to do on iOS is to use a podcatching client like Downcast, which lets you skip iTunes altogether but if you’ve got an iPod Nano or Shuffle, you don’t have this option. iTunes sort of has it’s own little schedule it decides on for updating podcasts, which seems to be related to some time you asked it to do this before.

In this very easy tutorial we’ll use some tools that you may not have used before but I assure you it IS quick and easy and reliable. The basic idea is that we’re going to create a calendar event using Automator, and we’re going to stick an AppleScript into it which will tell iTunes it to refresh your podcasts.

Continue reading “How to Make iTunes Refresh Podcasts on a Schedule”

How to Encrypt a File or Folder in OSX

You need to email a file or folder of files to someone, but the information is sensitive. These slightly geeky but easy to follow instructions will show you how to do it.

We’re going to compress the file(s) into a single zip file that’s encrypted by issuing one single command into the Terminal.

When you email the zipped file to a Mac or Windows user, all they will have to do is double click the file and enter the password you used to encrypt the file. Please after doing this do NOT put the password in the body of the email! Call them, text them, direct tweet them, just don’t put it in the email.

Continue reading “How to Encrypt a File or Folder in OSX”

How to Disable Java in Safari

Quick tutorial on how to disable java on Apple’s Safari browser for the Mac.

Open Preferences

wpid3148-media_1346294984041.png

Click on Safari and select Preferences

Select Security

wpid3149-media_1346295015788.png

On the Preferences menubar select the Security tab.

Uncheck Enable Java

wpid3150-media_1346295036848.png

If the box is checked next to Enable Java, uncheck it and you’re done.

How to Disable Java in Firefox

Quick tutorial on how to disable java on Mozilla’s Firefox browser for the Mac.

Tools

media_1346294376759.png

Click on Tools in the menubar and select Add-ons

Plugins

media_1346294419356.png

Click on the Plugins tab on the left, and click Disable next to java Applet Plug-in. You’re done!

 

How to Build Accessible iOS Apps

These notes were created by Donald Burr of Otaku No Podcast from otakunopodcast.com. Donald was the guest on episode #364 of the podcast. If you’d like to listen to the audio as you read along, click the link below:

Donald Burr on Accessible App Development

How to Build Accessible iOS Apps by Donald Burr

When the iPhone first came out, people assumed that the blind wouldn’t be able to use it because it’s a touchscreen device with only 4 buttons. Apple proved them wrong. They have embraced accessibility in a BIG way. The iOS platform is the industry leader in mobile accessibility. Android, Windows Mobile, Blackberry, etc. don’t even come close. That’s why I’m a Mac/iOS user – my vision has fortunately remained stable, but I am always afraid that things might take a turn for the worse… but if they do I am ready for it

When talking accessibility, what are we talking about?

Primarily will be talking about accessibility for the visually impaired, because that’s the one that requires the most effort from developers. There are some considerations for other disabilities which I will briefly touch on later.

Basically each thingie on screen (button, text field, label, icon, etc.) has certain attributes that the Accessbility API’s need:

  • Is it an accessibility element? (Should VoiceOver be able to “see” it and recognize its existence?) (isAccessibilityElement)
  • What is it? (accessibilityLabeland accessibilityHint)
  • What are its traits? (accessibilityTraits)
  • Type of item (static text, button, image, adjustable control, etc.)
  • Is it clickable (can you interact with it)?
  • If it’s a selectable object, is it currently selected?
  • Does clicking on it start some sort of media playback (audio/video)?
  • If it’s an adjustable control, what is its current value? (accessibilityValue)
  • What are its on-screen coordinates? How big is it? (accessibilityFrame)
  • Here’s the good news: Apple makes it really easy to make your apps accessible. They provide a very rich set of tools and APIs that help with this. Which means you have absolutely positively NO excuse not to! In most cases, all it invokes is literally just a few extra lines of code, and poof, instant accessibility. In some cases, no coding is required at all.

    Standard UI elements:

    • One of the great things about developing for iOS is Interface Builder – you can piece together your program’s UI by dragging and dropping from a large palette of UI widgets (text labels, buttons, sliders, etc.)
    • If you use these standard interface elements – guess what – the system automatically makes them accessible. Since Interface Builder knows what it is you’re putting on screen, it automatically fills in the necessary accessibility information.
    • Works best if your UI has obviously titled elements (i.e. a button titled “Play” that starts playing something).
    • Beware ambiguous labels (or controls that don’t have a label)!
    • Example: In the Otaku no Podcast app, in the Podcasts screen (first tab), there are entries for “Latest Audio Podcast” and “Latest Video Podcast.” Beside each is a “Play” button. It’s obvious to a sighted user what each Play button does; however, for a VoiceOver user, all they would hear if they tapped it is “Play” — play what??!
    • Example 2: In the Otaku no Podcast app, look at the Audio Player screen. The “play button” at the lower left uses the “play” graphic – no text label. In this case, since VoiceOver doesn’t have a text label to fall back on, it uses the filename of the image that the button is using. So you’ll hear something like “playbtn dot PNG” which is even worse!
    • In cases like this, we need to give iOS some more specific information.
    • In Xcode, highlight your UI element, then go to the Identity Inspector. There you will find a section on “Accessibility.”
    • “Enabled” – whether this item should respond to VoiceOver (You’ll almost always want this)
    • “Label” – What you want it to say (Example: for the “Audio Podcast -> Play” button I put “Play the latest audio podcast”; for the “play graphic” button I put “Play”)
    • “Hint” – This text is spoken after a short delay after the “label” is spoken. Useful to give the user additional information about this particular UI element. (Example: for the Refresh button, the button’s Label is “Refresh”, and its Hint is “Tap to check for new episodes…” – it gives the user some additional information if he/she is confused.)
    • “Traits” – Most of these options are very specialized, and you don’t want to go turning them on willy-nilly. Here are the important ones:
    • “Button” – is this a button?
    • “User interaction enabled” – can you “do” something with it? (I.e. tap a button, enter text into a text field, etc.)
  • You can still manipulate these values in code if you want (handy if e.g. you need to change your UI to respond to conditions when your app is running).
  • Some actual examples from the Otaku no Podcast app: https://www.dropbox.com/gallery/169813/1/iOS%20Accessibility?h=1f050c
    Look at “OnP main screen – play latest button,” “OnP main screen – refresh button,” and “OnP player screen – graphical play button”
  • Custom UI elements

    • Sometimes the standard controls aren’t enough (you need more/different functionality); also sometimes you may use standard controls, but want to create and manipulate them in code (rather than using Interface Builder). In these cases, you will need to use code to set up all the necessary accessibility information.
    • All accessibility information can be set in code.
    • Example:https://www.dropbox.com/gallery/169813/1/iOS%20Accessibility?h=1f050c
      Look at “adding to code 1” and “adding to code 2”

    Accessibility Containers

    • Sometimes you may have an object that is subdivided into multiple sub-objects. You need to provide accessibility information for those sub-objects.
    • Example: the Convention Calendar tab in the Otaku no Podcast app. The entire calendar view is a single object; each individual day is a sub-object. Unfortunately this is one area where I still need work; it is completely inaccessible. I’m using an open source calendar library that isn’t yet accessible. I’m working with the developer to add accessibility to it. For an example of this done right, take a look at the iPhone’s Calendar app, in Month view.
    • In this case, we use a series of “accessibility containers.”
    • Each container provides a full set of accessibility information to the OS (description/label, value, hint, etc.), as well as the bounds (the physical location/dimensions of the area where this accessibility information is attached to).
    • These elements are stored in an array (an ordered collection of objects). You need to provide three pieces of information to the Accessibility API’s: the number of items in this array, a way of retrieving a given item #, and a way of testing if a given item is part of the array. (In 99% of the cases, these will be trivial one-liners.)
    • Example:https://www.dropbox.com/gallery/169813/1/iOS%20Accessibility?h=1f050c
      Look at “container code 1” and “container code 2”
      Another good (more real life) example can be found in the Use Your Loaf TaskTimer project (see below); look at theUYLCounterView.m file

    Accessibility Actions

    • If you are creating a custom adjustable control, you need to give VoiceOver information on how to manipulate its value.
    • VoiceOver has two standard gestures: swipe up (increases the value of something) or swipe down (decreases it).
    • So when coding your custom control, you need to create special “increment” and “decrement” code that VoiceOver can use to change its value.
    • A good example of this is the page turner in iBooks (the little dotted line with the box at the bottom that lets you quickly page through a book).
    • A third type of gesture is “scroll.” This is meant for a control that scrolls to a different part of your UI. Example: moving between home screens, or scrolling between cities in the Weather app.
    • Example:https://www.dropbox.com/gallery/169813/1/iOS%20Accessibility?h=1f050c
      Look at “action code 1” and “action code 2”

    UI Changes

    • The iOS user interface is very dynamic. Things are moving around, morphing, swooping in and out, etc. Obviously blind users can’t see this. So iOS provides a way for developers to let the user know that “something happened” using VoiceOver.
    • There are three types of UI change notifications.
    • Screen changes: when your UI changes dramatically. Usually when a user moves into a different part of your app (navigates to a different screen). VoiceOver notifies the user with a tone, and it clears its caches and does other preparations to deal with a new set of accessibility data.
    • UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil);
  • Layout changes: if some part of your UI changes, but the user hasn’t necessarily jumped to an entirely different part of your app. (Example: in the iTunes Store app, tapping on the price label ($0.99, etc.) next to a song changes it to a “Buy” button.) This notification tells VoiceOver to re-read the current state of all accessible items that are on-screen, and by doing this it figures out what has changed and informs the user of those changes.
    • UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
  • Dynamic changes: if a part of your user interface is dealing with some dynamically changing information (state changes, data changes, etc.). This notification tells VoiceOver to read it out to the user. Example: in the Compass app, the compass value is constantly changing as the user moves his/her device in space. The Compass app sends a dynamic changes notification that tells VoiceOver to read out your current heading. Also useful for communicating any sort of significant status change in your app (“Loading complete,” “Connected to server,” etc.) You may only want to do this when a significant change in data has occurred, otherwise it can get real annoying. (for example, Compass only notifies when the compass value has changed by 5 degrees I believe.)
    • UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @”Loading complete.”);

    VoiceOver-specific API

    • Sometimes it is useful to determine whether or not VoiceOver is running, and to do different things depending on whether it is or not.
    • A program can, at any time, test to see whether VoiceOver is enabled or not.
    • if (UIAccessibilityIsVoiceOverRunning()) {
      // VoiceOver is active; do something different
      }else {
      // VoiceOver is NOT active; do the usual thing (whatever that may be)
      }
  • Also, programs can sign up for the system to notify them whenever the VoiceOver status changes.
    • [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(handleVoiceOverStateChange:) name:UIAccessibilityVoiceOverStatusChanged object:nil];
  • Your program can also tell where VoiceOver’s “focus” (the object that it’s dealing with) is, and when “focus” enters or leaves any given object.
    • accessibilityElementIsFocused
    • accessibilityElementDidBecomeFocused
    • accessibilityElementDidLoseFocus
  • A good use for this is, when a user is running VoiceOver, to present a more simplified UI to them, or otherwise change your UI to make it easier for VoiceOver users to interact with. Example: In the Photos app, the photo controls normally disappear after a few seconds to let you view the full image. This could be confusing to VoiceOver users; so if Photos detects that VoiceOver is in use, it prevents this auto-hiding behavior.
  • Testing Accessibility

    • Naturally, like any other aspect of software development, you’ll want to test your accessibility code.
    • In the iOS simulator
    • The iOS Simulator has a built-in Accessibility Inspector. It displays all the accessibility data of any given object on screen (just click on it).
    • Access it by pressing the virtual Home button, launching the Settings app (you might have to swipe right to get there), tapping on General, then Accessibility, then turn on the Accessibility Inspector.
    • Example: https://www.dropbox.com/gallery/169813/1/iOS%20Accessibility?h=1f050c
      Look at “Accessibility inspector”
  • On real devices
    • Unfortunately the accessibility inspector doesn’t support certain actions (notably the swipe gestures that let you change values of controls). Also it doesn’t really give you a “feel” for how an actual blind user would interact with your app. For this you really need to test on real hardware.
    • To enable accessibility – Settings -> General -> Accessibility -> VoiceOver -> turn it ON.
    • A shortcut is to set up the triple-click home button shortcut: Settings -> General -> Accessiblity -> Triple-click Home -> set it to VoiceOver
    • If you’re feeling really brave, you can enable Screen Curtain (completely turns off the screen, the closest thing to actually turning yourself into a blind person, and much more comfortable than a blindfold (or poking your eyes out)). Just activate VoiceOver then triple tap using three fingers. Repeat to turn off screen curtain.
  • Of course, doing your own testing is fine (and indeed is essential), but you really should be sending your app out to others to test.
  • Miscellany

    • If you localize your app, you also need to localize your VoiceOver prompts! (VoiceOver is available in 30 languages)
    • If you’re not localizing, you really ought to. The App Store is global, why shut out a potentially huge user base? Getting translators is easy and relatively inexpensive (try Craigslist).
    • Remember that localization doesn’t just mean translating words and letters; some countries have different ways of expressing date/time, currency, etc. iOS has code that helps in these conversions.
  • It’s always good to think outside the box.
    • With clever use of the accessibility tools, you can make things accessible that you wouldn’t think were possible.
    • A good example is the Stocks app. You’d think that there is no way that the graph at the bottom could be made accessible. You would be wrong.
    • They used accessibility areas to slice up the graph. For each slice, it tells you a representative date within that period, and the stock price for that date.
  • Less is more.
    • Keep your labels short. Users are going to be scrolling through these dozens of times.
    • If you want to provide additional information, use an accessibility hint. (That way users only get the additional information if they actually need it)
  • The more buttons, interactive elements, etc. on a screen, the harder it is for a VoiceOver user to navigate it.
    • If you really want the fancy UI, check to see if VoiceOver is in use; if it is then present a simplified UI.
  • Do not include an object’s type (“button,” “slider,” etc.) in its accessibility label. iOS will automatically read out the item’s type itself, so there’s no need for you to do so also (besides it makes your app look amateurish).
  • Remember that there are other disabilities besides blindness.
    • Physical Disabilities:Try not to make your UI teeny tiny. Of course this makes it more difficult for sighted people to use your app. But it becomes orders of magnitude worse when you throw physical disabilities into the mix(motor control difficulties, CP/MS, or people who use a head-mounted pointer, etc.) It also makes it harder for visually impaired (but not completely blind) users to see your app as well. IMHO this might be a compelling argument for a larger-screened iPhone (more space to spread out your UI in).
    • Deaf/Hard of Hearing: Some programs use sounds to indicate that something happened. It’s always a good idea to also include some sort of visual feedback as well, for those who are deaf/HOH.
  • Use standard controls (text entry fields, buttons, etc.) whenever possible. Not only is this good for usability (users know what an iOS text box/button/on-screen keyboard/etc. look like, they may not be able to instantly recognize your weird nonstandard UI); but using standard UI elements also gives you the highest level of compatibility with alternative input devices (head pointers,braille displays/keyboards, etc.). (Bad example of this is Mac OS Ken’s Secret Crypto Wonder Badge. Totally nonstandard keyboard.)
  • Resources

    The obligatory plugs section

    • Check out my iOS apps!
  • My portal site – links to everything I do, as well as houses my blog. http://DonaldBurr.com/
  • I’m on twitter as http://twitter.com/dburr/
  • And finally, if you are at all interested in Japanese animation (Anime), comics (Manga), food, travel, culture, etc., check out my podcast, Otaku no Podcast. http://otakunopodcast.com/
  • Posts navigation

    1 2 3 4 5 6 7 8
    Scroll to top