Episode 12 – MAS Exodus in the Air 2

This week we discuss the challenges of publishing OS X apps on the Mac App Store. We also discuss the challenge of publishing apps specifically for the iPad, in light of the stellar reviews of the iPad Air 2. Our weekly picks include Apple Pay, adding directions with the MapKit API, Battery Doctor and the upcoming RWDevCon. Listen the podcast for a discount code.

Episode 12 Show Notes:

Mac App Store: The subtle Exodus
Bare Bones: BBEdit 11
Panic: Coda 2
Release Notes – #75 Figure out what that iPad is… then tell us.
Apple’s AtEase
Apple iPad Air 2 review – Magical, not revolutionary
Korg: IMS-20 for iPad
Korg Gadget
MetaKite: Benjamin Task Manager for iPhone
MetaKite: Benjamin Task Manager for the iPad

Pick of the Week:

Apple Pay
Adding directions in MapKit API
Battery Doctor
RWDevCon 2015 – February 6th–7th, 2015 The Liaison Capitol Hill Hotel, Washington DC
Tell ‘em MTJC sent you.

Listen or Subscribe on iTunes

Listen or Subscribe on FeedBurner

Listen Now:

Episode 11 – Apple tries to rise while we race to the bottom – Oct 16, 2014

This week we discuss the Apple’s Oct 16, 2014 press conference, “It’s Been Way Too Long”. We discuss Apple Pay, WatchKit, iOS 8.1, Yosemite, the new iPad Air 2, the iPad lineup and the new iMac 27 with Retina Display. We also discuss BBEdit’s decision to leave the app store, apps Clips and iDraw.

Listen or Subscribe on iTunes

Listen or Subscribe on FeedBurner

Xcode 6 FirstResponder Picker Conundrum

So I’m working away on a simple app, that has data presented in tableViews. By default tableViews use UILabels to display the data. To make them editable, requires adding a custom tableViewCell class and putting UITextFields in place. Simple enough.

What if the data to be input is a date or a choice of one, two or three values? Well then you add a UIDatePickerView or a UIPickerView when the user taps on the field. But wait! This is Xcode 6’s Simulator you’re running on. Why not mess with the developer a bit – that should be fun. When the date textField is tapped do nothing. Let’s see how many Google searches or twitter posts are required to solve this?

iOS Simulator Screen Shot Oct 14, 2014, 7.34.49 PM

 

Wait! What!? Tapping the date field doesn’t open the Date Picker?

“Well, let’s take a look at the simulator’s Keyboard setting,” says the wizen senior developer. Sure enough under the Hardware menu, is a Keyboard, with a submenu checked that says, “Connect Hardware Keyboard.” Uncheck that, and as if by magic, the Date Picker appears. There is much rejoicing throughout the land.

Picker View appears when "Connect Hardware Keyboard" is unchecked
Picker View appears when “Connect Hardware Keyboard” is unchecked

The example app is form “More iOS 6 Development” published by Apress.

Episode #10 – I am the one who knocks. I am Yosemite – Oct 8, 2014

This week we ponder the significance of Apple’s upcoming October 16th press conference, It’s been far too long. Will there be a new iPad, or Mac’s. What mountains will Apple climb next. We also take an overdue look at Estimote’s iBeacon implementation. We discuss the trilateralization of electrons and their effect on the disappearance of StarTrek hardware.

Listen or Subscribe on iTunes

Listen or Subscribe on FeedBurner

Detect iOS 8 with Xcode 5.1.1

While prepping an app for submission that still supports iOS 6 & 7, we discovered a bug when the app in run under iOS 8. There was a change to EKEventViewController that leaves behind some UI when the view is dismissed. So we had to use the default method for presenting the view.

The way we tested for iOS 6 and 7 last year was to check the version with:

floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1)

However Xcode 5.1.1 doesn’t have an enum higher than NSFoundationVersionNumber_iOS_6_1, so it won’t detect an OS version higher than 6.1.

