Monday, April 29, 2013

Day 6: Top 20 Thing I Miss Most about Android

Top 20 things I miss most about Android after my first week as an iOS user:
  1. Show password
  2. Background sync
  3. Lower case letters keyboard when keyboard is lower case
  4. Easy access to frequently used punctuation on keyboard
  5. Long press for numbers and symbols on keyboard
  6. Tap to place cursor in the middle of a word
  7. Home screen widgets
  8. Lock screen widgets
  9. Unlock pattern
  10. The Action Bar
  11. Developer options
  12. Stay awake while charging
  13. Logcat
  14. FREE client for 1Password
  15. Photos in my contact list and favorites
  16. Ringtones and alarms (Who really uses Bark or Duck?)
  17. Share button
  18. One click app install
  19. Google Now
  20. Back button
Update: Google Now launched today for iPhone and iPad. I'm not sure if/how it will be able to achieve the same level of prediction and integration with other apps as on Android - but we shall see.

http://googleblog.blogspot.com/2013/04/google-now-on-your-iphone-and-ipad-with.html

Friday, April 26, 2013

Day 3: Development Environment

XCode is the official IDE and a natural choice for new iOS developers. However I have been a longtime user of IntelliJ IDEA for Android development as well as other JetBrains products including PhpStorm, PyCharm, and RubyMine.

Hoping to leverage my existing knowledge of these other IDEs, after a brief introduction to XCode I decided to try AppCode, the JetBrains Objective-C IDE.

AppCode runs on top of XCode, meaning XCode must be installed, and even uses XCode for all graphical UI editing capabilities. Anytime you open a Storyboard (.storyboard) or Interface Builder (.xib) file in AppCode, it launches XCode to interact with that file.

At first glance I like the overall layout of AppCode better, but that could be just because I am unfamiliar with XCode, where I still have a hard time finding things. And AppCode's Darkula theme is so much easier on the eyes than the bright white editor of XCode. Already being fluent with IntelliJ's keyboard shortcuts, it was pretty easy to get started. AppCode also gives you the option to use XCode's keyboard shortcuts (as well as many others).

One of the features I appreciate most about IntelliJ is the powerful code completion and code generation engine. The ability to quickly hit Option+Enter to generate a new class/method/variable on the fly saves a ton of time when coding. While the same concept exists in AppCode, these tools seem slightly less refined in IntelliJ's younger cousin.

For example, when attempting to call a method that does not exist, the statement is underlined in red.

The method someFunctionThatDoesNotExist appears with a red underline because it is not yet defined.
Pressing the keyboard shortcut for QuickFix Option+Enter reveals the ability to create a new method or property. This will update the header file StackOverflowManager.h and implementation file StackOverflowManager.m with a skeleton for the new method. If this function included input parameters those would also be configured through a form in a modal window.

The Option+Enter keyboard shortcut for Quick Fix reveals the ability to create a new method or property.
Here is another example of calling an undefined method, but this time the call is nested inside a macro. This example shows a SenTest macro from the OCUnit testing framework.

The method someFunctionThatDoesNotExist is currently undefined.
Unfortunately when the undefined method is written as an argument to the macro the option to create a new method or property is not available. This is unfortunate because calling a new function inside a macro is especially common when writing new code using test-driven development.

Quick fix keyboard shortcut does not reveal create method/property options when nested in a macro.
The workaround here is to declare a local variable to capture the result of the undefined method.

Result of someFunctionThatDoesNotExist is assigned to a local variable.
Now declared outside the macro the advanced code generation tools are once again available.

Option to create new method/property is revealed when declared outside the macro.
What also seems to be missing is the ability to quickly generate a new test method using Control+N in a test file. Looks like I will be adding a custom Live Template for this use case, which is an AppCode extension to XCode snippets.

For more code generation goodness, checkout this article on the official AppCode Blog.

Does anyone else have experience using both XCode and AppCode? If so, I am interested to hear about which one you like better and why in the comments.

Thursday, April 25, 2013

Day 2: Google Sync

All of my contacts, events, and personal email reside in Google land. Syncing Google data with Android is for the most part a seamless experience. Setting up sync with my new iPhone required some config but really wasn't bad (once I found the correct set of instructions).

Doing a quick search for "sync google with iphone" turns up the following results.


The first hit looked promising so I clicked it and dove right in. The page described syncing Google contacts, calendar, and email with iOS using Microsoft Exchange ActiveSync protocol. This seemed weird to me but I went ahead and gave it a try.


No dice. After several more attempts I was stuck. Eventually I noticed the big yellow warning banner at the top of the page! In short-- these are not the instructions you are looking for.


Apparently Google dropped ActiveSync support for all accounts except Google Apps accounts effective January 30, 2013. (This is probably old news to regular iOS users.) The banner even conveniently provides a link to the proper set of instructions for personal accounts.

According to the new instructions:

  • Contacts should be synced to the iOS Contacts app using the CardDAV format.
  • Calendar should be synced to the iOS Calendar app using the CalDAV format.
  • GMail app should be used to instantly receive and send mail.*

* This last point is important. Since dropping support for ActiveSync, it is no longer possible to receive GMail via push to the iOS Mail app. It is still possible to sync GMail using IMAP, but updates will be based on a polling interval rather than push.

Using the official GMail app also offers several other advantages including multiple account support, real-time notifications, and improved search.

The updated instructions were easy to follow and now I am happily using all of my Google services on the iPhone 5.


4G Update

Yesterday while driving into the city I was able to pick up a 4G signal on the iPhone for the first time. So it's not that 4G is entirely broken. But the question remains why would I get T-Mobile 4G on my Nexus 4 but not on the iPhone 5 at home and at work with the same plan?

Tuesday, April 23, 2013

Day 1: Activation

Today my iPhone 5 (unlocked GSM) ordered directly from Apple was delivered and I promptly popped out the T-Mobile SIM card from my Nexus 4 to make the swap. Unfortunately at this point I realized my Micro SIM would be of no use since the iPhone 5 requires a Nano SIM.

I have cut down many standard size (Mini) SIM cards before to fit into Micro SIM slots when switching devices. But due to the extremely thin margin for error on the Nano SIM and actual differences in the contact points I decided not to attempt the procedure myself this time. So I was off to the T-Mobile store.



Activation turned out to be a bit more of a process that I had expected. Not only did I have to purchase and activate a new Nano SIM card, but the iPhone required a series of software updates and restarts over the course of 10-15 minutes to properly configure for the T-Mobile carrier network. This is very different from what I was used to with GSM Android devices that are ready almost instantly after popping in a new SIM.

In the end it worked. I made my first phone call and sent my first SMS with the iPhone. The only issue I am having now is that 12 hours later the device is only showing only extended network coverage. This despite having a 4G plan and having successfully connected to 4G on Android devices at the office and at home using my T-Mobile account prior to making the switch.

I'm not sure whether this is just a display issue (am I really getting 4G even though it says "E") or an actual problem with the network. If the issue is real, is it a problem with the device or T-Mobile? Or both?

At the time of writing this I am still working on getting all of my Google services (mail, calendar, contacts, etc.) synced to the iPhone. More on this tomorrow.