title: CGImageDestinationFinalize is failing when using CGImageDestinationCopyImageSource
body: <p>I am trying to copy a uiimage and change the metadata without reencoding the image in order to not cause jpg artifacts (I know the code below reencodes, but that is just so that it can be run for testing).  CGImageDestinationCopyImageSource is supposed to copy the source of an image without reencoding it, but when I use that function, it fails at CGImageDestinationFinalize.  I am trying to follow this technical note <a href="https://developer.apple.com/library/content/qa/qa1895/_index.html" rel="nofollow noreferrer">https://developer.apple.com/library/content/qa/qa1895/_index.html</a>
  Any idea why CGImageDestinationFinalize would fail with the code below?</p>
  
  <pre><code>-(NSData *)copyImageAndChangeMetaData:(UIImage *)image {
  
      NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
  
      CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL);
      NSLog(@"    source: 0x%x", source);
      if (source == NULL) {
          NSLog(@"    source is NULL");
      }
  
      CFStringRef UTI = CGImageSourceGetType(source);
      NSLog(@"    UTI: %@", (__bridge NSString *)UTI);
      if (UTI == NULL) {
          NSLog(@"    UTI is NULL");
      }
  
      NSMutableData *dest_data = [NSMutableData data];
      CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)dest_data, UTI, 1, NULL);
      if (!destination)
      {
           NSLog(@"Image Data Error: Could not create image destination");
      }
  
      CFMutableDictionaryRef metadata = CFDictionaryCreateMutable(kCFAllocatorDefault, 2, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks);
  
      int orient = 8;
      CFNumberRef orientRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;orient);
      CFDictionarySetValue(metadata, kCGImageDestinationOrientation, orientRef);
  
      CFStringRef dateStringRef = CFStringCreateWithCString(kCFAllocatorDefault, "2017-06-06T17:31:46Z", kCFStringEncodingASCII);
      CFDictionarySetValue(metadata, kCGImageDestinationDateTime, dateStringRef);
  
      CFErrorRef errorRef = nil;
      if (!CGImageDestinationCopyImageSource(destination, source, metadata, &amp;errorRef)) {
          CFStringRef error_description = CFErrorCopyDescription(errorRef);
  
          NSString *errorDescription = (__bridge NSString *)error_description;
          NSLog(@"Image Data Error: Error copying image data: %@", errorDescription);
  
          CFRelease(error_description);
      }
  
      BOOL success = NO;
      success = CGImageDestinationFinalize(destination);
      if (!success)
      {
          NSLog(@"Image Data Error: Could not finalize image");
      }
      if (source != NULL) {
          CFRelease(source);
      }
  
      if (destination != NULL) {
          CFRelease(destination);
      }
  
      return dest_data;
  }
  </code></pre>