Wednesday, 13 July 2016

TravelEx Supercard - Not so Super anymore!

About a year ago, I was fortunate enough to be able to join in the pilot of the TravelEx SuperCard

This card offers 0% fees on foreign currency transactions, which saves a few pounds of the typical UK credit cards which charge anything from 50p to £2.50, plus up to 3% of the transaction amount.

Of course, I already had a 0% fee card for foreign currency, so this wasn't new... but what is new and special is that with Supercard, your transactions are recharged back to some other card in sterling - allowing you to gain cashback or loyalty points with that card as normal.
Additionally, all your transactions appear immediately in an App, showing you exactly how much you would be charged in pounds (and of course, emphasising the savings you'd made with Supercard).

This immediate display of the sterling amount turned out to be the most useful feature of the card, for me, since it allowed me to claim my work expenses immediately (instead of waiting for the transaction to clear).  It was also great on holiday, since I could keep a running total of the real cost of the trip.

Supercard has now launched publicly, with one significant change - they are now a Mastercard instead of Visa.

I haven't yet had chance to use this card abroad myself, but reports are coming in that people are being charged a mysterious extra charge.
Thankfully, the community at Head for Points has been quick to analyse these charges - my thanks to John in the comments there, who seems to have done a lot of research and analysis on this!

My interpretation of this is that Supercard is receiving the exchange rate data from Mastercard one day late.  This means that the transaction is initially being charged at "yesterday's" rate - and this is what is shown in the app as well.
Later, when Supercard receives the correct rate for the transaction date, they are doing an adjustment - so in fact, they are sticking perfectly to their own terms and conditions.
They've also stated on Twitter that if the rate had changed the other way, a refund would be issued instead (although, with Brexit, we've yet to see that in action!)
https://twitter.com/SupercardUK/status/752956412947472384
https://twitter.com/SupercardUK/status/752956480190545921

 

Assuming that this is all correct and true, financially we're probably still better off with the Mastercard solution - the statistics seem to show that the Mastercard rates are very slightly better than the Visa rates.

However, the fact that Supercard is now charging a second transaction to issue the correct exchange rate means that the app is no longer as useful for me as a traveller.  I can no longer rely on the figures shown to be the final charge, as I could before, since it is likely that a correction will be made a few days later.

This appears to be a limitation from Mastercard, since their exchange rate is defined based on the "Settlement Rate", which appears to be determined (or at least published) one day in arrears.

However, since at the moment Supercard is not updating the transaction on the App when the final exchange rate is determined, they appear to be in breach of their own terms and conditions!
In particular, section 7.5 indicates:
... Your statement will show:
...
(d) the exchange rate (where applicable) which applied to each Transaction;
(e) where applicable, the amount of each Transaction following a currency conversion (in GBP sterling) 

My only hope is that Supercard will update the App to reflect this more clearly (since it's unlikely that they can get "today's" Settlement Rate from Mastercard).
I would suggest the following improvements:
  • Mark the initial transaction as an "indicative rate" - perhaps faded grey, as is often used for pending transactions on online statements
  • As soon as the correct rate is available, show that as the final rate in the app - ideally, it should be possible to do this within 24 hours of the transaction taking place
  • Instead of charging the linked credit card the full transaction amount immediately, put a hold on the "indicative" amount, and put through the full charge only once the real exchange rate is known.
Sadly, I think the chances of this being changed correctly are very, very slim!

Wednesday, 6 July 2016

Adding Firebase to an iOS Project

This week, I made significant progress on my first iOS app, but was surprised to see that the iAd banner I had previously implemented was no longer working.

Of course, anyone who'd been working on iOS and Apple development for longer than me would have realised that Apple discontinued iAd on 30th June 2016 - but since this was all announced back in January, it was old news before I even started looking at iAd!

In the process of implementing Google AdMob as a replacement, Google pushed me quite strongly towards also adding Firebase to my project - which seems like a good idea, for Analytics if nothing else.

The manual installation instructions for Firebase seemed quite simple; just drag-and-drop the appropriate Frameworks into my project, add an obscure Linking parameter, and I should be good to go.  However, this didn't work; once the Frameworks were installed, the project refused to build...
I've certainly got something wrong, but with only limited experience of Xcode, debugging this was proving a challenge.

The simple solution seems to be to use the CocoaPods dependency management to add Firebase instead.  The first few resources I found indicated that this could be easily done; CocoaPods requires Ruby > 2.0.0, which is installed by default on all modern macOS systems.

sudo gem install cocoapods

Welcome to dependency chasing!

  • CocoaPods now requires Ruby > 2.2.0, which is not installed
  • Updating Ruby is best done using RVM, which is not installed
  • The installation instructions for RVM require GPG to verify the signatures
Fortunately, from this point on it was simple; GPGTools provides a nice installer for the Mac, which allowed me to install the latest version of RVM using a simple curl script, which then allowed me to install Ruby 2.2

Once Ruby 2.2 was available, the standard instructions for installing CocoaPods worked fine.


With CocoaPods, it was quite easy to add Firebase to my project, and build succeeded.

Once that was working, it was also very easy to see why my original manual installation of Firebase had failed; the archive provided by Google was missing the FirebaseAnalytics.framework, which includes a lot of the headers needed for successful compilation.

I'm blaming this one on Google!