Ho risolto il problema e non è stato bello.
Inizia con iPhoto 8 ('09) sul mio iMac. Questa libreria conteneva una serie di foto "referenziate", ovvero foto in cui i file di immagine erano esterni alla cartella Libreria iPhoto. In iPhoto 8 questo è stato gestito creando un file alias OS X nella cartella Originals all'interno della cartella Libreria iPhoto.
Poi ho voluto spostare la mia libreria sul mio nuovo MacBook Air con Lion e iPhoto 9 ('11). Dimenticando di aver fatto riferimento ai file nella mia libreria ho appena copiato la cartella iPhoto Library dal mio iMac al mio MacBook Air come dicono i documenti di supporto Apple (non menzionano nulla sui file di riferimento). Naturalmente i file di riferimento non sono stati copiati sul MacBook, ma tutto sembrava essere OK.
Avvia iPhoto 9 sul mio MacBook e aggiorna la libreria. Non è possibile trovare le immagini di riferimento, ovviamente, ma non c'è alcun avviso o altro. iPhoto 9 ha una struttura di cartelle e database completamente diversa. Tutte le informazioni necessarie su dove trovare un'immagine sono ora nel file di database SQlite Library.apdb in Libreria iPhoto / Database / apdb /. In questo db c'è una tabella chiamata RKMaster che memorizza le informazioni su ogni foto. RKMaster ha una colonna chiamata imagePath che è il luogo in cui dovrebbe andare il percorso completo del file di immagine originale. Tuttavia, poiché le mie immagini di riferimento non erano disponibili durante l'aggiornamento della libreria iPhoto, basta impostare tutto su Masters/<image file name>
e memorizzare le informazioni sull'alias dal database iPhoto 8 in una colonna BLOB chiamata fileAliasData. Quando ho capito che mancavano i file di riferimento, li ho copiati sul mio MacBook e l'iPhoto è stato miracolosamente in grado di trovarli di nuovo a causa delle informazioni nella colonna fileAliasData nel database.
Tuttavia, iTunes e altre app che si collegano alla libreria iPhoto non accedono direttamente al database della libreria iPhoto. Usano un file chiamato AlbumData.xml nella cartella Libreria iPhoto. iPhoto 9 ricrea questo file ogni volta che chiudi iPhoto. Sfortunatamente, ciò che viene utilizzato per creare il percorso completo dell'immagine per inserire il file XML è ciò che è memorizzato nella colonna imagePath nel database, che ormai è fondamentalmente spazzatura. iPhoto può vedere tutti i file OK, ma nient'altro può.
L'unica soluzione era quella di correggere scrupolosamente i record RKMaster per tutti i miei file di riferimento in modo che indicassero la posizione corretta. Ho colto l'occasione per copiare i file nella cartella Libreria iPhoto nel processo in modo che ora tutte le mie immagini si trovino nella cartella Libreria iPhoto. Questa impostazione implicita fileIsReferenced = 0
e fileAliasData = null
anche per quei record.
Ora finalmente tutto funziona di nuovo, ma è stato un processo molto lungo e noioso che può essere fatto solo con una certa conoscenza dei database SQL. Apple dovrebbe davvero mettere in guardia le persone su questo potenziale problema quando consigliando come spostare la libreria iPhoto.