Under The BridgeUnder The Bridge

Musings
Tip: Make Multiple Apple ID 2FA Less F’n A

So, you been getting more than one of these emails recently? Or just one, but you keep your developer Apple ID and your personal Apple ID separate?

You are receiving this email because you have the Account Holder role in a developer program, with full access to tools, resources, and benefits included with your membership. In an effort to keep accounts more secure, two-factor authentication will be required to sign in to your Apple Developer account and Certificates, Identifiers & Profiles starting February 27, 2019. This extra layer of security for your Apple ID helps ensure that you’re the only person who can access your account.

Wee-eee-lllll, as so far Apple devices are not multiuser, that’s a bit of a conundrum isn’t it now?

  • We could have a dedicated device with a phone number for each account, which for the prolific contractor is … impractical.
  • We could log in and out of iCloud accounts every time we want to access developer stuff, which is … even more impractical.
  • Oh, dear. Well, while we wait for Apple to provide a practical alternative, here’s some suggestions

How to activate Apple ID 2fa when you have two accounts

  1. Set up a new user account on your Mac
  2. Login into your iCloud account tied to the developer account under the new macOS user.
  3. Activate two-factor authentication and add your preferred phone number as a backup.
  4. Verify you are able to login into your account via another device or via browser at appleid.apple.com.
  5. Logout of iCloud account on the temp macOS user and switch back to your main macOS user.
  6. Delete the temp account and now, you should be able to use the 2fa via the phone validation every time.

This next piece takes it a step further to full 2FA — did you know your devices can, in fact, be logged into multiple iCloud accounts? We never thought to try that:

Apple Two-Factor Authentication for a Secondary Apple ID

As it turns out, you can be logged in to multiple iCloud accounts on the same device or account. Certain services, such as iCloud storage, or the Photo Library, will only work with the primary iCloud account, but other services, including 2FA, will work for all iCloud accounts.

On your iOS device go to Settings > Passwords & Accounts > Add Account, and choose to add another iCloud account. You probably want to turn off all services, like Mail, Calendar, etc. secondary account.

On the Mac you can do the same in System Preferences > Internet Accounts. You can use both your Mac and iOS devices for 2FA.

Now the secondary Apple ID will prompt the devices you are logged in as for 2FA.

So there you go, Dear Multiple Apple ID Using Readers — good luck in next week’s 2FPocalypse!

2019 iOS Conference Calendar

Some interesting news on the conference front this year: First off, the well-regarded RWDevCon is skipping this year, and not returning in its current form either:

RWDevCon: Taking a Break!

Therefore, RWDevCon (focused on iOS) didn’t reflect the range of technologies we cover at raywenderlich.com. Although the conference was a huge success, we needed to take some time and redesign the conference so that it will serve not just our iOS community, but our whole community…

And in what we’re pretty sure is a first in the iOS world, UIKonf didn’t have a Call For Papers this year you noticed? And why would that be?

UIKonf goes all female for 2019 speakers

UIKonf, one of the largest and best-known independent iOS development conferences, has announced that all speakers in its 2019 edition will be female. This isn’t just random chance: the team have announced it’s their way “of raising awareness for the diversity problem while at the same time a celebration of all the women who follow their passion, muster up the courage to go on stage, and hold great talks despite the headwind they’re facing in our industry.”

So if you’re a female-identifying human, there’s a particular opportunity for you:

if you are a female-identifying human or know great women (cis/trans/non-binary) who should speak at UIKonf, send your proposals and suggestions to Engin (engin@uikonf.com)

[*] We use an inclusive definition of “woman” and “female” and we welcome trans women, genderqueer women, and non-binary people who are significantly female-identified. (Inspired by adacamp.org)

Bold indeed! And as for the rest of the year, here’s our current best guesses at where and when conferences are coming up this year, and links to CFPs where those are open and obvious from a quick glance at the site; we’ll update this as we get more news, and we remember to — otherwise, CocoaConferences and its Twitter are a good resource to watch!

JANUARY: 

FEBRUARY:

MARCH:

APRIL:

MAY:

JUNE:

JULY:

AUGUST:

SEPTEMBER:

OCTOBER:

NOVEMBER:

DECEMBER:

 

Know of any we’ve missed that are even vaguely interesting to an iOS developer? Let us know!

And yes … not next year, but well before the end of this year, we’ll put up the 2020 edition as soon as the very earliest CFP opens!

 

