Under The BridgeUnder The Bridge

Musings
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!

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 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

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…

Homemade Marzipan Recipes: UIKit on macOS

Well, we are definitely going to accept credulously everything Mark Gurman tells us from now on, because he called it six months early: Yes, UIKit is coming to macOS, and it is, in fact, code named “Marzipan”— top marks! And there’s been a wide range of reactions to that, the best collected (as usual!) over at Michael Tsai’s blog:

Apple Announces Marzipan for 2019

One particularly notable contrarian voice can be found at Apple Didn’t Kill AppKit, Millenials Did:

But here’s the painful part: the techniques to do these things are already available, well-known, and very few people are using them. There are still lots of iPhone-only apps, or apps that make poor use of the iPad and just let their table views stretch out to infinity. And as for tvOS… it already runs UIKit. Your scenes are actual damn UIViewControllers. And yet look at the dearth of TV apps. We’ve had Marzipan on the TV for years and almost nobody uses it…

Well yes, that’s a good argument, and yes, it’s not all that hard to make a UIKit+AppKit app now if you want to, 

To be clear, the enemy is not other Apple-platform developers. The enemy is the use of bloated, cross-platform, phone-it-in frameworks. “Write once, run everywhere” has been promised and come up wanting for decades: Java applications and applets, Adobe AIR, Xamarin, PhoneGap, and so on. One semi-success story of recent years are the various approaches like Electron and Chromium, which effectively embed an entire instance of the Chrome web browser in an app wrapper. This approach is used by such Mac apps as Slack, Discord, and Spotify.

It is also a goddamned scourge, and straight up an abuse of the end-user’s equipment.

And yes, yes, that too.

However, none of these objections are particularly subtle, and yet Apple’s put a couple years so far into this and is doubling down. All in order to save, spitballing here, maybe 15-25% of any well-architected app would need to be different? Well, that makes people figure, also quite reasonably, that the real agenda here is to support the ARM Macs That Everyone Expects Sooner Or Later:

Marzipan as a Path to ARM Based Macs

What if MacOS on ARM only ran these new UIKit apps?

That’s a scary thought for this MacOS developer.

But then again, we already have this and it’s called iOS on the iPad. And maybe, just maybe, and remember these are half baked thoughts, but maybe Apple is wondering if some Pro users might be better served by MacOS Touch 1.0 running on ARM.

An interesting perspective. But, as announced, Apple is using it themselves, so we know that they evaluated the cross-platform strategy ably ranted on behalf of above, and they decided it made more sense to engineer this Grand UIKit Emulation Layer … well, for some reason. Be fascinating to find out what next year or two!

In the meantime, what’s shipping now is surprisingly functional, people are finding:

and although it’s generally agreed that you shouldn’t pay too much attention to the current implementation details, if you want to have some quick fun:

marzipanify

marzipanify is an unsupported commandline tool to take an existing iOS Simulator binary (with minimum deployment target of iOS 12.0) and statically convert it and its embedded libraries & frameworks to run on macOS 10.14’s UIKit runtime (Marzipan)…

MarzipanTool  — Port an iOS app to macOS 10.14 in 5 minutes

Here’s how to port your iOS apps to macOS 10.14 Beta using Apple’s iOSMac/Marzipan framework. A “Hello World” iOS app can become a macOS app in less than 5 minutes. (I timed it.).

Marzipan Platter

At WWDC 2018 Apple announced that they are working on a multi-year strategy to make it easier to port UIKit applications to the Mac. While some first-party applications such as the Home & News app are going to use this API in macOS 10.14, third-party developers won’t have official access for another year. As a result, I made this project to help tinkerers/other impatient people get a taste of what’s to come when Apple gives everyone access to Marzipan next year…

Marzipan – UIKit on macOS

For this post I prepared a very simple app — that allows you to fetch top stories from Hacker News and present them in a simple UITableView. This app is simple as far as functionality is concerned but includes some standard plumbing and networking to see whether common libraries can be used on macOS. The good news is that this is indeed possible and we can use libraries like Alamofire, Swinject and others without any special effort!

So, it doesn’t take too much to figure that Marzipan is going to be extremely important in the not so distant future … get started today!

But please, don’t do what this guy did, even tongue in cheek and all…

Marzipants

Here’s a proof-of-concept that React Native can work* (*lol) under Marzipan.

But, like, it’s proof that we don’t need Electron, right? 💪

… It’s surprising how well it’s working. Besides the obvious mobile-specific things, it’s running abouuuut as well as tvOS builds of React Native.

I wouldn’t recommend using it. Ever. C’mon now.

UPDATES:

