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 full day, hands-on tutorial focuses on the fundamentals to get you up and running. Over the course of the day, you’ll build two iOS apps while learning about the core tools, frameworks and concepts you need to start building apps of your own.
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.
A wise person recently said to me "Blocks are ... hard to get your head wrapped around and then once you get it you can never understand how you never understood it". I couldn't have said it better myself. I watched several presentations on blocks when they first appeared and while the concept wasn't too tough to grasp, I found it difficult to know when and how to use them effectively. This seems to be a common problem, so this session aims to cut through the confusion and show you how to use blocks effectively.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
When Daniel first went indie, he was inspired by people like Brent Simmons to make great Cocoa apps. In 2007 he cofounded Black Pixel, and after several years of fantastic growth and some tough lessons learned, Black Pixel is one of the top development houses in the industry.
Getting good at what you do takes time, but there is no reason to make things harder than necessary. Hear about the things they tried that worked, and the things that did not. Find out what lessons were learned about development, design, business, and the Apple product ecosystem along the way.
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.
Data is the heart of many of your apps. In general, your app needs to create it, view it, change it and delete it often. There are many ways to store, retrieve and manipulate data in Cocoa ranging from the NSCoding protocol to XML formatted PList files. While those are useful, there will be a time in your app where you want to move your data to the next level. In Cocoa, that is Core Data. We'll go over each piece of the Core Data "Stack", and how to use them in your apps. We'll also discuss the MagicalRecord library and how it help minimize the amount of code you need to write to get Core Data into your app.
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.
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.
Apple has provided some truly remarkable language APIs in its frameworks. It's almost unfair how good they are, considering how most languages struggle just to handle Unicode correctly. From tokenizers and part-of-speech taggers, to transcription, data detectors, and document classification using latent semantic analysis; this session will cover the APIs as well as the linguistic theory behind them, so that you may leverage these insanely powerful technologies in your application.
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?
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.
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.
"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.
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.
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.
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.
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.
So, for the nth time, you fire up your awesome iOS app to run through your testing steps. Manually. Over and over. And you have to do the same tests on the iPad. And the iPod touch. On iOS 4 and then 5. And you just want to pull your hair out. Oh, and you just found a memory leak. Fix it and start over again. And again.
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.
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!
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 prototype physics games and integrate Apple's Game Center and Game Kit device communication into your apps.
When we are done you will be able to:
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.6 or higher. Being able to deploy to an iOS device during the session is optional, but may be helpful. You should also bring an iPad with at least iOS 6.1 and install the Codea application that we’ll use throughout the workshop.
Familiarity with Lua will be helpful but is not required