Thanks
To make sure I implement your recommendation correctly: my plan is to persist both identifiers, use PHObject.localIdentifier as the current-library operational identifier for normal PhotoKit interactions, and keep PHCloudIdentifier.archivalStringValue as the durable recovery identifier. If the stored localIdentifier stops resolving, I would map the stored PHCloudIdentifier back to a current localIdentifier, update my stored localIdentifier, and continue using that for local PhotoKit operations.
Does that match the intended use of the identifier pair?
For a visible PHAsset in the current library, should cloudIdentifierMappings(forLocalIdentifiers:) always be expected to produce a PHCloudIdentifier? If it can fail, are there known non-deletion cases I should handle besides the asset no longer existing/resolving? In that situation, should the app still track the asset by localIdentifier and retry cloud identifier mapping later, or should the asset be excluded because it cannot be given a durable PHCloudIdentifier?