Apple

One of my biggest gripes with the App Store is not being able to contact customers who leave a review directly.

A tweet by @fafner (developer of the App MindNode) today, August 13th 2014 in which he asked if developers read reviews on the App Store, made me think about this some more.

The one thing I really miss about selling Apps on my own, outside of the App Store, is the contact you have with your customers.
If there was a problem with one of my Apps, they had to contact me directly, since there was no other way. And we could take things from there, have an ongoing stream of communication.

With the App Store, customers are inclined to leave a review of my App with feature requests, bug reports or more general criticism rather than contact me directly. Even though I make it very easy to write me through my website and the Apps themselves.

While I really appreciate every review, there’s nothing more frustrating than getting a review about, say, a request of a feature that, unknown to the reviewer, has already been implemented and not being able to tell them about it (replying to the review with another review of your own app is possible, but there’s little to no chance the customer will ever read it, plus you’d have to rate the App to do so and that opens up an entirely different can of worms (in short: don’t do it)).
Or even worse, you get a bug report and you can’t contact them for more information in order to reproduce it.

What I currently do when this happens is fire up google and search for the reviewer’s nickname – a more than often lengthy procedure. When a Twitter, Facebook, YouTube, tumblr (and so on) account finally comes up, I use that to contact them, well aware it might not even be them – it has happened before that I contacted someone and they were the completely wrong person. It’s embarrassing, but they usually understand and think nothing of it.

It takes a lot of time and nerves that’s only worth it if you have the right person in the end. Otherwise, that time could have been so much better spent.
Additionally, you’re never entirely sure if they check their messages on YouTube, for example.

I understand why the App Store doesn’t allow for direct contact from the developer to the customer. First and foremost, it’s a privacy issue and that’s more important now than it ever was.
Threaded comments on the App Store seem unappealing to me as well plus it could escalate quickly if the customer or developer gets upset for some reason, so threads would have to be curated somehow. Also, other people could chime in in what was meant to be a two-way communication. Unfavorable as well.

Nevertheless, a solution on Apple’s part would be favorable. Actually, I’ve filed bug reports (radars) with Apple on how they could improve this.

They are based on the premise that not the developer initiates contact, but the customer does (and why wouldn’t they want to – they bought the App, they want it to work).

