Caution – the new Mac App Store just bit me

Be VERY careful when using the Mac App Store — here’s how it purchased an app without my permission, along with THREE simple things Apple could have done to fix the problem.

Admittedly, I had my skepticism about how an App Store was going to fair servicing applications to the desktop.

The majority of Mac users seem to quickly grasp dragging an icon to a folder or double clicking the installer; the “hard” part is unzipping a file or opening a disk image file. But perhaps there is a target audience that still has a hard time of installing apps and keeping them up to date.

The downsides I expected were the less obvious things: Apple wanting a chunk of each sale resulting in trickle down inflated prices (though for the moment quite the opposite seems to have happened), certain established apps getting marketing preference due to historic purchases rather than innovative replacements getting visibility, the fear of embedded application ads becoming mainstream in the Mac culture, etc.

I saw up sides too, with copy protection and serial number issues going away. This of course had other down sides, such as apps having to check in with the Internet. I figured this meant a lot more problems for the publishers than the end consumers.

Seems I was wrong about that. I just got bit by the App Store.

I made my first Mac App Store purchase today, and in order to do so I had to authenticate. And, I’m happy to report, the purchase process works exactly as described — the application was downloaded and installed seamlessly. Go Apple!

I then decided to see if there was an update to Aperture, which I had commercially bought. Sure enough, when I went to its page, it said it was already Installed. Clever. Well done, Apple.

This is where things start to get weird. Non-Apple applications, like Coda, which I had externally bought and purchased a while back correctly showed up as Installed as well. This was nice.

But, then I noticed that a packaged I had already purchased, had a license and receipt for, and was already installed, OmniGraphSketcher, was in the App Store, too. It did not show itself as installed. And, wanting to see if it was a newer version, I clicked on it — and next thing I know, the App store begins to purchase it.

The problematic BUY button.Fundamentally the problem seems to be that the purchase button behaves differently whether or not you’re authenticated. Plus, you’re two pixels away from Copy Link / Tell a Friend from an actual purchase.

For me, it was an unexpected $30.00 hit to the wallet simply because the buttons didn’t behave the same way they had a moment ago. That’s just not right, especially not from Apple who studies user interfaces with the same passion you or I crave oxygen.

While I’m screaming, “No, no, no, NO, NO!!!” at my machine, which doesn’t help by the way, I was taken aback that there was NO CONFIRMATION process, nor was there a CANCEL option, nor was there a RETURN UNOPENED option.

Bad Apple, bad.

Because I had previously authenticated for a prior application, it blindly assumed I authorized this purchase. That’d be like buying one item in a store, and after the cashier touched your credit card, anything else you picked up in the store would get bought too.

I’ve just written to Apple at http://www.apple.com/support/mac/app-store/, and we’ll see where that goes.

UPDATE: Got a very kind email from Apple who credited me the correct amount, but for the wrong line item. I sent them a follow up because I want the right developer to be paid.

If this is an indication of how Apple will deal with application purchases in the future, we can all breath a happy sigh of relief. My own hesitations about exploring the App Store have been lightened. Plus I know never-ever-ever touch anything that looks like a price tag button, instead click the icon which doesn’t look clickable.

Uninstalling Intego Software

I’d rather eat an orange then brush my teeth with peppermint toothpaste than deal with cleaning up my system after using Intego’s software. If anything can bring the Windows reboot experience, coupled with the leaving of software cruft, to the Mac platform, this software does it in my opinion. Here’s how I finally got rid of it all. I hope.

I recently purchased a Mac bundle with software and it included software from Intego, consisting of the Personal Antispam and Personal Backup applications. I installed them, and from that point forward it was an experience I’ve regretted and have been trying to undo. Only now do I think I’ve made some progress toward that goal.

Frankly, I didn’t get what the backup software did for me over many of the free solutions out there, and while the personal antispam look intriguing, it was intrusive as well and I decided to fall back to Apple’s spam filter included in Mail.

Even if a product doesn’t make it into my main line of recommendations, I often will keep it around in the event I suddenly have use for it. This, for example, is how TypeIt4Me eventually won me over.

Intego went out of their way to annoy me straight from the start. How so? Every time I went to install a package from them, they felt the need to do what appeared to be a gratuitous reboot. It was like being on frickin’ Windows. And they had to install their own update manager, which had to take a glory spot in the menu bar. And it had to do updates, which required even more reboots. I was done with them at that point, but don’t even get me started on the subscription scheme that rode on top of the atrocity.

