¿Cómo puedo leer-modificar-escribir un PDF (CGPDFDocument) en iOS?

Estoy tratando de modificar los metadatos PDF (título, autor, etc.) de un PDF existente en iOS. Si bien es fácil encontrar el código de ejemplo para el análisis de PDF y para la creación de PDF desde cero, no parece haber una manera fácil de volcar un PDF existente en un file nuevo y modificarlo un poco.

Más específicamente, ¿cómo consigo la información obtenida al leer un PDF más o less así:

CGPDFDocumentRef myPDF = CGPDFDocumentCreateWithURL((CFURLRef)urlOfInputPDF); CGPDFDictionaryRef myPDFDict=CGPDFDocumentGetInfo(myPDF); 

en el nuevo PDF, que creo más o less de esta manera:

 CGRect pageRect; CFMutableDictionaryRef myDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File")); CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name")); pdfContext = CGPDFContextCreateWithURL (urlOfOutputPDF, &pageRect, myDictionary); 

Obviamente, los types de dictionary no coinciden, y el resultado creado de esta manera es la página (no documentada) relacionada.

¿Alguna idea, cómo puedo copyr todo el CGPDFDocumentRef en un file nuevo? ¿Y cómo hacer que sea mutable, por lo que puedo modificar los metadatos antes de savelos?

No conozco una forma con CoreGraphics que repetir sobre cada página e imprimirlas en el nuevo documento. Al less eso es lo que estoy haciendo en PSPDFKit. Y volver a renderizar un documento completo es bastante lento para documentos más grandes.

También pierdes algunos metadatos cuando avanzas de esa manera, tal vez una manipulación mucho más directa del PDF es una mejor manera, pero ten en count que necesitas actualizar el trailer de xref en el PDF si editas directamente cadenas, ya que el trailer es un map de coorderadas de bytes que cambiarán una vez que agregue / elimine caracteres.