CocoaConf DC: Sessions
A Discourse on Batteries and Their Absence
You want to share code. You really do. Maybe not with the world but with yourself at the very least (or most). The Cocoa community has, in recent years, seen a bourgeoning interest in sharing code between projects and people. We'll talk about how we can — and should — take “sharing” toward Python’s slogan of “Batteries Included” and outline the tips, tricks, and methods I have collected in my quest to include batteries.
A Pocketful of Patterns
Design Patterns neither begin nor end with the Gang of Four. In this keynote we will begin and end with Patterns from their famous book but as with most after dinner treats the good part is the gooey center where we'll explore patterns that apply to Cocoa and Cocoa Touch apps.
Animation: From 0 to Awesome in 90 minutes
Learn the fundamentals of animation on iOS. Tour animation beginning with the simplest UIKit animations, moving through Core Animation, and finishing with complex 3d animations. You'll not only learn how to program animations but to consider how to craft the right animation for your app. Topics covered will include implicit, basic, keyframe, grouped, and chained animations, timing curves, and how to build flipping and folding animations. Along the way we'll also touch on related issues pertinent to the quality and performance of your animations such as anti-aliasing, off-screen render passes (what they are, why they're bad, what cause them, and how to avoid them while still achieving your desired effect), drop shadows, and how to render retina images. Full open-source source code provided for all topics covered.
Beautiful and Shiny - The iOS Graphics System
iOS Apps are known for their rich and beautiful user interfaces. A big part of the beauty and responsiveness is due to the underlying graphics system. In this tutorial you'll learn how to use Core Graphics and Core Animation to take your app to the next level.
Most of what ends up in an iOS UI is built with an image editor and part of the app at deploy time. But dynamic content can't be drawn before hand instead it must be drawn on the device at runtime. Core Graphics has a rich set of API's that can be used for just that purpose. The API is object-oriented but C based. That causes some devs to steer clear. In this tutorial we'll demystify the API so you can take advantage of Core Graphics in your app.
Once we've covered the basics we'll go into how the compositing model works on iOS. Every pixel that is displayed on a device goes through the Core Animation compositing engine. A through understanding of how the compositing engine works is vital to getting your app to look and perform great.
In this tutorial we'll cover:Graphics Contexts Drawing with paths, gradients, colors, clipping regions and masks Reflections Core Image, including the iOS 5 Face Recognition feature Compositing Tricks to squeeze every last frame out of your animations Making a beautiful responsive and engaging app is key to success on the AppStore.
Come to this session and learn how to make your app even more amazing.
Building Connected iOS apps with Mobile Services
Learn how Windows Azure Mobile Services make developing your iOS apps a breeze with a feature rich and easy to use backend. We'll go over how you can take advantage of structured data stored in the cloud, send APNS push notifications with a single line of code, add authentication and secure your app, and much more. All of this with a native Objective-C SDK! We'll go over each feature and see how to use it with live coding demonstrations.
Composing and Editing Media with AV Foundation
AV Foundation is Apple's advanced Objective-C framework for working with time-based audio/visual media. The framework provides a wide and growing variety of functionality and in this session we'll discuss one of its most exciting capabilities, media creation!
In this talk you'll learn to effectively use the framework's playback and composition features to compose and edit video clips, add animated transitions and titles, and even mix music and sound effects. Along the way Bob will provide lots of sample code so you can see (and hear) these features in action.
Core Audio in iOS 6
Core Audio gets a bunch of neat new tricks in iOS 6, particularly for developers working with Audio Units. New effect units include an improved ability to vary pitch and playback speed, a digital delay unit, and OS X's powerful matrix mixer. There's now a new place to use units too, as the Audio Queue now offers developers a way to "tap" into the data being queued up for playback. To top it all off, a new "multi-route" system allows us to play out of multiple, multi-channel output devices at the same time.
Want to see, and hear, how all this stuff works? This section is the place to find out.
Core Data Done Right
If you were first exposed to Core Data using the demo apps in XCode then you are likely not taking advantage of some of the better features of Core Data. Also, if you were a SQL ninja and are frustrated that Core Data can't seem to do the simplest of tasks, you might be missing a few things. We will start off by presenting a few patterns for accomplishing common tasks like background updating and efficient fetching. Then we will look at the sparsely documented Core Data Model editor and how to utilize Relationships, Fetched Properties, Fetch Requests, Configurations and the UserInfo dictionaries. We will also look at the various options that the Core Data Model editor presents and look at creating NSManageObject subclasses. After exploring what Apple provides, we will highlight how projects like mogenerator and Magical Record fill in the gaps for us. We will update our demo app to show how the code changes when we add these to existing projects.
Extreme Cocoa Programming
Many don't know it, but Objective-C was also inspired by the message-oriented brand of pure object-oriented approaches of Smalltalk. The identification of patterns of program design was inspired by the same Smalltalk practitioners learning from the architectural works of Christopher Alexander. Extreme Programming was born out of the best Smalltalk software development practices (by the best Smalltalk practitioners).
Extreme Programming was "softened" by more generic Agile Software Development approaches. The classic Design Patterns (Gang of Four) book was more complex than the original vision of software patterns due to the complexities of C++. And the combination of XCode and Objective-C have made the grasp of the principles behind Extreme Programming non-intuitive to the casual observer.
But, there are many Extreme Programming principles and practices that can and arguably should be applied to Cocoa Development. In this talk, we will explore some of these principles and practices as applied to the world of Cocoa Programming (particularly in an iOS context), including some mini-case studies of their application... the good, the bad, and the ugly.
In-App Purchases in iOS 6
If you're interested in adding In-App Purchases into your apps, this is the talk for you! This talk will cover both how to implement In-App Purchases the "quick and easy" way, along with a more robust solution involving dynamic server side downloads and receipt validation. In addition, you will learn about the new "hosted downloads" feature in iOS 6 that lets you host your In-App Purchase content on Apple's servers.
Introducing Collection Views
UICollectionView, introduced in the iOS 6 SDK, is Apple's new class for visualizing data in a grid or really any format other than a vertical list. We'll cover the basics and then explore the intricacies of UICollectionViewLayout, UICollectionViewFlowLayout and related classes.
Along the way we'll learn how to make both horizontal and vertical grids, cover flow, iPhoto-like stacks, and other custom layouts. Apple has provided yet another tool that makes it easier and faster for you to provide rich experiences for your users - come learn how to hit the ground running with UICollectionView.Plenty of source code will accompany the talk.
It's a UNIX system, I know this!
Cocoa provides a rich API for app development, but sometimes we forget there's UNIX underneath it. Understanding how to use the UNIX foundation can be a huge help when trying to solve problems Cocoa doesn't seem to have a good answer for. This talk will cover parts of UNIX that can come in handy for a Cocoa app developer. What's an inode, and how does it relate to hard links and symlinks? What is file locking and how can it be used within an app? How can all those little UNIX utilities be helpful in your Mac app? Can your iPhone be used to stop an attacking velociraptor? The power of UNIX is strong; come learn to wield it.
Less code, more fulfilling.
The way you write code for your iOS and Mac OS apps has been changing with every release of Xcode. In this talk you'll see how recent changes dramatically alter your source code. With synthesize by default, literals, and the order of methods not mattering, the amount of code you write will shrink and what's left will be more readable. We'll look at before and after pictures that will convince you to embrace the new features that have been working their way into the language since Xcode 4.2.
Living with Auto Layout
In anticipation of the iPhone 5's taller screen, Apple unleashed auto layout on iOS developers with iOS 6. Auto Layout requires a new approach to building interfaces and a new level of attention to detail to achieve stable and pleasing interfaces. Using experience gained working on a large iPad application, this presentation will examine practices used to manage and control user interfaces with auto layout. The presentation aims to answer some common questions that developers have when using auto layout, such as:
- How can I use Interface Builder to control Auto Layout?
- Why can't I just set the frame?
- How can I be in control of my interfaces again?
- I just want the error messages to stop, please make them stop.
- Just how is auto layout better than springs and struts?
- How did iOS 7 and Xcode 5 change Auto Layout?
Mobile Movies with HTTP Live Streaming
If your iOS app streams video, then you're going to be using HTTP Live Streaming. Between the serious support for it in iOS, and App Store rules mandating its use in some cases, there realistically is no other choice. But where do you get started and what do you have to do? In this session, we'll take a holistic look at how to use HLS. We'll cover how to encode media for HLS and how to get the best results for all the clients and bitrates you might need to support, how to serve that media (and whether it makes sense to let someone else do it for you), and how to integrate the HLS stream into your app.
OH MY CLIENTS!
Frustrations with clients or customers of our products can spawn from a host of situations. Mine often come from mis-thinkings in how/where "UX" belongs in the project lifecycle. How can we help clients understand what UX is and how it threads through a project from beginning to end?
OpenGL ES, GLKit, SceneKit and more: Making Sense of Mac and iOS 3D Graphics
Want to add 3D graphics to your app but have no idea where to start? Trying to figure out how to write your first shader? This session is for you! In this high level talk we'll go through the various options for 3D rendering on iOS and the Mac, see how the different SDKs relate to each other, and explain things like programmable pipelines and shaders.
Come away with the knowledge of both the forest and the trees of 3D rendering in Cocoa.
We all want our apps to perform better. Run faster. Consume less memory. Burn less battery. Sometimes it's hard just to figure out what our performance problem _is_, much less fixing it. This session will cover common performance problems on iOS and Mac OS X, how to track down problems using tools such as Instruments, and ultimately, how to get the mindset to get your apps fast, and keep them there.
Keychain, disk encryption, Common Crypto, certificates. Security can be daunting for Cocoa developers. There are so many frameworks filled with words you’ve never heard before solving problems you don’t understand. And why does so much of it have to be in C?
The truth is that good security is hard, but the code doesn’t have to be. This session will show you how to best use the many security tools Apple provides. You’ll learn how to properly encrypt with AES, how to make the most of iOS’s device encryption features, how to best manage SSL, and more. If you’re using AES for anything, but don’t know what an HMAC is, you need to attend this session.
Reverse Q&A Panel
"In Soviet Russia, panel questions you!"
Borrowing an idea from the Penny Arcade Expo (PAX) and the panels held there by Harmonix (makers of the "Rock Band" games), a "Reverse Q&A" literally turns the tables on the traditional panel. Speakers become questioners, and attendees are the ones with the answers.
It's a new and novel idea, letting attendees have their moment in the limelight to say what they're really thinking, and letting speakers learn more about what people want from conferences, books, and their development life in general. With a combination of polls, follow-ups, person-on-the-street questions, and funny stories that we can all relate to, the Reverse Q&A will shake the cobwebs out of the old panel format and turn it into a two-way discussion that both sides of the mics can learn from.
Rich Text, Core Text
Drawing rich text, particularly editable rich text, has long been a real problem for iOS developers. No longer! iOS 6 finally integrates the kind of rich text capabilities that Mac developers have used for years. Previously neglected NSAttributedString is now the heart of rich text throughout UIKit. In this session you’ll learn your way around fonts, decorations, paragraph styles, text direction, and more.
But powerful as UIKit is, sometimes it just isn’t enough to get the kind of text layout you want. That’s were Core Text comes in. We’ll move through the entire stack from framesetters to glyphs. What’s leading? What’s the difference between a character and a glyph? Why is Core Text laying my text out upside down? You’ll find the answers to these and discover the world of ligatures, advances, font metrics, and text matrices. By the time we’re done, you’ll be able to get just the layout you want and keep your text readable and beautiful.
Shake Up! Your Development With Kiwi and Behavior Driven Development
When you hear "behavior driven development", do you reach for your buzzword bingo card? Does your little voice tell you that it can't really be a thing? Do you worry that you accidentally tuned into a TV infomercial?
Join us and find out that not only is behavior driven development (BDD) a real "thing", but that it is a practical approach to development that will help you produce cleaner and leaner code for your next project. I will introduce you to Kiwi, a tool for iOS that builds on OCUnit and helps us keep our focus on the value delivered to the user.
We will use Kiwi and BDD techniques to create "Shake Up!", an earthquake monitoring app that uses live USGS data feeds. By the end of the session,
- you will understand the basic principles of TDD and BDD,
- you will be motivated to try TDD or BDD sometime soon,
- you will understand that Kiwi can make your development more effective,
- you will have the complete project for the Shake Up! app to experiment with.
Sharing is Caring: UIActivity and Friends
Good apps let users take something away, great apps let them share what they've made with the world. This introductory session will start with built in controllers for posting to Twitter and Facebook and how to customize the selector. Then you will learn to use a variety of open source modules for services such as Dropbox and Instapaper. Finally we'll show how to create your own custom UIActivity for whatever services you want users to access from your app.
Storyboards - This time it's personal
You learned to love to use storyboards to layout and create your iPhone and iPad applications when they were introduced in iOS5. Now storyboards are back and better than ever. In this session we'll begin with a look at "our story so far". We'll then embark on a wild ride through new features in storyboards in iOS 6 including autolayout, localization, embedded view controllers, and unwinding segues.
Strategies, Tips, and Tricks for Sometimes Connected Apps
Although we like to believe the internet is ubiquitous and everyone has (or needs) a reliable network to get anything done, many iOS users have to live in reality. Many apps have to work when there is no connection. For those that need to update data occasionally when connected, there is need of strategy, tips, and tricks. For those that need to be able to collect data at the heart of their business that needs to get updated and synchronized with master data on a server, the challenges are even greater. We’ll discuss strategies we’ve tried and how well they work using some case studies and walking through some tips and tricks to equip you when you face similar challenges.
Super Rad Brainstorming!
How to get the most out of your brainstorm sessions.
Whether you're an independent developer working solo, a small indie team or working inside or with a larger entity, getting the most out of your brainstorming sessions is essential. Learn some spiffy tricks about preparing, thinking and organizing your ideas so that you're ready to rock it when it comes time to build.
The Developers' & Designers' Guide to Overnight Success
The road to success is paved with mistakes of all shapes and sizes. You don't get anywhere without making them, but you also don't get anywhere if you don't learn from them. Some people say you can't learn from the mistakes of others. Fortunately for you, those people are wrong.
Jeff has made a lot of mistakes over the years, not just in writing code, but also in running businesses and in dealing with developers, co-workers, employees, clients, and customers, and he's happy to share. So, sit back, relax, at the end of the day and listen to some tales of what to do and — more importantly — what not to do to achieve success as a software professional.
The Humble Header
.h files are everywhere. We create and edit them every day. Yet, they're something we tend not to think about very much. Over the years we've added layers of responsibility on these files, some of which make sense, and some that are misguided. Find out which is which in this meditation on interfaces.
Understanding C for ObjC Programmers
Ever wonder what NSError ** really means? Why do you need that extra * anyway? Are Core Text, Core Graphics and Image IO really object oriented? If so why do we have to use functions to use them? If any of these questions keep you up at night, or just hold your interest then this talk is for you. Come and understand the bits of C that are useful for iOS developers.
iCloud and Core Data
iOS applications are increasingly sophisticated and data driven. In addition, between the iPhone, iPad, and now the iPad mini, users are more and more likely to be running your app on multiple devices. Enter Core Data, the standard for data persistence in iOS, and iCloud, which allows apps to sync data between devices. The combination of the two technologies has incredible potential, but can be tricky to implement. in this session, I will present key concepts and techniques for writing Core Data-based applications, and the finer points of using iCloud in conjunction with it.
Are you a beginner to iOS, or are you an intermediate iOS developer looking to brush up your foundational skills? Then iOS 101 is for you!
iOS 101 is day-long workshop that consists of several lectures and live coding demos followed by hands-on labs. It covers the following material:
- A crash course in Objective-C
- Using common UIKit controls, such as buttons, sliders, and text fields
- Using the Storyboard editor
- Transitioning between view controllers with segues
- Using Navigation Controllers
- Using table views to display lists of data
- (Time permitting) Saving data to disk
- (Time permitting) Introduction to iPad development
This workshop is a high intensity crash course where you'll learn a lot, code a lot, and (if you're lucky) leave with some epic loot at the end! :]
By the end of the workshop, you'll have developed several iOS apps by yourself, from scratch, that are actually useful! You'll leave with a firm foundation of iOS skills that you can use to make the most of CocoaConf!
iOS Performance Tuning with Instruments
Responsiveness is critical to the success of your iOS app. When someone starts an app they typically need the information right away. The less they have to wait the happier they will be. But, optimizing an app without data is a losing proposition. To know where to optimize you need to know where the hot spots are. In this session we will learn how to use Instruments to find and fix performance bottle necks. We'll look at three critical areas: • Startup time • Memory Usage • Scrolling & Graphics Performance These three areas of performance analysis and improvement are critical to the success of any app. Come to this session and learn the to make your app fly!
iPad Productivity APIs workshop
Tim O'Reilly once passed along an observation from Broderbund founder Doug Carlston: "We consider a productivity application to be any application where the user's own data matters more to him than the data we provide."
The iPad is an absurdly wonderful device for this kind of application: big touch screen for drawing/designing/writing, gigs of storage, wireless networking to put your work in Dropbox or iCloud, and multi-core CPUs to grind through the heavy lifting. And don't let the lack of a user-visible file system fool you: inside the SDK, there is deep support for writing world-class applications to create, manage, edit, export, and distribute the user's data. Cut/copy/paste, import/export, rip/mix/burn, it's all there. But how do you find it, and how do you put the pieces together?
In this all-day tutorial, we'll look at the most essential SDKs for writing apps that let users make the most of their data, whether it's words, pictures, numbers, or media. We'll cover:
- Essential editing APIs: cut/copy/paste, undo/redo, and the UIMenuController
- Storing documents in the file system (including iTunes import/export) and in iCloud [requires Apple Developer Program membership]
- Printing and PDF export
- Inter-application communication with magic URLs and document exchange
...plus more neat tricks to make our users more productive.