How To Be Evil (Or Not): App Store Scams vs. White Hat ASO

Who would’ve thought that How To Be Evil for iPhone programmers would start to shape up into a series? Well, turns out there’s more bad actors than you’d think (well, more than you’d think if you’re as trustingly naīve as we’re widely known to be) pulling scammy stuff on their users. Here is a particularly evil instance:

New scammy iOS app shows Apple may need to tweak its App Store review process

After downloading the app in question, called Heart Rate Measurement on the App Store, 9to5Mac reports that it works by claiming to read your heart rate through your fingertip using the iPhone’s Touch ID feature. What the app is really trying to do, though, is get you to authorize a transaction for $89.99 using Touch ID by “dramatically dimming the screen” to such a degree that you hopefully won’t notice the charge…

Mostevil

 

And this is not actually a one-off, apparently there’s a whole mini-industry of these tricksters:

Scam iOS apps promise fitness, steal money instead

But what if you’re not quite that short-sightedly evil, just want a bit of a leg up? Check out this masterpiece of a Guide To Evil™:

How to Game the App Store

I’ve been pestering Apple for years publicly and privately about the manipulation and outright scams going on in the App Store. Apple has made some progress here and there, but overall Apple’s strictness in some areas and hands off approach in others has disproportionately rewarded bad actors while stifling conscientious developers…

Go over and Read The Whole Thing, but here’s sample #1:

1. Find a keyword that drives a decent amount of organic search traffic. Obvious ones are keywords like “weather”, “calculator”, “solitaire”, etc, but those keywords are so competitive, and the rest of the tactics so powerful, you could get away with 2nd tier keyword targets. Now go to App Store Connect and name your app that exact keyword. “Weather” is already taken, and Apple doesn’t allow duplicate app names, so you’ll need to add a symbol. Let’s go with “Weather ◌”.

Here’s the thing, the App Store search algorithm gives a massive boost for an exact match to what the user searched, and the algorithm ignores symbols, so “Weather ◌” will get a huge search advantage, which will help to drive organic installs of the app…

Oh, one more we’ll excerpt — this one actually got us whilst trying out a scam app, luckily just for a trial subscription we promptly rescinded:

4. Trigger the subscription randomly while the app is running. This one is included in the above list, but is so cunning it’s worth a specific mention. Because the iPhone home button serves as a sort of universal back button, a panicking iPhone user is likely to hit the home button when trying to get out of something. Unfortunately, on iPhones with Touch ID, the home button is also how you confirm a purchase. So if the payment view is randomly triggered, many users will accidentally confirm the purchase while trying to exit.

Indeed they will. However, now we have a shiny new XS, so that at least isn’t going to happen again!

One money maker that’s called out is selling user location data, which apparently is a much bigger thing than we’d thought — check this out:

Report: Location Data Monetization in iOS Apps 

But all of us here are white hats, right, and we want to promote our app and earn money legitimately, right? Here’s a list of recentish (if “the last year or so” still counts as “recentish”) ASO resources and marketing tips worth reading to make a living without stooping to Evil™ tactics:

How I doubled App Store Impressions

Earlier this year I went through the App Store Optimization (ASO) process for one of my personal apps. App store impressions doubled immediately. Profits for the app almost doubled as well…

Surviving the App Store

A book on lessons learned in building mobile apps. Written by the indie game dev who built the number one app, A Dark Room…

How to Leverage Apple Pre-order for Your Ios App Launch

Not only does it allow you to get a good amount of pre-orders (and therefore downloads on the first day), it also gives you the possibility to start working on your app metadata for your App Store Optimization efforts…

The Smart Aso Trick for Higher Rankings

It’s no secret that titles – and now also subtitles – are the most important factors for keywords in iOS11. Here’s a smart and simple trick that you can use to leverage the fact that these keywords are given more weight than those included in the standard keywords field…

How to Combine SEO & ASO Techniques to Supercharge Your Keyword Research

There are a handful of excellent articles on Keyword Research for ASO (App Store Optimization), but I haven’t read any so far that combined: 
classical SEO + competitor based keyword research + ASO. So I decided to write one…

ASO in iOS 11: A Detailed Analysis of What REALLY Works

I have analyzed the ASO strategies of over 20 apps to provide you with a truly data-driven look at the impact of iOS 11 on keywords and conversion optimization…

Find the Best App Store Optimization Tools – ASO Tools List