One (rdar://13367865) is to pop up a “Contact Developer” button when a user selects two or less stars for a review on the App Store. It might also be based on keywords (crap, useless, sh*t come to mind ;))
So the user selects one star and before they can click send, another button is shown directly next to it asking the reviewer to contact the developer. Problem solved.

The other one (rdar://13379347) is for crashes. You know how, when an Apple App crashes, you get a text area to supply some more information and send that to Apple?
This could also be done for third-party Apps.
The developer could supply their support email in the Info.plist (a collection of metadata for the App, like version, copyright info, etc) in the App’s bundle.
When the crash happens, you get a crash report window. Additionally to the buttons “Reopen” and “Cancel”, there could be a “Contact Developer” button, if the email has been supplied in the plist. You click it and it opens up a new mail message with the crash report already attached, leaving the possibility for more info (or it is done in-window like the Apple App Crash dialog).

Developers do get crash reports through Apple’s iTunes Connect, but that’s all they get. There’s no contact information attached (again because of privacy issues, of course).

It surprises me that not more work has been done in that area on the App Store.

—-
My name is Matt, and I’m the developer of Eternal Storms Software. If you’d like to comment, you can catch me on twitter here: [twitter-follow screen_name=’eternalstorms’ show_count=’yes’] or by eMail.

Read more

Wwdc13

Image credit: developer.apple.com/wwdc

The Keynote presentation

If you haven’t seen yesterday’s (Monday, June 11th, 2013) WWDC keynote yet, you can watch it here on Apple’s website.

The keynote started with a very inspirational video. It’s a direct answer to recent ramblings about how Apple have lost their drive or stopped innovating and it somehow gave me the feeling it’s a direct successor to the famous “Here’s to the crazy ones“. A mantra Tim Cook doesn’t get tired of sharing any chance he gets – It’s all about the best product they can possibly make.
Watching this video literally made me think “This is going to be a WWDC keynote we’ll remember for quite a while”.

Tim Cook, CEO

seemed very energetic and enthusiastic about what he had to tell us. Frankly, I think it was the best performance from him yet. His voice was also not as ‘whispery’ as usual but a little louder and more profound. He seemed happy to be there and excited to be sharing new stuff (probably because he got tired of all those stupid “What’s Apple going to do next” questions – I’m looking at you, D11 – and finally had to show something new, silencing those questions)
And as a plus, he said “Only Apple could do this” just once which is a plus in my book. At past occasions, I think he overdid that phrase a little.

Craig Federighi, SVP Software Engineering

was, in a word, epic. Drew Wilson nailed it, in my opinion. He’s naturally funny and doesn’t ignore what’s going on around him, reacting to reactions from the audience, which, if not overdone, is a very good thing, loosening up everyone involved.
He’s a natural at giving presentations and he has fun doing what he does. A class act all around. I’d like to see him more often.

The way Craig talked about the textures in OS X (specifically, Calendar) and iOS (specifically, Game Center), I wonder if he played a key-role in Scott Forstall’s ousting.

Here a few quotes, when demoing OS X Mavericks:

“Absolutely no virtual cows were harmed in the making of this user interface.”
“It’s really amazing – even without the stitching, the window still sticks right there on the screen, it doesn’t fall off without the stitching.”

And later, when demoing iOS 7:

“We just completely ran out of green felt and wood – this has got to be good for the environment.”

No, I don’t think Federighi and Forstall were very fond of each other. But what do I know, perhaps he was making fun of himself 😉

Phil Schiller, SVP Worldwide Marketing

was solid and fun, as always. “‘Stopped innovating’ my ass” was, obviously, one of the best lines in the keynote. Seems to me he’s always the one to comment on certain publications in keynotes in a fun way, and that’s what I like about him. He doesn’t ignore those things but addresses them head-on.
Yes, he did mix up Firewire 2 with Thunderbolt 2 when introducing the Mac Pro, but who cares? It’s a new friggin’ Mac Pro!
Phil’s a very down to earth, straight up guy, very sympathetic.

I actually ‘met’ him during the WWDC 2004 Campus Bash – he was eating a taco (they had a make-it-yourself-taco-bar) and I was so stunned he stood in front of me all of a sudden, I just nodded at him and he nodded back. Yes, we’re the bestest buddies now!

He’s even cooler in person.

Roger Rosner, VP Productivity Applications

I frankly can’t remember the last time we saw him in a keynote (if ever), so I can’t really compare this one to previous appearances.
That aside, it was a decent performance, though I feel he lags behind the others – maybe because he hasn’t had too many chances to present at a keynote.
He did seem excited about iWork for iCloud, though, and I hope for his and his team’s sake it doesn’t share the same fate as iwork.com which was in beta for a while and then cancelled without much fanfare. 

Eddy Cue, SVP Internet Software and Services

Also a decent performance and I bet he’s got a new friend in US Senator John McCain.
I wish he had mentioned something about improving iCloud’s key-value storage, though. But I guess that’s something that will be probably handled less publicly at WWDC’s sessions and labs.
It’s nice they’re introducing new services (like iTunes Radio), but their existing services could use some love. Seriously.

The new stuff

Enough about the presenters, let’s talk about the announcements they made.

OS X Mavericks

Oh, that name.

First off, I keep calling it Maverick, as Maverick_s_ seems too “plural-y” to me.
It’s a name like MacBook. I can’t say how much I hated that name. But now, I love it. iBook and PowerBook seem odd to me now, and I think it will be the same with the new naming scheme of OS X.

But right now, I actually would have preferred Sea Lion. Change is hard.

iBooks, Maps on Mac

was just a matter of time. I don’t quite understand why it took so long – I think it might be a marketing thing, to have something exclusive for iPad/iPhone. Create momentum there and bring it back to the Mac to use that momentum some more.

Maps’ ‘Send location to iOS’ is awesome. The interface seems very minimalistic (which isn’t a bad thing), however, after all the textures I was used to from OS X (Mountain) Lion, it looks naked. But it’s just a matter of getting used to it again.

Calendar.app is stripped down to its bare minimum, also – no textures. It looks very nice and will look even better once I’m used to it again.

Multiple Displays

Finally that fullscreen button in the windows’ top right corner is actually usable. With OS X Mavericks, fullscreen is finally the way it should have been from the beginning.
SecondBar got sherlocked as the menu bar is now shown on the second display and the Dock can be summoned there.

AirPlay Display is a very welcome addition, though I do not own an AppleTV. But any way to extend the desktop is very fine by me.

Finder Tabs, Tags

‘Finally’, is all I can say for the tabs. And they will make Yoink more useful as well.

Tags are Spotlight comments taken mainstream. Good move. And an important step in the no-filesystem-direction.

Advanced Technologies

The improvements made on the core of OS X amaze me. It really shows how smart the people working at Apple are.

Timer coalescing and memory compression are great new ways to improve CPU- and memory usage. And even things where you’d think that after 9 releases, there would be no way to improve upon them, were indeed improved upon, like video- and audio playback, which uses up to 35% less energy.

App Nap fits in well with the energy saving ideology introduced in previous OS releases with automatic and sudden termination.

Albeit, it’s not only about saving energy, it’s also about freeing up resources for applications in the foreground that really need them.

It’s great to see so much love for OS X and the Mac again. The advancements and improvements made show that Apple is still very much interested in the Mac and its future. At least for the next decade (both Craig Federighi and Phil Schiller said something about “the next ten years” – though I shouldn’t read too much into that).

On another note, I wonder why some of the icons – or the interface in general –  weren’t changed to be in the same vain as iOS 7’s. But then again, even the iPad (beta) version of iOS 7 isn’t finished yet and I imagine OS X would be an even bigger undertaking. Perhaps there’s another ‘Back to the Mac’ event coming. 

Mac Pro

Speaking of the Mac – Apple finally introduced a new Mac Pro (by the way – if you haven’t seen Apple’s website for the new Mac Pro yet, you really should – it’s very well done!).

And what a Mac Pro it is. It’s breathtaking.

I can’t help make the comparison to the (sadly ill-fated) G4 Cube (and, as pointed out to me by @F451 on twitter, the 20th Anniversary Mac). I think it’s the Cube done right, cylindrically – though I don’t know anything about the price, yet. I just hope it’s priced aggressively.

Phil Schiller said it’s unusual for Apple to show a sneak peek of a future product. But for the Mac Pro, it was the right time.
– Pro customers were getting restless (there was a lot of talk about Apple ignoring the needs of its Pro customers)
– They aren’t sold in Europe anymore
– The last (very minor) update was a year ago and
– I don’t think too many people were buying them anymore.
So the fear of cannibalisation by a future product was non-existent.
This was the right time.

iWork for iCloud

To be honest, I’m not too interested in web apps. I haven’t once used anything on icloud.com or the ill-fated iwork.com beta.
There’s probably a sophisticated strategy behind the web version of iWork, but I’d rather they put those efforts and resources into a new version for the Mac.

Alas, Rosner assured us there would in fact be a new version of iWork for the Mac and iOS coming later this year and I’m very excited about that. I just wish they’d presented that instead of the web apps.

iOS

Man, there’s  a rift going through the iOS community. People I follow on twitter are either ecstatically pleased about the new changes or devastatingly disappointed and appalled.

As far as I’m concerned, I like it – very much so.
I don’t like a couple of icons (most gradients look weird and the Safari icon doesn’t look good at all to me), but everything else I’ve seen so far is pretty neat (which isn’t much, I have an iPhone 3GS so I can’t even install the beta, I guess it’s finally time for me to upgrade… or get an iPod touch).

Control Center is a godsend and way overdue – and the one new feature I’m most excited about in iOS 7. How much time I wasted drilling into the settings to disable WiFi, the cellular network or Bluetooth, I don’t even want to think about it.

The End

As I said before, Tim Cook doesn’t get tired reiterating what Apple’s goal is:

“I’d like to close this morning with a reminder. That our goal at Apple is to make amazing products that our customers love. Really great products that enrich people’s lives. The words you saw at the beginning of the show are more than just words to us. They’re the values we live by. They drive us. You’ve seen them reflected in the products over the years and just as much in the products this morning. And you will continue to see these reflected in the products in the future. We created an ad to help us express just how deeply we feel about this.”

And another video is played. “This is it. This is what matters.”

I think this was one of the best keynotes. They all were on their top of their game, and the stuff they had to show was breathtaking. Makes me even more inspired to work on my own stuff.

I wish I was at WWDC this year. Sadly, 71 seconds is what it takes my ISP to connect to developer.apple.com/wwdc … 😉

 

[twitter-follow screen_name=’eternalstorms’ show_count=’yes’]

Read more

Yoink

The Feature Request

One of the most requested features for Yoink is being able to drag files from a Stack in the Dock to Yoink’s window. It sounds very simple and were I not the developer of this app, I myself would ask why Yoink hasn’t been able to do that from version 1.0.

Sadly, it’s not that simple.

 

stacks in dock

The Problem

For a reason unknown to me and maybe even a few people at Apple, the Dock does not use the general NSPasteboard used for dragging (NSPasteboard is responsible for being able to copy, cut and paste content from one document to another, but it also handles file drags, most generally with the NSDragPboard type).

No, the Dock uses a custom NSPasteboard for dragging (probably using NSPasteboard’s -pasteboardWithUniqueName method). The thing is, NSPasteboard doesn’t keep a public list around (and I don’t know of a private one, either) of the names of these unique pasteboards, which makes it impossible to check if a drag occurs on those uniquely named pasteboards.

This is not only the problem with the Dock, but also with iTunes – it also uses a unique pasteboard for its drags.

The Solution(s)

The thing is, even though the Dock uses a private pasteboard for its dragging handling purposes, if the Yoink window is visible, it still recognizes those drags. Which is a good thing, because knowing that, I can look for a solution.

As I see it, there are two possible solutions to this problem:

Possible solution #1: Have a hotkey to force Yoink’s window to show.

Although I like it, it does have its drawbacks. For starters, while you’re dragging with one hand, you don’t want to have to press a complex keyboard shortcut with the other. Many people I know use two hands to press shortcuts, so it would have to be an F-key, maybe. But pretty much all F keys are taken by default, and if not, other applications use them.
It’s more obvious than the second solution, but also harder to do while dragging.

Possible solution #2: Have hot corners or hot areas to drag to to force Yoink’s window to show

This one brings up several questions:
Should all corners be hot?
Should the user be able to define them?
Should it be corners only or should it be the entire edge of the screen?
And once the user drags an item to the hot corner to show Yoink’s window, they still would have to drag it from the corner to the window. So it’s a longer way for the mouse.
And of course, in those corners, files can’t be dropped. They corners would be small areas, yes, and even if it’s a rare case that you’d want to drop in a corner (I don’t think I’ve ever done it), it’s still a possible case.

The Decision

I’m leaning towards using hot corners, it kind of feels more natural to me for Yoink.

I’d like to implement hot corners in all four corners of all of your screens. And whichever hot corner you use, on that corner’s screen’s edge the Yoink window will show for you to drag to.

What do you think? Does that make sense? Please leave a note in the comments below, it means a lot to me 🙂

Addendum: General state of Yoink

Aside from the issue above, the next update for Yoink is coming along nicely.

x) Yoink will allow the creation of clippings (when you drag a selection of text out of an application), accept items from your Browser (images, text, links) or drag out pages of a pdf file in, say, Preview – Clipping Creation Video
x) You’ll have the option to collect several files dragged at once into one item in Yoink (here a video which explains it far better). This way you can more easily drag out several files at once. And yes, there’ll be a button to split those “file clusters” up again 🙂
x) I’ve also added new position options for Yoink’s window – not only can you put it on the center right or left edge of your screen, but also the top or bottom right and left. I didn’t implement the top center or bottom center (where the Dock is by default), because Yoink uses a tableview to display its items, and tables are based on rows, one below each other. That doesn’t work if the window is not vertical but horizontal.

