Yes. As you indicated, the ColorSync Manager Reference says the following:
The CMNewProfileSearch function does not take full advantage of the optimized profile
searching available starting with ColorSync version 2.5. Use CMIterateColorSyncFolder
instead.
CMIterateColorSyncFolder
is the official way to do this. Besides, it's also the optimized way.
From Apple's ImageApp sample code:
EDIT: I've modified the code sample to remove NewCMProfileIterateUPP
and DisposeCMProfileIterateUPP
.
// Callback routine with a description of a profile that is
// called during an iteration through the available profiles.
//
static OSErr profileIterate (CMProfileIterateData *info, void *refCon)
{
NSMutableArray* array = (NSMutableArray*) refCon;
Profile* prof = [Profile profileWithIterateData:info];
if (prof)
[array addObject:prof];
return noErr;
}
// return an array of all profiles
//
+ (NSArray*) arrayOfAllProfiles
{
NSMutableArray* profs=[[NSMutableArray arrayWithCapacity:0] retain];
CMIterateColorSyncFolder(profileIterate, NULL, 0L, profs);
return (NSArray*)profs;
}
It turns out that don't need NewCMProfileIterateUPP
and DisposeCMProfileIterateUPP
so they haven't been replaced with anything, as far as I can tell. Instead, you can define the callback function with a signature that matches profileIterate
, above. You can then just pass the callback function directly to CMIterateColorSyncFolder
.
I've tested my changes in ImageApp on Mac OS X 10.5 it it works as expected.