iBeacon Compatible Apple Devices

I was doing a little research to see if I could use my retired iPhone 4 as an iBeacon test device for either advertising or detecting, and unfortunately the answer is no.

Here is the list of Apple devices that officially support iBeacon, taken from the Apple KB article iOS: Understanding iBeacon (KB: HT6048):

To use iBeacon, you need iOS 7 or later, Bluetooth turned on, and a compatible iOS device:

  • iPhone 4s or later
  • iPad (3rd generation) or later
  • iPad mini or later
  • iPod touch (5th generation) or later

I was a little disappointed, but not really surprised. The iPhone 4 can barely run iOS 7, so it’s usefulness is rapidly declining, especially on the eve of WWDC 2014 (literally!)…

Open PDF Documents Full-Screen in Dropbox for iPad [#dropbox, #ux]

This was actually surprisingly difficult for me to figure out since there is basically no discoverability hints anywhere, and I literally found it by accident.

In the Dropbox app for iPad, if you open a Word or other Office document, there is a little button in the lower right hand corner for viewing the document in full-screen. However, if you open a PDF document, that button is not present. Hmmm…

Additionally, in the iOS 5 version of the Dropbox app, there used to be an arrow button in the navigation bar area to toggle the visibility of the navigation panel on the left. This served as an adequate almost-full-screen view of a PDF, but the (as of March 10, 2014) current version of the Dropbox app removed that functionality.

So for months I was in a bit of a predicament regarding how to view a PDF in the app – double-tap zoomed, but didn’t remove the Panel from the split view controller. But just this weekend, immedately after sending an email to Dropbox lamenting the loss of the full-screen PDF feature, I discovered accidentally how to do it. It’s not immediately obvious how to view it in full screen, but thankfully, it is possible!

Turns out the answer is…. Single Tap. [facepalm!]

Just tap once on a PDF in Dropbox for iPad and your document will be shown in full-screen, and better yet, all of the other UI elements like the navigation bar fade away and you just see the document itself. So, while it was a little more difficult for me to find, once I discovered it I like the improvement in the full-screen view. I’m not sold on single-tap as a full-screen view gesture, but at least it’s there in some fashion.

How to edit an incorrect commit message in Git [#git]

This was a new one on me… and I needed it recently. I accidentally committed a change with a totally nonsensical message since I accidentally copy-and-pasted some code into the message field of my commit, which automatically commenced.

Thankfully, there is a way to update it before you push (that seems to be the key to success here… don’t push it after you do the commit with the bogus message):

version control – How do I edit an incorrect commit message in Git? – Stack Overflow

git commit --amend -m "New commit message"

I’m just relieved that this can be done… and a little surprised — given how grumpy and curmudgeonly Git feels sometimes.

How to Format JSON in TextWrangler [#iosdev, #json, #webdev]

If you’re a TextWrangler user and you wanted to be able to format a block of JSON, you can do it yourself by following the instructions at Java Dev on Mac OS X: Format JSON in TextWrangler

1. Create text (Python) file called “Format JSON” in the following location:

~/Library/Application Support/TextWrangler/Text Filters/Format JSON.py

2. Add the following Python code to take care of the formatting:

import fileinput
import json
if __name__ == "__main__":
  text = ''
  for line in fileinput.input():
    text = text + ' ' + line.strip()
  jsonObj = json.loads(text)
  print json.dumps(jsonObj, sort_keys=True, indent=2)

One thing that tripped me up is that you need to select a block of text before running the macro. Otherwise it works great.

Thanks for the tip!

I’m not sure if it was due to installing newer versions of Xcode or Mountain Lion, but I noticed that I was getting an error when attempting to run the script.

Evidently the first line:


Might need to be:


…or maybe you could create a symbolic link as well, but for me, since I’m not a Python guru, modifying the script was the easiest way to fix the problem.

How to Know When Apple Finally Gets iCloud Right [#iosdev #icloud]

Gus Mueller of Flying Meat Software offers his opinions on what Apple must do to get iCloud right for developers:

The Shape of Everything: How to Know When Apple Finally Gets iCloud Right

But how are we going to know Apple has finally fixed iCloud syncing for developers and is really serious this time? And I’m not just talking about Core Data syncing, I’m also talking about the APIs developers are given to push document data back and forth. The broken stuff, the things developers laugh at Apple about and have given up on.

Super-Easy Date Formatting in Objective-C [#iosdev]

Available since iOS 4, the localizedStringFromDate:dateStyle:timeStyleclass method provides an extremely convenient way of formatting a date as a string. All you have to do is provide your NSDate object that you wish to convert, and pass the appropriate NSDateFormatterStyle value for the types of formats you would like for your date and time parts of the date. If you use NSDateFormatterNoStyle then the particular part will not be rendered. The other good news is that it’s generating a localized string, so the format is taken care of by the framework, which, honestly, is exactly how it should work in the first place.
[NSDateFormatter localizedStringFromDate:myDate
The generates “3/22/13″ in my locale (US), but if I switch my device to Portugal, for instance (of course), the date becomes “21/03/13″.
Here’s a link to the Apple Developer Docs.

How to conceal UIWebView’s initial white loading view [#iosdev]

Thanks to this StackOverflow thread, I was able to conceal UIWebView’s intial white, “blank page” look while it was loading.

iphone uiwebview inital white view – Stack Overflow

One thing you can try is put a UIView with the color you want and position it above the UIWebView with the same width and height. Then in the webViewDidFinishLoad method, set the UIView to hidden.

Hope it proves useful to someone else.