Posts RSS Comments RSS 37 Posts and 56 Comments till now

Archive for May, 2007

Creating Internet-enabled Disk images

What is an Internet-enabled disk image?

Basically, an internet-enabled disk image is a standard .dmg file with one small change. When it is downloaded using a browser it will automatically decompress the image, put the application or folder on the desktop, unmount and remove the disk image file. This way users don’t have to deal with downloading an image, double-clicking on it, dragging out the files, etc. It’s all done in one fell swoop.

How do I make my images internet-enabled?

First you have to create a disk image. There are lots of tutorials out there on how to do this (it’s quite easy). There are also a few applications that will do it for you, such as DropDMG. Apple even has an Automator action that will do this for you.

Once you’ve created your disk image fire up Terminal and use the hdiutil utility. The option we want is internet-enable -yes.

So, if I have a disk image on our desktop named myapp.dmg I would use the following syntax:

hdiutil internet-enable -yes /Path/to/image/myapp.dmg

Since I find myself creating these files a lot for installer packages I’ve found an easier way. Paste this text into Script Editor and save it as an application. It will create a droplet. Then just drag and drop your disk image file on the droplet and it will be instantly internet-enabled!

on open theFile
	tell application "Finder"
		set theNamePath to (theFile as text)
		set theName to the name of the file theNamePath
	end tell
	set thePath to the quoted form of the POSIX path of theFile
	try
		do shell script "/usr/bin/hdiutil internet-enable -yes " & thePath
		display dialog "The disk image " & (ASCII character 34) & theName & (ASCII character 34)¬
              & " has been successfully internet-enabled!"
	on error errmsg
		display dialog "Oops!  This error occured: " & return & return & ¬
              errmsg buttons {"OK"} default button 1
	end try
end open

Trapping error codes in AppleScript

If you use AppleScript you know sometimes when you try to do things such as mount a remote volume things can go wrong. Then you get a error message with number telling (hopefully) what went wrong. But you might not want that error message to show up. Maybe if that error happens you want your script to do something. If so then you have to trap that error first.

To catch an error you need to wrap the part of your script that is doing the action in a try statement. So, if I wanted to open a file I might use something like this:

try
       tell application "Finder"
		open file "Hard Drive:Users:joe:oops.txt"
	end tell
on error errmsg
end try

The script trys to run that command and if there is a problem the error message gets put into the variable errmsg. Then we can handle that error another way, perhaps with a dialog box.

try
       tell application "Finder"
		open file "Hard Drive:Users:joe:oops.txt"
	end tell
on error errmsg
     display dialog errmsg buttons {"Oops"}
end try

That works great for generic errors but what if we know the error code of a specific error, such as the file doesn’t exist ,which happens to be -1728. Then we can add the number property to our on error trap and do something specific for that error.

try
       tell application "Finder"
		open file "Hard Drive:Users:joe:oops.txt"
	end tell
on error errmsg number errNum
if errNum is -1728 then
		display dialog "Hey, that file doesn't exist!" buttons {"Doh!"}
else
     display dialog errmsg buttons {"Oops"}
end try

Now we can give the user specific feedback on certain errors and just display the error message for all other errors.