Archive for June 30, 2022

Thursday, June 30, 2022

PowerPhotos 2.0

Brian Webster (tweet):

In PowerPhotos 2.0, it can now see and work with any photos in your iCloud photo library, and will automatically download any photos from iCloud as needed.


Photos has an export command, but it is fairly limited in what it can provide. PowerPhotos 2.0 has a new, more fully featured export function[…]


You can now open each library in a separate window in PowerPhotos, allowing for easier comparison between libraries, and dragging and dropping photos/albums between libraries.


PowerPhotos 2.0 uses a new duplicate comparison algorithm that can find more duplicate photos which are not quite 100% identical, such as scaled down copies of photos, photos that have been resaved in a different format or with different compression, and even photos with minor edits applied to them.

It’s $29.95 or $14.95 for upgrades.

Brian Webster:

Ever since the transition from iPhoto to Photos, I’ve basically just been spinning in place with PowerPhotos to keep compatible with Photos since Apple didn’t provide a good public API on the Mac. Since PhotoKit came to Catalina, I’ve finally been able to actually move forward.

Took a good year and a half or so to do the necessary rewriting to fully take advantage of PhotoKit, and add the new features I wanted. I’m hoping now I have a solid foundation for the future and adding new things to PowerPhotos won’t take so long going forward.


Swift URL Improvements at WWDC 2022

Natalia Panferova (tweet):

Previously, to obtain the path to a file in the application folder, we had to use FileManager APIs, which are quite cumbersome. Now, we can get the paths to system folders directly from static properties on URL type.

However, it sounds like the new API—which does not throw any errors—does not guarantee that the folder actually exists.

Another great improvement is the new appending(path:directoryHint:) method, that replaces the old appendingPathComponent(_:isDirectory:). The new method accepts a DirectoryHint parameter, which indicates whether Foundation should perform a file system check to determine if the path refers to a folder. The default value is inferFromPath, meaning that this information will be inferred from the path string we pass to the method. If the string contains a trailing slash, it will be treated as a directory path.

That deserves a “finally,” because for 20+ years most code (which omits the isDirectory parameter) has been incurring overhead for accessing the file system every time a URL is created.


Netherlands and Apple Reach External Payments Agreement


Following productive conversations with the Netherlands Authority for Consumers and Markets (ACM), today we’re introducing additional adjustments to Apple’s plan to comply with the regulator’s order pertaining to dating apps on the App Store in the Netherlands:

In accordance with the ACM’s wishes, we’ve made adjustments to the user interface requirements announced this past March for developers who choose to use either or both of the entitlements.


The 3 percent commission discount also applies to in-app purchases that qualify for a lower commission rate (for example, App Store Small Business Program enrollees or subscription services after one year of paid service — both of which already qualify for a 15% commission).


Apple has changed its unfair conditions, and will now allow different methods of payment in Dutch dating apps. With this concession, Apple will meet the requirements that the Netherlands Authority for Consumers and Markets (ACM) set under European and Dutch competition rules. Until recently, customers of dating apps had only been able to pay using the payment method that Apple imposed. In ACM’s opinion, Apple abused its dominant position with those practices. From now on, dating-app providers are able to let their customers pay in different ways. ACM forced these changes by imposing an order subject to periodic penalty payments. In the end, the sum of all penalty payments totaled 50 million euros.

I can’t believe the ACM is declaring victory when there’s still a 27% fee to Apple. Who would want to use this entitlement, go through all the extra work it entails, and make it harder for customers to make purchases—to end up paying more in fees?

Florian Mueller:

While a few details have changed lately, the one thing that has not changed is that Apple still charges developers such a high commission for using third-party payment systems that it would be a “net negative” for developers to implement their own payment systems (for payments from Dutch users) in dating apps. That’s because Apple’s commission is only 3% below the App Store commission, and payment services charge roughly that percentage, or potentially even more on small amounts if they have a minimum per-transaction fee.


Again, I don’t blame the ACM for not saying “we lost.” It would be the only honest thing they and Match Group could say in this situation, but for institutional reasons they can’t. However, at least they shouldn’t spout total nonsense. The part about benefits to developers and consumers is a disgrace.

Juli Clover:

Though Apple is making these changes, the company says that it does not believe these updates are “in the best interest” of user privacy or data security, and it is continuing to appeal the original ACM order.


StoreKit External Purchase Entitlement for South Korea


The Telecommunications Business Act in South Korea was recently amended to mandate that apps distributed by app market operators in South Korea be allowed to offer an alternative payment processing option within their apps. To comply with this law, developers can use the StoreKit External Purchase Entitlement. This entitlement allows apps distributed on the App Store solely in South Korea the ability to provide an alternative in-app payment processing option. Developers who want to continue using Apple’s in-app purchase system may do so and no further action is needed.

Those who want to use a different payment system will need to enable the entitlement in Xcode, use required StoreKit APIs, and submit a separate app binary for iOS and/or iPadOS that is distributed solely on the App Store in South Korea.

This is interesting since Apple recently removed the requirement for apps in the Netherlands to create a separate binary in order to do external purchases.

Tim Hardwick:

Apple provides developers with a list of pre-approved payment service providers (PCPs) in South Korea that includes KCP, Incise, Toss, and NICE. Developers can still use a different PSP, but it must meet the same criteria of having a secure payment processing system and an established track record of protecting user privacy. Notably, Apple will earn a 26% commission on all processed sales, despite the Korean regulator’s misgivings about commissions taken on third-party payment systems.

John Voorhees:

It’s hard to imagine that Apple’s new StoreKit External Purchase Entitlement will be attractive to many developers, given its limitations and the need to create a separate version of apps just for South Korea. I expect we’ll see this new StoreKit entitlement offered on a country-by-country basis as other countries follow South Korea’s lead, but I don’t expect it will lead to meaningful use of third-party payment processors unless and until apps are available outside the App Store via sideloading.