Resetting Tethering-Related Privacy Permissions on a Mac

Apple’s ill-designed and negligently implemented USB tethering permission checking is responsible for 90% of the support requests we receive these days. In this post I’ll discuss how to reset these permissions to restore access to USB connected cameras.

It is ill-designed, because: a) Instead of a single, clearly defined permission, it asks users for two seemingly unrelated ones: “Photos” and “Removable Volumes” on a Mac; “Camera” and “Files and Folders” plus a third tethering confirmation prompt on iOS. This is untidy and confusing, and people tend to deny them causing trouble down the road. b) It grossly violates the “principle of least privilege” by granting apps access to resources they have nothing to do with, and even don’t need at all.

The negligent implementation is clear from the very existence of this post, as well as a former one describing how Apple’s buggy code caused months of headache, brand damage and extra support costs last year.

Before you ask, I have reported these things to Apple countless times, even offered my help, but they continue to show zero interest in cleaning up this steaming manure pile. It wouldn’t be a problem if we weren’t forced to use Apple’s frameworks for USB communication, but we are.

The privacy permissions database itself is also a fragile component that tends to get corrupted randomly. Fortunately there’s a tool called tccutil designed to manage the database. This is a command line tool, so launch Terminal before proceeding.

First, you are advised to reset permissions for a given app. The app is specified with its “bundle id”, a unique name that identifies it for macOS.

The command to use for our ShutterCount app is:

tccutil reset All com.direstudio.ShutterCount

For ShutterCount Pro:

tccutil reset All com.direstudio.ShutterCount.pro

For Kuuvik Capture 5:

tccutil reset All com.direstudio.KuuvikCapture.5

And for earlier Kuuvik Capture versions:

tccutil reset All com.direstudio.KuuvikCapture

Everything is case sensitive, so I recommend to copy and paste the command into Terminal (and of course press Enter at the end). I also recommend disconnecting your camera and rebooting your Mac before issuing the command.

If that doesn’t help, you can try resetting the database more aggressively with:

tccutil reset All
tccutil reset Photos
tccutil reset SystemPolicyRemovableVolumes

If the reset was successful, your Mac should prompt for Photos and Removable Volumes access the next time you launch the app and connect a camera via USB.

If these steps doesn’t resolve the problem then I would suggest sending a problem report from within the app: click Report a Problem in the Help menu. Then complete and send the email. I would strongly recommend that you also complain to the party responsible for the issue: Apple, via its product feedback form.

I would like to note that Wi-Fi / Ethernet connections are not affected, because those do not rely on Apple’s code, but are handled entirely by mine.

ShutterCount 4.4 Brings USB Connections to iOS

The history of my ShutterCount app is a story full of world’s firsts. Just to mention the most important innovations:

  • October, 2013: The world’s first Canon shutter count reader on macOS.
  • April, 2016: The world’s first Canon shutter count reader on iOS (for Wi-Fi equipped cameras).
  • June, 2017: The world’s first shutter count reader on Mac and iOS that supports post-2014 Canon cameras and that introduces live view counters and the Distribution Chart.
  • October, 2018: The world’s first shutter count reader that supports Canon mirrorless models.
  • March, 2020: The world’s first shutter count reader that supports Canon cameras via USB connection on iOS.

The complicated Canon Wi-Fi pairing interface was always a problem for users of the mobile app. I’ve written a long guide and produced a few videos that allowed lots of people to successfully navigate this mess. But what I always wanted was proper USB support on iOS.

Last fall, with the release of iOS 13.1, Apple partly delivered my requested feature. USB tethering appeared in the OS, but was completely defunct. We’ve provided extensive feedback to Apple during the last six months, and now finally have an OS where USB tethering works reliably. I have only one gripe (with permission prompts) that I’ll discuss shortly.

How Does It Work?

First, you’ll have to have a USB port on your iOS device. New iPad Pros have a USB-C port, that’s fine (although you may need a USB-C to A adapter if your camera doesn’t have a C-type port). But for all devices having a Lightning port, Apple’s Lightning to USB 3 Camera Adapter, or the former USB 2 version, will be a required accessory.

ShutterCount USB connection on iOS

The above image shows a typical setup, with my good old 7D Mark II hooked up to an iPhone 7 Plus using the Canon-provided USB cable and Apple’s adapter.

Once the camera is connected and turned on, you’ll be greeted with a series of permission prompts. These prompts are presented by iOS (not ShutterCount), in a very un-Apple-ish manner (three prompts for a single thing).

The first two ask for Files and Folders and Camera access permissions. As I mentioned regarding Catalina’s similar approach, this is not just terrible user experience, but also a security issue as you’ll have to grant much broader permissions than it would be necessary. An example of Apple ignoring its own guidelines…

And to add insult to injury, there’s the third prompt, which will appear every single time you connect a camera. This is a rather ridiculous one: it tells you what you already know, and you don’t have an option to block access (tapping Settings will bring up Settings, but the connection will succeed). I’ve already called out Apple multiple times to fix the permission mess around tethering – nothing happened yet.

So please don’t blame us for this thing. But I do encourage you to provide feedback to Apple. The more of us complain, the more pressure on Apple to make this right.

New Camera Support and Availability

Speaking of new cameras, we’ve added support for Canon’s new EOS-1D X Mark III in both the Mac and iOS versions.

ShutterCount 4.4 is available now on the respective App Store. To use USB tethering, iOS 13.4 is required, which Apple promises to release on Tuesday.

The update is free for existing users.

