Archive for July 22, 2015

Wednesday, July 22, 2015 [Tweets] [Favorites]

Apple Music: Problems Adding Albums, Songs Deleted

Jim Dalrymple:

My problems started about a week after installing Apple Music. While Apple Music Radio and Playlists worked well, adding music to my library is nothing short of a mind-blowing exercise in frustration.

I started to notice that whenever I added an album to my library, not all of the songs would get added. When I looked at the list of songs, there would be some missing—sometimes, most of the album would be missing.

[…]

I know I’m not the only one having this problem. There are threads on Apple’s support forums detailing similar issues to the ones I’m having, and I’ve noticed tweets in my stream reporting the same problems.

At some point, enough is enough. That time has come for me—Apple Music is just too much of a hassle to be bothered with. Nobody I’ve spoken at Apple or outside the company has any idea how to fix it, so the chances of a positive outcome seem slim to none.

As if all of that wasn’t enough, Apple Music gave me one more kick in the head. Over the weekend, I turned off Apple Music and it took large chunks of my purchased music with it. Sadly, many of the songs were added from CDs years ago that I no longer have access to. Looking at my old iTunes Match library, before Apple Music, I’m missing about 4,700 songs. At this point, I just don’t care anymore, I just want Apple Music off my devices.

Kirk McElhearn:

I’ve had many of the same problems, and I understand exactly how Jim feels. For some of us, our music libraries are sacred, and Apple has damaged collections that we’ve been maintaining for a long time.

Update (2015-07-23): Jason Snell:

What’s funny is, when I saw that Jim was ripping into Apple Music, I thought it would be for a completely different reason that he didn’t even mention!

Yesterday, Apple had a pretty severe cloud-services outage. And with it went my access to Apple Music.

Nick Heer:

For what it’s worth, this sounds like an iCloud Music Library problem, not an Apple Music issue. It’s splitting hairs, but it’s an important distinction to make. Because I have Apple Music turned on, but not iCloud Music Library, I get all of the streaming features, but none of the saving or syncing ones. That means my local files remain untouched, which gives me a vastly greater sense of security.

Update (2015-07-27): Jim Dalrymple:

I arrived at Apple this morning to talk to them about my issues with Apple Music and to hopefully fix my problems. The good news is that I have about 99 percent of my music back.

Let’s get the easy stuff out of the way. The missing and duplicate song issues that we’ve all seen in Apple Music are being fixed shortly. They are certainly aware of what’s been going on, I can assure you.

[…]

Apple said my music was never deleted and that it was in the cloud the entire time. Before Apple Music, iTunes Match would show me all of my songs—matched, uploaded, and purchased. However, if you turn off iCloud Music Library and Apple Music, iTunes Match will only show your purchased content now. There is no way to separate iTunes Match from the iCloud Music Library. Before, you would turn off iTunes Match—now you would turn off iCloud Music Library.

[…]

However, I’m still missing a couple of hundred songs. Apple’s theory is that I deleted them—that when I was trying to fix Apple Music, I mistakenly deleted my own files. While I concede that it is within the realm of possibility that I deleted my own files, it doesn’t make sense to me.

Kirk McElhearn:

What Jim says about iTunes Match and iCloud Music Library isn’t exactly correct (Apple Music does not include iTunes Match, but it matches tracks, albeit in a different way). Here’s an article I wrote for Macworld that explains the (admittedly confusing) situation.

StruckPaper:

And if one isn’t Jim Dalrymple, what would have happened? SOL?

Marco Arment:

With the introduction of Apple Music, Apple confusingly introduced a confusing service backed by the iTunes Store that’s confusingly integrated into iTunes and the iOS Music app (don’t even get me started on that) and partially, maybe, mostly replaces the also very confusing and historically unreliable iTunes Match.

So iTunes is a toxic hellstew of technical cruft and a toxic hellstew of UI design, in the middle of a transition between two partly redundant cloud services, both of which are confusing and vague to most people about which songs of theirs are in the cloud, which are safe to delete, and which ones they actually have.

Even Jim’s follow-up piece, after meeting privately with Apple in PR-damage-control mode, is confusing at best about what actually might have happened, which is completely understandable because it sounds like even Apple isn’t sure.

John Gruber:

As clear as mud how this all works. Why not make Apple Music a separate standalone app? Apple Music: subscription service with DRM. iTunes: music you own, no DRM.

iOS 9 to Block Abuses of -canOpenURL:

Juli Clover:

Currently, companies like Twitter and Facebook are able to see which apps you have downloaded on your iPhone or iPad, sometimes using that information to deliver targeted ads. In The Information’s example, Facebook and Twitter might use your app data to see that you have a lot of games downloaded, offering up an ad for a game you don't yet have installed.

Kurt Wagner (via Nick Heer):

Twitter announced on Wednesday that its advertisers can use that app information to target users with ads. Marketers will be able to see the different categories of apps you have downloaded onto your phone as well as how recently you downloaded them in order to understand what you’re interested in.

Greg Pierce:

The key bits regarding changes to URL schemes in iOS 9 is the Privacy and Your Apps session, starting at around the 9 minute mark under the heading “App Detection”.

There are two URL-related methods available to apps on iOS that are effected: canOpenURL and openURL. These are not new methods and the methods themselves are not changing. As you might expect from the names, “canOpenURL” returns a yes or no answer after checking if there is any apps installed on the device that know how to handle a given URL. “openURL” is used to actually launch the URL, which will typically leave the app and open the URL in another app.