The Decision – [UPDATEd]

Even though I stated above that I’m leaning towards hot corners, after a good night’s rest, I’m now more and more for a hotkey instead of hot corners.
First off, it is far more obvious for users since there’s a preference for the hotkey. The hot corners would be just there, whether people knew it or not.  Also I believe the principle of hotkeys is better known than hot corners, but don’t quote me on that.
Additionally, a hotkey would give the user the benefit to be able to hide Yoink’s window even if it’s got files in it, which has been another requested feature.

The more I think about it, a hotkey does make more sense. Wouldn’t you agree?

Thank you and take care,
Matthias

Read more

sandboxPhoto credit: livingindryden.org

I’m very excited about the new operating system and the APIs it holds for developers.

One new feature that is going to be very popular amongst users and holds real benefits for them is the App Sandbox.

What is App Sandbox?

Entitlements

Basically, the App Sandbox needs developers to specify what kind of access to user data an application they create needs.

You basically start with no privileges (so called “entitlements”) at all and work your way up for what your app needs. 
Does it have open or save panels? You need an entitlements for that.
Does it need access to the network? More entitlements.
Does it need to access iCal or Address Book? Even more entitlements.

Apple states there are currently 15 entitlements, but the list may change in the future.

Containers

For data saved by applications, like preferences files, Core Data storage, “Shoebox” data, basically everything except Documents the user saves or are autosaved by OS X Lion, each application gets its own Container in /Users/yourname/Library/Containers/, like /Users/matthias/Library/Containers/at.EternalStorms.ScreenFloat/

