Skip to content

Instantly share code, notes, and snippets.

@jwilling
Last active December 14, 2025 13:44
Show Gist options
  • Select an option

  • Save jwilling/4186817 to your computer and use it in GitHub Desktop.

Select an option

Save jwilling/4186817 to your computer and use it in GitHub Desktop.

Revisions

  1. jwilling revised this gist Dec 7, 2013. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -40,8 +40,8 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSSplitView` makes simple customization like setting priorities and min/max sizes for views is unnecessarily complex.

    ##NSProgressIndicator##
    - `NSProgressIndicator` still draws the original progress bar even if drawing is overridden.
    - `NSProgressIndicator`'s color cannot be changed without workarounds such as Core Image filters.
    - `NSProgressIndicator` still draws the original progress bar even if drawing is overridden. (rdar://15609817)
    - `NSProgressIndicator`'s color cannot be changed without workarounds such as Core Image filters. (rdar://15609817)

    ##NSPopover##
    - `NSPopover` does not offer a way to customize its appearance apart from the two default styles.
  2. jwilling revised this gist Dec 7, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -21,7 +21,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSTableView` does not fully support sections – all rows in the table are numbered sequentially, rather than as (section #, row #) as `UITableView` does. This makes it difficult to alter sections independently. (rdar://15609306)

    ##NSCollectionView##
    - `NSCollectionView` is not performant. It loads every single cell all at once, and it keeps them all in memory. It does not reuse cells.
    - `NSCollectionView` is not performant. It loads every single cell all at once, and it keeps them all in memory. It does not reuse cells. (rdar://15609666)

    ##NSBrowser##
    - `NSBrowser` is not view-based like `NSTableView` and `NSOutlineView`.
  3. jwilling revised this gist Dec 7, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -18,7 +18,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    ##NSTableView##
    - `NSTableView` has odd animation artifacts when scrolling with the keyboard with a fast key repeat.
    - Due to the clip view issue mentioned above. (rdar://15609175)
    - `NSTableView` does not fully support sections – all rows in the table are numbered sequentially, rather than as (section #, row #) as `UITableView` does. This makes it difficult to alter sections independently.
    - `NSTableView` does not fully support sections – all rows in the table are numbered sequentially, rather than as (section #, row #) as `UITableView` does. This makes it difficult to alter sections independently. (rdar://15609306)

    ##NSCollectionView##
    - `NSCollectionView` is not performant. It loads every single cell all at once, and it keeps them all in memory. It does not reuse cells.
  4. jwilling revised this gist Dec 7, 2013. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -17,6 +17,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr

    ##NSTableView##
    - `NSTableView` has odd animation artifacts when scrolling with the keyboard with a fast key repeat.
    - Due to the clip view issue mentioned above. (rdar://15609175)
    - `NSTableView` does not fully support sections – all rows in the table are numbered sequentially, rather than as (section #, row #) as `UITableView` does. This makes it difficult to alter sections independently.

    ##NSCollectionView##
  5. jwilling revised this gist Dec 7, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -10,7 +10,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods. (rdar://15608948)

    ##NSClipView##
    - ~`NSClipView` has performance issues~. Improved under 10.9.
    - ~~`NSClipView` has performance issues~~. Improved under 10.9.
    - [`RBLClipView`](https://github.com/github/Rebel/blob/master/Rebel/RBLClipView.h) attempts to fix this.
    - `NSClipView` has a poor animation when using `-scrollRectToVisible:`. (rdar://15609175)
    - [`JNWClipView`](https://github.com/jwilling/JNWScrollView/blob/master/JNWClipView.h) attempts to fix this.
  6. jwilling revised this gist Dec 7, 2013. 1 changed file with 3 additions and 1 deletion.
    4 changes: 3 additions & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -10,8 +10,10 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods. (rdar://15608948)

    ##NSClipView##
    - `NSClipView` has performance issues.
    - ~`NSClipView` has performance issues~. Improved under 10.9.
    - [`RBLClipView`](https://github.com/github/Rebel/blob/master/Rebel/RBLClipView.h) attempts to fix this.
    - `NSClipView` has a poor animation when using `-scrollRectToVisible:`. (rdar://15609175)
    - [`JNWClipView`](https://github.com/jwilling/JNWScrollView/blob/master/JNWClipView.h) attempts to fix this.

    ##NSTableView##
    - `NSTableView` has odd animation artifacts when scrolling with the keyboard with a fast key repeat.
  7. jwilling revised this gist Dec 7, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -7,7 +7,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - Controls that have cells (such as `NSTextField`) do not respond properly when layer-backed. Take `NSButton` as an example. When not layer-backed, it will animate properly using the animator proxy. When layer-backed, using the animator proxy breaks focus rings (they jump to destination immediately). Currently, directly manipulating the layer of a cell-based control is not supported (and will lead to a broken interface), but is much needed. (rdar://15608822)

    ##NSViewController##
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods.
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods. (rdar://15608948)

    ##NSClipView##
    - `NSClipView` has performance issues.
  8. jwilling revised this gist Dec 6, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -4,7 +4,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr

    ##NSView##
    - `NSView` does not have the ability to set an affine transform (rdar://15608609)
    - Controls that have cells (such as `NSTextField`) do not respond properly when layer-backed. Take `NSButton` as an example. When not layer-backed, it will animate properly using the animator proxy. When layer-backed, using the animator proxy breaks focus rings (they jump to destination immediately). Currently, directly manipulating the layer of a cell-based control is not supported (and will lead to a broken interface), but is much needed.
    - Controls that have cells (such as `NSTextField`) do not respond properly when layer-backed. Take `NSButton` as an example. When not layer-backed, it will animate properly using the animator proxy. When layer-backed, using the animator proxy breaks focus rings (they jump to destination immediately). Currently, directly manipulating the layer of a cell-based control is not supported (and will lead to a broken interface), but is much needed. (rdar://15608822)

    ##NSViewController##
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods.
  9. jwilling revised this gist Dec 6, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -3,7 +3,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    ----

    ##NSView##
    - `NSView` does not have the ability to set an affine transform.
    - `NSView` does not have the ability to set an affine transform (rdar://15608609)
    - Controls that have cells (such as `NSTextField`) do not respond properly when layer-backed. Take `NSButton` as an example. When not layer-backed, it will animate properly using the animator proxy. When layer-backed, using the animator proxy breaks focus rings (they jump to destination immediately). Currently, directly manipulating the layer of a cell-based control is not supported (and will lead to a broken interface), but is much needed.

    ##NSViewController##
  10. jwilling revised this gist Dec 5, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -4,7 +4,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr

    ##NSView##
    - `NSView` does not have the ability to set an affine transform.
    - Controls that have cells (such as `NSTextField`) do not respond properly when layer-backed. Take `NSButton` for an example. When not layer-backed, it will animate properly using the animator proxy. When layer-backed, using the animator proxy breaks focus rings (they jump to destination immediately). Currently, directly manipulating the layer of a cell-based control is not supported (and will lead to a broken interface), but is much needed.
    - Controls that have cells (such as `NSTextField`) do not respond properly when layer-backed. Take `NSButton` as an example. When not layer-backed, it will animate properly using the animator proxy. When layer-backed, using the animator proxy breaks focus rings (they jump to destination immediately). Currently, directly manipulating the layer of a cell-based control is not supported (and will lead to a broken interface), but is much needed.

    ##NSViewController##
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods.
  11. jwilling revised this gist Dec 5, 2012. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -81,5 +81,6 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr

    ##Misc. (not necessarily AppKit)###
    - There is no Cocoa wrapper for the Carbon hotkeys API.
    - [`DGGHotKey`](https://github.com/dannygreg/DGGHotKey) attempts to fix this.
    - There is no Cocoa wrapper for `FSEvents`. The Spotlight stuff doesn't really work for sandboxed Applications.
    - There is no API for AirPlay.
  12. jwilling revised this gist Dec 5, 2012. 1 changed file with 6 additions and 7 deletions.
    13 changes: 6 additions & 7 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -4,7 +4,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr

    ##NSView##
    - `NSView` does not have the ability to set an affine transform.
    - `NSView` and layers, although much improved in 10.8, still do not get along well. The most significant problem is with cell-based controls.
    - Controls that have cells (such as `NSTextField`) do not respond properly when layer-backed. Take `NSButton` for an example. When not layer-backed, it will animate properly using the animator proxy. When layer-backed, using the animator proxy breaks focus rings (they jump to destination immediately). Currently, directly manipulating the layer of a cell-based control is not supported (and will lead to a broken interface), but is much needed.

    ##NSViewController##
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods.
    @@ -18,23 +18,23 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSTableView` does not fully support sections – all rows in the table are numbered sequentially, rather than as (section #, row #) as `UITableView` does. This makes it difficult to alter sections independently.

    ##NSCollectionView##
    - `NSCollectionView` has no view recycling, poor API design, and is quite lacking compared to `UICollectionView`.
    - `NSCollectionView` is not performant. It loads every single cell all at once, and it keeps them all in memory. It does not reuse cells.

    ##NSBrowser##
    - `NSBrowser` is not view-based like `NSTableView` and `NSOutlineView`.

    ##NSSlider##
    - `NSSlider` requires use of private method `-_usesCustomTrackImage` in order to completely customize appearance.
    - `NSSlider` needs a "rounded textured" style for use in window frames.
    - `NSSlider` needs a "rounded textured" style for use in window frames (like in Finder).

    ##NSSearchField##
    - `NSSearchField` does not support tokens.

    ##NSTextField##
    - `NSTextField` doesn't support a custom context menu when the text is selectable and/or editable. It requires hacking around with the field editor to implement this functionality.
    - `NSTextField` does not support a custom context menu when the text is selectable and/or editable. It requires hacking around with the field editor to implement this functionality.

    ##NSSplitView##
    - `NSSplitView` has a lacking API. Simple customization like setting priorities and min/max sizes for views is unnecessarily complex.
    - `NSSplitView` makes simple customization like setting priorities and min/max sizes for views is unnecessarily complex.

    ##NSProgressIndicator##
    - `NSProgressIndicator` still draws the original progress bar even if drawing is overridden.
    @@ -57,7 +57,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSPersistentDocument` doesn't support file wrappers (bundles), even though that's a requirement for the sqlite data storage with sandboxing enabled. All workarounds at this point are huge hacks.

    ##NSObjectController##
    - While `NSObjectController` and its subclasses (e.g. `NSArrayController`) support retrieving objects from a Core Data managed object context, they do not offer a way to receive per-change notifications. This means that you need to reload your entire view vs. inserting/removing/moving the cells that were updated. Ideally, we would want a port of NSFetchedResultsController.
    - While `NSObjectController` and its subclasses (e.g. `NSArrayController`) support retrieving objects from a Core Data managed object context, they do not offer a way to receive per-change notifications. This means that you need to reload your entire view vs. inserting/removing/moving the cells that were updated. Ideally, we would want a port of `NSFetchedResultsController`.

    ##NSDrawer##
    - `NSDrawer` should either be deprecated or have its API fully updated to support customization.
    @@ -81,6 +81,5 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr

    ##Misc. (not necessarily AppKit)###
    - There is no Cocoa wrapper for the Carbon hotkeys API.
    - [`DGGHotKey`](https://github.com/dannygreg/DGGHotKey) attempts to fix this.
    - There is no Cocoa wrapper for `FSEvents`. The Spotlight stuff doesn't really work for sandboxed Applications.
    - There is no API for AirPlay.
  13. jwilling revised this gist Dec 4, 2012. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -81,5 +81,6 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr

    ##Misc. (not necessarily AppKit)###
    - There is no Cocoa wrapper for the Carbon hotkeys API.
    - [`DGGHotKey`](https://github.com/dannygreg/DGGHotKey) attempts to fix this.
    - There is no Cocoa wrapper for `FSEvents`. The Spotlight stuff doesn't really work for sandboxed Applications.
    - There is no API for AirPlay.
  14. jwilling revised this gist Dec 3, 2012. 1 changed file with 74 additions and 22 deletions.
    96 changes: 74 additions & 22 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -2,32 +2,84 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr

    ----

    - The use of cells in specific controls such as `NSTextField` and `NSButton` make them difficult to customize.
    - AppKit controls need image-based customization properties like their UIKit counterparts.
    - `NSTableView` has odd animation artifacts when scrolling with the keyboard with a fast key repeat.
    - `NSCollectionView` has no view recycling, poor API design, and is lacking compared to `UICollectionView`.
    - `NSClipView` has performance issues. *([`RBLClipView`](https://github.com/github/Rebel/blob/master/Rebel/RBLClipView.h) attempts to fix this)*
    - `NSWindow` is really difficult to customize. *([`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow) attempts to fix this)*.
    - `NSWindow` animation is poor without the use of some not-so-nice hacks.
    ##NSView##
    - `NSView` does not have the ability to set an affine transform.
    - `NSView` and layers, although much improved in 10.8, still do not get along well. The most significant problem is with cell-based controls.

    ##NSViewController##
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods.

    ##NSClipView##
    - `NSClipView` has performance issues.
    - [`RBLClipView`](https://github.com/github/Rebel/blob/master/Rebel/RBLClipView.h) attempts to fix this.

    ##NSTableView##
    - `NSTableView` has odd animation artifacts when scrolling with the keyboard with a fast key repeat.
    - `NSTableView` does not fully support sections – all rows in the table are numbered sequentially, rather than as (section #, row #) as `UITableView` does. This makes it difficult to alter sections independently.

    ##NSCollectionView##
    - `NSCollectionView` has no view recycling, poor API design, and is quite lacking compared to `UICollectionView`.

    ##NSBrowser##
    - `NSBrowser` is not view-based like `NSTableView` and `NSOutlineView`.
    - `NSSplitView` has a lacking API. Simple customization like setting priorities and min/max sizes for views is unnecessarily complex.
    - AppKit does not provide HUD-styled controls. *([`SNRHUDKit`](https://github.com/indragiek/SNRHUDKit) attempts to fix this)*

    ##NSSlider##
    - `NSSlider` requires use of private method `-_usesCustomTrackImage` in order to completely customize appearance.
    - `NSSlider` needs a "rounded textured" style for use in window frames.

    ##NSSearchField##
    - `NSSearchField` does not support tokens.

    ##NSTextField##
    - `NSTextField` doesn't support a custom context menu when the text is selectable and/or editable. It requires hacking around with the field editor to implement this functionality.

    ##NSSplitView##
    - `NSSplitView` has a lacking API. Simple customization like setting priorities and min/max sizes for views is unnecessarily complex.

    ##NSProgressIndicator##
    - `NSProgressIndicator` still draws the original progress bar even if drawing is overridden.
    - `NSTextFieldCell` does not have vertically-centered text. A subclass is required.
    - Interface Builder does not support bindings for custom controls.
    - `NSProgressIndicator`'s color cannot be changed without workarounds such as Core Image filters.

    ##NSPopover##
    - `NSPopover` does not offer a way to customize its appearance apart from the two default styles.
    - [`RBLPopover`](https://github.com/github/Rebel/blob/master/Rebel/RBLPopover.h) attempts to fix this.
    - `NSPopover` steals keyboard focus.
    - `NSSearchField` does not support tokens.
    - `NSTableView` does not fully support sections.
    - `NSDrawer` should either be deprecated or have its API fully updated to support customization.
    - `NSSlider` needs a "rounded textured" style for use in window frames.
    - Template images and window-style engraved text should be useable without the use of captive cells.
    - `NSView` does not support the ability to set an affine transform.
    - `NSButtonCell` is poorly thought out. `bezelStyle`,` gradientType`, `buttonType`, `isHighlighted`, `state` and a few more make for a really really confusing subclassing experience.
    - `NSView` and layers, although much improved in 10.8, still do not get along well. The most significant problem is with built-in controls.
    - `NSDocument` has very bad support for documents that aren't fully loaded into memory. Nearly all of the API assumes that you can generate a singular `NSData` object to store your document in, which isn't true if half of your document is on disk only and the other half in memory only.
    - `NSPersistentDocument` doesn't support file wrappers (bundles), even though that's a requirement for the sqlite data storage with sandboxing enabled. All workarounds at this point are huge hacks.

    ##NSWindow##
    - `NSWindow` animation is poor without the use of some not-so-nice hacks.
    - Borderless `NSWindows` (`NSBorderlessWindowMask`) do not have the ability to round their corners.
    - Borderless `NSWindows` with a layer-backed content view do not get a shadow.
    - `NSPopover` does not offer a way to customize its appearance apart from the two default styles. *([`RBLPopover`](https://github.com/github/Rebel/blob/master/Rebel/RBLPopover.h) attempts to fix this )*
    - `NSWindow` is really difficult to customize.
    - [`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow) attempts to fix this.

    ##NSDocument##
    - `NSDocument` has very bad support for documents that aren't fully loaded into memory. Nearly all of the API assumes that you can generate a singular `NSData` object to store your document in, which isn't true if half of your document is on disk only and the other half in memory only.
    - `NSPersistentDocument` doesn't support file wrappers (bundles), even though that's a requirement for the sqlite data storage with sandboxing enabled. All workarounds at this point are huge hacks.

    ##NSObjectController##
    - While `NSObjectController` and its subclasses (e.g. `NSArrayController`) support retrieving objects from a Core Data managed object context, they do not offer a way to receive per-change notifications. This means that you need to reload your entire view vs. inserting/removing/moving the cells that were updated. Ideally, we would want a port of NSFetchedResultsController.

    ##NSDrawer##
    - `NSDrawer` should either be deprecated or have its API fully updated to support customization.

    ##NSImage##
    - `NSImage` does not support drawing stretchable images with caps.
    - [`RBLResizableImage`](https://github.com/github/Rebel/blob/master/Rebel/RBLResizableImage.h) attempts to fix this.

    ##Field Editors##
    - Field editors are conceptually unusual and confusing.

    ##Cells & Controls##
    - The use of cells in specific controls such as `NSTextField` and `NSButton` make them difficult to customize.
    - `NSButtonCell` is poorly thought out. `bezelStyle`,` gradientType`, `buttonType`, `isHighlighted`, `state` and a few more make for a really really confusing subclassing experience.
    - `NSTextFieldCell` does not have vertically-centered text. A subclass is required.
    - Template images and window-style engraved text should be useable without the use of captive cells.
    - AppKit controls need image-based customization properties like their UIKit counterparts.
    - AppKit does not provide HUD-styled controls.
    - [`SNRHUDKit`](https://github.com/indragiek/SNRHUDKit) attempts to fix this.
    - Interface Builder does not support bindings for custom controls.

    ##Misc. (not necessarily AppKit)###
    - There is no Cocoa wrapper for the Carbon hotkeys API.
    - There is no Cocoa wrapper for `FSEvents`. The Spotlight stuff doesn't really work for sandboxed Applications.
    - There is no API for AirPlay.
  15. jwilling revised this gist Dec 2, 2012. 1 changed file with 16 additions and 2 deletions.
    18 changes: 16 additions & 2 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,4 @@
    Is AppKit causing you frustration? Instead of just complaining about it, lets try to make it better by compiling a list of specific problems with AppKit. Leave a comment below, and I'll include it in the list. The list will be sorted according to the number of comments for a problem.
    Is AppKit causing you frustration? Instead of just complaining about it, lets try to make it better by compiling a list of specific problems with AppKit. Leave a comment below, and I'll include it in the list.

    ----

    @@ -7,7 +7,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSTableView` has odd animation artifacts when scrolling with the keyboard with a fast key repeat.
    - `NSCollectionView` has no view recycling, poor API design, and is lacking compared to `UICollectionView`.
    - `NSClipView` has performance issues. *([`RBLClipView`](https://github.com/github/Rebel/blob/master/Rebel/RBLClipView.h) attempts to fix this)*
    - `NSWindow`s are really difficult to customize. *([`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow) attempts to fix this)*.
    - `NSWindow` is really difficult to customize. *([`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow) attempts to fix this)*.
    - `NSWindow` animation is poor without the use of some not-so-nice hacks.
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods.
    - `NSBrowser` is not view-based like `NSTableView` and `NSOutlineView`.
    @@ -17,3 +17,17 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSProgressIndicator` still draws the original progress bar even if drawing is overridden.
    - `NSTextFieldCell` does not have vertically-centered text. A subclass is required.
    - Interface Builder does not support bindings for custom controls.
    - `NSPopover` steals keyboard focus.
    - `NSSearchField` does not support tokens.
    - `NSTableView` does not fully support sections.
    - `NSDrawer` should either be deprecated or have its API fully updated to support customization.
    - `NSSlider` needs a "rounded textured" style for use in window frames.
    - Template images and window-style engraved text should be useable without the use of captive cells.
    - `NSView` does not support the ability to set an affine transform.
    - `NSButtonCell` is poorly thought out. `bezelStyle`,` gradientType`, `buttonType`, `isHighlighted`, `state` and a few more make for a really really confusing subclassing experience.
    - `NSView` and layers, although much improved in 10.8, still do not get along well. The most significant problem is with built-in controls.
    - `NSDocument` has very bad support for documents that aren't fully loaded into memory. Nearly all of the API assumes that you can generate a singular `NSData` object to store your document in, which isn't true if half of your document is on disk only and the other half in memory only.
    - `NSPersistentDocument` doesn't support file wrappers (bundles), even though that's a requirement for the sqlite data storage with sandboxing enabled. All workarounds at this point are huge hacks.
    - Borderless `NSWindows` (`NSBorderlessWindowMask`) do not have the ability to round their corners.
    - Borderless `NSWindows` with a layer-backed content view do not get a shadow.
    - `NSPopover` does not offer a way to customize its appearance apart from the two default styles. *([`RBLPopover`](https://github.com/github/Rebel/blob/master/Rebel/RBLPopover.h) attempts to fix this )*
  16. jwilling revised this gist Dec 2, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -12,7 +12,7 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods.
    - `NSBrowser` is not view-based like `NSTableView` and `NSOutlineView`.
    - `NSSplitView` has a lacking API. Simple customization like setting priorities and min/max sizes for views is unnecessarily complex.
    - `AppKit` does not provide HUD-styled controls. *([`SNRHUDKit`](https://github.com/indragiek/SNRHUDKit) attempts to fix this)*
    - AppKit does not provide HUD-styled controls. *([`SNRHUDKit`](https://github.com/indragiek/SNRHUDKit) attempts to fix this)*
    - `NSSlider` requires use of private method `-_usesCustomTrackImage` in order to completely customize appearance.
    - `NSProgressIndicator` still draws the original progress bar even if drawing is overridden.
    - `NSTextFieldCell` does not have vertically-centered text. A subclass is required.
  17. jwilling revised this gist Dec 2, 2012. 1 changed file with 9 additions and 2 deletions.
    11 changes: 9 additions & 2 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -8,5 +8,12 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSCollectionView` has no view recycling, poor API design, and is lacking compared to `UICollectionView`.
    - `NSClipView` has performance issues. *([`RBLClipView`](https://github.com/github/Rebel/blob/master/Rebel/RBLClipView.h) attempts to fix this)*
    - `NSWindow`s are really difficult to customize. *([`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow) attempts to fix this)*.
    - `NSWindow` animation is pretty bad without the use of some not-so-nice hacks.
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods.
    - `NSWindow` animation is poor without the use of some not-so-nice hacks.
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods.
    - `NSBrowser` is not view-based like `NSTableView` and `NSOutlineView`.
    - `NSSplitView` has a lacking API. Simple customization like setting priorities and min/max sizes for views is unnecessarily complex.
    - `AppKit` does not provide HUD-styled controls. *([`SNRHUDKit`](https://github.com/indragiek/SNRHUDKit) attempts to fix this)*
    - `NSSlider` requires use of private method `-_usesCustomTrackImage` in order to completely customize appearance.
    - `NSProgressIndicator` still draws the original progress bar even if drawing is overridden.
    - `NSTextFieldCell` does not have vertically-centered text. A subclass is required.
    - Interface Builder does not support bindings for custom controls.
  18. jwilling revised this gist Dec 2, 2012. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -5,8 +5,8 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - The use of cells in specific controls such as `NSTextField` and `NSButton` make them difficult to customize.
    - AppKit controls need image-based customization properties like their UIKit counterparts.
    - `NSTableView` has odd animation artifacts when scrolling with the keyboard with a fast key repeat.
    - `NSCollectionView` is horrible. No view recycling, and terrible API design.
    - `NSCollectionView` has no view recycling, poor API design, and is lacking compared to `UICollectionView`.
    - `NSClipView` has performance issues. *([`RBLClipView`](https://github.com/github/Rebel/blob/master/Rebel/RBLClipView.h) attempts to fix this)*
    - `NSWindow`s are really difficult to customize. *([`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow) attempts to fix this)*.
    - `NSWindow` animation is pretty bad without the use of some not-so-nice hacks.
    - `NSViewController` is useless. It has `-loadView` but no other lifecycle methods.
    - `NSViewController` could be more useful. It has `-loadView` but no other lifecycle methods.
  19. jwilling revised this gist Dec 2, 2012. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -8,4 +8,5 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSCollectionView` is horrible. No view recycling, and terrible API design.
    - `NSClipView` has performance issues. *([`RBLClipView`](https://github.com/github/Rebel/blob/master/Rebel/RBLClipView.h) attempts to fix this)*
    - `NSWindow`s are really difficult to customize. *([`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow) attempts to fix this)*.
    - `NSWindow` animation is pretty bad without the use of some not-so-nice hacks.
    - `NSWindow` animation is pretty bad without the use of some not-so-nice hacks.
    - `NSViewController` is useless. It has `-loadView` but no other lifecycle methods.
  20. jwilling revised this gist Dec 2, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -7,5 +7,5 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSTableView` has odd animation artifacts when scrolling with the keyboard with a fast key repeat.
    - `NSCollectionView` is horrible. No view recycling, and terrible API design.
    - `NSClipView` has performance issues. *([`RBLClipView`](https://github.com/github/Rebel/blob/master/Rebel/RBLClipView.h) attempts to fix this)*
    - `NSWindow`s are really difficult to customize. *([`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow)* attempts to fix this).
    - `NSWindow`s are really difficult to customize. *([`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow) attempts to fix this)*.
    - `NSWindow` animation is pretty bad without the use of some not-so-nice hacks.
  21. jwilling revised this gist Dec 2, 2012. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -7,5 +7,5 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr
    - `NSTableView` has odd animation artifacts when scrolling with the keyboard with a fast key repeat.
    - `NSCollectionView` is horrible. No view recycling, and terrible API design.
    - `NSClipView` has performance issues. *([`RBLClipView`](https://github.com/github/Rebel/blob/master/Rebel/RBLClipView.h) attempts to fix this)*
    - `NSWindow`s are really difficult to customize. *([`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow) attempts to fix this).
    - `NSWindow`s are really difficult to customize. *([`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow)* attempts to fix this).
    - `NSWindow` animation is pretty bad without the use of some not-so-nice hacks.
  22. jwilling revised this gist Dec 2, 2012. 1 changed file with 7 additions and 1 deletion.
    8 changes: 7 additions & 1 deletion gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -2,4 +2,10 @@ Is AppKit causing you frustration? Instead of just complaining about it, lets tr

    ----

    - The use of cells in specific controls such as `NSTextField` and `NSButton` make them difficult to customize
    - The use of cells in specific controls such as `NSTextField` and `NSButton` make them difficult to customize.
    - AppKit controls need image-based customization properties like their UIKit counterparts.
    - `NSTableView` has odd animation artifacts when scrolling with the keyboard with a fast key repeat.
    - `NSCollectionView` is horrible. No view recycling, and terrible API design.
    - `NSClipView` has performance issues. *([`RBLClipView`](https://github.com/github/Rebel/blob/master/Rebel/RBLClipView.h) attempts to fix this)*
    - `NSWindow`s are really difficult to customize. *([`INAppStoreWindow`](https://github.com/indragiek/INAppStoreWindow) attempts to fix this).
    - `NSWindow` animation is pretty bad without the use of some not-so-nice hacks.
  23. jwilling created this gist Dec 2, 2012.
    5 changes: 5 additions & 0 deletions gistfile1.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,5 @@
    Is AppKit causing you frustration? Instead of just complaining about it, lets try to make it better by compiling a list of specific problems with AppKit. Leave a comment below, and I'll include it in the list. The list will be sorted according to the number of comments for a problem.

    ----

    - The use of cells in specific controls such as `NSTextField` and `NSButton` make them difficult to customize