« April 2007 | Main | July 2007 »

PSIG 104 | JS <3 ObjC

Tuesday, June 26, 2007

(What is PSIG? | PSIG 104 announcement)

Items of Interest
JS <3 ObjC

Introduced in OS X 10.4, the JavaScript-ObjC bridge is currently the only officially-supported bridge. The bridge makes it easier to work with AJAX libraries, JavaScript plugins, JSON and DOM (jquery). It also gives you access to regexes (which aren't built into Cocoa) and helps you build WebKit UIs. It's somewhat limited compared to other bridges as it was created specifically for the development of dashboard widgets (which, essentially, are just webpages made with HTML, CSS, and JS). The bridge automatically morphs over numbers, strings, and arrays, but not dictionaries.

Running JS from Objc is simple:
- [WebView stringByEvaluatingJavaScriptFromString:]

With a WebView (which can be hidden), you can call any JS from ObjC.

For security reasons, there is more resistance when calling ObjC from JS. By default, all ObjC selectors and keys are excluded from JavaScript access. You override the boolean methods isSelectorExcludedFromWebScript and isKeyExcludedFromWebScript to allow access.

Security note -- anyone can open up your package and view the JS and HTML, so it's a good idea to put the more sensitive stuff in the compiled ObjC. (However, says Wolf, f-script would get you through that, too :).)

Last weekend I was at BARCamp Chicago! Perhaps a post on that at some point...

12:04 AM | Comments (5)

PSIG 103 | PackageMaker

Monday, June 25, 2007

(What is PSIG? | PSIG 103 announcement)

Items of Interest

Installer packages

.pkg -- The package format includes two key components: archive.pax.gz, where files are gzipped up with the pax archiving tool, and archive.bom, which contains the permissions metadata pax can't handle.

.mpkg -- Meta-packages are packages of packages, often used by Apple for system software. This is what enables the screen of checkboxes that allows the user to specify which components to install.

PackageMaker.app is Apple's GUI tool for making .pkg files. It's nice in that it gives you a sort of realtime preview of your installer, but it's hard to understand and crashy (it actually crashed during the demo). One thing to note is that when PackageMaker refers to "root," it's actually talking about your source folder, where you recreate your directory structure. Another thing interesting is that if you set your identifier (i.e. com.violasong.pkg.killerapp) in the package version, the install button will display "Upgrade" instead of "Install" if it detects an older version.

Other notable tools are Iceberg, an open source GUI packaging tool with a more direct UI, and the Pacifist extraction tool, useful for extracting your files without Installer.app for sanity-checking purposes.

It is recommended that you use GUI packaging tools only to generate the required description.plist and info.plist files, which can then be modified and reused to work with an automated command line solution. Wolf gives us a handy script that provides just that! You will unfortunately have to decipher a code in order to acquire said script.

Or if you are lame, you can click here instead. Enjoy!

Art notes: I have explored a few different possibilities in anthropomorphizing packagemaker.app.

11:05 PM