NB the recommended solution is to build your app with Xcode 6, which does recognize NSFoundationVersionNumber_iOS_7_1.

To detect the system version you can use “systemVersion” from “UIDevice”. It’s not decremented yet, so you can do something like:

NSLog(@”system %i”, [UIDevice currentDevice].systemVersion.intValue);

        NSString *version = [UIDevice currentDevice].systemVersion;

        if (version.intValue <= 7.1) {

            // Do something for iOS 7.1 or earlier

        } else {

            // Do something for iOS 8.0 or later

        }

This hasn’t been tested much, but give it a try.

The next release will be on Xcode 6 (I promise!)

Hire Tim

Tim Mitra avatar

A few people have asked about hiring me on contract. So I put together this post:

I am and independent developer and designer working in iOS and web technologies. I have been involved in many app deployments on the AppStore, as the main idea guy or architect of apps; doing client work and some personal apps. Collectively we had over 500K downloads over the last 5 years, which I think it’s better than most. My background is in the graphic arts, print and publishing, and the IT work involved in those trades. However I have always made stuff and consider myself a solutions provider – my unique ability.

While I do wrangle developers, writers and artists, I spend the majority of my time actually writing code and assembling the apps. I am also the person who deals with the actual submission to the AppStore. So I can start an app from pen and paper sketches all the way to the App Store and analytics. While doing so I make stops to assemble copy, create graphics & UX, write the code, assemble the apps, localization, distribute the builds, wrangle git & branches, write server APIs, product management, as well as marketing and promotions. Soup to nuts as any indie IOS developer should be (and hiring out help on big projects).

I am located in Toronto Canada, where I try to run a small development company. I teach introductory courses on iOS development. I write for raywenderlich.com and I founded and host the More Than Just Code podcast.

Tim

resume and references available on request.

MTJC Podcast – Ep 9 – Flippin’ the table

Episode #9 – Vision is the art of seeing what is invisible… – J Swift – Oct 1, 2014 

In the light of some twisted media misdirection, we discuss the Apple’s ability to focus on issues. Are they moving too fast and trying to over deliver? We also delve into the state of Apple’s lauded new programming language Swift. Is it really ready for prime time?

 

Episode 9 Show Notes:

Apple:

Episode 9 Show Notes:

Apple:

iOS 8 Bugs reported by hundreds of users
iOS 8 bug could delete your iCloud Drive documents
Apple promised an expansive health app, so why can’t I track my menstruation?
iOS 8 bug affects health apps
iOS 8 causing widespread connectivity issues in cars/
It Just Works

Swift:
https://twitter.com/marcoarment/status/517120706287792128
https://twitter.com/ashfurrow/status/516935239592316928
Swift Essential Training
Book – IOS 8 by Tutorials

Doublie app
https://ello.co
Spigen – iPhone 6 Air Case

 

Listen:

