How to Add an Internal Tester to TestFlight If They Already Have an iTunes Connect Account

As a consultant, I’ve had this situation come up many times, and it’s very frustrating because Apple doesn’t allow an Apple ID to belong to more than one iTunes Connect account.

The scenario is that you have a client or friend that you would like to be an internal tester in your organization’s iTunes Connect account, or, perhaps it’s the corollary situation in which you have a client who has their own iTunes Connect account and you need access to their account as a tester or admin or developer. I’ve had this situation come up both ways, and here is how I’ve dealt with it.

The main requirement is that your prospective tester has a Gmail account. I’m not sure if this trick works with other email systems but it definitely works with Gmail. So if they they do, then you should be good to go. These days most individuals and companies are using Gmail as their provider so I haven’t run into anyone that this didn’t work with yet.

On with the process!

In nutshell, to circumvent Apple’s crazy limitation, you can do the “+appname” trick on their Gmail email address. For example, if the person I want to add is “fred@myclient.com”, and the name of the app I’m working on is “Awesome App” I would send him an invitation as “fred+awesomeapp@myclient.com”. Their Gmail-based mail system will let the email through just fine.

Then, they create a new, separate Apple ID with “fred+appname@myclient.com”, and iTunes doesn’t complain. iTunes Connect emails get sent to the right place because Gmail just treats them as the same account, and then your client (or you) can have multiple iTunes Connect accounts with what amounts to the same email address.

Then when they receive the follow-up notification to join TestFlight, it arrives at the right email address, and when they tap the button in the email it opens TestFlight on their device, they sign in with their normal Apple ID (even if it’s fredjones@gmail.com), and then they’re in.

It feels a bit hackish, but it works!

I’m pretty sure I learned this technique from this blog post, which also has some other great suggestions for working with clients and getting their builds up to the App Store, which is a subject for another day…

Announcement: Lightning Talk @CocoaConf San Jose 2015!

This has been something I’ve wanted to do for a long time.

I was already signed up for CocoaConf San Jose 2015, and just a couple of weeks ago they announced in a conference email that they had four slots open for Lightning Talks. I immediately jumped at the chance.

Thankfully (and amazingly)… they accepted!

I don’t want to spoil the presentation since, after all, it’s only a five-minute presentation. However, I will say that the theme is Saving lives with iBeacons and it focuses on the combination of iOS, iBeacons, and Healthcare.

The talk came out of a recent project I was working on for a client of Cloud City Development and I thought would be perfect for a talk at a conference, and the client agreed!

Therefore, I am super excited that I can do an abbreviated version of the talk at CocoaConf San Jose, and I really hope I can do in a more robust, full-featured version in the future… but first things first!

See you there!

Quick list of what’s new in Xcode 7.1

What’s new in Xcode 7.1

Xcode 7.1

Xcode 7.1 adds support for new iOS devices and the new Apple TV. Xcode supports storyboards, unit and UI testing, playgrounds, and crash logs features for tvOS.

Interface Builder

  • Storyboards now support 3D Touch gestures such as Peek and Pop.

Debugging

  • Swift error breakpoints can be created in the Xcode debugger.

    Swift errors activate defined Swift error breakpoints when the error is thrown. You can edit Swift error breakpoint so that they are activated only for a specified Swift error type.

Enjoy!

Part Two of Core Bluetooth, iOS and Bluetooth LE Development Blog Series Now Available at Cloud City!

As I have mentioned before, I work for an awesome software development studio in San Francisco called Cloud City Development, and back in June we published Part One of the series Zero to BLE, which is a tutorial series focusing on developing for iOS using Core Bluetooth.

Today, I’m super excited to be able to announce that Part Two of the series has been published! As in the first article, the examples in the article are written in Objective-C, not Swift, and it has an associated tutorial project on Github that you can download and experiment with.

ZeroToBLE2

Again, I would like to thank Cloud City Development for allowing me to create this series, and I’m already working on Part Three, so look for that in the upcoming weeks!

Tutorial: How to Create a PDF with Quartz 2D (via @raywenderlich.com)

OK so this goes back a little bit – 2012, in fact – but I was recently researching how to create a PDF from within an iOS app. I honestly didn’t know if it was possible.

Thankfully, the following is a very helpful and clear tutorial on RayWenderlich.com by Tope Abayomi with steps for creating a PDF using Quartz 2D in iOS :