Up until iOS 9, apps have been able to call these methods on any arbitrary URLs. Starting on iOS 9, apps will have to declare what URL schemes they would like to be able to check for and open in the configuration files of the app as it is submitted to Apple.

[…]

I have independent confirmation from several sources that these limitations are meant to only apply to “canOpenURL” and it is a bug that they are also effecting “openURL”. There are still implications, and many apps will need some updates, but that’s not so dramatic a change.

[…]

Even if that is the case, loss of the ability to call “canOpenURL” on arbitrary URLs will limit the user experience on many automation applications of URLs because an app has no way of testing if the URL can be opened successfully and will have to rely on the system to report errors.

Update (2015-07-22): Federico Viticci:

iOS 9 beta 4 has a new alert to confirm launching URL schemes for the first time. Choice is remembered later.

Update (2015-09-08): Keith Harrison:

With the schemes included in Info.plist everything works as before. When you link against iOS 9 you are not limited to 50 distinct schemes you just need to declare what you need in Info.plist. There seems to be no limit for how many schemes you can include but I would expect questions from the App Store review team if they think you are abusing the mechanism.

Flashlight Brightens Up Spotlight in Yosemite

Josh Centers:

Developer Nate Parrot has created Flashlight, an open platform that makes it possible for developers to expand Spotlight’s repertoire of commands. The free Flashlight app helps you find, install, and manage the necessary plugins.

[…]

Here are some examples:

  • Perform a quick Web search by inserting / before a Spotlight query.
  • Search Google Maps by prefixing your query with “google maps” or just “gm”.
  • Eject a mounted volume. You can also eject all mounted volumes by typing “eject all”.

[…]

You can install any of hundreds of plugins. The Flashlight app offers browsable categories including Design, Developer, Language, Media, and System, or you can search through the full set.

Looks like it works via SIMBL-style code injection, so I’m not sure how long it will last.

Update (2015-09-03): Nate Parrott (via Phil Dokas):

Hacking Spotlight is impossible in 10.11.

Every Swift Value Type Should Be Equatable

Andrew Bancroft:

To be truly equal, the == operator not only needs to be implemented, but it needs to be implemented in such a way that it behaves as we’d expect when doing our comparisons. During the talk, Doug mentioned three important properties of equality that need to hold for our Value Types:

  1. The comparison must be reflexive
  2. The comparison must be symmetric
  3. The comparison must be transitive

[…]

If Reference Types are involved with your Value Type implementation, things could get a little more complicated. “Complicated” probably isn’t the right word… but you do have to think a little more about your Type’s equality semantics.

Higher Order Functions in Swift 2

Anthony Levings:

Where you have a nested array that simply needs joining with an additional array of values placed between each use join(). If you have an array that needs to be flattened and needs additional values appended as a suffix or prefix to each nested array use flatMap(). If you require a one off initial value and possibly to append values before or after nested values use reduce().

[…]

The focus of this post has been arrays, but actually there are things that can be done with dictionaries as well.

Update (2015-07-27): Natasha Murashev:

In other words, flatMap is specifically overloaded to deal with Optionals. It will take an array of optionals and return an array of unwrapped optionals without any nils.

[…]

The idea of thinking of flatMap as dealing with containers vs just arrays makes things a lot clearer!

Update (2015-09-25): Giovanni Lodi:

A good use case for map and flatMap in the context of Optional is to simplify code using if lets.

North America Out of New IPv4 Addresses

Iljitsch van Beijnum:

ARIN, the American Registry for Internet Numbers, has now activated its “IPv4 Unmet Requests Policy.” Until now, organizations in the ARIN region were able to get IPv4 addresses as needed, but yesterday, ARIN was no longer in the position to fulfill qualifying requests. As a result, ISPs that come to ARIN for IPv4 address space have three choices: they can take a smaller block (ARIN currently still has a limited supply of blocks of 512 and 256 addresses), they can go on the wait list in the hopes that a block of the desired size will become available at some point in the future, or they can transfer buy addresses from an organization that has more than it needs.

[…]

The Internet Engineering Task Force (IETF) saw the eventual depletion of IP addresses looming in the early 1990s, so they set out to solve the problem and came up with a new version of the Internet Protocol. The old IP has version number 4; the new version is 6. IPv6 increases the length of IP addresses to no fewer than 128 bits—sort of like increasing phone numbers from 10 to 40 digits. As a result, the number of available IPv6 addresses is, for all practical purposes, unlimited.

The trouble is that, of course, old systems can only handle the IPv4 with its 32-bit addresses. That problem has pretty much been solved in the intermediate decade, and today virtually all operating systems can handle 128-bit IPv6 addresses—although some applications can’t or don’t handle them properly.

The main issue remaining is that most networks simply haven’t enabled IPv6 yet. Although turning on IPv6 is not as hard as some people think, it’s not entirely trivial either in larger networks.

Removing Previous Versions of Files

Dan Moren:

Reader Mike Barron points out you actually can remove all old versions: “You can remove all previous versions by simply holding the option button when navigating to File→Revert. When doing so you should see “Delete This Version…” change to “Delete Old Versions…” You will receive a confirmation before the deletions occur.”)