Marzipan: Porting iOS Apps to the Mac

Twas The Night Before Dubmas 2018

So with 12 hours to go as we type this before the WWDC 2018 keynote, let’s run down the various predictions floating out there, shall we?

The first interesting thing is that once you download the latest version of the WWDC app — go do that right now, if you haven’t yet — you’ll notice that the option to filter sessions by OS has gone away. Now, that could be just a random designer’s whim, we suppose… 

… but it could be a hat tip that the Marzipan rumours are completely on point, yes? Although we would be rather surprised to wake up tomorrow and find that AppKit has gone away, we wouldn’t be overly shocked. 

(Pro Tip: In the WWDC app, all those emoji-prefixed mystery sessions? Favorite them. Then, right after the keynote, you’ll have a curated list of all the revealed secrets ready to go!)

Speaking of apps, if you are in San Jose tonight, check out this stellar list of party, meet up, and alt-conference apps:

Apps That Help You Make the Most of WWDC

But back to the predictions for this year: If there is anything earth-shattering in the offing other than Marzipan, they’ve managed to keep them pretty much completely out of the rumor mill; the general consensus is that this will be an evolutionary year, at best, and thank heavens for that:

Spoiler alert: Apple’s WWDC 2018 is probably going to be boring, and that’s the way it should be

 

But beyond that, we don’t know much of anything regarding Tim Cook’s and Craig Federighi’s plans for the keynote. That probably means there aren’t any new products hiding up their sleeves. My guess is that the show will be relatively dull from a new-product standpoint, with the usual enhancements to iOS and macOS, some new watchOS features, and maybe a sneak peek at Apple’s upcoming video service. There won’t be a dramatic unveiling of the new Mac Pro or a new $99 HomePod mini. And forget about the ARM-powered MacBook Air we keep hearing whispers about…

Apple WWDC 2018: Why New Iphone Software Announcement Is so Mysterious

But there is another important reason that nothing might have leaked: there is very little to leak. Another story from inside Apple this year said that the company was changing its strategy to focus on improving the performance, efficiency and quality of existing features, rather than looking to institute new ones…

Chances are they’re right yes, but if they do turn out to be wrong, we’ll be the first to point and laugh.

One thing it seems we can count on being introduced is ramping up NFC support, there’s been widespread hints of that:

Apple to Expand Secure Wireless Chip Beyond Payments

And improvements to ARKit are pretty much a given:

WWDC 2018: What to expect from iOS 12, MacOS 10.14 and more

But the more recent Bloomberg report says that multiplayer AR will be featured in this year’s software — something that would lay further groundwork for the Apple AR/VR headset that the company is apparently tinkering with behind closed doors (that’s expected closer to 2020, if at all). A further report, from Reuters, cites anonymous sources and says Apple is working on a way for two iPhones to share AR data directly, so potentially private info about a user’s surroundings wouldn’t have to be stored in the cloud…

Hardware-wise, the expectations seem to range between “nothing” and “speed bumped iPad Pros”

Exclusive: Apple Plans New iPads and iOS 12 for WWDC 2018, New Marzipan Details Emerge

However, we do know for sure that macOS 10.14 will have a system Dark Mode and will very likely be called “Mojave” and that the Mac App Store is getting a makeover, and how do we know that for sure, you ask? Why, because Apple leaked it themselves:

macOS 10.14 Leak Confirms Dark Mode, Apple News App, App Store Video Previews

Just ahead of Apple’s upcoming Worldwide Developer Conference (WWDC), developer Steve Troughton-Smith came across a 30-second preview video on Apple’s servers that should have been hidden, but was accidentally made viewable. The video shows Xcode 10 running on macOS 10.14.

Also visible is an Apple News icon in the dock, as currently found in iOS. The presence in the video seemingly indicates that Apple is porting its Apple News app over the Mac in desktop form. In addition, it looks like Apple is enabling video previews in macOS 10.14, with a redesign of the Mac App Store so that it looks similar to the App Store as currently featured on the mobile side (iOS 11)…

Personally, we’re holding out hope that Apple’s acquisition of buddybuild and the interesting presence of the “Getting to Know Swift Package Manager” session in the schedule indicates that there’s exciting new developments to ease the pain of iOS dependency management. But that would be a forlorn hope indeed, we suspect.

UPDATES:

Yep, that was forlorn, wasn’t it? A year of consolidation all around, mostly, but a few new interesting tidbits:

WWDC 2018 Viewing Guide

WWDC 2018 Summary for iOS developers

WWDC 2018 Bulk Downloader

Michael Tsai  – WWDC 2018 Links