iOS Dev Tools — App Store and Sales

What is ASO? The Ultimate App Store Optimization Guide

The 385 Pages ASO Book (2018): Advanced App Store Optimization

Mobile App Marketing Playbook: 36 Tactics to Promote Your Mobile App

Mind you, it’s generally agreed that the most important part for the actual purchase is the videos and screenshots on your product page … we’ll go over the latest thoughts on that next time!

UPDATES:

Worldwide App Store Optimization

Black Friday Deals 2018

So it’s that shopping event of the year again, and let’s round up some deals, shall we? First off, let’s borrow @mjtsai’s list

Black Friday 2018

 

My apps are on sale for Black Friday and Cyber Monday, and here are some other good deals that I found:
C-Command Software (my apps)
1Password
Checkout (code SHOPSMALL2018)
Corduroy Code
Eastgate Systems
Ergonis Software (code BlackFriday18P)
equinux
MacHeist
No Starch Press (code FRIDAY42)
Pragmatic Bookshelf (code turkeysale2018)
Realmac
Softorino
Southtree (code THANKS)
SQLPro Studio
Twelve South
Twocanoes Software
vBulletin (code ANNUAL5018)
See also: Vector, MacRumors, 9To5Mac, iMore, Thrifter.

To which we’ll add, if you need any books or courses, head over to

raywenderlich.com Black Friday Sale: Yearly Subscription for Just $99!

In particular, we’re very seriously considering the Mega Android & Kotlin Bundle – 2018 as it’s starting to look like Kotlin Native is going to be a viable cross platform language soon, don’t you think?

MacSurfer is still the best general Mac/iOS news aggregator around, so keep an eye there over the weekend; AppleInsider has a good roundup too.

And if you’ve got any hot deals for developers we’ve missed, let us know!

 UPDATES:

Paw is the best native API tool and it’s 50% off!

Deals for iOS Developers and Designers

💰💸💰 Black Friday Deals 💰💸💰 on Github

3D Touch Is Dead – Long Live Haptic Touch

So no doubt you noticed all the angst this summer about Apple possibly removing 3D Touch from iPhones, as indeed it did with the iPhone XR, if not catch up with the discussion here:

Possible Removal of 3D Touch With 2018 iPhones

… and once it actually happened, the seven usual stages of grief pretty much got dropped by most people and they headed straight to acceptance:

The iPhone XR shows how unnecessary 3D Touch has always been

Why does Apple’s 3D Touch fail miserably?

Personally, we figure the only problem with 3D Touch was discoverability, and a pretty much perfect fix was laid out here:

How Apple can fix 3D Touch

… Now that we know what the problem is, here is my solution. Like we did with the link texts years ago on the web, we should visually distinguish 3D Touchable buttons. Look at this same screen and see if you can tell which toggles accept 3D Touch … My solution is adding a line on bottom-right of things that can be 3D Touched. Let’s call them Force Decorators (with reference to Force Touch). 3D Touch is missing the most obvious thing to be mainstream. Visual cues. I think this is the answer.

Simple, elegant, and almost certainly correct; if you do support 3D Touch, consider adopting that!

However, given the lack of wrath from the buying public over the XR missing it, and the continuing Haptic Touch additions, seems like a pretty safe bet that we can consider 3D Touch a dead technology going forward … or at the very least should have parallel implementations. Which brings us to a pair of recent articles to recommend:

How to apply iOS 3D Touch to any UIView as a UIGestureRecognizer

….recently I needed to have an UIGestureRecognizer to apply to any UIView that intercepts 3D Touch as you can do with tap, drag, etc, but nothing similar is available in system libraries.
As result of my study about this implementation, I’ve written a UIGestureRecognizer subclass that can fit my needs…

Improve iOS apps user experience using Haptic Feedbacks and Taptic Engine using UIFeedbackGenerator

In my last post I wrote about introducing 3D Touch as common UIGestureRecognizer in any UIView to improve the interaction with your app, now I want to explore the haptic feedback which is giving us a new physical way to give control to the user of what is happening on his iPhone.
Until haptic feedback through taptic engine, play sounds were the only way to provide users a feedback about an action in the app, but sounds are annoying and sometimes creepy.

UIKit is providing us a clean and elegant way for that: a standard and safe interface for haptic feedbacks plug and play implementation, UIFeedbackGenerator…

