I recently updated our CloudKit collaboration invite codebase to use the new UIActivityController
and NSItemProvider
invitation as described in Apple's documentation. We previously used UICloudSharingController
's init(preparationHandler:)
, which is since deprecated.
We have all of the previous functionality in place: we successfully create a CKShare, send the invite out, engage the share, and collaborate. However, we cannot get the Messages CKShare
preview to use our custom image and title (henceforth referred to as “collaboration metadata”). Previously, while using UICloudSharingController
's init(preparationHandler:)
to commence the share invite, the collaboration metadata successfully displayed in the Messages conversation. Now, we have a generic icon of our app and “Shared with App-Name" title, leading to a loss of contextual integrity for the invite flow.
My question: How do we make the collaboration metadata appear in the Messages conversation?
Here is our code for creating the UIActivityController
, NSItemProvider
, CKShare
, and other related entities. It encapsulates the entire CloudKit CKShare
invite setup. You will note that we do configure the CKShare
with metadata, and we do set the LPLinkMetadata
on the UIActivityItemsConfiguration
. GitHub Gist.
The metadata does successfully appear in the UIActivityController
and the CKShare
's image and title are available to the person receiving the share once they engage it and open it in our app – but the Messages preview item retains the generic message content. Also please note that this issue does occur in the production environment.
As a final note, examining UICloudSharingController
's definition leads me to believe that supplying a UIActivityItemSource
is the key to getting correct Messages collaboration metadata in place. My efforts at using an item adhering to UIActivityItemSource
in the UIActivityViewController
used to send the share did not yield the rich previews and displayed metadata I am aiming for.