So I wrote to them asking them how to uninstall their software. Here’s the reply I got:

Proper removal of the software package requires using the Installer package located in your software bundle or disc. If you have manually attempted to remove the software, you will need to first, reinstall the software again, then use the same Installer package to properly remove the applications.

If you need to, you can re-download the installer for Internet Security Barrier X6 using the link below:

http://www.integodownload.com/en/isbx6.html

Open the installer and select to uninstall all software. Restart your computer.

Great, another reboot. Lucky for me, I hadn’t tried to go off on my own path, plus I had the original installation utility. I tried it, and it appeared to work.

Notice I said appeared?

One week later, LittleSnitch pops up and reports my system is spontaneously trying to access Intego’s update service for the very set of applications that, for all evidence I could tell, I removed and forgot about. Apparently, no so.

LittleSnitch also reveals it’s TaskManagerDaemon who’s trying to deal with Intego’s NetUpdate buried in /Library/Intego. Thank you LittleSnitch, curse you Intego.

Intego leaves cruft. Running cruft. Seems this isn’t new of them, according to Apple archives.

Part of the Mac culture is being a good citizen. In my opinion, I feel they aren’t.

After uninstalling the software in exactly the manner they prescribe, enter this this command at your terminal:
sudo find / -name Intego -print

I suspect you’ll develop a similar facial tick as it starts returning output after scanning your disk.

Go grab a root shell, you’re gonna wanna also wipe out:

  • /Library/Intego and everything below it.
  • /Library/Application Support/Intego and everything below it.
  • /Library/Preferences/Intego and everything below it.
  • /Users/wls/Library/Application Support/Intego and everything below it.

Oh, and you’ll want to Reboot as well.

…it’s not like I had other applications up or was doing anything important.

After the reboot, you’ll notice tons of console messages from launchd. Now you need to do this.
$ launchctl
launchd% remove com.intego.task.manager.notifier
launchd% remove com.intego.netupdate.agent
launchd% exit

