Category Archives: What I Just Learned

Oh, Google just turned my iPod touch into a free wifi phone

Today I noticed that Google turned my iPod touch into a free wifi phone. That’s nice of them.

photo 1

To turn your iOS device into a free wifi phone. Simply create a Google Voice #, and install the Google Voice and Google Hangouts apps on your device. You’ll be able to send and receive text messages with the Google Voice app, and read your Google Voice voicemail there too. The Hangouts app will let you make and receive calls to/from real phone #s, and instant-message with your friends.

Screen Shot 2013-10-19 at 5.28.06 PM

I’ve used Google Voice for several years. It’s great, because it gives you a free phone number that redirects to other numbers. I give people my Google Voice #, and when they call, it automatically rings several personal lines. Further, if I ever change or add a phone number, such as a new work #, I can always re-configure my Google Voice # to dial that #, without confusing everyone with yet another email about “delete this old #, add this new one”.

Screen Shot 2013-10-19 at 5.27.35 PM

Google Voice auto-transcribes voicemail as well, which is really nice, because you can eyeball skim/read a voicemail and click “delete” on a computer much faster than you can listen to your messages on a real phone. Bonus feature: you can text with google voice from a browser, or an iPod Touch – this is great for me, because I use a nokia brick phone with a t-mobile prepaid phone plan, and texting on 10-key is terrible.

Screen Shot 2013-10-19 at 5.10.12 PM

The downside to Google Voice has always been that it’s not actually a phone. When you dial someone with the Voice app, it dials your contact, then dials your real phone, and connects you together – you can’t just dial right out on a computer or non-phone smart device like an iPod touch and use a headset.

There have been several inexpensive or free “turn your iPod Touch into a wifi phone” gimmick apps or services over the past few years, but they’ve always been a hassle (listen to a 30 second ad before your call begins..) or short-lived – so, I’ve just always dialed directly with my brick phone, and told my contacts “my real number is the google voice #, ignore the caller id”.

That all changes with the latest version of Google’s Hangouts app on iOS. The latest version allows you to dial and receive phone calls right from your iOS device, for free. Dialing out will show your google voice # on your contact’s caller id, and when someone dials your Google Voice #, your connected iOS devices will receive an notification that you’re being called – and your real phones will still ring too.

photo 2


Hangouts is Google’s rebranded Google Talk service – their instant messaging service. It allows you to chat with your friends or groups of your friends, video chat, and audio chat with them. It’s basically Google’s competition to Facebook Messenger and Skype.

This is a great development for users like myself who don’t want to pay $70-$100 per month for a smart phone w/ a data plan. I typically pay about $100 for 4 or 5 months of service, because I primarily use audio/video chat on skype and email or facebook for communication. Now, I’ll be using even less pre-paid cell minutes when I need to make a call from my home or office, or anywhere else with reliable wifi. Cool.

IOS 6 app store crash on your iPod touch 4? Restore.

For weeks the app store has crashed constantly on my iPod Touch 4th gen after the over-the-air IOS 6 update. Restoring the iTouch to a fresh install of 6.0 on iTunes fixed the problem and now the app store works better, not perfect, but better.

Symptoms: I would search for something, and swiping left or right on the cards would crash – sometimes I would be able to see some cards if I let the app sit for a half minute and pre-fetch everything, but when I got to item 24 or so I’d be gauranteed a crash again. I’d have similar problems browsing categories of apps and trying to install them. Sometimes I’d tap the “Free” or “$1.99” button for an app, and the button label would switch to the size for “install”, but actually be blank… at that point tapping on the button did nothing. Every time I tapped “updates”, then “purchased” to install something my wife had recently put on her iPod – crash.

Attempted Fixes: I run a lean machine, I dont do iCloud, I minimize the number of notification center apps (basically facebook, and mail, that’s about it), and I tried to alleviate the crashes by closing all background apps. No dice. I also tried restarting the device several times, which still did not fix the app store on my device – it was simply messed up.

Device History: This device was a 4.x IOS stock install, updated to 4.2 and/or 4.3 later via computer tethering. Later it was updated to 5.0 via computer, and then to 5.1.1 over-the-air. Finally it was updated to 6.0 over-the-air. I never once restored the iPod to a “fresh” install for any of those versions IOS, and I suspect there was some minor update bug that rears its head when you’ve been through a number of update cycles from version to version in the past without a clean/fresh install.

How to Restore: Restoring your iTouch is easy, you hook it up to your computer, let iTunes backup your apps and app state. You then tap the “restore” button. iTunes will then install a fresh copy of IOS (without retreading upgrade cycle ground), reboot your device, and then put your apps/music/etc and app settings back exactly the way they were before. Before I restored, I backed up my photos, notes, and other things I’d miss if something went wrong, just in case. I’d recommend that you do the same.

What works better: After restoring, I am able to easily navigate hundreds of search result cards deep, and install multiple apps from the categorie top X lists without a crash, but I’m still unable to view previous purchases without a immediate crash. I’ve purchased hundreds of apps over the past few years, so that could have something to do with it. I also still see the button labels being broken after tapping the “Free” price button on apps I’ve never installed before, but now tapping that button a few times after a few seconds eventually flips to “installing” and all is well. I’ve succesfully had the app store running while installing 3 apps, still browsing, an no problem at all – it seems much smoother, but I’m just happy it doesn’t insta-crash when I try to do almost anything anymore.

There are some threads floating around on the issue, and numerous bugs opened on apple’s bug reporting site. I’ve seen some discussions where some users try restore and claim it’s not working well for them, your mileage may vary.

Making objective-c blocks synchronous

Many IOS libraries require you to do things asynchronously. Some of the better libraries provide both asynchronous and synchronous models to work with, but some do not.

IOS’ ALAssetLibrary is a good example of a library providing only asynchronous processing. The ALAssetLibrary allows you to fetch images, videos, and the like from a user’s camera roll, and you’re required to work with things in blocks, using a forced asynchronous method. In most cases, you’ll want asynchronous processing when working with the ALAssetLibrary, but sometimes that may be overkill.

If you want to synchronously reason about a series of assets in the library, you’ll want to wrap the async block mess in something synchronous. For example, in my case, I wanted to synchronously check if asset URLS previously stored are still valid.

OmegaDelta’s How to wait for iOS methods with completion-blocks to finish shows you how to synchronously reason with ALAssetLibrary, or any other asynchronous block for that matter.

I’ve wrapped OmegaDelta’s example into a utility method that suits my specific use case in a utility called AssetURLChecker.

View or Download the AssetURLChecker utility code.

You can use this example code to easily wrap any asynchronous call into something synchronous, for simplified reasoning.

Careful though, synchronous code will not be as performant as asynchronous code, be sure you know what trade-off you’re making for your simplification.