Chameleon Uikit For Mac
4.4.1 Fixed: Selection of custom DSDT and SMBios. 4.4.0 Kernel flags module redone. Added support for PrivateData. 4.3.4 Moved to another hosting: osxlatitude.com Thanks a lot, valkin, for all the help.
4.3.3 Added kernel flags: nvdadrv=1, -xpcm, kext-dev-mode=1. Removed: support for arch=i386 flag. 4.3.2 Disabled file associations for aml/dsl/plist.
Also it breaks drag'n'drop on the app's icon in dock. 4.3.1 Added new bdmesg with Clover compatibility. 4.3.0 Added missing Chameleon features. 4.2.3 Fixed compatibility with 10.9. App no longer uses strings command.
4.2.2 Added: dart=0 Kernel Flag. 4.2.1 Fixed: Themes installation.
4.2.0 Added: Modules manager. Added: Revisions selection when downloading. Removed: Broken buildbot support. 4.1.2 Fixed bug: PCI Root detection. 4.1.1 Added new Kernel Flags: npci=0x3000, and ahcidisk=1 debug=8 (credits to bcc9).
4.1.0 Completly rewritten Buildbot JSON API. Shouldn't crash so often.
Now only Buildbot Xcode 4.2 is supported. 4.0.1 Fixed Buildbot detections. Updated translations. 4.0.0 Added new tab: DSDT. It helps to compile, decompile, extract and patch your DSDT. Added drag and drop on icon.
Chameleon Uikit For Macos
Added Built-In Chameleon to allow installing without any internet connection. App no longer connects to buildbot at startup to prevent crashes and other issues when server is down. You can change it in Prefernces. Many small fixes. 3.5.1 Added Restart Fix flag support.
3.5.0 Crashfix. SMBioses database now automatically updates after opening application. Added links to SMBioses' descriptions Thanks for MacKonsti for help. 3.4.6 Added support for builbot Xcode 4.2.
Buildbot Xcode 4.0.1 is no longer supported. 3.4.5 Added support for non-compressed PKG package installation files. 3.4.4 Crashfix. Now resize theme also changes bootheight and bootwidth. 3.4.3 Fixed SMBios premade database updater. Added Socket/CPU info in premade selection. 3.4.2 Added SMBios defaults option.
Removed UUID from SMBios section. Small changes. Thanks to MacKonsti for suggestions. 3.4.1 Updated some translations. Thanks to all translators.
3.4.0 Some improvements in SMBios tab: Automatic generation of serials, when you use premade smbioses. Models now have right production years. Warning icon, when wrong model was selected. Download and apply in the Themes tab now also sets desktop resolution into the theme. Cpus=1 Kernel Flag support added. 3.3.3 Bugfixes.
3.3.2 Added -force64 flag support. Added updated translations. 3.3.1 Added theme resizing.
It helps to set screen resolution for themes. Small improvements.
3.3.0 Added new Chameleon source: Dropbox. It allows you to install chameleon when buildbot is not working. Also it may include some changes in chameleon's code.
Fixed saving zip compressed packages. 3.2.9 Added DSDT and SMBios pathes checker. Added darkwake=0 kernel flag support.
Other small bugfixes. 3.2.8 Added DSDT and SMBios pathes. Fixed RAM Speed edition. 3.2.7 Added PCIRoot Detection. Small bugfixes.
3.2.6 EFI Partitions improvements. When EFI partition is mounted (use EFI menu) smbios and org.chameleon.Boot.plist tabs will be able to load files from it. 3.2.5 Clicking on the chameleon's changelog will show a new window with all changes. Fixed changelog with n and ' symbols. Fixed mac mini image loading.
Small bugs fixed. 3.2.4 Added SMBios presets and serials updater. Updated translations. 3.2.3 New French translation.
Updated Chinese translations. New premade SMBioses. 3.2.2 Fixed bug with SMBios edition, when there was no /Extra/smbios.plist 3.2.1 GUI Changes. Added new translations.
3.2 Added Chameleon pkg installer downloader. Added Hide Partitions flag support. Added or updated German, Italian, Indonesian and Korean translations. Fixed some bugs and typos. 3.1 Added disk selection for boot0md install method. Fixed some bugs and typos. 3.0 Chameleon Wizard is using BuildBot JSON API now.
Added boot0md install method. Added org.chameleon.Boot.plist editior Added SMBios editor, with premade smbioses and serial number generator. Added themes downloades and selector. Added bdmesg logs reader.
2.5 Chameleon Wizard is using BuildBot now. That means a lot faster updates of the new revs. Xcode version is selected automatically based on the latest rev.
2.1.3 Crashfix. 2.1.2 Potential memory leaks fixed. 2.1.1 Updated most of translations. 2.1 Added new feature: Install or update bdmesg tool.
Growl framework support. 2.0.4 Updated translations: Portuguese Brazilian by slipttees Portuguese Portugal by arturpt Indonesian by Wayang-NT 2.0.3 Added Sparle framework translations. 2.0.2 New Korean translation by MacGuyber. 2.0.1 New Portuguese Brazilian and Portuguese Portugal translations by slipttees.
2.0 Previous revs browser. Sparkle update framework. New option: update boot1h. 1.9 New fdisk440 compiled only i386 and x8664. Default option is selected is based on boot file. 1.8 EFI PARTITION SUPPORT!
Showing Chameleon's changelog. Showing detail info about installed chameleon. Many translations.
Behind the Scenes Warning: serious technical details ahead. Chameleon When I started working on the custom UI for the app, I tried to use the AppKit collection of classes: NSView, NSButton, NSTextField, and friends. It didn’t take long before I was really frustrated with how hard it was to customize the appearance of these controls.
For example, on iOS it’s easy to use a custom image as the background of a UIButton, you just call setBackgroundImage:forState. Using that method, you can even specify two different images: one to use normally, and another to use when the control is actually being pressed.
Getting the same thing done with NSButton is not so easy. The most straightfoward way to get a custom image is to subclass NSButtonCell and override it’s drawBezelWithFrame:inView: method, which is not at all obvious if you’re not familiar with the way NSControl uses cells for drawing. Then, for each button, you have to instruct it to use your custom cell class instead of the default class. To show a different image when the button is pressed, your implementation of that cell method has to inspect the isHighlighted property to see if the user is holding down the mouse button. When drawing that NSImage, you need to make sure you use the right drawing method that respects the flipped or non-flipped setting for the image and the graphics context. None of the above is rocket science, but it’s a lot of work for what seems like a really easy task. (Kudos to the UIKit team for taking the opportunity to rethink and clean up these interfaces.) Instead of wrangling all this myself, I took a shortcut and used an open source framework called.
Created by, Chameleon is a re-implementation of a big chunk of UIKit on top of AppKit. In a nutshell, it lets developers write iOS code that runs on OS X. Chameleon really shines when you want to use the same code to produce both an iOS and a Mac app, but in this case it was worth it just to use the better APIs from UIKit. I was able to write most of the Skip Tunes user interface using UIView, UIButton, UILabel, and even UIViewController in addition to AppKit classes like NSStatusItem and NSWorkspace. If I had to do it over again, I think I would still use Chameleon, although I think I would try a bit harder to get AppKit to behave.
I generally don’t like using cross-platform toolkits, but in this case the result was good enough to make up for it. Scripting Bridge The job of actually controlling and inspecting the media players falls onto AppleScript. Luckily, all three apps have similar scripting interfaces, so it wasn’t hard to create an abstraction layer on top of them.
Along the way, I learned a couple of neat tricks about Scriping Bridge, which is an API for using AppleScript from Objective-C. To generate header files for each app, I used two command line tools: sdef and sdp. Together, they take the scripting definition for an app and output an Objective-C.h file that you can include in your app.
Here’s how I generated the header for iTunes: sdef /Applications/iTunes.app/ sdp -fh -basename iTunes -o /Desktop/iTunes.h The basename is used to generate some of the object names in that header file. In the above example, the iTunes.h file contains classes named iTunesApplication, iTunesPlaylist, etc. I also learned that the SBApplication object, which represents your app’s connection to the scriptable app, can have a delegate that it reports errors to. This was really helpful during development, because I could see where things were going wrong. Distributed Notifications If your app needs to respond to the behaviour of other apps, the way that Skip Tunes needs to respond to the media player starting, stopping, or changing tracks, you need to see if NSDistributedNotificationCenter has the information you need.
Some apps will broadcast notifications over this channel about their state, which can save your app from doing nasty polling. For example, whenever the state of playback changes, iTunes publishes a com.apple.iTunes.playerInfo notification on this notification center. Instead of checking iTunes’s state over Scripting Bridge every second, I just register for this notification and wait to hear back. If you go down this route, though, make sure to listen to NSWorkspace notifications, too, since opening and closing apps doesn’t usually send those state change notifications. You’re still here?