[twitter url=”https://itunes.apple.com/ca/podcast/mtjc-podcast-podcast-about/id906987516?mt=2″ hashtag=”#MTJC” text=”Spookiness in MTJC Episode #8 – Psychic iPhone 6 Plus Bending? Listen to the Podcast on iTunes or FeedBurner” float=”left”]

[button link=”https://itunes.apple.com/ca/podcast/mtjc-podcast-podcast-about/id906987516?mt=2″ bg_color=”#cf93cf”]Listen on iTunes[/button]

[button link=”http://feeds.feedburner.com/MtjcPodcast-APodcastAboutIosMacDevelopment” bg_color=”#cf93cf”]Listen on FeedBurner[/button]

MTJC Podcast – Ep 8, Psychic iPhone 6 Plus Bending

Episode #8 – Psychic iPhone 6 Plus Bending – Sept 24, 2014 

In the September 24th show, we discuss our hands on experiences with handling the iPhone 6 and iPhone 6 Plus, the odd placement of the iPhone 6 power button. Apple’s quality control, bend-gate and bend-gazi, the iOS 8.0.1 snafu and iOS 8 adoption rates one week in.

 

Episode 8 Show Notes:
Star Trek Next Generation Wallpapers
Awesome ScreenShot
iOS 8 update trend via Mixpanel
Apple iOS 8 numbers
RunSwiftlang.com
Register Your iPhone at My Support Profile
X-Mirage

My MacBook Air 13 display rotated in the System Preferences, displaying the iPhone 6 Plus simulator full screen.
My MacBook Air 13 display rotated in the System Preferences, displaying the iPhone 6 Plus simulator full screen.

 

 

Apple leather case on an iPhone 6 Plus. Showing how close to the glass the case sits.
Apple leather case on an iPhone 6 Plus. Showing how close to the glass the case sits.



Listen to Episode 8

 

[twitter url=”https://itunes.apple.com/ca/podcast/mtjc-podcast-podcast-about/id906987516?mt=2″ hashtag=”#MTJC” text=”Spookiness in MTJC Episode #8 – Psychic iPhone 6 Plus Bending? Listen to the Podcast on iTunes or FeedBurner” float=”left”]

[button link=”https://itunes.apple.com/ca/podcast/mtjc-podcast-podcast-about/id906987516?mt=2″ bg_color=”#cf93cf”]Listen on iTunes[/button]

[button link=”http://feeds.feedburner.com/MtjcPodcast-APodcastAboutIosMacDevelopment” bg_color=”#cf93cf”]Listen on FeedBurner[/button]

BTW If you like this podcast, please write a positive review on iTunes. It really helps. Thanks.

Xcode Process launch failed: Security

launch failed security

The latest annoyance in Xcode had me stumped for a bit but @smappsoft set me straight. When trying to build and app under iOS 8, the build succeeds but the app doesn’t launch. Saying “process launch failed: Security” and not much else.

Turns out that the build was successful but your shiny new iOS 8 device doesn’t “trust” your profile.

Security: 1, Developer: 0

IMG_5124-cropped

So to solve this new cryptic behavior, launch the app on your device (which you just installed) and you will get a trust prompt asking you to approve an “Untrusted App Developer”. This is Gatekeeper asking you to confirm your trust of the developer (yourself).

Once you’ve completed this trust you can happily install apps from Xcode.

Supporting StoreKit Affiliate ID in iOS 8 w/o breaking iOS 7

As you may already know, iOS 8 finally supports loading a StoreSheet complete with your Affiliate ID. This way you can keep users in your app without sending them over to iTunes or App Store apps and still get commissions from Apple. However if you want to support iOS 7 users (for the time being) you will need to load the Store Kit Product Parameters with the playlist only – or your app will crash. So naturally check for NSFoundationVersionNumber to test for version iOS 7.1 or 8.0 and load the correct parameters.

You can watch the WWDC 2014 Video about this new feature.

Here’s the code using contstants to hold IDs for your playlist, affiliate and campaign IDs.

– (void)openAppStore:(id)sender {

    // Initialize Product View Controller

    SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewControlleralloc] init];

    // Configure View Controller

    [storeProductViewController setDelegate:self];

NSDictionary *parameters;

    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1) {

        // Load resources for iOS 7.1 or earlier

        parameters = @{SKStoreProductParameterITunesItemIdentifier:kPlaylistID};

    } else {

        // Load resources for iOS 8 or later

        parameters = @{SKStoreProductParameterITunesItemIdentifier:kPlaylistID, SKStoreProductParameterAffiliateToken:kAffiliateID, SKStoreProductParameterCampaignToken:kCampaignID};

    }

[storeProductViewController loadProductWithParameters:parameters completionBlock:^(BOOL result, NSError *error) {

if (error) {

NSLog(@”Error %@ with User Info %@.”, error, [error userInfo]);

} else {

            // Present Store Product View Controller

            [self presentViewController:storeProductViewController animated:YES completion:nil];

}

}];

}