If you haven’t checked out UIFeedbackGenerator before, here’s a good quick intro:

Creating an Immersive User Experience with Haptic Feedback in iOS

So, before designing your power user gesture interfaces going forward, check out those technology comparisons … and especially the 3D touch design/usability postmortems. Nothing worse than wasting time writing features that nobody actually uses!

UPDATES:

Remember back when we first collected articles on 3D touch, and digital scale apps were a nifty thing? Guess that’s going to go by the wayside as 3D Touch falls off as well. If you do have one of those apps, maybe you want to migrate to Android — check out the state of their art in 5 Best Real Digital Scale Apps for Android!

Haptico – “easy to use haptic feedback generator with pattern-play support” 

Improve iOS apps user experience using Haptic Feedbacks and Taptic Engine using UIFeedbackGenerator

The Xth-Code Files: Xcode 10 Tips

Now that we’ve hopefully all got our iOS 12 and Swift 4.2 migrations under control, let’s catch our breath and dive a little deeper into what’s new since last year with Xcode 10, shall we? 

What’s New in Xcode

Dark Mode Interface and Mac App Support

  • All-new dark appearance throughout Xcode and Instruments
  • Asset catalogs add dark and light variants for custom colors and image assets
  • Interface Builder switches between dark and light previews of your interface
  • Debug your Mac apps in dark or light variants without changing OS settings

Source Control

  • Changes in the local repository or upstream on a shared server are highlighted directly within the editor…
  • Support for cloud-hosted and self-hosted Git server offerings from Atlassian Bitbucket, as well as GitLab to go along with existing GitHub support.
  • Xcode offers to rebase your changes when pulling the latest version of code from your repository.
  • SSH keys are generated if needed, and uploaded to service providers for you.

Editor Enhancements

  • Place multiple cursors in your code editor to make many changes at once.
  • Code folding ribbon can now hide any code block surrounded by braces.
  • Over-scroll makes it easy to center the last lines of code in the middle of your screen.

Playgrounds Built for Machine Learning

  • New REPL-like model reruns your existing playground code instantly.
  • Run your code up to any specific line, or type shift-return to run the code you just added.
  • Import the Create ML framework to interactively train new models, and then write code to test the model right in the playground. When finished, drag the model into your app.

Testing and Debugging

  • Debugging symbols are downloaded from a new device five times faster than before.
  • Xcode will spawn a collection of identical Simulators to take advantage of your multi-core Mac, and fan tests out to run in parallel, completing your test suite many times faster.
  • Run tests in random or linear order.
  • Instruments automatically show OSLog signposts you add into your code.
  • Build and share your own custom instruments package to provide unique data visualization and analysis for your own code.
  • Memory debugger uses a compact layout to make it easier to investigate your memory graph.
  • Metal shader debugger lets you easily inspect the execution of your vertex, fragment, compute, and tile shader code.
  • Metal dependency viewer provides a detailed graph of how resources are used in your Metal-based app.

Build Performance

  • New build system enabled by default with improved performance throughout.
  • Swift compiler builds each individual file significantly faster.
  • Large Swift projects build for debugging dramatically faster when using the incremental build setting.

That’s a pretty good selection of improvements, yes? And we have an admirably exhaustive collection of release notes to dig deeper:

Xcode 10 Release Notes

Interface Builder Release Notes for Xcode 10

Build System Release Notes for Xcode 10

Source Editor Release Notes for Xcode 10

Swift 4 .2 Release Notes for Xcode 10

So, we recommend you Read Them All! of course, but here let’s call out the things that you definitely don’t to overlook. #1 is your optimization flags:

If you’ve been around for a while, chances are you’ve set Whole Module Optimization for your project. This is now incorrect: it prevents incremental builds and those are faster. For the definitive word on that, see What’s New in Swift from WWDC 2018, at 11:40:

Stop Using Debug with Whole Module Compilation

Doesn’t get more explicit than that!

As well, there’s a new Build with Timing Summary action (or -buildWithTimingSummary flag to -xcodebuild) that will tell you exactly where all the time is going. There’s a pair of articles here that go into more detail on those and other goodies:

Enabling newly added opt-in features in Xcode 10

Build performance analysing in Xcode 10

