It seems they did. At least the PHAsset and PHAssetChangeRequest classes seem to do exactly that.
Or maybe not:
https://developer.apple.com/library...entEditingInputWithOptions:completionHandler:
Yes indeed, it seems like you can "request" an "Asset" to be edited and "commit" your changes. You'll initiate an "editing session" ("block") by calling above function.
From the (preliminary) docs:
"To complete the edit, create a PHContentEditingOutput object from the editing input to provide the edited asset data. Then, commit the edit by posting a change block to the shared PHPhotoLibrary object. In the block, create a PHAssetChangeRequest object and set its contentEditingOutput property to the editing output you created. "
However the docs do not talk about "recording separate edit steps" (which is what Aperture/Lightroom are doing), but instead it appears that one has to "commit" the final result ("change block") back to the photo library.
So when you chain several plugins, it looks like you end up with different "image versions" like
Original.jpg -> plugin1 -> edited1.jpg -> plugin2 -> edited2.jpg
(Off course I only made this up after skimming through the docs for about 5 minutes).
Instead of
Original.jpg -> plugin1 -> "Invert Pixels" -> plugin2 -> "Convert to greyscale"
If you think about it, the first approach is the only sensible approach, since if you need to sync your photo library to another which does not have the plugin(s) installed (simply because the plugin might be available for OS X, but not for iOS or the other way around), the other library would not be able to "render" the final image, because it would not know how to e.g. "invert the pixels"!
By storing "change blocks" however the other library would at least be able to "display" the result of the plugin (but not edit it further).
Maybe I am getting it wrong, maybe there is (will be?) a way to "record work steps" - or maybe iOS / OS X will provide a fixed set of "basic image processing operations" (like "inverting pixels" etc.) and plugins are only allowed to use those (and by combining them create new "effects")?
Interesting problem
🙂