An application that has no entitlements for file system access can not access anything beyond that folder without the user’s consent (a user can give their consent with selecting files in open or save panels or by drag’n’dropping items onto or out of the sandboxed application).

Deny, deny, deny!

Anything an application requests it doesn’t have the proper entitlement for gets denied by a process called sandboxd, the sandbox daemon. It manages the sandboxed applications and their access to things they are or aren’t entitled to.

This is what your Console looks like when something gets denied:

27.07.11 16:56:14,480 sandboxd: ([2460]) screencapture(2460) deny file-read-data /usr/sbin/screencapture

XPC

XPC helps take the sandbox paradigm even further, making apps even more secure. Instead of having one executable that does it all (access the web, access iCal data, access Address Book data, write stuff to disk, read stuff from disk), a developer splits these tasks up and basically creates for each of these operations a executable with just enough entitlements to do its work.

So if you have an application that can access your Address Book and the web, there’s nothing from stopping the app, had it been compromised, from sending that data to a server.

However, if you have two different executables, one with just the Address Book entitlement and another with just network access, it’s not that easy anymore for intruders to do their dirty business.

XPC lets these two executables talk to one another, inside their shared sandbox.

What is App Sandbox good for?

Something that has been said a thousand times in the WWDC sessions to make abundantly clear what App Sandbox is good for:

