他の誰かが書いたコードを維持しています。Xcode4.5でビルドしてiOS6で実行すると、この実行時に「エラー」が発生します。
<Error>: The function `CGCMSUtilsGetICCProfileDataWithRenderingIntent' is obsolete and will be removed in an upcoming update. Unfortunately, this application, or a library it uses, is using this obsolete function, and is thereby contributing to an overall degradation of system performance. Please use `CGColorSpaceCopyICCProfile' instead.
このコードを実行するとき:
CGColorSpaceRef alternate = CGColorSpaceCreateDeviceRGB();
NSString *iccProfilePath = [[NSBundle mainBundle] pathForResource:@"sRGB Profile" ofType:@"icc"];
NSData *iccProfileData = [NSData dataWithContentsOfFile:iccProfilePath];
CGDataProviderRef iccProfile = CGDataProviderCreateWithCFData((CFDataRef)iccProfileData);
const CGFloat range[] = {0,1,0,1,0,1}; // min/max of the three components
CGColorSpaceRef colorSpace = CGColorSpaceCreateICCBased(3, range, iccProfile, alternate);
CGContextRef context = CGBitmapContextCreate(NULL, pageWidth, pageHeight, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast);
CGDataProviderRelease(iccProfile);
CGColorSpaceRelease(colorSpace);
CGColorSpaceRelease(alternate);
iOS 5.1で実行すると、エラーは発生しません。
次の変更を行うと、エラーが表示されないことがわかりました。
変化する:
NSString *iccProfilePath = [[NSBundle mainBundle] pathForResource:@"sRGB Profile" ofType:@"icc"];
NSData *iccProfileData = [NSData dataWithContentsOfFile:iccProfilePath];
CGDataProviderRef iccProfile = CGDataProviderCreateWithCFData((CFDataRef)iccProfileData);
に:
char fname[]= "sRGB Profile.icc";
CGDataProviderRef iccProfile = CGDataProviderCreateWithFilename(fname);
非推奨になっているCGDataProviderCreateWithCFDataへの参照が見つかりません。誰かが問題の原因を説明できますか?CGDataProviderCreateWithCFDataはCGCMSUtilsGetICCProfileDataWithRenderingIntentを使用しており、CGDataProviderCreateWithFilenameはCGColorSpaceCopyICCProfileを使用しているようです。これは、 CGDataProviderCreateWithCFDataが非推奨であることを示唆しています。私はこれを理解していないので、私が見つけた解決策に満足していません。また、私は解決策が誰かを助けることを願っています。