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.
For millions of Americans who have some form of disability, the iPhone isn't just a convenience; it's an indispensable tool. They depend on their iPhone to accomplish tasks that many non-disabled people take for granted. Using the accessibility technologies that are built into iOS, the blind can catch up on email, the deaf can call up a friend to chat, and those with motor disabilities can tap a calendar entry. These accessibility technologies empower the disabled as few other technologies do, but in order to make the most of them, you, the developer, need to design your apps with them in mind. In this session, we'll explore the principles of universal design and learn how they can be used to build accessibility into an app from the very beginning. We'll also learn how employing universal design creates better user experiences for all customers, not just those with disabilities. The wide range of accessibility technologies that are built into iOS will be explored, then we'll dive deeper into iOS' VoiceOver technology which is used by those with vision impairments.
Behavior and performance testing takes a toll on us as developers. We have to perform the same steps over, and over, and over again. That's where Instruments and UI Automation can help. We're going to explore practical examples of building tests for iOS applications, organizing test suites, automated performance testing with Instruments, stubbing app data and external dependencies, and running things from the command line...automating our automated tests as it were.
This is going to be a dive deep into the tools with all new material. Bring your tough questions and we'll chat during the Q&A.
iOS tends to steal the stage these days, but there are also many benefits to building native Mac clients either to compliment existing iOS apps, or to stand alone. In this talk, I will share best practices for the overall architecture and design of Mac-only and cross-device applications that will allow for optimal code re-use, while also taking advantage of specific complexities and the additional power that OS X has to offer. In the process, I will hit on nuances that may trip up iOS developers coming over to OS X for the first time.
This session will go over how blocks / closures work in Objective-C and get you ready to use them in your code right away. Blocks can look ugly at first sight, but the goal of this talk is to see thru the syntax to the design patterns which are opened up by this beautiful new addition to C. From Cocoa API-level use to custom-fit blocks, you will learn why anyone would want to use them and how much better your programs will be as a result. In addition to use examples, you'll gain a solid understanding of what's going on behind the scenes with a brief deep-dive into what makes blocks tick and how best to approaching thinking about them. Once you start using them, it'll rock your Cocoa coding.
Going from an idea and a few sketches in a Field Notes to a beautiful and tantalizing app on the App Store can be a long, and sometimes, arduous task. Making prototypes of your app ideas can make the finished product more successful and help you avoid nights tearfully crying over your keyboard while you rewrite core features. In this session we’ll talk through several different kinds of prototypes you might want to build and then look at tools that can help building these prototypes.
Much of the power behind Objective-C comes from its amazingly flexible runtime. The language exposes a rich feature set for manipulating classes, methods, and objects. All this power and flexibility is sometimes misunderstood, though. "Why would you ever need to add a method at runtime?" people ask. "Is that really a good idea?" Well of course it is! Without the runtime, many of the technologies that you take for granted every day would not be possible. Apple has leveraged the runtime heavily in Cocoa, and you should, too. Plus, it's just plain fun to tinker with every once and a while! In this session, you'll learn typical techniques that are used to manipulate the runtime and how to apply them in real world applications. Learn what makes the wheels turn, so you'll be able to bend the system and start looking at problems in a whole new way.
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.
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.
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.
Mobile phones have given everybody a portable GPS in their pocket. Frameworks like MapKit make it easy to embed mapping functionality into your own applications. This session will begin by providing an quick introduction to MapKit. But MapKit may not be enough. Often applications need a server side component which stores and makes searching location information easy. Apache Solr is a powerful yet easy to use open source enterprise search server with geospatial searching capabilities built-in. This session will conclude by showing how integrating MapKit and Solr using JSON and RestKit maybe the right direction for your next mobile map app.
Dependency Management is one of those things you just shouldn't have to worry about. Unfortunately, doing iOS and Mac development means you've probably spent a lot of time fighting Xcode when using third-party libraries. CocoaPods offers a better alternative. Pulling down code, resolving dependencies, and setting up your project workspace just got a lot easier. Sound too good to be true? Come find out how CocoaPods can make your life simpler.
Maybe you've dipped your feet into the Core Data pool, or perhaps you've never used it before. At any rate, it's time to solidify your understanding. In this talk, we'll cover the basics of the framework and then begin to discuss some of the details. We'll cover everything you need to know to get started with Core Data and clearly explain how all of the pieces fit together. You'll walk away feeling well acquainted with Core Data and will have the confidence to effectively use it in various data-backed apps.
The goal of the talk would be impress on people that using the accelerate framework is worth the effort. I try to introduce the (pure C) framework in such a way that it takes away the initial shock and confusion that most people feel when confronted with it and give them clear ways to think about why and how to use it. When done right, one's code is not only faster and takes up less battery life, but is more elegant, debuggable, future-proofed and allows for features an individual developer wouldn't want to implement themselves. I will include several demos of using the framework, presenting the code with and without using it for contrast, along with benchmarks. I'll try to make the examples eclectic: imaging, audio, scientific, general data stuff. I also have some custom crib sheets that help decoding the (vast) function lists available. There's also some new stuff in iOS 5 as well. There are also a lot of nitty gritty details that I have worked out that I can save others time with. Example code is kept simple but realistic.
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.
"Engineer", "craftsman", "artist". These words have all been used behind the word "software" at some point. And they all fit.
Building great software requires the perspective of a polymath. Nowhere is this more evident than in the tools of software development. The tool landscape is as varied as it is vast, but these tools all have a unique quality: nearly every one was designed and built by software developers. It is a rare luxury for a professional to have such an intrinsic understanding of his tools as well as the knowledge to build his own. In this session, we will expand on both of those ideas.
For your engineering side, we will explore the Xcode toolset with a focus on automation and optimizing workflow. Next, we will inspire the craftsman in you by looking at custom generic and single-use tools. Finally, your inner artist will be inspired when we look at creative uses of software outside of the traditional developer toolbox. By the end of this session, you will have a deeper understanding of the tools you use every day, and you might find a new use for some of that other software gathering dust on your hard drive.
Continuous integration is an important and useful tool to have in your arsenal. Agile developers always say, "when something is painful, do it more often." This is counter-intuitive at first but is very profound. CI servers have another side-benefit that can be just as useful: project automation. This presentation will cover continuous integration and project automation using Jenkins, an open-source, web-based continuous integration server. We'll take a look at building out a new Jenkins install, how to configure it to checkout the source code & build your project, as well as advanced topics like running unit tests or building IPAs for distribution.
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.
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.
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?
"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.
Apple's sandboxing technology is a great way to protect your app and give your customers confidence that it will be well behaved. And while sandboxing is a requirement for all applications in the Mac App Store, it has benefits for apps sold through traditional means. Some have even speculated that Apple will expect all apps to be sandboxed at some point in the future. Whether your application is in the Mac App Store or not, you need to understand this key technology; it is the future of application security on the Mac. We'll examine the ins and outs of App Sandboxing, why it's important, how to utilize entitlements, and cover additional information that you will need to know in order to bring your apps into this brave new world.
Most applications writing for mobile platforms need some sort of integration with web services. Unfortunately, most times backend infrastructure becomes an oversight and the app ends up suffering in the long run. Using cloud infrastructure technologies like Parse can help you get from concept to App Store insertion in no time. Parse's simple API, extendable Cloud Code feature and Push notification API let you focus on your app while getting a scalable backend solution.
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.
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.
It's no secret that in many ways, and for numerous, complex reasons, the field of computer science has become one of the most male-dominated fields in all of engineering to date. It's important for the future innovation of our field, and for our daughters, that we move the minority voice to the main thread and really turn up the volume on this conversation. "Women in tech" doesn't have to be a sore subject or a heated debate, it can be a story of encouragement and giving back. You may be surprised to find that it's the little changes which can make the biggest impact, and that choosing to become a part of the solution is a whole lot easier than you might think.
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
Find out how Microsoft's Windows Azure Mobile Services can add the backend capabilities you need, including push notifications, authentication and data, to your iOS applications in minutes. See how easy it is to work with structured data in the cloud using the native Objective-C SDK and send push notifications via APNS in a single line of code! You can even secure your data with server scripts for authorization and more. There'll be very few slides, plenty of live coding and lots of demos.
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:
...plus more neat tricks to make our users more productive.