Blog Archives

How To Create Mac Icons using Pic2Icon and IconComposer

Using these steps any image you have can converted to an icon to use on Mac.

This following article is a condensed version of one found on MacInstruct. (see references below)

1) Download and Launch Pic2Icon.
2) Drag and drop image you want to create an icon of to the little window. Once it finishes processing, you should have a tiff file.
3) Download and Launch Icon Composer. It is part of the Apple Developer Tools.
4) Drag the tiff file to the bottom left 128×128 window in Icon Composer. Make sure you select “use scaled version” and “extract mask” until all windows are filled up.
5) Save with .icns extension and that’s it!

References
MacInstruct, http://www.macinstruct.com/node/59
Pic2Icon, http://www.download.com/Pic2Icon/3000-2256_4-8881968.html
Apple Developer Tools (Icon Composer), http://developer.apple.com/technologies/tools/

Advertisements

Get Current Directory in Objective-C

Since Mac OS X is a unix based system, you can always use “getcwd” from the standard C library, but in general if you want to stick within the context of Objective-C/Cocoa, see the examples below.

Here’s one snippet you will probably Google quickly, but ultimately not the solution I chose.

(original code from stackoverflow see reference below)

NSFileManager *filemgr;
NSString *currentpath;

filemgr = [[NSFileManager alloc] init];

currentpath = [filemgr currentDirectoryPath];

Solution

Using the “bundle path” rather than “executable path” turned out to work much better in my instance:

NSString *currentpath = [[[[NSBundle mainBundle] bundlePath] stringByDeletingPathExtension] stringByDeletingLastPathcomponent];
NSString *fileName = [NSString stringWithFormat:@"%@/%@/",currentpath,@"filename.pdf"];

References
stackoverflow.com, http://stackoverflow.com/questions/3692489/getting-current-directory-in-objective-c
friendlydeveloper.com, “NSFileManager”, http://www.friendlydeveloper.com/tag/nsfilemanager/
techtopia.com, “Working with Directories in Objective c”, http://www.techotopia.com/index.php/Working_with_Directories_in_Objective-C
Macrumors Forums, http://forums.macrumors.com/showthread.php?t=524754
stackoverflow, “Find Parent Directory of a path”, http://stackoverflow.com/questions/1309524/cocoa-objc-find-parent-directory-of-a-path

Show Dialog Message Box in Objective-C Cocoa

There are a few ways to achieve this in Objective-C/Cocoa, and I found NSAlert to be the simplest base class for this purpose.

See example below of a small Utility class with this functionality.

Util.h

#import <Cocoa/Cocoa.h>

@interface Util: NSObject {
}

+(void)MessageBox:(char*) header:(char*) message: (unsigned long) message_type;

+(void)MessageBox:(NSString *) header:(NSString *) message;

@end

Util.m


#import "Util.h"

@implementation Util

+(void)MessageBox:(NSString *) header:(NSString *) message
{
CFOptionFlags result;

CFUserNotificationDisplayAlert(
0, //timeout
kCFUserNotificationNoteAlertLevel, //icon
NULL, //icon url
NULL,
NULL,
header,
message,
NULL, //button options default to just "ok"
CFSTR("Cancel"),
NULL,
&result //response
);

if (result==kCFUserNotificationDefaultResponse)
return NSAlertDefaultReturn;
else
return NSAlertErrorReturn;
}

+(void)MessageBox:(char*) header:(char*) message: (unsigned long) message_type
{
CFStringRef header_ref = CFStringCreateWithCString(NULL,header,strlen(header));
CFStringRef message_ref = CFStringCreateWithCString(NULL,message,strlen(message));

CFOptionFlags result;

CFUserNotificationDisplayAlert(
0,
kCFUserNotificationNoteAlertLevel,
NULL,
NULL,
NULL,
header_ref,
message_ref,
NULL,
CFSTR("Cancel"),
NULL,
&result
);

CFRelease(header_ref);
CFRelease(message_ref);

if (result==kCFUserNotificationDefaultResponse)
return NSAlertDefaultReturn;
else
return NSAlertErrorReturn;
}
@end

References
iphonedevsdk.com, http://www.iphonedevsdk.com/forum/iphone-sdk-development/8478-simple-message-box-popup.html
blogspot.com, Jorge Arimany, http://jorgearimany.blogspot.com/2010/05/messagebox-from-windows-to-mac.html
Google Codesearch (“kCFUserNotification”),