Category Archives: iOS 7.0

Beta Testing on Both Platforms – Android and iOS


1. Upload your APK to the Beta tab of Google Play’s developer console.
2. Create a community in Google Plus, and invite your users.
3. Add the link to the community page to your Beta.
4. Click on “invite testers” and you will receive a link to the app on the play store- but just for testers (it has “testing” in the path).
5. Email your users, and emphasize that they should click this link on their device- obvious but bears pointing out- and give it a few hours.


1. Upload a release version of your app to the Prerelease tab on iTunesConnect. This requires an almost complete store profile.
2. Submit it for approval (still in pre-release mode, will not be public).
3. Add external testers in the “prerelease” tab of iTunesConnect, for your app.
4. Invite them.
Note: there is potentially more complexity to this that I will detail in another blog post. This is the best case scenario- that has actually worked for me. For internal alpha users, yes, that was buggy as of a month ago.

Both methods are key to getting a good set of beta testers. I used to use TestFlight for both Android and iOS, and those were great days. Both platforms are now more advanced than old TestFlight, with crash reports and better user management. Apple still has some kinks to work out but it worth it for a nice process that doesn’t require device Ids.

Also, checkout the bug I found: using Gmail to check for app invitations results in errors. More: here.

Don’t Use Gmail- And Other Random Tips to Using iTunesConnect + TestFlight

The integration of TestFlight services into iTunesConnect has been bumpy. Here are some troubleshooting tips:

1. Don’t Use Gmail To Accept Invitation


If you’re having issues getting your AppleId to work in an Internal tester of iTunesConnect- don’t use Gmail to launch TestFlight, nor accept the initial invitation.

To slow it down…

iTunesConnect’s implementation of TestFlight requires that you have an AppleId. Many of us have several, or we don’t want to use our personal one. So, you can create a new one, such as, “banane+atf”… subdomain your Gmail email. Problem is, when you get the link from TestFlight, and click on it to accept the invitation to your app, it will forward you through a strange loop, or, just fail. I kept getting TestFlight with my personal AppleID, and no apps displayed.

This is fixed if you don’t use Gmail to access your email from Apple. Just forward it to another mailbox. Yep. Then, clicking on the button will accept your user and you will see your app added.

2. Add Contact Email To Build Each Time

Each build you upload- click on the Build, click on TestFlight tab, and “Test Information”. Add your contact email. It won’t show up in the TestFlight iOS app until you do this crucial step. Then, click to “Testers”, and your internal testers should be there.

Upgrade Tips for iOS 7.0

I just upgraded 5 of my apps to 7.0 from 5.0 (sometimes 4.x) compatibility. Here are some tips from what I learned:

Handling Different Screen Sizes
To handle the change in screen sizes, 3.5 to 4.0, for each xib, get all elements, and change to autosizing. Anchor to the bottom:


You can see here I’ve added a 60px delta for converting from 6 to 7, just lowering the element a little more in 7. Totally optional- in many apps I don’t even do a delta, fixing it to the bottom solves all the issues.

To test this, do a build, then click the View for that xib.
On the Identity and Type tab, select “ios 7.0 and later”, and view the change to your elements. They should all remain in the same place.

Create new splash screens, icons, app icons
Baseline, you need to create these icons

  • Icon@2x.png (114.px)
  • Icon.png (57px) *you probably already have this *
  • Icon-120.png (120px)

I added all of these to my project, then assigned the 120px one (the rest auto assign, but not 120) in the App/Project/General Settings:
Screen Shot 2013-12-01 at 3.23.28 PM

You also need to add these default splash screens:

  • Default.png (320×480) – you probably have this
  • Default@2x.png (640×960) – if you have a larger graphic, take a higher res screen otherwise, I expanded my 320×640
  • Default-568h@2x.png (640×1136) – I copied the Default@2x.png. in Paintbrush, create a new canvas of the proper dimensions. Paste splash in it and center.

Drag those to the new project, and they should assign automatically to the proper files in Project/General

Upgrading Frameworks
I regularly use Flurry and Facebook. I had old frameworks and took the opportunity to update them.

  1. Remove references to old frameworks- right click delete
  2. Remove references in Build Settings to header files, pointing to old framework libraries
  3. Comment-out code in my project related to framework ( a few methods, etc.)
  4. Build- should build without errors.
  5. Add new frameowrks in according to instructions, uncomment out the custom methods.

Seems obvious, but many hours were spent getting those new frameworks to build right. The key was to do a good clean remove before every installation.

Facebook changed from a project you dragged into your project, to a real framework, making it much simpler to integrate.

Note on Landscape Orientation and Launching
Here are some quick tips if your application is 100% landscape orientation, like mine were.

  • Load the main view with self.window.rootcontroller = self.navController. In old version I could just set the view to the navController view, now you have to set the rootController.
  • This took me forever to figure out: the launch orientation is the first element in the plist entry “supported orientations”. So if you want it to load right, make sure that is the Item 0 in the array, in the plist. It was documented, but buried.
    Screen Shot 2013-12-01 at 3.36.14 PM
  • There are some new methods in iOS 7.0 for autorotate, but by setting the supported orientations, it loaded all views in my NavController in landscape, so including those were extraneous.

Images in iOS 7.0
Only a few changes in imaging affected my apps:

  • Segmented controller images- I check the iOS dynamically and assign images programmatically, adding:

    self.segControl.tintColor = [UIColor redColor];
    [[UIImage imageNamed:@"fr_flag"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    [self.segControl setImage:fr_flag forSegmentAtIndex:0];
  • Check all of your imageViews in XIBs, many of them were deleted or floating off the view. I redragged them back on, anchored the autoresize,built, and all was fine.