Notes on CFexpress

I’m gearing up for the arrival of the Canon EOS-1D X Mark III, and the first thing to consider was memory cards. My goal was to find the fastest card with the smallest size. At the moment 64GB is my preferred cards size with CF/CFast/SD, but since 64GB CFexpress cards are much slower than 128GB, I went ahead and bought a 128GB SanDisk Extreme Pro. Since a camera is a good month away, I did some preliminary testing with computer transfers.

USB 3.1 Gen 2 is Not Fast Enough

When it comes to USB, manufacturers always advertise physical link speeds, which is rather misleading to the customer. For example USB 3.0 and 3.1 Gen 1 is advertised being 5Gb/s, but the usable data link speed is just 4Gb/s (or 500MB/s) since it uses a 8-bit to 10-bit encoding to have a desired balance of 0 and 1 bits on the wire. USB 3.1 Gen 2 is a bit better with 128 to 132 encoding, so the data link speed is 1.21GB/s (and NOT 1.25).

Every single CFexpress card is advertised to have at least “up to” 1.5GB/s read speed. So if you want to utilize the highest possible download speed of a CFexpress card, you need something faster than USB 3.1 Gen 2. The sole option at the time of writing is Thunderbolt 3.

To continue the never-ending stream of marketing lies, Thunderbolt 3 is usually advertised as a 40Gb/s line. Thunderbolt carries up to 4 PCI Express 3.0 lanes, plus video. So the maximum data link speed is 3.94GB/s (and NOT 5GB/s), period. This may be even lower if you connect your reader to a Thunderbolt 3 port whose controller is shared with your monitor(s), or depending on the actual controller chip to port mapping. But if you don’t connect a high resolution monitor to the same controller as the reader, you are guaranteed to have 2 PCI Express lanes, which is 1.97GB/s. CFexpress also uses 2 PCIe 3.0 lanes, so this is a perfect match. Bingo, go for a Thunderbolt 3 reader!

While quite a few companies are selling their (as we learned by now) inadequately slow USB readers, there’s only one Thunderbolt 3 device. The big and heavy AFT Blackjet TX-1CXQ. It is much larger and heavier than my ProGrade Digital CF & SD reader, not to mention the minuscule Wise WA-CR05 CFast reader I use (both of these are USB 3.1 Gen 2 readers, which is mandatory to utilize a full bandwidth of a CFast card). So I bought the Blackjet.

“Up To”…

On paper the 128GB SanDisk sports up to 1.7GB/s read and 1.2GB/s write speeds. Of course you have to deduct bandwidth consumed by file system and block device access protocol overhead, so you’ll get smaller numbers in real world scenarios.

I did measure average read speed around 1.45-1.47GB/s, which is acceptable compared to the advertised 1.7GB/s. Oh yes, you’ll need a rather fast PCIe SSD in your computer to be able to download these cards at full speed. Plus macOS 10.13 or later is required to work with CFexpress cards.

Write speed is a completely different story, however. Blackmagic Disk Speed Test measured speeds fluctuating between 800 and 1100MB/s, and it suddenly dropped to 430MB/s.

Head scratching, and consulting with both AFT and SanDisk (AFT’s support is first class, but I’m still waiting for SanDisk to reply)… Switching benchmark software to AJA System Test Lite… And presto, the truth started to reveal itself.

The following is a write graph generated by AJA System Test. Just ignore “frame numbers”, as since it was a 4GB write test, vertical blue lines indicate gigabyte boundaries.

So the card is quite speedy with 1.1-1.2GB/s average for the first gigabyte, then drops to 430MB/s. This might be thermal throttling, but since it always happens after the first gigabyte, it might well be due to the internal architecture of the card. I don’t know, and still waiting for SanDisk to comment. This is the first time I saw such a thing with a memory card.

If you let the card sit idle and cool down a bit, you’ll again get 1.1-1.2GB/s for the first gigabyte. But if you keep pushing data, it will stay at 430MB/s. For short bursts, say 256MB or so, with a little time between them, write speed stays around 1.1-1.2GB/s.

But how much write speed do you actually need? The CFast cards I’m using in the 1D X Mark II have 400-410MB/s average write speed, and I can shoot RAW continuously until the card is full. CFast and CFexpress card prices are almost identical (although the 128GB CFexpress SanDisk is significantly cheaper than the CFast). So for less money, I get 3x faster download speed, with a little bit faster worst case and almost 3x faster best case write speed.

I’m going to use the 1D X Mark III almost exclusively for stills. 1GB is about 40 images = 2 seconds at 20fps before throttling kicks in (not counting the camera’s buffer). It may fare very well, but video guys might need to look elsewhere. Larger cards, more suited for RAW video footage, might also behave differently.

What About Other Brands?

Finding a trusted memory card vendor isn’t an easy task. During the last 18 years I grown to trust SanDisk (used lots of CF cards from them and still are my favorite SD card vendor), and Lexar for CF and CFast before they went Chinese with unknown quality. I don’t buy anything from Sony given how they ignore customer security (think firmware updates requiring root permissions). I have zero experience with Delkin, ProGrade or Wise cards, and a little bit reluctant to begin experimenting with expensive cards.

So it’s basically SanDisk only at the moment. Canon is also pushing SanDisk, so I suspect that these products were tested together and will provide the promised performance. The above results did cast a little shadow on this, but only time and further in-camera testing will tell. I’ll let you know.

  ☕ ☕ ☕

Did this post help you? Consider buying me a coffee if so.