#2, now that you’ve got the compilation flags settled, is how to parallelize your building as much as possible. There’s a new Parallelize Build option in your scheme’s build settings, and if it’s not checked, go check it. With some luck, it’ll all Just Work™, but if you have any code generating phases — we like R.swift, for instance — you’re going to find that parallelization isn’t going to work until you set the script file output filenames properly. This, and a good bit more, is explained in detail at

Improving Your Build Time in Xcode 10

#3 — speaking of parallelization — is that now your tests can be run in parallel, and randomized to boot, to make sure that you don’t have any implicit dependencies in your tests! Those are another couple optin checkboxes — for full details watch WWDC 2018’s What’s New in Testing, or check the notes at

WWDC 2018 What’s New in Testing Recap

That’s about it for the major active actions you need take to make your project Xcode 10 savvy, but there’s plenty more nuggets to dig up. For instance, exporting NSData easily:

Xcode 10 has a new QuickLook popover for (NS)Data. It now provides an “Export” feature that can be used to dump memory contents to a file. This is very convenient when you want to investigate data with external editors. (e.g. the fantastic HexFiend)

Also, you’ve no doubt noticed already that the Library is now its own window, and may have found its behaviour somewhat opaque — to keep it open by holding down Option, and some more power tips, check out

Xcode 10 Library Tips

Xcode 10 Storyboard Changes

And let’s not fail to not your annual reminder to clean your old Simulators:

$ xcrun simctl delete unavailable
$ rm -rf ~/Library/Developer/Xcode/iOS\ DeviceSupport/

That should free up at least a few gigs for you. 

Finally, if you’re really interested in digging into Xcode trivia deeper than “delete it whenever things start acting squirrely,” check out:

What’s inside the Derived Data folder?

UPDATES:

Unleashing the power of asset catalogs and bundles on iOS

Xcode & Instruments: Measuring Launch time, CPU Usage, Memory Leaks, Energy Impact and Frame Rate

Building custom Xcode Instruments Package

Building an iOS App Without Xcode’s Build System

awesome-xcode-extensions: “Awesome native Xcode extensions.”

The hidden value of Xcode schemes

Xcode Environment Specific Configuration

Measuring Your App’s Memory Usage with Instruments

Create Xcode file templates and share them with your team

Simulator tools to get more out of the simulator

Xcode file variants without targets

It’s time to use Swift Package Manager

Improving App Performance with Order Files

Xcode: Comparing Target Build Settings

xcode-register: “Register Xcode plugins to a new IDE version”

Woodpecker: “build a communication channel between mac and your app”

A Swiftcycle Built Four Two

And now that we’ve got our apps all compatible with this year’s OS and devices — you have, haven’t you? — time to take a closer look at all the goodies in the latest Swift that people have been discovering since WWDC, now that it’s official and all:

Swift 4.2 Released!

Swift 4.2 is now officially released! Swift 4.2 builds on the strengths of Swift 4, delivering faster compile times, improving the debugging experience, updating the standard library, and converging on binary compatibility.

You can watch a quick overview of it by watching the WWDC 2018: What’s New in Swift presentation, and try out some of the new features in this playground put together by Ole Begemann…

… With the completion of conditional conformance support, Swift 4.2 makes significant progress in implementing the vision of generics in the language. Watch the Swift Generics WWDC 2018 presentation for more details.

Check out those shows for sure, and read the whole thing if you want the nitty-gritty of all the implemented swift-evolution proposals, or you could just skip straight to

Migrating to Swift 4.2

Alllegedly the Xcode migrator should take care of pretty much everything, but it choked a lot for us. YMMV. Either way, not a lot of breaking changes you’re likely to find; aside from some minor renaming, check out Upgrading To Swift 4.2 for discussion, most everything new is additive — 

— and, as always, check out What’s new in Swift? for a quick and easy reference between the versions of your choice — 

— personally, our ABOUT TIME! award goes to Swift Diagnostics: #warning and #error. Good riddance, parsing scripts!

Although it’s a very close runner up for Synthesized conditional conformances in Swift 4.2. It’s just automagic!

Overdue conveniences out of the way, likely the biggest immediate aid to our coding is CaseIterable, which contrary to what the name might lead you to expect isn’t just for enums but for any type with a finite number of values: check out Enumerating enum cases in Swift for details.

Now, the biggie in terms of power, and in generating powerful opinions shall we say? centerpiece feature:

Introduce User-defined “Dynamic Member Lookup” Types