It’s a last line of defense against evil-doers.

If an application has been compromised, it can’t do anything beyond its entitlements. That’s a very good thing.

So what does it all mean for users and developers?

Users

For users, it’s a great thing to have in terms of security and privacy of your data and I think every user should be excited about it. I know I am. It’s a great solution to a problem that has been dragging on too long, and Apple stood up and took a shot at it, and I think they did very well. For the most part.

In terms of what app developers will be able to make for those users, well, that’s another story which I’ll explain next.

Developers

In general, for most cases, developers won’t have any trouble with the App Sandbox. Version 1.2 of ScreenFloat – which is currently in Review for the App Store – already is a client of the sandbox and I ran into no trouble with adopting the entitlements, what so ever. It does what it does, just like before, but now, it’s safer, and I’m very excited about that.

What worries me, however, and, judging from what I’ve read on Apple’s developer forums, worries quite a lot of other developers as well, are the so-called temporary entitlements.

Temporary entitlements are for certain cases where it’s not really safe to do something, but Apple hasn’t figured out a safe way to let the app do it yet, so they made an entitlement for it. A temporary one.

Let’s take, for example, iTunes. There are a lot of applications out there that can “remote control” iTunes with global hotkeys.
In the background, the application is sending out an Apple Script, or doing its work over the Scripting Bridge, or are sending Apple Events directly (Apple Scripts and Scripting Bridge work with Apple Events in the end, but it’s at a higher abstraction level API wise for developers like me, who have no idea how to create Apple Events in the first place).

