iPhone 6 Plus Screen Backlight Issue

I’ve noticed an issue I’ve been having with my iPhone 6 Plus a couple weeks ago. After the phone has been in my pocket for an indeterminate amount of time, I would randomly be unable to light the screen back up. The phone would come out of sleep, I could swipe to unlock (or use Voice Over) and I could see the backlight come on. The problem was the screen itself was just black – nothing to show. Rebooting sometimes fixed this. It was especially annoying when trying to board a plane and then being unable to bring up the boarding pass.

I noticed this week that I could produce a similar behavior more regularly. I needed something I could reliably reproduce before bringing it into an Apple Store. Here it is:

Hopefully they can repair or replace the device. I made the mistake of going with a regional carrier (US Cellular) and in the past I heard you had to arrange repair through the carrier. I’m hoping its just a screen replacement and they can do it in-store.

iOS Basics – UINavigation Controller & Back Button Text

I’ve brought an old project out of the moth balls recently, the Migraine Diary application I wrote as part of my master’s thesis.  It was my first “real” iPhone app and I call tell I didn’t know what I was doing entirely looking through the code.  What this has forced me to do, however, is re-learn some of the basics of iOS development and of Apple design patterns.  I have been spending some time back in the Apple developer documentation and will probably be posting some of the gotchas that tripped me up two years ago and I’m solving now with the better, more elegant solution.

Navigation controllers are very useful things to have in your app, and are probably the easiest thing to implement WRONG.  Two years ago, I assumed any time I needed a navigation bar up top that I needed to create a UINavigationController and make my view the root controller of it.  Silly me.

One of the problems I was facing in the Migraine Diary app was changing the back button text when I was one or more levels deep into a navigation controller.  My main view was titled “Journal Entries” and my child view “Journal Entry”.  By default, the controller will title the back button as “Journal Entries” which you can see clutters up the screen.

I found a lot of ways of hacking the title online, but there is really only one “right way” according to Apple.  The button titled “Journal Entries” is actually owned by the parent view.  Before you push the child view onto the navigation controller, do something like this:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@”Back” style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];
[backButton release];

Take note that you’re referring to [self navigationItem] not [[self navigationController] navigationItem] since you are in the PARENT controller.

That’s it!

iPhone Emoji in Adium

Have you enabled Emoji on your iPhone to use emoticon-like characters like 13 year-old Japanese girls?  Well if you have, you’ve noticed that sending those characters in e-mail and IM to non-iPhone users ends up in little boxes of unreadable gibberish if you’re lucky or whitespace.  Most people understand the concept of Unicode if you’re a geek.  Someone like my mom doesn’t always remember that Emoji being sent over IM, while she’s on her own iPhone, isn’t going to be readable when I’m on my Mac.

We all know, however, emoticons can convey a good portion of a conversation.  I don’t want to miss out on the conversation with my mom so I decided rather than schooling her every time “I CAN’T READ THAT MOM”, let’s hack Adium to show Emoji!  After a few minutes of research, I’ve discovered, some kind soul has already done the hard work.

  1. Go to http://www.adiumxtras.com/index.php?a=xtras&xtra_id=6226
  2. Download the ZIP file or attempt to install directly into Adium (Firefox was being a bitch and didn’t let me do this; I think Safari will work)
  3. Go into your Appearance Preferences and customize your Emoticons settings.
  4. Turn on “Emoji iPhone” and make sure it’s not first in your list.  At least one other one should be turned on (like Default).  You can click and drag the items in this list – put Emoji last.

Now when you receive an IM with an Emoji character, it should present itself as the proper image.  You can also select an Emoji character from the list, but be forewarned it’s a BIG list and not presented as cleanly like on the iPhone.  I pretty much use it to interpret the incoming characters and for going back in my archives.

CDMA / Verizon iPhone

There has been quite a bit of press about the upcoming Verizon / CDMA iPhone.  I’m happy to hear that AT&T will finally lose the monopoly on the iPhone in the United States, but I’m disappointed that nothing has come out yet about T-Mobile carrying the GMS version of the phone.  AT&T needs the competition to spread out the massive amount of users onto another network because frankly, they can’t handle the amount of growth they’ve experienced.  The iPhone is a great device, and I’ve had nothing but a positive experience for the most part with AT&T.

