coconutkit
DESCRIPTION
My talk about CoconutKit 2.0, held at Cocoheads Switzerland in December 2012TRANSCRIPT
![Page 1: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/1.jpg)
CoconutKit
Samuel Défago, le studio
Cocoaheads — December 2012
![Page 2: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/2.jpg)
Who am I?
• iOS developer at le studio (www.hortis.ch)
• Mail: defagos (at) gmail (dot) com
• Twitter: @defagos
• Blog: http://subjective-objective-c.blogspot.com/
• Open-source: https://github.com/defagos
![Page 3: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/3.jpg)
What is CoconutKit?
• Open source project
• A library, not a framework
• Collection of useful and robust components
• Supports ARC and non-ARC projects
• Compatible with iOS 4, 5 and 6
![Page 4: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/4.jpg)
Brief history
• July 2010 — Birth
• August 2011 — First public release 1.0
• October 2011 — Softshake event
• November 2012 — Version 2.0
![Page 5: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/5.jpg)
My goals
• Eliminate cumbersome tasks
• Provide robust components
• Fill system framework gaps
• Keep components easy to use ...
• ... and documented
• Have fun!
![Page 6: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/6.jpg)
Why you should use it?
• Spend more time on your application
• Spend less time on debugging
• Create more robust applications
• Create beautiful applications more easily
• Write better code
![Page 7: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/7.jpg)
Links
• Official github page (https://github.com/defagos/CoconutKit)
• Wiki (https://github.com/defagos/CoconutKit/wiki)
• Binaries (https://github.com/defagos/CoconutKit/downloads)
![Page 8: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/8.jpg)
Adding to a project
• Easy to integrate (~ 2 minutes)
• Easy to update
• Two methods
• Binaries (.staticframework)
• Cocoapods (https://github.com/CocoaPods/CocoaPods)
![Page 9: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/9.jpg)
Components (1)
• View controller containers & API
• Animations
• Dynamic localization
• Core Data extensions
• Controls (label, cursor, text field, etc.)
![Page 10: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/10.jpg)
Components (2)
• Easy view and cell instantiation from nibs
• Lightweight logger
• And more!
![Page 11: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/11.jpg)
Containers
• High-quality containers
• Composition (placeholder VC)
• Navigation (stack controller)
• Custom CA transitions
• Storyboard support
• Compatible with UIKit containers
![Page 12: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/12.jpg)
Placeholder • Embed one or several VCs into another
Example 1 Example 2
-setInsetViewController:atIndex:
![Page 13: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/13.jpg)
Stack • Push / pop view controllers
-pushViewController:withTransitionClass:animated:-popViewController:animated:
-insertViewController:atIndex:withTransitionClass:animated:-removeViewControllerAtIndex:animated:
![Page 14: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/14.jpg)
Stack
![Page 15: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/15.jpg)
Autorotation
• Use iOS 6 methods for all HLSViewController subclasses
• autorotationMode container property
• Available for CoconutKit containers...
• ... and for UIKit ones (no more subclassing)
![Page 16: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/16.jpg)
Why CoconutKit containers?
• Easily change interface and transitions
• Cleanly separate your code
• Manage complex VC hierarchies easily
• Circumvent UIKit limitations (e.g. modal, 3D flip animations)
• API to create your own containers
![Page 17: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/17.jpg)
Animations
• Create in a declarative way
• Combine UIView and CA animations
• Pause and resume, cancel
• Set start time and delay, loop, repeat count
• Play with duration / instantaneously
• Correct behavior when app sent to the background
![Page 18: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/18.jpg)
[self.listAnimation playAnimated:YES];[self.listAnimation reverseAnimation] playAnimated:YES];
![Page 19: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/19.jpg)
Localization
• Change localization at runtime
• nib localization without outlets
![Page 20: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/20.jpg)
[NSBundle setLocalization:@”en”]
- (void)localize{[super localize];
// View controller localization code}
[NSBundle setLocalization:@”ar”]
![Page 21: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/21.jpg)
Strings file
LS/Country of residenceULS/Country of residenceLLS/Country of residenceCLS/Country of residence
Pays de résidencePAYS DE RESIDENCEpays de résidencePays De Résidence
![Page 22: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/22.jpg)
Core Data extensions
• Managed object context (MOC) stack
• Validation done right
• Text field bindings
![Page 23: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/23.jpg)
MOC stack
context-free methods
![Page 24: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/24.jpg)
Validation
• Validations written once
• Called separately or globally
• Error-chaining done right
![Page 25: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/25.jpg)
Text field bindings
• Bind text field to underlying model object field
• Optional formatter
![Page 26: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/26.jpg)
Label
• Vertical alignment
• Font size adjustment even for nbrLines >= 2
![Page 27: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/27.jpg)
Cursor
![Page 28: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/28.jpg)
• Search bar
• Alert view done right
• Slideshows (cross-fade, Ken Burns, ribbon)
• Text field moving to avoid being hidden by the keyboard
And more!
![Page 29: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/29.jpg)
And more!
![Page 30: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/30.jpg)
Thanks for your attention!
![Page 31: CoconutKit](https://reader034.vdocuments.us/reader034/viewer/2022052619/5551991cb4c905013a8b4ad3/html5/thumbnails/31.jpg)
Questions?