For this case, Apple has created a temporary entitlement. Alright, so it works.

What bothers developers however is the term “temporary”. What _is_ temporary, exactly? Will there be a replacement once the temporary entitlements vanish?

Let’s look at a perfect example for this:

GimmeSomeTune and the App Sandbox

Some of you might have read it on Facebook, others may have on twitter, for those of you who haven’t, here’s what happened:

I’ve halted development on GimmeSomeTune because of the temporary entitlements, more so because of the questions I asked above that have yet to be answered by Apple.

But let’s take it one step at a time:

GimmeSomeTune gets notifications with userInfo payload objects from iTunes. That’s no problem yet, since iTunes is yet to be sandboxed. But once it is, it can only send notifications without userInfo payload objects, and that object contains all the necessary information, like Title of Song, Album, Artist, etc.

So GimmeSomeTune, in its current form, could work for some time, until Apple decides to sandbox iTunes. Boom! Rien ne va plus.

GimmeSomeTune downloads artwork and lyrics and sends them to iTunes through the Scripting Bridge. The Scripting Bridge is essentially sending Apple Events to the app you target, in my case, iTunes.

The sandbox allows for Apple Events to be received by an application (without entitlements), but can not send any, without the temporary entitlement. When the entitlement is no longer valid, the main functionality of GimmeSomeTune breaks. Boom! Rien ne va plus.

So what it comes down to is this:

GimmeSomeTune would work right now in its current state, with temporary entitlements and hoping that Apple will never sandbox iTunes so it will continue to send notifications with userInfo payloads (which is doubtful, since iTunes is your digital hub and all, so they’ll be sure to sandbox it at some point, I guess).

But what happens if iTunes was sandboxed?
GimmeSomeTune would break, it would not know what song is playing in iTunes and hence wouldn’t download information and send it to iTunes, rendering the application useless.

And what if the temporary entitlements go away without a proper replacement API?
Again, GimmeSomeTune would break and it couldn’t send downloaded data to iTunes anymore, again rendering the application useless.

Why not just release it and hope for the best?

Sure, I could release GimmeSomeTune with temporary entitlements and hope they stay around forever or that there’ll be a replacement API for them.

But I have to consider what happens if they don’t (which is, in my opinion, 100% certain) – angry users, having paid for software that doesn’t do its job.

I am not willing to take that chance. I will wait to see what Apple comes up with.
And if there is a replacement for temporary entitlements in the works, and when I’m certain GimmeSomeTune will work with it, without the fear of having the application break at some random point in the future due to functionality that is ripped out from under it, only then can I release GimmeSomeTune with confidence and the knowledge that its users will be able to actually use the app.

And I believe this is the right choice.

Sandbox at its finest

Would you like an example of what kind of apps are completely unsupported in the sandbox environment?

Applications that change developer-signed files inside of app bundles that are a) developer-signed and b) running in the sandbox environment.

May I present the worst case Scenario: PresentYourApps

Some of you may know this little app of mine. PresentYourApps lets you hide the menu bar and / or dock for applications you specify, making more screen real estate available. Or at least, it _let_ you.

On OS X Lion, it works some of the time, but I highly discourage you from using it on that system, and I will take down the download link in the next couple of hours.

I discourage you, because it breaks apps you use it on.

I got an e-Mail from a user who tried it on Preview.app on Lion, and after he restarted Preview.app, it crashed on launch. Luckily, PresentYourApps keeps backups of the file it edits, so the user could make Preview.app work again, but it was scary.

Well, PresentYourApps has been long overdue and begging for an update, but because of these circumstances, I decided to discontinue working on it all together and removing it from my website, since it will do more harm than good on Lion systems.

 

If you have any thoughts regarding all of this, or GimmeSomeTune especially, please be sure to leave a comment or contact me in any other way!

Thank you kindly for reading,
Take care,
Matthias

[twitter-follow screen_name=’eternalstorms’ show_count=’yes’]

[twitter-follow screen_name=’flickeryapp’ show_count=’yes’]

[twitter-follow screen_name=’screenfloatapp’ show_count=’yes’]

[twitter-follow screen_name=’gimmesometune’ show_count=’yes’]

Read more