I’ll probably never switch from AT&T over to Verizon for the simple fact that GSM provides SIM cards, whereas CDMA does not.  I like having the option available to me to swap my SIM into a different device, like when I go camping, so that I don’t risk damaging the $400+ device when I don’t need to.  Of course, the iPhone 4’s micro-SIM provides its own unique challenges, but a simple physical adapter allows it to be used in an older traditional SIM card holder.

CDMA phones, at least in the USA, require the phone provider to activate each device and you cannot swap on a whim.  Most people could care less.  I on the other hand like being able to switch around equipment when needed, and not having to pay the provider to do it.

iPhone Migraine Diary

I may have mentioned it before, but I created a Migraine Diary application for the iPhone as my master’s captone/thesis project.  The school year finished out for me and I submitted the application to Apple on the 29th.  Two days – TWO DAYS – later they approved it and it’s listed in iTunes!

Head on over to Net Workz LLC to find the app.

I still have a lot of work left to do before I’m really happy with it.  Help screens, more graphing, and encryption are two things I really need to get out there.  Until then, enjoy!

Xcode & Snow Leopard – Logical unit tests hanging

I haven’t written unit tests before in Xcode.  I started to read Apple’s article on unit testing with iPhone development because I wanted to follow sound development principles with an agile approach.  Not long into the guide, I got stuck.  Literally.  Using Xcode 3.2 on Snow Leopard caused Xcode to lock/hang during the build of the logical unit test.  Same results after iPhone SDK 3.1 came out.  I couldn’t find anything online either except a few people experiencing the same issue.  In the system console (not Xcode console) I was seeing:

9/18/09 8:35:29 PM Xcode[669] -[XCBuildLogCommandInvocationSection setTestsPassedString:]: unrecognized selector sent to instance 0x2009b7620
9/18/09 8:35:29 PM Xcode[669] -runOperationInBackground raised an exception: -[XCBuildLogCommandInvocationSection setTestsPassedString:]: unrecognized selector sent to instance 0x2009b7620

Xcode[669] -[XCBuildLogCommandInvocationSection setTestsPassedString:]: unrecognized selector sent to instance 0x2009b7620

Xcode[669] -runOperationInBackground raised an exception: -[XCBuildLogCommandInvocationSection setTestsPassedString:]: unrecognized selector sent to instance 0x2009b7620

Needless to say, I was losing my mind. Finally, a user in the Apple Developer forums, “cde”, posted the following gem:

We have recently discovered the root cause of this problem.

People who are affected can work around it by (I hope you’re ready for this)…

…changing the Time Zone on your Build machine away from Central Daylight Time.  (In six weeks you can change it back, and people in Mountain Standard TIme will be affected.)

No, seriously.  Give it a try.

The problem is a single-character typo in a regular expression that parses the date stamp of the unit test. It causes it to miss the beginning of unit tests that are executed at -0500 or +0500 relative to GMT, so the end of those unit tests is unexpected, and it causes the build log parsing logic to initially hang and eventually crash.

As has been said, “Then I decided to use regular expressions, and I had two problems…”

So until it’s fixed, change your timezone to Pacific time.

Thoughts on the iPhone 3GS

Everyone is giving their two cents about the iPhone 3GS.  I’m excited to see that Apple is releasing a faster phone that still feels like the first generation iPhone.  Developers are used to a specific screen size for instance.  Drastically changing the environment will create the discord other cell phone manufacturers feel when it comes to 3rd party applications.

I do suspect, however, that next year will bring drastic change to the iPhone.  Apple is still getting to where they really wanted the 1st generation iPhone to be.  They realized that its easy to make their own hardware and software, but its hard when dealing with so many third parties.  Cell phone carriers like AT&T stand in the way of real progress.  Why doesn’t Apple follow suit with Virgin and create their own private label cell phone company?  I suspect that would give them a lot more flexibility in pricing and give them the ability to put whatever carrier they want behind the name.

Overall, I am happy with AT&T at the moment.  I am pissed to hear MMS and tethering won’t be available this coming week for the iPhone 3.0 launch.  I refuse to pay any more money for something that I can get for free by putting my SIM card into an OLDER phone.  Silly AT&T, you’re the death of the iPhone in the US.