Resolví el problema y no fue bonito.
Comienza con iPhoto 8 ('09) en mi iMac. Esta biblioteca tenía un montón de fotos "referenciadas", es decir, fotos cuyos archivos de imagen estaban fuera de la carpeta de la biblioteca iPhoto. En iPhoto 8 esto se manejó creando un archivo de alias de OS X en la carpeta de Originales dentro de la carpeta de la biblioteca de iPhoto.
Luego quise mover mi biblioteca a mi nueva MacBook Air con Lion y iPhoto 9 ('11). Olvidando que tenía archivos de referencia en mi biblioteca, simplemente copié la carpeta de iPhoto Library de mi iMac a mi MacBook Air como dicen los documentos de soporte de Apple (no mencionan nada sobre los archivos de referencia). Por supuesto, los archivos de referencia no se copiaron al MacBook, pero todo parecía estar bien.
Inicia iPhoto 9 en mi MacBook y actualiza la biblioteca. No puede encontrar las imágenes de referencia, por supuesto, pero no hay ninguna advertencia ni nada. iPhoto 9 tiene una estructura de carpetas y bases de datos totalmente diferente. Toda la información que necesita sobre dónde encontrar una imagen se encuentra ahora en el archivo de base de datos Library.apdb SQlite en iPhoto Library / Database / apdb /. En esa base de datos hay una tabla llamada RKMaster que almacena la información sobre cada foto. RKMaster tiene una columna llamada imagePath que es donde se supone que debe ir la ruta completa del archivo de imagen original. Sin embargo, dado que mis imágenes de referencia no estaban disponibles durante la actualización de la biblioteca de iPhoto, simplemente configuró todas estas opciones en Masters/<image file name>
y almacenó la información de alias de la base de datos de iPhoto 8 en una columna BLOB llamada fileAliasData. Cuando resolví que faltaban los archivos a los que se hacía referencia, los copié en mi MacBook y el iPhoto pudo encontrarlos de nuevo milagrosamente debido a la información en la columna fileAliasData en la base de datos.
Sin embargo, iTunes y otras aplicaciones que enlazan con la biblioteca de iPhoto no acceden directamente a la base de datos de la biblioteca de iPhoto. Usan un archivo llamado AlbumData.xml en la carpeta de la biblioteca de iPhoto. iPhoto 9 vuelve a crear este archivo cada vez que cierras iPhoto. Desafortunadamente, lo que utiliza para crear la ruta de acceso de la imagen completa para colocar el archivo XML es lo que está almacenado en la columna imagePath en la base de datos, que a estas alturas ya es básicamente basura. iPhoto puede ver todos los archivos bien, pero nada más puede hacerlo.
La única solución fue arreglar minuciosamente los registros RKMaster para todos mis archivos de referencia para que señalaran el lugar correcto. Aproveché la oportunidad para copiar los archivos en la carpeta de la biblioteca de iPhoto en el proceso, de modo que ahora todas mis imágenes estén en la carpeta de la biblioteca de iPhoto. Esto implicó la configuración de fileIsReferenced = 0
y fileAliasData = null
para esos registros también.
Ahora finalmente tengo todo funcionando nuevamente, pero fue un proceso muy largo y tedioso que solo se puede hacer con un poco de conocimiento de las bases de datos SQL. Apple debería advertir a la gente sobre este problema potencial cuando aconseje cómo mover su biblioteca de iPhoto.