!This proposal introduces a new @dynamicMemberLookup attribute. Types that use it provide “dot” syntax for arbitrary names which are resolved at runtime – in a completely type safe way… The driving motivation for this feature is to improve interoperability with inherently dynamic languages like Python, Javascript, Ruby and others. That said, this feature is designed such that it can be applied to other inherently dynamic domains in a modular way.

On the one hand, this is definitely an “enough rope to shoot yourself in the head” kind of feature, on the other hand, Swift’s chances of ever becoming more than an Apple ghetto are enhanced significantly with this, so we figure you should all be cheering for the future job prospects! For more on this, check out

Thoughts on @dynamicMemberLookup

Exploring @dynamicMemberLookup and commentary

And while we’re speaking dynamically and all, over at Chez Wenderlich there’s an excellent overview of Dynamic Features in Swift up to and including this latest.

That’s about it for majorly interesting new stuff, but there’s some more interesting details, check out:

Ole Begemann’s above-referenced Playground: What’s new in Swift 4.2

The completely different yet identically named playground to go with Hacking With Swift’s What’s new in Swift 4.2 too.

And for yet another — come on people, we can do a creative name — Ray Wenderlich has a What’s New in Swift 4.2 three.

Michael Tsai’s Swift 4.2 Released

Finally, if you really want to get ahead of the game … check out What’s new in Swift 5.0!

UPDATES:

Bloom Filters and Swift 4.2

How CaseIterable Works Internally in Swift

Swift Associated Types With Default Values

It’s iOS 12 Submission Day!

Just in case you missed this morning’s email, time to download the GMs and Submit Your Apps to the App Store to make launch day:

You can now submit apps that take advantage of the powerful new capabilities in the next release of iOS, watchOS, and tvOS. Build your apps using Xcode 10 GM seed, test with the latest releases of iOS 12, watchOS 5, and tvOS 12, and submit them for review.

Starting March 2019, all new apps and app updates for iPhone, including universal apps, will need to be built with the iOS 12 SDK and support iPhone XS Max. All new apps and app updates for Apple Watch will need to be built with the watchOS 5 SDK and support Apple Watch Series 4…

A relatively easy one this year for most of you we imagine, although it’s always a good idea to review Apple Platform SDK API Differences and ASCIIwwdc quickly at least. Or, y’know, bingewatch the WWDC videos while you wait for the last season of Game of Thrones or whatever.

One thing to check for specifically, if you have an iPad version that hardcodes bar heights, although you really should have learned better than that by now:

iPad Navigation Bar and Toolbar Height Changes in iOS 12

Although they didn’t make it out today, it looks suspiciously like there’ll be notched Pads in the not so distant future, doesn’t it now?

iOS 12: Notable UIKit Additions covers the minor security conveniences you’ll probably want to do a little work to take advantage of to make your users adore you.

Notifications got some fairly significant upgrades you’ll want to take a look at if you tell your users about things:

What’s new in notifications in iOS 12

New in iOS 12: Adding a Custom UI and Interactivity in Local and Push Notifications

No doubt you’ve heard of Siri Shortcuts, which definitely get the award for Niftiest 2018 New iOS Tech:

WWDC 2018 for iOS developers: Siri Shortcuts

Introduction to Siri Shortcuts in iOS 12

Shortcuts: A New Vision for Siri and iOS Automation

Speaking of nifty new tech, anyone who thought ARKit wasn’t a truly Important. Future. Direction, the advances this year should be fairly conclusive evidence of that:

ARKit 2: Bringing richer experiences through collaboration, enhanced detection, and greater realism

AR Face Tracking Tutorial for iOS: Getting Started

An Introduction to AR Quick Look in iOS 12

Saving and Restoring World-mapping Data to Create a Persistence AR Experience

Not quite as overtly nifty, but downright magical for those of us dating to when it was arguable that machines could ever learn, are the various advances relating to Core ML and its helper projects this year of Create ML and Natural Language and all:

What’s New in Core ML 2

Create ML: How to Train Your Own Machine Learning Model in Xcode 10

Training a Text Classifier with Create ML and the Natural Language Framework

Natural Language in iOS 12: Customizing tag schemes and named entity recognition

NSHipster’s NLLanguage​Recognizer and IOS 12

Creating a Prisma-like App with Core ML, Style Transfer and Turi Create

And of course there’s Xcode 10 and Swift 4.2 to learn … we’ll have updates on those too once we finish converting our projects to iOS 12 savviness!

UPDATES:

Apple has new videos on building for the new Xes, the new Watches, and Complications

Check out the Wenderlich iOS 12 Launch Party! for new books, updated books, and $9K of giveaways!

Great UX walkthrough here for Surfacing Shortcuts

60+ great UI kits for iOS engineers has iOS 12 resources

How iOS Apps Adapt to the iPhone XS Max and iPhone XR Screen Sizes

Supporting iPhone XS Max and XR

Use x-callback-url with Shortcuts

Designing and Developing for Siri Shortcuts

Siri Shortcuts Tutorial in iOS 12

iOS12 – Password AutoFill, Automatic Strong Password, and Security Code AutoFill

iOS 12 Password Tools: Improving User Security and Experience

Push Notifications Tutorial: Getting Started

DJI Drone Development

Always one to play with fun gadgets, we picked ourselves up a DJI drone last year — like, if you own a drone, you almost certainly did too — but somehow, we’d managed to completely miss that there’s an actively supported iOS SDK suite out there, until we stumbled across this:

Automated Drone Missions on iOS

The initial idea for Dronoway, the outcome of our experiment, was to conduct automated drone missions. First of all, we chose an iOS app to control our Mavic and machine learning part (embedded in the app) to decide if the machine has enough battery to conduct the mission. If not, it should return home and continue the plan from where it stopped…

That’s an inspiring project, isn’t it? Let’s collect our resources on how to go about playing with flying toys:

Step 1: Sign up for a developer account at DJI Developer

Step 2: Check out the documentation at DJI Mobile SDK and all the sample projects:

Step 3: Integrate into your own projects, most conveniently with these CocoaPods:

  • DJI-SDK-iOS: “the DJI Mobile SDK for iOS, supporting both Objective C and Swift”
  • DJI-UILibrary-iOS 4: “a suite of product agnostic UI objects that fast tracks the development of iOS applications using the DJI Mobile SDK”

Also check all the goodies at DJI-SDK on Github — 

— in particular, note that the hardware video decoding component is found in DJIWidget here — 

and questions tagged dji-sdk on StackOverflow.

Any other fun stuff you’ve stumbled across for DJI drones? Let us know!

App Store Aluminium Anniversary Affiliate Apocalypse

There’s an excellent series tagged App Store at 10 over at MacStories — all worth reading for reminiscing over the laughter, tears and rage of this last decade, but particularly these pieces:

But there is no laughter, just tears and rage, at today’s controversy, which is certainly starting off the decade with a BANG!

Apple Kills the App Store Affiliate Program, and I Have No Idea What We Are Going to Do.

Moments ago, Apple announced that they’re killing the affiliate program, citing the improved discovery offered by the new App Store. (Music, books, movies, and TV remain.) It’s hard to read this in any other way than “We went from seeing a microscopic amount of value in third party editorial to, we now see no value.” I genuinely have no idea what TouchArcade is going to do. Through thick and thin, and every curveball the industry threw at us, we always had App Store affiliate revenue- Which makes a lot of sense as we drive a ton of purchases for Apple. I don’t know how the takeaway from this move can be seen as anything other than Apple extending a massive middle finger to sites like TouchArcade, AppShopper, and many others who have spent the last decade evangelizing the App Store and iOS gaming- Particularly on the same day they announced record breaking earnings of $53.3 billion and a net quarterly profit of $11.5 billion.

I’m just beside myself.

I don’t know what we’re going to do.

I really didn’t think it would be Apple that eventually kills TouchArcade.

I guess now is a great time to link the TouchArcade Patreon again.

I’m just going to turn my phone off and go sit outside.

Yowza. Mind you, it’s not like this couldn’t have been seen coming…

Apple slashes affiliate commission rate on apps from 7 to 2.5%

… but the finality of destroying the affiliate reference business model is a bit crushing. Well, that’s one less avenue of monetization for your curation sites. Not that we were making anything particularly significant off our occasional app reviews, but not particularly significant still is a greater contribution than nothing. Ah well.

If you want to read more, although “tears and rage” pretty much covers it really, as always @mjtsai has a great roundup: Apple Removes Apps From Their Affiliate Program.

However. that’s not the only controversy afflicting the App Store lately; you might recall the WWDC-time excitement around the review guidelines now allowing trials:

Non-subscription apps may offer a free time-based trial period before presenting a full unlock option by setting up a Non-Consumable IAP item at Price Tier 0 that follows the naming convention: “XX-day Trial.” Prior to the start of the trial, your app must clearly identify its duration, the content or services that will no longer be accessible when the trial ends, and any downstream charges the user would need to pay for full functionality. Learn more about managing content access and the duration of the trial period using Receipts and Device Check

Mac App Store Sandboxing, IAP Trials, Multiplatform Services

Awesomeness, right? That’ll satisfy The Developers Union and sympathizers, riiiiight? Errrr, not so much…

Ersatz Free Trials

Every aspect of the solution is bolted on to a system which was not designed for, yet is somewhat admirably being used to simulate real support for free trials. Let me elaborate by listing several shortcomings and how they affect both users and developers in significant ways. Just off the top of my head …

  • Paid apps are listed as free, even though payment is required to unlock core functionality…
  • Bulk purchase programs are unavailable…
  • Family sharing is unavailable…
  • Not applicable to all app types…
  • Apps are ranked and featured in the wrong charts…
  • Transaction mechanics are pushed onto developers…
  • Free trials cannot be easily reset…
  • Apps cannot be made to “just work” out of the box…

There was also some grumbling at the time about the affiliate commission being lost on IAP purchases — well, that particular objection has been dealt with avec finalité, yes. Be careful what you complain about, indeed!

While the vast majority of commentators are satisfied to assume incompetence and/or malice for the lack of conventional free trials, there is a counterpoint worth considering:

Free Trials from Apple’s Perspective

I think Apple have probably thought long and hard about it, and concluded that the options they have introduced are actually better than the free trials developer’s are requesting…

… For me personally — and not a reflection of the opinions of others in my company — Apple are doing this right. There are perhaps a few rough edges — for example, they could word the free In-App Purchase option better — but their philosophy of making it completely clear to customers what they are getting, and when they pay, is on the money. It is not a case of Apple being vindictive. I guarantee they have thought about this problem deeply.

Well, we’re not sure that’s a compelling argument, but we can see that Apple would consider the current state good enough compared to resolving all these issues, definitely. So the chances that anything’s going to change more soon are probably slim indeed. So, to make the best of things as they are, here’s a library for you from BlackPixel:

Announcing IAPKit

Last week at WWDC 2018 Apple announced they are officially supporting free trials for apps via a Non-Consumable IAP item. Inspired by The Omni Group, this is exactly the approach Black Pixel took last year when releasing Kaleidoscope 2 and Pixelboard.

Last Summer when working on these two apps, we decided to create a shared framework to use internally that would wrap the iOS SDK APIs necessary to provide a smooth consistent experience with starting a free trial and upgrading to full app versions. Today we are open sourcing the fruit of this labor as IAPKit.

IAPKit provides an easy way for developers to connect to their own apps’ IAP products and display them in a simple UI that works with Auto Layout, Safe Area Insets, and iPad split-screen modes. We hope the Apple development community finds it as useful as we have…

Or, you could always just not bother with that, and go ahead and trial without it:

Trialware Makes Its Triumphant Return

To reliably answer the question of whether Apple is now allowing all-or-none trialware apps, I wanted to be very up-front about the changes with the App Store reviewer. To that end I wrote this directly into the reviewer’s notes:

We are moving to a “trialware” biz model. The user has 14 days to evaluate the app. After that, they’ll be asked to pay the IAP price to continue using it.
Surprisingly after about a day, the app was approved! Wow!

… To sum up:

  • Apple is now apparently allowing “all-or-none” trialware apps
  • You don’t have to use wonky $0 IAPs and DeviceCheck to make it work

So there you go — we’ll probably try that our next attempt at monetization and see if it continues to work!

Trialling aside, it’s pretty clear that Apple wants everybody to move to a subscription model. That has its upsides and downsides; again, @mjtsai keeps a great roundup updated at Productivity Apps and Subscription Pricing.

And one more tidbit to finish off with on a more amusing note: You know how Apple’s gift cards get auto-scanned? Ever wanted to do that with your own App Store promo codes? Well, here’s how!

Cracking the code behind Apple’s App Store promo card design

Apple’s App Store gift cards have a special trick: you can simply hold one up to your iPhone or Mac’s camera and it’ll automatically scan in the code and redeem the card for you. As developers, we thought it’d be cool to print some of our own promo code cards to give away at events, so we tried to create our own scannable cards. Turns out, there’s more to it than meets the eye…