How to get an ALAsset URL from a PHAsset?

Clay Bridges picture Clay Bridges · Mar 5, 2015 · Viewed 21.2k times · Source

You can do it sneakily† using the undocumented PHAsset.ALAssetURL property, but I'm looking for something documented.


† In Objective-C, this will help

@interface PHAsset (Sneaky)

@property (nonatomic, readonly) NSURL *ALAssetURL;

@end

Answer

holtmann picture holtmann · Mar 6, 2015

Create the assetURL by leveraging the localidentifier of the PHAsset. Example: PHAsset.localidentifier returns 91B1C271-C617-49CE-A074-E391BA7F843F/L0/001

Now take the 32 first characters to build the assetURL, like:

assets-library://asset/asset.JPG?id=91B1C271-C617-49CE-A074-E391BA7F843F&ext=JPG

You might change the extension JPG depending on the UTI of the asset (requestImageDataForAsset returns the UTI), but in my testing the extensions of the assetURL seems to be ignored anyhow.