Well, I thought I saw something, but maybe not...
I do want to call something out, though:
private let identifier = UUID()
If you are ever reconstructing these items more than once, the diffableDatasource will see them as new items EVERY time. It could be wise to use something naturally unique to your "item" like the URL, for example.
Also because your equatable looks like:
static func == (lhs: AlbumItem, rhs: AlbumItem) -> Bool {
return lhs.identifier == rhs.identifier
}
DiffableDatasource will not re-create a cell if cell if a property of the item changes.
One way I think about it is this:
-HashID identifies the existence of a cell in the collectionView."
-If HashID and Equals match between snapshots, the collectionView will visually keep that cell consistent. For example, you'll see move animation if the item's index changes.
-If HashID matches, but equality does not, then diffableDatasource will dequeue a new cell and call the configuration method. (In iOS 15 you can also nominate Items for a reconfigure instead of a full-on dequeuing.)
In your case, for short term debugging, I would try using the URL as the "unique identifier" of your item.
Long term, you may also need to incorporate a "modification date" into the equality method because a URL's contents can change and require a redraw the cell.