Apple’s iPhone Upgrade Program Nightmare

The following is @kalaeeg‘s experience with the not-so-wonderful Apple iPhone Upgrade Program:

If you have gotten your new iPhone 7 or iPhone 7 Plus this morning, consider yourself very lucky. I unfortunately fell into the category of “suckers who signed up for Apple’s iPhone Upgrade Program in 2015” and got effectively blocked from pre-ordering within the first five minutes of the sale going live.  I did not manage to reserve an iPhone and instead was told to check back on Sept. 17 at 8am.  

Since that debacle, many have complained to Apple and the internets, and even a class action lawsuit has been filed to appease the upgrade rage.  To their credit, Apple immediately created an iPhone Upgrade Program customer service team.  I took advantage of this and got in touch with them the next day after pre-ordering went live.  The representative on the line was nothing but courteous and very upbeat. I was told that she was going to “make magic happen”.  I was reassured numerous times that I, as someone who was already part of the upgrade program, was their number one priority (in fact, she repeated that IUP customers are their number one priority about 5 times… Apple must be really nervous about this?).  She took down my information and asked what my ideal iPhone was.  I responded that an AT&T iPhone 7 Plus 128GB (matte) Black was my ideal phone.  After a moment of silence, she asked what my second color option would be, which I decided was Rose Gold.  After filling out the proper paperwork and documenting everything, she submitted an order stated  that “magic was going to happen” and I will hear back from them within 48-72 hours.

Surely enough, about 48 hours later I received an email from the Apple Support team letting me know that they have found me an iPhone 7.  But that was it, no further details.  I decided to respond to this email and let them know that I was expecting an iPhone 7 Plus, and whether they could confirm this was indeed what I might be receiving.  No one responded to that email.  I waited patiently and by Friday (launch day)  morning I received a second email from Apple Support letting me know that my new iPhone 7 with 32GB was being shipped to my desired Apple store location.  What(?).  This was not at all what I had discussed when opening my support ticket.  This was not “magic”… this was a mistake.  I respond a second time to this new email thanking the support team for the effort they had put in for locating an iPhone, but since the phone they found was not at all what I requested, I was wondering what my options where. This time they respond back with essentially: it’s too late to do anything now because the phone has already been shipped to the indicated Apple store location and If I was not interested in the phone I should contact the store directly.  Well, shit.

I once again call Apple customer service, wait on the phone, and ask again to be connected to the Apple iPhone Upgrade Program team.  I spoke with a representative and explained the situation.  She could not account for why the confusion happened since she could see my original request.  After being placed on hold for over half an hour, the rep told me that she had no idea what to do, other than to put in another order and start over – something I would have done myself, had Apple allowed us “Upgrade Customers” to do when pre-orders went live.  Instead, they forced all of us Upgrade Program customers to use the broken and stock-limited in-store appointment option (that is, if it even worked for you), and now here we are.

It is Friday Sept. 16, launch day, and I am still no closer to getting the new iPhone 7 Plus.  As a customer who bought into Apple’s promise of the “Upgrade Program” being the “best way to obtain the new iPhone”, this is beyond frustrating. You do exactly what Apple directs you to do and in the end in you get screwed.

TLDR: I signed up for the upgrade plan, but got shut out of being able to pre-order any phone.  I contacted Apple’s customer service and put in a request to get a phone, and they wind up sending the wrong phone out.  I contact them a second time and I get no real answer of why the confusion occurred and nothing more is offered beyond putting in a second order.  At this point all I can say is thanks a lot Apple, and where do I sign up for that class action lawsuit??  At this stage I am not sure when I will get the new iPhone while all along making monthly payments into this not-so-magical “Upgrade Program.”

ps – The lawsuit sounds like 1st world problems gone wild, however you have to understand that people are making monthly payments on a phone that isn’t upgraded on-time, which could push your payment quota on the next upgrade cycle back (you have to make 12 payments in order to qualify for an upgrade)… unless Apple somehow acknowledges the delay and makes adjustments, which is what the lawsuit is seeking to guarantee.

Fix UIScrollview content auto-layout issues!