How To Create a PDF with Quartz 2D in iOS 5 – Part 1 – Ray Wenderlich

Thanks again Ray and crew!

 

App Store Tip: Acquiring Screenshots for Devices You Don’t Have in Your Drawer…

Recently when uploading an update of my app to App Store via iTunes Connect, and I was faced with a bit of a dilemma. iTunes Connect needed screenshots from a wider variety of devices than I was originally expecting, and more devices than I possessed. 

The directions referenced this article, which actually is super helpful as a reference for what dimensions of screenshots you will need to upload. Unfortunately, the only physical devices that I have are an iPhone 5c and an iPhone 6 Plus, leaving out the currently-most-important device, the iPhone 6.

So I began musing about this… “Could I use the Simulator?” I thought.

I thought that if I needed to take a screenshot in the Simulator, using the old Shift-Cmd-4 trick would be problematic because the dimensions would be off. Then there would be the inevitable headache of launching Photoshop to get a correctly-sized screenshot, etc., etc….

Thankfully I had the presence of mind to Google this, and StackOverflow came to the rescue!

The key is the fact that the Simulator has a special menu item under the File menu! Contained in that menu, there is one item: Save Screen Shot (Cmd-S).

This will take a properly-sized screenshot for the device being currently used (iPhone 6/6s, iPhone 6/6s Plus, even iPhone 4s…), and you can then use that for your screenshots in iTunes Connect right away! No resizing or editing required!

Here’s an example of the screenshot:

4.7-inch-A

Sure it doesn’t have my carrier information on it but it’s a great capture and satisfies the iTunes Connect/App Store requirements, and that’s what was blocking me from uploading my app! Done!

iOS 9 Tips: Disable Shake to Undo

One of my least favorite features of iOS is Shake to Undo. It’s one of the only ones that I just cannot understand why Apple implemented in the way it’s implemented. It’s not discoverable. It’s not intuitive (honestly). It almost always does not work correctly for me when I perform an undo.

In iOS 9, now we can disable this undesirable feature, and big thanks to TechCrunch for pointing it out.

Disable “Shake To Undo”

I’ve been using iOS on and off for years now. I think I’ve intentionally used shake to undo… maybe 5 times. I’ve accidentally brought up the shake to undo prompt probably 45,000 times. In iOS 9, you can finally disable this gesture. Find the option under Settings> General > Accessibility > Shake to Undo

 

 

 

How to use Helvetica Neue UltraLight (and other fonts) in your iOS Code

One of the more frustrating things about doing things in code is when it comes to fonts. Lately I had to do a guessing game when I wanted to use Helvetica Neue UltraLight as a font in a demo for an upcoming blog post for Cloud City Development, and it was making me crazy playing the “guess the font name in code” game:

“Helvetica Neue Ultra Light”? Nope.
“Helvetic-Neue-Ultra-Light”? Nope.
“Helvetica-Neue-UltraLight”? Nope.
“HelveticaNeue-Ultra-Light”? Nope.
“HelveticaNeue-UltraLight”? BINGO!

It took me a few tries through the trial-and-error method, but I eventually got the right name (as you can see from the list above, it’s “HelveticaNeue-UltraLight”), but it led me to think there must be an easier way.

Enter Font Book.

Font Book is an application that comes with Mac OS X for managing fonts in your system, and it turns out that it can help us as developers to solve these kinds of riddles. The challenge is that the answers are little a bit buried…

So… let’s go through this particular challenge.

First, let’s open Font Book (Look in Applications > Font Book, or if you’re an Alfred or Spotlight search user just start typing “Font Book” and it should pick it up immediately).

When you launch FontBook, it will probably look something like this (select “All Fonts” from the sidebar if it’s not already selected):

FontBook-1

Then, the next step is to scroll down and find “Helvetica Neue” in the list of font names, and then expand it and select “UltraLight” node in the list:

FontBook-2

If we examine the details in panel on the right, the item we are most interested in is the PostScript name entry, since this is the one that we will use in our code.

As you can see here, the value is “HelveticaNeue-UltraLight”:

FontBook-3

We can actually highlight and copy it directly from the detail panel. Very convenient.

Now that that’s done, it’s basically just a matter of plugging in the new value into your code:

Objective-C
myLabel.font = [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:128.0];

Swift
myLabel.font = UIFont(name: "HelveticaNeue-UltraLight", size: 128.0)

…and that’s it! Mystery solved!