Updating to 10.6SDK
After completing the conversion to 64-bit, MagicBrush-Photo is “broken” since it also relies on the 10.4 SDK and some behavior has changed in 10.6. Here are a few of the issues and problems that had to be overcome.
Once I get an initial compile of the program, I immediately see some compiler warnings and some strange behavior, so I compile and analyze using the Clang Static Analyzer that is now included with the XCode tools.
“Boom” 111 opportunities to review.
What a great way to catch up on code you haven’t looked at in two years. I really do suggest it.
I use several external frameworks including eSellerate for my embedded webstore. Naturally, there are new versions of these frameworks that need to be incorporated to get a clean build under 10.6.
There are many methods that have been deprecated since the original 10.4 build of the app. Â Here they are for history.
+ (void)setKeys:(NSArray *)keys triggerChangeNotificationsForDependentKey:(NSString *)dependentKey
Configures the receiver to post change notifications for a given property if any of the properties specified in a given array changes. (required) (Deprecated in Mac OS X v10.5 and later. You should use the method keyPathsForValuesAffectingValueForKey: instead.)
Under 10.6 the preferred method is found here
You can also achieve the same result by implementing a class method that follows the naming convention keyPathsForvaluesAffecting, where is the name of the attribute (first letter capitalized) that is dependent on the values. Using this pattern the code in Listing 1 could be rewritten as a class method named keyPathsForValuesAffectingFullName as shown in Listing 2.
Listing 2 Example implementation of the keyPathsForValuesAffecting naming convention
+ (NSSet *)keyPathsForValuesAffectingFullName
return [NSSet setWithObjects:@”lastName”, @”firstName”, nil];
+ (id)stringWithCString:(const char *)cString
Creates a new string using a given C-string. (Deprecated in Mac OS X v10.4. Use stringWithCString:encoding: instead.)
– (void)getCString:(char *)buffer
Invokes getCString:maxLength:range:remainingRange: with NSMaximumStringLength as the maximum length, the receiverâ€™s entire extent as the range, and NULL for the remaining range. (Deprecated in Mac OS X v10.4. Use cStringUsingEncoding: or dataUsingEncoding:allowLossyConversion: instead.)
– (NSArray *)directoryContentsAtPath:(NSString *)path
Returns the directories and files (including symbolic links) contained in a given directory. (Deprecated in Mac OS X v10.5. Use contentsOfDirectoryAtPath:error: instead.)
– (BOOL)createDirectoryAtPath:(NSString *)path attributes:(NSDictionary *)attributes
Creates a directory (without contents) at a given path with given attributes. (Deprecated in Mac OS X v10.5. Use createDirectoryAtPath:withIntermediateDirectories:attributes:error: instead.)
– (BOOL)copyPath:(NSString *)source toPath:(NSString *)destination handler:(id)handler
Copies the directory or file specified in a given path to a different location in the file system identified by another path. (Deprecated in Mac OS X v10.5. Use copyItemAtPath:toPath:error: instead.)
+ (CIContext *)contextWithCGLContext:(CGLContextObj)ctx pixelFormat:(CGLPixelFormatObj)pf options:(NSDictionary *)dict
Creates a Core Image context from a CGL context, using the specified options and pixel format object. (Deprecated in Mac OS X v10.6.)
A solution was found by looking at this sample code.
Next up, Window/View Behavior….