And, you’ll need to remove some .plist files:
$ sudo rm -v /Library/LaunchAgents/*intego*
$ sudo rm -v /Library/LaunchDaemons/*intego*

And preferences, frameworks, keychains, and widgets:
$ sudo rm -vrf /Library/PreferencePanes/NetUpdate.prefPane
$ sudo rm -vrf /Library/Frameworks/IntegoiCalFramework.framework/
$ sudo rm -v /Library/Keychains/Intego.keychain
$ sudo rm -vrf /Library/Widgets/Intego\ Status.wdgt/

Reboot again.

UPDATE (12-Dec-2010): I’ve been in contact with Intego Support, [email protected], and they were kind enough to provide this extra information:

If there is anything left on your computer, you can remove it manually.

Can you please go into the following areas on the computer and delete any traces of Intego or VirusBarrier:

/Macintosh HD/Library/Intego
/Macintosh HD/Library/LaunchDaemons
/Macintosh HD/Library/LaunchAgents
/Macintosh HD/Applications
/Macintosh HD/Library/Preferences
/Macintosh HD/Library/Logs
/Macintosh HD/Library/Receipts
/Macintosh HD/Library/Startupitems
/Macintosh HD/Library/Widgets

Home Folder:

~/Library/Application Support
~/Library/Preferences

They were right, there’s logs, too.
$ sudo rm -rf /Library/Logs/NetUpdate/

Review: Walt gives Intego software installation TWO thumbs down. The reasons are obvious.

NTFS on OS X

Trying to write to an NTFS volume on OS X, and all you find are third party packages and complicated config file manipulations asking you to reboot? Do this….

Every once in a while someone brings over an external NTFS formatted drive and plugs it into my Mac to exchange some large data sets. While the Mac can easily read NTFS, it doesn’t appear to have the capability to write to that file system.

Appears is the operative phrase.

If you search for a solution in the open, you’ll find companies selling commercial products, drivers, and mounters. Some people have posted complicated looking instructions telling instructing you to mess with low level system files, that may or may not exist, ending in a full system reboot that typically solves the problem for that lone drive.

NTFS on OSXHere’s the generic no-software required solution.

First connect your NTFS drive to the Mac, it’ll mount with some name like “My Disk.”

Open a Terminal window and enter the command:
$ mount

The mount command will tell you what drives are listed. Find the one that has your drive name listed in it and copy the device name:
/dev/disk1s2 on /Volumes/My Disk (hfs, local, nodev, nosuid, journaled, noowners, mounted by me)

Now eject the drive, but don’t disconnect it from the machine.

Go manually create the directory (shown in bold above); this is where the mount point will be:
$ cd /Volumes
$ mkdir My\ Disk

NOTE: The backslash escapes the next character, in this case allowing a space in the directory name.

Now, mount the drive as read-write using this command:
$ sudo mount -o rw -t ntfs /dev/disk2s1 /Volumes/My\ Disk

Make sure that you’ve used the same device location you copied down the the prior steps.

At this point your drive should appear on the desktop, and you ought to be able to read and write to it just fine. No rebooting necessary!

Note that you can get to it from the Terminal as well:
$ cd /Volumes/My\ Disk
$ ls

Note that sometimes Finder may act a little wonky with timing problems and a huge file. Apparently the underlying Unix system has no problem. You can copy a big file to the drive:
$ rsync –progress SuperBigFile.zip /Volumes/My\ Disk

Or a whole directory:
$ rsync -r –progress LargeDeepDirectory /Volumes/My\ Disk

When done, make sure you are not running any programs that are accessing the drive or have their current directory set to the drive:
$ cd /Volumes

Then, eject the drive normally, or unmount it from the command line — your choice.
$ sudo umount /Volumes/My\ Disk

Full disclosure and warnings: This was tested on OS X 10.6.5, though support has been around to do this for a while. And, any time you’re doing something that deals with questionable file system access, make sure there’s nothing on the drive you don’t mind losing. Have a backup. There’s always a slight risk, but it’s very close to zero — why state all this? Because I assume no responsibility if something goes wrong.

MobileMe Sync Problems – Resolved

Apple’s MobileMe service stopped syncing for me, claiming there was one conflict, which it wouldn’t let me resolve. Here are the steps and a Python script that fixes it.

Not very long ago, I noticed my iPhone was no longer pushing data up to MobileMe, and further investigation showed that my laptop was also having problems syncing.

The MobileMe icon had an exclamation mark in it, it told me there was 1 conflict, and if I tried to resolve it, nothing happened. If I attempted a sync, it’d attempt it, but I’d get a system log full of errors with no obvious signs of successful data synchronization.

I was seeing ominous system log failures in Console like this repeated many times:

Conflict Resolver[276] [110660] |ISyncRecordGraphNode|Warning| Warning: Failed to look up record with Id: 09000000-0000-0000-1234-430001005678
Conflict Resolver[276] [110660] |ISyncRecordGraphNode|Warning| Warning: Failed to get entityName for record with Id: 09000000-0000-0000-1234-430001005678 (record = (null))
Conflict Resolver[276] [110660] |Conflict Resolver|Error| failed to look up parent relationshipName for entityName: (null) (exception = *** -[NSCFArray initWithObjects:count:]: attempt to insert nil object at objects[0])

There were other strange messages like this:

Conflict Resolver[276] [110660] |UI Helper Proxy|Error| failed to look up UIHelper for attributeName: calendar on entityName: (null) (exception = *** -[NSCFArray initWithObjects:count:]: attempt to insert nil object at objects[0])

And this (my personal favorite as it has a sense of humor):

Conflict Resolver[276] [110660] |UI Helper Proxy|Warning| No data type returned for property “calendar” on entity “(null)”, displaying on blind faith…

And also this:

Conflict Resolver[276] [110660] |Conflict Resolver|Warning| Conflict Resolver: *** -[NSCFArray initWithObjects:count:]: attempt to insert nil object at objects[0]
Conflict Resolver[276] *** -[NSCFArray objectAtIndex:]: index (-1 (or possibly larger)) beyond bounds (2)

My guess is that MobileMe has some globally unique identifier that represents one of my sync-able objects, and for some reason it’s missing. That in turn throws off some collection count, and when things don’t balance out between what was expected and what was loaded, a software exception happens.

At that point, I was fairly sure I needed to converse with MobileMe support. Apple has free chat-based support services, but it’s buried. Really buried. Really, really, buried.

  1. Go to http://www.apple.com/support/mobileme/
  2. Expand Syncing With MobileMe
  3. Click Troubleshooting MobileMe Sync issues
  4. Click Chat Now at the bottom of the page.

It’s a good idea to have your machine and your MobileMe data backed up. TimeMachine, SuperDuper!, or Carbon Copy Cloner will help you do this.

Unregister and Re-Register the Machine


Bring up Apple / System Preferences… / MobileMe. Go to the Sync tab, and at the bottom click on Advanced…

Then select the computer name in the list, and a Stop Syncing Computer… button will appear. Press it. Confirm with Unregister.

Then press the Register Computer button. Press Done.

Check and set the synchronize with MobileMe to Manually. Leave the preferences panel up, you’ll be back in a second.

Blow Aware the Sync History


You’ll need to reset your sync history which requires the iSync tool and a Python script run at the command line:

  1. In the Finder, choose Applications from the Go menu, then double-click iSync.
  2. Choose Preferences from the iSync menu.
  3. Click the Reset Sync History button.
  4. When the window opens to confirm the reset, click Reset Sync History.
  5. Close the Preferences window.
  6. Quit iSync.
  7. Open the Utilities folder (located inside the Applications folder) and double click the terminal.
  8. Paste this command in the Terminal and press return: “/System/Library/Frameworks/SyncServices.framework/Versions/A/Resources/resetsync.pl full” – without the quote marks. There will be no output.
  9. Quit terminal.

Re-sync


Select the items you want sync’d. Change the Synchronize with MobileMe back to Automatically.

You might get prompted with a request to sync immediately. If you are trying to push everything on your machine to MobileMe, stepping on what’s there, then press cancel and follow the next step. Otherwise confirm and skip the next step.

This next part is optional and you do at your own risk, assuming you have a backup and this is what you intended to do:
Press the Advanced… button. Click Reset Sync Data… and select the direction you want to sync, most likely computer to MobileMe.

At this point, the conflict disappears, but you’re no long able to sync either. Move on to resetting the preferences.

Resetting Preferences for MobileMe


In the MobileMe preferences pane, select the Account Tab, and click Sign Out… Confirm with Sign Out.

Now provide a bogus username and password like: [email protected] / blahblahblah

You’ll get a name or password invalid message, but your log will show some interesting stuff.

/Applications/System Preferences.app/Contents/MacOS/System Preferences[352] Warning: Removed .Me password
[0x0-0x2c02c].com.apple.systempreferences[352] com.apple.CSConfigDotMacCert-[email protected]-SharedServices: Already loaded
com.apple.launchd.peruser.501[206] ([email protected]) Throttling respawn: Will start in 6 seconds
com.apple.launchd.peruser.501[206] ([email protected][470]) Exited with exit code: 1
/System/Library/CoreServices/FileSyncAgent.app/Contents/MacOS/FileSyncAgent[462] PIDFilePath() => ‘/Users/yourname/Library/FileSync/01254cc20d18/.pid’

Sign back in. Once again, go to the Sync tab and set Synchronize with MobileMe to Automatically.

You will get a message that says “A computer named [your machine name] is already registered with MobileMe synchronization server.” If so, press the “Use same name” button.

You may see this in the logs, not to worry:

System Preferences[352] First pass at computer registration failed with error: Error Domain=DotMacProxyErrorDomain Code=-100 UserInfo=0x200e73280 “A computer with this name is already registered with MobileMe.”
System Preferences[352] First pass at computer registration failed with error: Error Domain=DotMacProxyErrorDomain Code=-100 UserInfo=0x200e5fa20 “A computer with this name is already registered with MobileMe.”
System Preferences[352] LightweightMallornLoginSession is registered.

Now check off the items you want sync’d again and press the Sync Now button.

If you are trying to move all of your machine’s data to MobileMe, select the correct replace option when prompted.

And just to be sure that it didn’t do a partial sync, press Sync Now a second time, just incase the automatic setting jumped the gun before you finished selecting all the desired items.

Your syncing woes should be resolved.

But what about me.com?


At this point it’s a good idea to head over the your web account by going to me.com and logging in.

Check to make sure your data is there.

At this point in time there is known issue with me.com in which the calendar and the contact data does not appear. It is a known problem. Apple is aware of it. It is specific to your profile (other MobileMe accounts aren’t affected). And you need to contact support (see above) and open a trouble ticket. Apple only knows this as a “contacts and calendar loading issue” it has no formal title.

The error you see will be this message on a grey screen: MobileMe is unable to load your contacts. MobileMe could not load your information from the server. Try reloading the page. If this problem persists, contact MobileMe Support.

You can try and clear out your Safari cookies and cache, but realistically this won’t work as other browsers, like Firefox, show the same thing.

  1. First click the log out button and close the MobileMe (me.com) window.
  2. Click the safari title (next to the Apple logo) and select “empty cache.”
  3. Next click the safari title and select preferences.
  4. Click the security tab.
  5. Click “show cookies” then hit “remove all”.
  6. Now close the preferences.
  7. After all that open a new browser window and log back into MobileMe.

Apple can fix the problem by escalating to the next level of support, and this is most likely more desirable than closing your MobileMe account and opening another, which will force your MobileMe account name to change.

MacHeist 3: A Look At Group Purchasing Behavior

Have MacHeist sales stagnated? He’s my take on why, and what can be done to fix it, and how it has to play out… for the better!

As a glossed over quick introduction, MacHeist is a short-run sale of software packages for the Mac that has a twist. You pay $39 for a bundle of software, and some of that software is “locked.” A portion of your purchase price goes to charity, and the more money raised for charity, the more items in the bundle that get “unlocked.” Thus the more people buy, the more you continue to get. It’s a great scheme, only it isn’t working.

MacHeist 3MacHeist, at the time of this writing, is conducting their third “heist” and after some amazing fluster of activity, new sales appear to have stagnated at an alarming rate.

Alarming to bundle purchasers, because if not enough sales happen, bundle purchasers won’t get all the amazing high-cost software at the extreme end of the bundle. What’s important about that statement is that it’s never happened before, and the problem isn’t the recession.

In informal polling, there appear to be two kinds of purchasers: early adopters and frugal purchasers.

The early adopter purchases the bundle early, knowing a good value when they see it, spurred on by the fact that there are additional incentives for doing so.

The frugal purchasers have their eye on either the final packages in the bundle, or are looking at the bundle as a whole. They don’t want to purchase the bundle until they know everything in it is unlocked.

And that’s the interesting part. If no one buys it, nothing gets unlocked. If everyone takes a risk, everyone gets handsomely rewarded, guaranteed. Thus each potential purchaser is waiting on the action of everyone else — it’s crowd mentality, only the driven behavior is idleness.

The secret ingredient is momentum. By carefully crafting a set of software incentives, under ideal circumstances the early adopter crowd overlaps with the late takers. This manifests itself as a steady stream of purchases.

It might be argued that The Directorate which runs MacHeist became victims of their own success and actually caused the problem by marketing the sale too well. Based on all the pre-sale puzzles, rumors, and incentives, there was a flurry of purchases in the early hours of the sale and projections seemed rather high.

However, one of the primary packages in the bundle required what looked like a high goal to unlock, the perception was that momentum was slowing. And perception drove reality. “Hmm, that doesn’t look like it’ll get unlocked, I think I’ll wait to see if it does before I buy,” is all it took to slow the influx of unlocking purchasers.

This was ill-timed, as it also happened to coincide with the reward for the first 25,000 buyers being removed from the table as the 25,000th bundle was sold. Days later, a only mere 5,000 more have sold and questions are being raised if the final packages will be unlocked.

The up-front fast burn created enough of a gap that people who were on the fence at different points became more segregated than usual. This didn’t happen in the last two sales.

So here’s my prediction: they have to fix this. Meaning, new incentives will re-emerge, the goals will have to be re-addressed, and it’s in the best interest of MacHeist to unlock the bundles anyhow at the end of it.

Turns out before I could finish this post, a new bonus was added, and that did stir a little traffic. But the real objective here is to convey there’s movement, specifically enough that the goal could be reached. That will inspire sales again, and in turn actually unlock the software. By re-calibrating the goal levels, this would solve the problem. In fact, the easy solution is to put all the last packages into one final, achievable goal.

The truth of the matter, however, is whatever happens will be remembered, if not chronicled in Wikipedia forever. If MacHeist goes down in flames for not unlocking all it’s bundled packages, people will be ever the more skeptical, and that means early adopters turning into late purchasers. That only exacerbates the problem, killing future sales opportunities.

By contrast, if the packages do get unlocked, whether by purchasers or by The Directorate making its own donation from the profits it receives, then MacHeist will be seen as more of a sure thing in the future, sliding more of the late comers and risk adverse customers into the early adopter side. This would actually increase future sales, because more gets unlocked sooner, enticing the skeptical buyers.

As such, “betting” on MacHeist with a purchase at this point still seems like a safe move. And, even if none of my predictions happen to come true, enough is unlocked already that the $39 price tag is still an awesome buy for the collection of software provided.