Core Audio is the low-level iOS API for processing audio in real-time, used in games, virtual instruments, web radio clients, music mixers, and more. It also has a well-earned reputation for being a challenging and unforgiving framework. In this advanced all-day tutorial, we'll shake off the scary and dig into Core Audio, playing with its powerful pieces and cutting through its thicket of jargon and secrets disclosed only in header files.
The all-day class will be broken into four hands-on sections:
1. Sounds and Samples, Properties and Callbacks: the concepts of digital audio, the conventions of Core Audio, and our first audio apps
2. Pretty Packets All in a Row: Recording and Playback with audio queues
3. Dreaming of Streaming: Building a web radio client with Core Audio
4. Go With the Flow: Audio Units and Audio Processing Graphs
This is an advanced tutorial, and it is assumed that attendees are intermediate to advanced iOS developers. At a minimum, you should know how to build and run apps, link and use iOS frameworks, and be fairly comfortable with C code (including pointers and malloc/free). Of course, you should have a MacBook with Xcode 4.3 or higher. Being able to deploy to a iOS device during the tutorial is optional, but may be helpful.
New to iOS programming? This one day overview will introduce you to all the basic concepts you'll need to build an application. From using Xcode's templates to displaying lists of information and navigating between screens of information. When you finish the day you'll have a fully functional iOS app that you can show off to your friends.
Getting Started, Fast!
- From installing Xcode to posting a tweet in one short lesson. In this section we'll get started with a quick success and along the way learn the basics of Xcode.
Objective-C, the important bits
- All the ObjC you need to know, and a bit of cool bits and pieces thrown in for good measure. We'll also talk about some of the most commonly used classes from the Foundation framework.
- Gain essential understanding of one of the fundamental building blocks of iOS programming. In this section we'll learn how to connect the custom logic of our apps to the OS.
- Lists of content are pervasive, in this section we'll see how table views work and discuss common performance pitfalls.
Navigation & Storyboards
- Building more than the most rudimentary application requires more than one view controller, this section will cover how to use Storyboards to lay out the flow of your application and how to navigate between the multiple view controllers.
This workshop is for people who are past the basics of iOS development and are interested in developing 2D games. When you finish, you will have developed two mini-games and have an understanding of how to prototype and test game ideas and mechanics. We will also cover how to integrate physics and Apple's Game Center into your programs.
When we are done you will be able to:
Prototype and play a game idea
Understand the management of art and assets (including in-app purchases)
Be able incorporate Game Center into your apps
Have written two mini-games to show off to your friends
A multi-player letter tile game (Letter Tiles With People You Barely Know)
A physics based game (Irritated Hamster)
This is an intermediate session, and it is assumed that attendees are iOS developers. At a minimum, you should know how to build and run apps, link and use iOS frameworks. You should have an Apple computer with Xcode 4.4 or higher. Being able to deploy to an iOS device during the session is optional, but may be helpful.
8:30 - 9:00 Introduction and Setup
9:00 - 10:00 Prototyping
10:00 - 10:45 Art, Assets and In App Purchases
10:45 - 11:00 BREAK
11:00 - 12:00 Game (Center) Theory
12:00 - 1:00 LUNCH
1:00 - 2:00 Letter Tiles With People You Barely Know
2:00 - 2:45 Physics
2:45 - 3:00 BREAK
3:00 - 4:45 Irritated Hamsters
4:45 - 5:00 BREAK
5:00 - 6:00 Polish and Winning
We'll talk about the best approach to creating reusable code projects for iOS, and the benefits of doing so. We will go through a tutorial of creating a static library project, including a resource bundle, unit tests, and automatically generated AppleDoc documentation. Past projects and specific examples will be used to support the ideas and thoughts of the presentation.
Special purpose programming languages are anything but new. The same with extension languages (for example, TCL was created in 1988). In this session you will learn the difference between these two concepts and learn how you can leverage these concepts in iOS and Cocoa applications. We will also cover how to include them in your XCode workflow.
Gesture Recognizers are Apple's answer to the problem: How do I keep all those touches straight!?!? It's about tracking touch state over time, and UIGestureRecognizer subclasses give us a standard and composable way to manage that complexity. We'll look at how recognizers work, how they compete to decide which one "wins", see a custom complex gesture recognizer in action, and discuss how to leverage this in your applications. Complete with demo and sample code!
Very few apps these days are self-contained silos. More often than not, your app will need to consume data from external sources. In this session, you'll learn how to properly write networking code so that you don't block threads, don't fetch data you don't need, and cache the right data the right way. You'll learn about an excellent framework called AFNetworking to simplify your networking code. And you'll also see some practical examples such as fetching images asynchronously to update a UITableView.
Even if your app has great features and never crashes, no one might ever find out if its hidden behind lackluster visuals or it's confusing to use. During this presentation I will discuss some steps you can take in order to improve your apps both visually and functionally to help them stand out.
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.
by Janine Ohmer
This is your chance to shine! We'll take a quick look at several apps written by attendees with an explanation of what made the app interesting, challenging, scary, or just plain fun to write. Any attendee will be able to submit an application and a panel made up of our speakers will choose the final slate of apps.
by Tim Burks
Do you long to control your lightbulbs, wristwatch, toaster, keychain, and exercise equipment with your iPhone? Or is there something that you want to make and control that no one else has imagined yet? Apple's CoreBluetooth framework has made it easy to write apps that talk with devices that support the new Bluetooth LE standard, and now Bluegiga's BLE112 makes it easy to build hardware that talks back. We'll review CoreBluetooth and the Bluetooth LE architecture, and then we'll see how Bluegiga's BG Script and Profile Toolkit can be used to program these tiny wonders.
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.
Second to views, networking is the hardest part of iOS programming. And it's several orders of magnitude more difficult if you plan to persist a local copy of the data in Core Data, and keep it in sync with the server. Nevermind the tricky theoretical issues of local cache invalidation and conflict resolution, it's hard enough to get Core Data set up in the first place! At least all of this was true before AFInrementalStore came around. Come learn how AFIncrementalStore works, and in doing so, get a deep dive into Core Data itself.
You may or may not have experience working with Apple's MapKit, but have you ever considered what goes into building it from scratch? I have, because I've helped do just that. This session will go over the high-level components of MapKit -- things like the map view, annotations, annotation views, and user location services -- and talk about what they do, but also how they can be -- and have been -- duplicated. We will compare and contrast with the MapBox iOS SDK, which is a completely open source implementation of MapKit, not a subclass derivative, and see all the complex bits and bobs that go into it, including tile-based layers, annotation recycling, complex interaction delegate callbacks, map tile cache management, and scalable vector drawing, to name a few.
Reduce validation time and gain confidence in your code by using Xcode Instruments to automate your functional testing, validate your UI elements, and stress test views.
I will present a Test Automation Strategy that can be applied to most any iOS Mobile App. I will discuss how to automate a mobile app using Java Script and the UI Automation API in Xcode instruments.
You will learn how to structure your test suites and libraries so that they are easy to debug and run. We will walk though code snippets, useful API functions, and run a test suite to illustrate how a clean test structure provides readable test results.
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.
by Saul Mora
Compilers don't care how readable code is, as long as it doesn't have a syntax problem, the compiler will handle code just fine. However, as developers, it's in our best interest to keep our code clean and readable. And all it takes a little bit of practice. We'll go over a few common places where code gets messy, and some techniques to keep these places clean.
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.
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?
Matrix transformations can make your user interfaces come to life: translate, scale, and rotate. Each on its own is relatively simple and straightforward. Yet many developers are daunted when 2 or more operations need to be combined. What if you need to rotate or zoom about an off-center (or even off-screen) point? How do you combine multiple transformations into a single animation? How do you make advanced, polished 3D animations such as folding and flipping views? Learn everything you need to know to get started with complex matrix transformations in CoreGraphics and CoreAnimation and take an in-depth look at folding and flipping animations. We'll also cover related topics such as anti-aliasing, avoiding off-screen render passes, shadows, and rendering retina images. Tons of demos and full open-source source code provided.
NSPredicates aren’t just for Core Data. NSPredicates can be used to attack a variety of tasks with collections in ways that make your code more testable and easier to maintain. They are, however not well documented and notoriously difficult to create. Sure, once created they are easy to use and let you do things that are very difficult without them. In this intermediate session we will cover what NSPredicates are, where they can be used, how to debug them, and how to replace difficult to maintain iterative code with elegant predicates. You should have a good understanding of Objective C and the collections. While we will cover some of Core Data, this is not a Core Data session.
by Pete Hodgson
Automated tests help you move fast and make changes to your app with confidence. If you're looking to create automated acceptance tests for your iOS app then you have quite a few options beyond Apple's official UIAutomation offering. In this talk we'll take a tour around some of the popular choices available to you (including UIAutomation) and weigh up the pros and cons. Then we'll dive into the details of using one of these options - a tool called Frank - to write simple, human-readable tests for your app. You'll leave this session with everything you need to start writing tests for your own app.
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.
Objective-C's a lovely language and Cocoa provides some great frameworks, but there's a ton we can learn from other programming languages and communities. We'll look at how other programming communities solve some common problems and what we can steal from them to make Cocoa development better.
"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.
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.
Cocoa apps spend a lot of time waiting and then reacting. We wait for the user to do something in the UI. Wait for a network call to respond. Wait for an asynchronous operation to complete. Wait for some dependent value to change. And then they react. But all those things—all that waiting and reacting—is usually handled in many disparate ways. That makes it hard for us to reason about them collectively, chain them, or compose them in any uniform, high-level way. We can do better. ReactiveCocoa is a framework for composing and transforming sequences of values. We'll talk about how we can use ReacticeCocoa to write better, more succinct and more expressive code.
Filing bugs at bugreporter.apple.com can feel like tossing messages into a black hole. In this session, get insights and an inside look from someone who has been on both the sending and receiving end of bug reports at Apple. We’ll take a look at the bug reporting process, writing good bugs, and strategies that can give your feedback a better chance at being addressed.
25th–27th October 2012