Is your UIScrollView content not behaving properly when you rotate your iOS app?  Would you like it to re-render, re-format, etc. upon rotation?  Read on:

Make sure you do a few things:

  1. Re-set the frame for the content subview of the UIScrollView to the new scrollview dimensions (the new dimensions will not propagate down to the subview if the subview is created manually, etc.)
  2. Re-set the content size for the content subview of the UIScrollView
  3. Either set your view content modes to ‘redraw’, or manually call SetNeedsDisplay()

You can put all this code in your ViewController, via overriding this function (complete with sample code for the above commands):


public override func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
self.myUIScrollView.contentOffset = CGPointZero //scroll up to top before changing dimensions - will eliminate render drift
self.myUIScrollView.contentSize = CGSizeMake(self.mainContentAreaScrollView.bounds.width, 1100) //the width of your content will change, but not the length, so either cardcode length or determine the length through other means
for subby in self.myUIScrollView.subviews{ //now lets find the UIScrollView's content view and change its frame dimensions
if subby is UIViewForContentOfScrollView {
(subby as! UIViewForContentOfScrollView).frame = CGRectMake(myUIScrollView.bounds.origin.x, myUIScrollView.bounds.origin.y, myUIScrollView.bounds.width, 1100); //length of frame needs to match the length of contentSize you set earlier
}
}
}

Ok, if that looks ugly in your browser, just cut and paste into your favorite code editor.  Ugh wordpress.

Enjoy, comment with any questions.

How to generate a pair of RSA encryption keys for use in iOS (or elsewhere) using OpenSSL!

It took me too long to piece this information together, so I’m posting it here for posterity, and hopefully the Googles.  There are 1000 ways to skin a cat with OpenSSL, however these are at least proven to work within an iOS application via the Xcode libraries.

First, make sure you have a version of OpenSSL that is not of the Heartbleed variety.  If you are using OS X’s built-in OpenSSL, you should be ok.  Head to the Terminal (or CMD prompt) and get started:

OpenSSL commands:

  1. openssl genrsa -out rsaPrivateKey.pem 4096 (2048 is likely fine too – dealers choice)
  2. openssl rsa -in rsaPrivateKey.pem -out rsaPrivateKey.key
  3. openssl req -new -key rsaPrivateKey.key -out rsaCertReq.crt (this step requires basic info, and iOS requires a password, so set one when it asks)
  4. openssl x509 -req -days 10000 -in rsaCertReq.crt -signkey rsaPrivateKey.key -out rsaCert.crt
  5. openssl x509 -outform der -in rsaCert.crt -out publicKey.der
  6. openssl pkcs12 -export -out privateKey.pfx -inkey rsaPrivateKey.key -in rsaCert.crt

In the end, the important files from an iOS standpoint are publicKey.der and privateKey.pfx.  You will use publicKey.der to encrypt data, and privateKey.pfx to decrypt.  I will eventually be posting Swift code later that shows how to use these keys in actual code.  For now, enjoy your keys!

Obnoxious boot chime in OS X? SILENCE IT!

From the terminal:

sudo nvram SystemAudioVolume=%80

To get the chime back:

sudo nvram -d SystemAudioVolume

If you can’t get OS X to boot properly, and are stuck in reboot hell, get to the terminal via Single User mode.  Hold command+S after you hear the chime, or see the grey screen appear after starting your mac.  Then follow the onscreen instructions to mount your main hard drive partition, which consists of this command:

/sbin/mount -uw /

Happy booting in silent peace!!!!

Them’s fightin’ words.

Adobe publicly said that Flash would ship on a smartphone in early 2009, then the second half of 2009, then the first half of 2010, and now they say the second half of 2010. We think it will eventually ship, but we’re glad we didn’t hold our breath. Who knows how it will perform?

– Steve Jobs

Yikes.

I have to admit… he is right.  Flash is hella slow on any phone I’ve actually seen it running on, and the elusive Flash 10 beta (or whatever) has yet to be seen.

If you ask me, this was a missed opportunity for Microsoft.  Silverlight mobile should have swooped in 2 years ago and saved the day.  Oh well.