Ken, Thanks for the response. NSImage never ended up working, but your suggestion of attaching the local URL worked:
NSString *fileUrl = @"http://i.imgur.com/V8w9fKt.gif"; NSString *fileName = [fileUrl lastPathComponent]; NSURL *saveUrl = [NSURL URLWithString:[NSString stringWithFormat:@"file://%@", NSTemporaryDirectory()]]; saveUrl = [saveUrl URLByAppendingPathComponent:fileName]; // Write image to temporary directory NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileUrl]]; [data writeToURL:saveUrl atomically:YES]; // Attach the raw NSURL pointing to the local file NSArray *shareItems = [NSArray arrayWithObjects:saveUrl, @"Text", nil]; // Open share prompt NSSharingService *service = [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeMessage]; service.delegate = self; [service performWithItems:shareItems]; I then implemented didShareItems and didFailToShareItems so that I could remove the file after sharing was complete: - (void)sharingService:(NSSharingService *)sharingService didShareItems:(NSArray *)items{ NSString *path = items[0]; [self removeFile:path]; } ... - (void)removeFile:(NSString *)path{ [[NSFileManager defaultManager] removeItemAtPath:path error:NULL]; } And for those struggling, I found the following method was required for everything to work properly: - (NSWindow *)sharingService:(NSSharingService *)sharingService sourceWindowForShareItems:(NSArray *)items sharingContentScope:(NSSharingContentScope *)sharingContentScope{ return self.window; } I’m not sure if this is the best/most elegant way to accomplish this, so any further suggestions would be appreciated. Thank you for your help once again, Charles Carver On May 16, 2014, at 9:51 PM, Ken Thomases wrote: > On May 16, 2014, at 10:26 AM, Charles Carver wrote: > >>> I'm pretty new to Objective-C, but have been mostly understanding >>> everything so far. I am stuck, however, on trying to share an animated GIF >>> through NSSharingService. >>> >>> I am attaching the image like so, where “image" is a string containing the >>> URL of an animated GIF (http://i.imgur.com/V8w9fKt.gif, for example): >>> >>> NSImage *imageData = [[NSImage alloc] initWithContentsOfURL:[NSURL >>> URLWithString:image]]; >>> NSArray *shareItems = [NSArray arrayWithObjects:imageData, @“Text", nil]; >>> NSSharingService *service = [NSSharingService >>> sharingServiceNamed:NSSharingServiceNameComposeMessage]; >>> service.delegate = self; >>> [service performWithItems:shareItems]; >>> >>> When the code is run and the message is sent, however, the image gets sent >>> as a PNG file instead of a GIF. > > Instead of putting an NSImage into the list, try creating an NSPasteboardItem > and setting its data to be the image data and its type to kUTTypeGIF: > > NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:image]]; > NSPasteboardItem* item = [[NSPasteboardItem alloc] init]; > [item setData:data forType:(__bridge NSString*)kUTTypeGIF]; > NSArray *shareItems = [NSArray arrayWithObjects:item, @“Text", nil]; > … > > It may still end up as a PNG because the pasteboard server will translate > from any known image type to the most common interchange formats, and the > receiving end gets to pick its preferred type. > > If that still doesn't work, you can try putting either the original URL into > the shareItems array or the file URL from a locally-saved file. > > Regards, > Ken > _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com