├── Learning Resources.md ├── Pull Request Workflow.md ├── README.md └── iOS Topics and References.md /Learning Resources.md: -------------------------------------------------------------------------------- 1 | # Learning Resources 2 | 3 | This guide curates some resources for continuous iOS learning. This is not a completed list and is in no particular order 4 | 5 | ## Blogs 6 | * [Raywenderlich](http://www.raywenderlich.com/) 7 | * [objc.io](http://www.objc.io/) 8 | * [NSHipster](http://nshipster.com/) 9 | * [Big Nerd Ranch blog](http://www.bignerdranch.com/blog/) 10 | * [Cocoa with love](http://www.cocoawithlove.com/) 11 | * [Khanlou](http://khanlou.com/) 12 | * [Krzysztof Zabłocki](http://www.merowing.info/) 13 | * [Ash Furrow](http://ashfurrow.com/) 14 | * [Peter Steinberger](http://petersteinberger.com/) 15 | * [Ole Begemann](http://oleb.net/blog/) 16 | * [Florian Kugler](http://floriankugler.com/) 17 | * [Friday Q&A](https://mikeash.com/pyblog) 18 | * [Swiftcast](https://swiftcast.tv/articles) 19 | * [Inessential](http://inessential.com/) 20 | * [Artsy](http://artsy.github.io/) 21 | * [Paul Samuel](http://paul-samuels.com/) 22 | 23 | Tip: Use RSS Reader like Feedly, Reeder, ReadKit 24 | 25 | ## Podcasts 26 | * [NSBrief](http://nsbrief.com/) 27 | * [Raywenderlich](http://www.raywenderlich.com/rwpodcast) 28 | * [iPhreaks](http://devchat.tv/iphreaks/) 29 | 30 | Tip: Use Podcast clients like Instacast, iOS Podcast, ... 31 | 32 | ## Screencasts 33 | * [NSScreencast](http://nsscreencast.com/) 34 | * [Raywenderlich](http://www.raywenderlich.com/videos) 35 | 36 | ## Conferences 37 | Some conferences provide free videos, sliders, ... 38 | * [Çingleton](http://vimeo.com/channels/637623) 39 | * [AltConf](https://www.youtube.com/channel/UChiwrWoactp8mOs70j53zYw) 40 | * [UIConf](https://www.youtube.com/user/UIKonf) 41 | * [Command R Conf](https://www.youtube.com/channel/UCSjxcYzYuJ-D4QdOjT63oSg) 42 | 43 | ## Groups 44 | * [iOS Developer family on SO](http://chat.stackoverflow.com/rooms/15038/ios-developer-family) 45 | * [NSChat on SO](http://chat.stackoverflow.com/rooms/15942/nschat) 46 | * [Swifters on Slack](https://swifters.slack.com) 47 | * [iOS developer on Slack](https://ios-developers.slack.com) 48 | 49 | 50 | ## Newsletters 51 | * [iOS Dev Weekly](https://iosdevweek.ly/) 52 | * [iOS Goodies](http://ios-goodies.com/) 53 | * [This week in Swift](https://swiftnews.curated.co/) 54 | * [Apple Developer news](https://developer.apple.com/news/) 55 | 56 | 57 | ## Twitter 58 | * [objc.io contributors](http://www.objc.io/contributors.html) 59 | * [Raywenderlich tutorial team](https://twitter.com/rwenderlich/lists/raywenderlich-com-team) 60 | 61 | Tip: Create your own or subscribe to other good Twitter Lists 62 | 63 | ## Stackoverflow 64 | Some people have very good answers 65 | * [bbum](http://stackoverflow.com/users/25646/bbum) 66 | * [Brad Larson](http://stackoverflow.com/users/19679/brad-larson) 67 | * [Dave DeLong](http://stackoverflow.com/users/115730/dave-delong) 68 | * [jrturton](http://stackoverflow.com/users/852828/jrturton) 69 | 70 | Questions 71 | * [Highest voted iOS questions](http://stackoverflow.com/questions/tagged/ios?sort=votes&pageSize=50) 72 | 73 | ## Github 74 | * [Most starred Objective C projects](https://github.com/search?l=Objective-C&p=1&q=stars%3A%3E1&s=stars&type=Repositories) 75 | * [Most starred Swift projects](https://github.com/search?l=swift&q=stars%3A%3E1&s=stars&type=Repositories) 76 | 77 | Tip: Follow other people to see their starred projects, dicussion, ... 78 | 79 | ## Quora 80 | * [iOS Development questions](http://www.quora.com/iOS-Development) 81 | 82 | 83 | ## Medium 84 | * [iOS Apprentice](https://medium.com/ios-apprentice) 85 | 86 | ## Books 87 | * iOS By Tutorial series (Raywenderlich) 88 | * Effective Objective C (Matt Galloway) 89 | * Pro Objective C (Keith Lee) 90 | * Pro Objective C Design Patterns (Carlo Chung) 91 | * Programming iOS series (Matt Neuburg) 92 | * iOS Programming: Pushing the limits series (Rob Napier, Mugunth Kumar) 93 | 94 | -------------------------------------------------------------------------------- /Pull Request Workflow.md: -------------------------------------------------------------------------------- 1 | ![pull-request-diagram](http://d.pr/i/3LPJ+) 2 | 3 | ## Contributor Workflow 4 | 5 | ### Fork the Repo and Setup Upstream 6 | 7 | These steps only need to be done once. 8 | 9 | - Fork the main repo on GitHub 10 | 11 | Go to https://github.com/2359media/aurora-ios and click the "Fork" button. 12 | 13 | - Clone your own fork 14 | 15 | git clone https://github.com/hujunfeng/aurora-ios.git 16 | 17 | - Add a remote linking to the main repo 18 | 19 | cd aurora-ios 20 | git remote add upstream https://github.com/2359media/aurora-ios.git 21 | git fetch upstream 22 | 23 | Now there are two remotes: origin and upstream. Origin points to your own 24 | fork, and upstream points to the main repo. 25 | 26 | % git remote -v 27 | origin https://github.com/hujunfeng/aurora-ios.git (fetch) 28 | origin https://github.com/hujunfeng/aurora-ios.git (push) 29 | upstream https://github.com/2359media/aurora-ios.git (fetch) 30 | upstream https://github.com/2359media/aurora-ios.git (push) 31 | 32 | ### Pull Updates from Upstream 33 | 34 | Suppose you're working on the develop branch of upstream 35 | (upstream/develop). You will need to pull from upstream/develop to the 36 | local develop branch. 37 | 38 | - **Don't work on the local develop branch directly**. Don't commit on this 39 | branch and don't merge any local branches into it. 40 | 41 | - Instead, only pull in changes from upstream 42 | 43 | git checkout develop 44 | git pull --rebase upstream develop 45 | 46 | And because we don't do commits and merges on the local develop, this 47 | pull command should only results in a fast-forward merge. 48 | 49 | ### Work on Feature Branches 50 | 51 | - Create a feature branch from develop 52 | 53 | git checkout -b feature/add-facebook-login develop 54 | 55 | - Work and add commits 56 | 57 | git add . 58 | git commit 59 | 60 | - When you finish the work, **before pushing it to origin**, pull upstream 61 | again to make sure that develop is updated, and rebase the feature branch 62 | onto develop 63 | 64 | git checkout develop 65 | git pull --rebase upstream develop 66 | git checkout feature/add-facebook-login 67 | git rebase develop 68 | 69 | So the feature branch will get latest updates from upstream/develop 70 | before being pushed. It reduces the possibility of conflicts when the 71 | maintainer merges the branch later. 72 | 73 | - Push the feature branch to origin (your repo) 74 | 75 | git push -u origin feature/add-facebook-login 76 | 77 | The `-u` option adds an upstream tracking reference to your local 78 | branch, meaning that you can run subsequent push or pull commands 79 | without having to specify the remote and branch names. 80 | 81 | **Don't rebase the feature branch onto develop after you push it to 82 | origin.** 83 | 84 | ### Create Pull Requests 85 | 86 | - Create a new pull request on GitHub 87 | 88 | You can create pull requests in several ways: 89 | 90 | - Go to your own repo (https://github.com/hujunfeng/Pull-Request-Test), select the 91 | newly created branch, then click the "Pull Request" button. 92 | 93 | Make sure the `base` and the `head` are correct. In our running 94 | example, the `base` is 2359media:develop and the `head` is 95 | hujunfeng:feature/add-facebook-login. It should look like this: 96 | 97 | ![Creating a Pull Request on GitHub](http://d.pr/i/RQRY+) 98 | 99 | - Alternatively, you can also use 100 | [`hub`](https://github.com/github/hub) to create a pull request. 101 | Please note that `hub` compares local branches by default, so 102 | you have to specify the `base` and the `head` like this: 103 | 104 | hub pull-request -b 2359media:develop -h hujunfeng:feature/add-facebook-login 105 | 106 | - SourceTree also has the ability to create pull requests. Select 107 | the correct branch and commit, then go to menu **Repository** -> 108 | **Create Pull Request**. 109 | 110 | An email will be sent to the maintainer who will be doing code 111 | view. 112 | 113 | ### Continue Working When Pull Requests Being Reviewed 114 | 115 | - You can move on to another feature or issue by **creating a new 116 | feature branch from develop**, 117 | 118 | git checkout -b feature/add-twitter-login develop 119 | 120 | - If the new feature depends on an old feature, which pull request is 121 | not accepted yet, you can **create the new branch from the old feature 122 | branch**, 123 | 124 | git checkout -b feature/fetch-facebook-friends feature/add-facebook-login 125 | 126 | Later when you finish the new feature, **you're safe to create another 127 | pull request** for it. The maintainer would merge both pull requests 128 | (feature/add-facebook-login and feature/fetch-facebook-friends), and 129 | it won't cause any duplicate commits. 130 | 131 | - You may also continue to work on the feature branch that already has a pull 132 | request being submitted. For example, the maintainer might require some changes on 133 | your code before the pull request can be merged. 134 | 135 | git checkout feature/add-facebook-login 136 | // hard work in Xcode 137 | git add . 138 | git commit 139 | git push 140 | 141 | The new commits that are pushed to origin will automatcally appear 142 | in the original pull request on GitHub. 143 | 144 | But please note that **don't rebase the feature branch onto develop 145 | at this point, because you have already pushed it to origin.** 146 | 147 | ### Tidy Up Pull Requests 148 | 149 | - Once the pull request is accepted and merged, you can delete the 150 | branch 151 | 152 | git push origin --delete feature/add-facebook-login 153 | git branch -d feature/add-facebook-login 154 | 155 | The maintainer could also delete the remote branch on your own 156 | fork. If that is the case, you need to delete the [remote-tracking](http://www.gitguys.com/topics/tracking-branches-and-remote-tracking-branches/) 157 | branch in your local repo. 158 | 159 | git fetch --prune 160 | 161 | or 162 | 163 | git remote prune origin 164 | 165 | - Pull the changes from upstream again 166 | 167 | git pull --rebase upstream develop 168 | 169 | - Rebase other unpublished branches onto the updated develop branch 170 | 171 | git checkout feature/add-twitter-login 172 | git rebase develop 173 | 174 | ### Pull Request Message 175 | 176 | A pull request message is to give the maintainer a brief idea of what 177 | this pull request is about and help him or her to better understand the 178 | changes you made. It also serves as a README document of the pull 179 | request when it being surveyed in future. Therefore, it's important to 180 | write a good pull request message, as the same as writing a good commit 181 | message. 182 | 183 | A good pull request message should at least contain: 184 | 185 | - A short, one line summary of the changes. 186 | 187 | - More detailed explanation. Ask yourself these questions as if 188 | you're the reviewer: 189 | 190 | - If it's a new feature, what is this feature? How do you 191 | implement it? Is it completed in this pull request? 192 | 193 | - If it's a bug fix, then what is the bug? What is the cause of 194 | the bug? How do you fix the bug? How can your solution prevent 195 | similar bugs from happening in the future? 196 | 197 | - If it's code refactoring, why does the old code need to 198 | refactor? How is the new code better than the old one? 199 | 200 | It could have multiple paragraphs, if neccessary. 201 | 202 | - Links to the related stories in Pivotal Tracker. 203 | 204 | ## Maintainer Review and Merge Workflow 205 | 206 | ### Using "Merge" Button on GitHub 207 | 208 | If the pull request is straightforward and doesn't contain lots of 209 | commits, and it can be merged without any conflicts, the maintainer can 210 | use the "Merge" button on GitHub to merge the pull request. 211 | Otherwise, please merge it manually. 212 | 213 | ### Merge Manually 214 | 215 | - Add a remote linking to contributor's repo (only need to do it once) 216 | 217 | git remote add hujunfeng https://github.com/hujunfeng/aurora-ios.git 218 | 219 | - Fetch all the branches from contributor's repo 220 | 221 | git fetch hujunfeng 222 | 223 | - Check out the pull request branch 224 | 225 | git checkout -b add-facebook-login hujunfeng/add-facebook-login 226 | 227 | - Test and review the code. Add comments on GitHub if any change is 228 | required before the pull request can be merged. 229 | 230 | - Merge the pull request branch into develop if it is accepted 231 | 232 | git checkout develop 233 | git merge --no-ff add-facebook-login 234 | 235 | Add `#issue-number` or `#pull-request-number` in the commit message to 236 | associate this merge with the pull request or the issue on GitHub. 237 | 238 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # iOS Development Guide 2 | 3 | This development guide outlines the standards and the best practices 4 | that are adopted by the iOS team at 2359 Media. 5 | 6 | This is the first draft of the guide. We are eager for the feedback from 7 | our developers. Please feel free to create 8 | [issues](https://github.com/2359media/ios-dev-guide/issues) for any 9 | suggestions. 10 | 11 | ## Table of Contents 12 | 13 | * [Why This Is Required](#why-this-is-required) 14 | * [Objective-C Coding Conventions](#objective-c-coding-conventions) 15 | * [Swift Coding Conventions](#swift-coding-conventions) 16 | * [Project Technical Conventions](#project-technical-conventions) 17 | * [Xcode](#xcode) 18 | * [CocoaPods](#cocoapods) 19 | * [Graphic Assets](#graphic-assets) 20 | * [Groups Structure in Project Navigator](#groups-structure-in-project-navigator) 21 | * [Warnings](#warnings) 22 | * [Staging vs Production vs App Store](#staging-vs-production-vs-app-store) 23 | * [Instruments](#instruments) 24 | * [Unit Testing](#unit-testing) 25 | * [SDK Compatibility](#sdk-compatibility) 26 | * [Recommended Third-party Libraries for Objective-C](#recommended-third-party-libraries-for-objective-c) 27 | * [Networking](#networking) 28 | * [JSON Parsing](#json-parsing) 29 | * [Urban Airship (Device Registration)](#urban-airship-device-registration) 30 | * [HUD](#hud) 31 | * [Reachability](#reachability) 32 | * [Pull-to-Refresh](#pull-to-refresh) 33 | * [Social Network](#social-network) 34 | * [UICollectionView on iOS 5.x](#uicollectionview-on-ios-5x) 35 | * [Attributed Label](#attributed-label) 36 | * [Sidebar Menu (Hamburger UI)](#sidebar-menu-hamburger-ui) 37 | * [UIView (Nib Loading and Geometry Shortcuts)](#uiview-nib-loading-and-geometry-shortcuts) 38 | * [Page Control](#page-control) 39 | * [UIAlertView and UIActionSheet (Block-based wrappers)](#uialertview-and-uiactionsheet-block-based-wrappers) 40 | * [Recommended Third-Party Libraries for Swift](#recommended-third-party-libraries-for-swift) 41 | * [Git](#git) 42 | * [Pull Request](#pull-request) 43 | * [References](#references) 44 | 45 | ## Why This Is Required 46 | 47 | This guide should be considered as rules for first timers, but 48 | guidelines for experienced developers. 49 | 50 | ## Objective-C Coding Conventions 51 | 52 | Follow these two style guides: 53 | 54 | * [NYTimes Objective-C Style Guide](https://github.com/NYTimes/objective-c-style-guide) 55 | * [2359media fork of GitHub Objective-C Conventions](https://github.com/2359media/objective-c-conventions) 56 | 57 | ## Swift Coding Conventions 58 | 59 | Follow swift style guide from Raywinderlinch 60 | 61 | * [Raywinderlinch Swift Style Guide](https://github.com/raywenderlich/swift-style-guide) 62 | 63 | ## Project Technical Conventions 64 | 65 | ### Xcode 66 | 67 | Always use the most recent release version of Xcode. At the time of 68 | writing, the lastest version is Xcode 5. You can download it from [Mac 69 | App Store](https://itunes.apple.com/en/app/xcode/id497799835?mt=12) or 70 | at [Apple developer center](https://developer.apple.com/downloads). 71 | 72 | However, if a project still requires a base SDK of an old version of 73 | iOS, it'd handy to keep the lastest version of Xcode that supports the 74 | old SDK. For example, during the transition from iOS 6 to iOS 7, some legacy 75 | projects might not be ready to upgrade to iOS 7 SDK, because it would require 76 | a lot of effort to do so. In that case, we still need to keep Xcode 77 | 4.6.3 (and iOS 6 SDK) for these projects. 78 | 79 | * Add old SDKs in new Xcode 80 | 81 | Each version of Xcode comes with only one SDK. For example, Xcode 5 82 | comes with iOS 7.0 SDK while Xcode 4.6 comes with iOS 6.1 SDK. 83 | It's however possible to add iOS 6.1 SDK from Xcode 4.6 to Xcode 5. 84 | To do that, you simply copy the iOS 6.1 SDK folder inside Xcode 4.6 85 | app bundle to the same position in Xcode 5 app bundle. Assuming you 86 | rename Xcode 4.6 app bundle to `Xcode4.app`, this is the command to do 87 | that: 88 | 89 | cp /Applications/Xcode4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs 90 | 91 | If you prefer symbolic link instead of copying the entire folder, 92 | use this command: 93 | 94 | ln -s /Applications/Xcode4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs 95 | 96 | ### CocoaPods 97 | 98 | Use [CocoaPods](http://cocoapods.org) to manage libraries. Don't copy 99 | library source files into the project. 100 | 101 | There is a repository of CocoaPods specifications (`podspec`): 102 | [CocoaPods/Specs](https://github.com/CocoaPods/Specs), which contains 103 | most of the common libraries. To add a library dependency, specify the 104 | name and the version. 105 | 106 | * Library with `podspec` in 107 | [CocoaPods/Specs](https://github.com/CocoaPods/Specs) 108 | 109 | pod 'AFNetworking', '2.0.0-RC3' 110 | 111 | You can also specify a library that is outside of CocoaPods/Specs. 112 | 113 | * Library with `podspec` in the root of the repository. Either local 114 | repositories or remote repositories. 115 | 116 | pod 'AFNetworking', :path => '~/Documents/AFNetworking' 117 | pod 'AFNetworking', :git => 'https://github.com/AFNetworking/AFNetworking.git' 118 | 119 | If a library doesn't have a `podspec`, you can create a `podspec` on 120 | your own and host it in somewhere like [gist.github.com](), or even in a 121 | local folder. 122 | 123 | * Library without `podspec`. Create `podspec` on you own. 124 | 125 | pod 'JSONKit', :podspec => 'https://raw.github.com/gist/1346394/1d26570f68ca27377a27430c65841a0880395d72/JSONKit.podspec' 126 | pod 'JSONKit', :path => '~/Documents/JSONKit.podspec' 127 | 128 | ### Graphic Assets 129 | 130 | * Use [Asset Catalogs](https://developer.apple.com/library/ios/recipes/xcode_help-image_catalog-1.0/Recipe.html) in Xcode. 131 | * Must include images for all sized. 132 | * Use JPEG format for large images, e.g. background images. 133 | * Talk to designer to optimize pngs before adding it to the Asset Catalog. 134 | 135 | ### Groups Structure in Project Navigator 136 | 137 | We recommend the project group structure as shown in the following 138 | screenshots. 139 | 140 | ![Groups Structure in Project Navigator](http://d.pr/i/FXn3/5r31W9wA+) 141 | 142 | Assuming *MyApp* is the project name, we follow these conventions: 143 | 144 | * Only 4 groups at the top level: **MyApp**, **MyAppTests**, 145 | **Frameworks** and **Products**. 146 | * `AppDelegate` should be in the root level of **MyApp**, not inside 147 | any of its subgroups. 148 | * **MyApp** has 8 subgroups: 149 | * __Storyboards__: obviously storyboard files 150 | * __Models__: all model classes, including Core Data classes and 151 | `xcdatamodeld` file 152 | * __Views__: all custom views, e.g. custom table view cells 153 | * __controllers__: all view controllers go here 154 | * __Managers__: other controller-like classes that are not view 155 | controllers, for example, a http client class that handles all the 156 | API calls 157 | * __Categories__: all categories 158 | * __Resources__: resource files, like images, custom fonts or 159 | preloaded data 160 | * __Supporting Files__: a default group with Xcode template 161 | * No group for external libraries. Use CocoaPods to manage them. 162 | * Use intent based grouping. For each intent, create a new group with all the corresponding files (viewControllers, views, storyboards, xib) inside it. For e.g if **MyApp** has **Account** and **Products** create two groups `Account` and `Product` under **MyApp** 163 | * Each intent would've it's own storyboard. If Intent has multiple viewControllers, then each viewController would have it's own storyboard. Creating separate storyboards would prevent merge conflicts when developers are working on same stream. 164 | 165 | ### Warnings 166 | 167 | No warning is allowed in release builds. Treat warnings as errors. 168 | 169 | ### Staging vs Production vs App Store 170 | 171 | Use [Xcode Scheme](scheme), [Build Configuration](build-config) and 172 | [Build Settings](settings) to manage different builds, like staging 173 | build, production build or App Store build. 174 | 175 | 1. Create Build Configurations. 176 | 177 | Both staging and production builds require Debug and Release 178 | configuration, while App Store only need Release configuration. As a 179 | result, we usually create 5 build configurations: **Debug**, **Debug 180 | Staging**, **Release**, **Release Staging** and **App Store**. Note 181 | that **App Store** is created by duplicating **Release** 182 | configuration. 183 | 184 | ![Create Build Configurations](http://d.pr/i/FvLJ/2w0NKNJD+) 185 | 186 | 2. Add User-Defined Build Settings. 187 | 188 | Typically, we will create User-Defined Settings for Bundle ID, app 189 | icon names, Facebook App ID, etc. So we will be able to set different 190 | Bundle ID, icon names or Facebook App ID for different Build 191 | Configurations. 192 | 193 | ![Add User-Defined Settings](http://d.pr/i/Qnw9/XW0PMDHF+) 194 | 195 | These settings will be used in Info.plist. If the User-Defined 196 | Setting is `FACEBOOK_APP_ID`, you use it in Info.plist with 197 | `${FACEBOOK_APP_ID}`. 198 | 199 | ![Use User-Defined Settings in Info.plist](http://d.pr/i/ckeH/96uoJ9Ov+) 200 | 201 | 3. Create Schemes with Build Configurations. 202 | 203 | Each build needs one Scheme, so we will create 3 Schemes: 204 | **MyAppStaging**, **MyAppProduction** and **MyAppAppStore**, for 205 | staging build, production build and App Store build respectively. 206 | Note that these schemes should be marked "Shared", so that they will 207 | be added in the Git repository. 208 | 209 | ![3 Schemes](http://d.pr/i/nrhZ/5dfwYlsf+) 210 | 211 | **MyAppStaging** Scheme uses **Debug Staging** and **Release 212 | Staging**. 213 | 214 | ![MyAppStaging Scheme](http://d.pr/i/cxrL/4ETSVjbO+) 215 | 216 | Similarly, **MyAppProduction** Scheme uses **Debug** and 217 | **Release**, and **MyAppAppStore** Scheme uses only **App Store**. 218 | It's summarized in the followed table. 219 | 220 | Schemes with Build Configurations 221 | 222 | After we have Schemes, we can, for example, switch to staging 223 | build by easily selecting **MyAppStaging** Scheme. Bundle ID, Facebook 224 | App ID and app icon will be changed automatically. 225 | 226 | In order to change the Base URL of API server for staging or production, 227 | we can implement a function that returns the correct URL based on Bundle 228 | ID. For example, the following function returns the staging Base URL if 229 | the Bundle ID has a prefix of `com.2359media`. 230 | 231 | ```objective-c 232 | NSString * MDABaseURL() 233 | { 234 | if ([[[NSBundle mainBundle] bundleIdentifier] hasPrefix:@"com.2359media"]) { 235 | return @"http://myapp-staging.2359media.net"; 236 | } 237 | else { 238 | return @"http://myapp.2359media.net"; 239 | } 240 | } 241 | ``` 242 | 243 | [scheme]: https://developer.apple.com/library/ios/featuredarticles/XcodeConcepts/Concept-Schemes.html#//apple_ref/doc/uid/TP40009328-CH8-SW1 244 | [build-config]: https://developer.apple.com/library/ios/recipes/xcode_help-project_editor/Articles/BasingBuildConfigurationsonConfigurationFiles.html 245 | [settings]: https://developer.apple.com/library/ios/featuredarticles/XcodeConcepts/Concept-Build_Settings.html#//apple_ref/doc/uid/TP40009328-CH6-SW1 246 | 247 | ### Instruments 248 | 249 | Use Instruments to profile your app. For example, locating memory issues, analyzing CPU usage, mesauring I/O acitivity or graphics peformance. 250 | 251 | Resources for learning Instruments: 252 | 253 | - [Instruments User Guide](https://developer.apple.com/library/prerelease/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/) 254 | - [WWDC 2010 Advanced Memory Analysis with Instruments](https://developer.apple.com/videos/wwdc/2010/?id=311) 255 | - [WWDC 2010 Advanced Performance Analysis with Instruments](https://developer.apple.com/videos/wwdc/2010/?id=309) 256 | - [WWDC 2011 iOS Performance and Power Optimization with Instruments](https://developer.apple.com/videos/wwdc/2011/?id=312) 257 | - [WWDC 2011 iOS Performance in Depth](https://deimos.apple.com/WebObjects/Core.woa/BrowsePrivately/adc.apple.com.8266478284.08266478290.8365294559?i=1110158471) 258 | - [WWDC 2012 Learning Instruments](https://developer.apple.com/videos/wwdc/2012/?id=409) 259 | - [WWDC 2012 iOS App Performance: Responsiveness](https://developer.apple.com/videos/wwdc/2012/?id=235) 260 | - [WWDC 2012 iOS App Performance: Graphics and Animations](https://developer.apple.com/videos/wwdc/2012/?id=238) 261 | - [WWDC 2012 iOS App Performance: Memory](https://developer.apple.com/videos/wwdc/2012/?id=242) 262 | - [WWDC 2013 Fixing Memory Issues](https://developer.apple.com/wwdc/videos/?id=410) 263 | - [WWDC 2013 Core Data Performance Optimization and Debugging](https://developer.apple.com/wwdc/videos/?id=211) 264 | 265 | ### Unit Testing 266 | 267 | Create unit tests for critical code. Especially, test the following 268 | cases: 269 | 270 | - Complex code that have many edge cases to consider. 271 | Write unit tests to cover these edge cases. 272 | - Whenever a bug is found, write a unit test to cover it before fixing 273 | the bug. 274 | 275 | 276 | Resources for getting started with unit testing in Xcode : 277 | 278 | - [Unit Test Your App](https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/testing_with_xcode/Testing_with_Xcode.pdf) 279 | - [WWDC 2014 Testing in Xcode 6](https://developer.apple.com/videos/play/wwdc2014-414/) 280 | 281 | Use the following 3rd party libraries if you want to do BDD style testing. 282 | 283 | - [Quick](https://github.com/Quick/Quick) 284 | - [Nimble](https://github.com/Quick/Nimble) 285 | ### SDK Compatibility 286 | 287 | It's quite often that we need to support older iOS versions. There are few ways to do this: 288 | 289 | - From Apple Documentation's [SDK Compatibility Guide](https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/cross_development/Introduction/Introduction.html). 290 | 291 | - From a more simplified article in Ray Wenderlich's [Supporting Multiple iOS Versions and Devices](http://www.raywenderlich.com/42591/supporting-multiple-ios-versions-and-devices). 292 | 293 | But, the most obvious way is by checking the Foundation framework version number: 294 | 295 | if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { 296 | // Handle the case for iOS 6.1 or earlier 297 | } else { 298 | // Handle the case for iOS 7 or later 299 | } 300 | 301 | Also, make sure to read [Supporting iOS 6](https://developer.apple.com/library/ios/documentation/userexperience/conceptual/transitionguide/SupportingEarlieriOS.html) in iOS 7 UI Transition Guide. 302 | 303 | ## Recommended Third-party Libraries for Objective C 304 | 305 | Here are a list of libraries that are widely used in our projects. 306 | Developers are recommended to choose the listed library for that 307 | particular feature. If, however, developers want to use a different 308 | library or experiment a new library. Please [create a new 309 | issue](https://github.com/2359media/ios-dev-guide/issues/new) to argue 310 | that why an alternate library is better. 311 | 312 | ### Networking 313 | 314 | [AFNetworking](https://github.com/AFNetworking/AFNetworking) by Mattt Thompson 315 | 316 | > A delightful iOS and OS X networking framework. 317 | > http://afnetworking.com 318 | 319 | AFNetworking 2.0 officially supports iOS 6+, Mac OS X 10.8+, and Xcode 5. If you'd like to use AFNetworking in a project targeting a base SDK of iOS 5, or Mac OS X 10.7, use the latest tagged 1.x release. For iOS 4.3 and Mac OS X 10.6 support, use the latest tagged 0.10.x release. 320 | 321 | ### JSON Parsing 322 | 323 | 1. [NSJSONSerialization](https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html) (iOS 5+) 324 | 325 | 2. [JSONKit](https://github.com/johnezang/JSONKit) by John Engelhart 326 | 327 | > A Very High Performance Objective-C JSON Library 328 | 329 | ### Urban Airship (Device Registration) 330 | 331 | [AFUrbanAirshipClient](http://github.com/AFNetworking/AFUrbanAirshipClient) by Mattt Thompson 332 | 333 | > An API Client for Registering and Unregistering Devices with Urban Airship. 334 | 335 | ### HUD 336 | 337 | [SVProgressHUD](https://github.com/samvermette/SVProgressHUD) by Sam Vermette 338 | 339 | > A clean and lightweight progress HUD for your iOS app. 340 | > 341 | 342 | ### Reachability 343 | 344 | [Reachability](https://github.com/tonymillion/Reachability) by Tony Million 345 | 346 | > ARC and GCD Compatible Reachability Class for iOS and MacOS. Drop in replacement for Apple Reachability. 347 | 348 | ### Pull-to-Refresh 349 | 350 | 1. [UIRefreshControl](https://developer.apple.com/library/ios/documentation/uikit/reference/UIRefreshControl_class/Reference/Reference.html) (iOS 6+) 351 | 352 | 2. [SVPullToRefresh](https://github.com/samvermette/SVPullToRefresh) by Sam Vermette 353 | 354 | > Give pull-to-refresh & infinite scrolling to any UIScrollView with 1 line of code. 355 | > 356 | 357 | ### Social Network 358 | 359 | 1. [UIActivityViewController](https://developer.apple.com/library/ios/documentation/uikit/reference/UIActivityViewController_Class/Reference/Reference.html) 360 | 361 | Use system sharing sheet, so no custom UI is allowed. Use it whenever possible. 362 | 363 | 2. [Social.framework](https://developer.apple.com/library/ios/documentation/Social/Reference/Social_Framework/_index.html) (iOS 6+) 364 | 365 | 3. [Twitter.framework](https://developer.apple.com/library/ios/documentation/Twitter/Reference/TwitterFrameworkReference/_index.html) (Twitter only and iOS 5 only, deprecated in iOS 6) 366 | 367 | 4. [Facebook SDK for iOS](https://developers.facebook.com/docs/ios/) by Facebook 368 | 369 | Use it for everything related to Facebook, including Facebook login, Facebook sharing, user profile, friend list, etc. 370 | 371 | ### UICollectionView on iOS 5.x 372 | 373 | [PSTCollectionView](https://github.com/steipete/PSTCollectionView) by Peter Steinberger 374 | 375 | > Open Source, 100% API compatible replacement of UICollectionView for iOS4.3+ 376 | 377 | ### Attributed Label 378 | 379 | [TTTAttributedLabel](https://github.com/mattt/TTTAttributedLabel) by Mattt Thompson 380 | 381 | > A drop-in replacement for UILabel that supports attributes, data detectors, links, and more 382 | 383 | ### Sidebar Menu (Hamburger UI) 384 | 385 | [MMDrawerController](https://github.com/mutualmobile/MMDrawerController) by Mutual Mobile 386 | 387 | > A lightweight, easy to use, Side Drawer Navigation Controller 388 | 389 | ### UIView (Nib loading and Geometry shortcuts) 390 | 391 | [ViewUtils](https://github.com/nicklockwood/ViewUtils) by Nick Lockwood 392 | 393 | > ViewUtils is a collection of category methods designed that extend UIView with all the handy little properties and functionality that you always wished were built-in to begin with. 394 | 395 | ### Page Control 396 | 397 | [DDPageControl](https://github.com/ddeville/DDPageControl) by Damien DeVille 398 | 399 | > An easily customizable alternative to UIKit's UIPageControl 400 | 401 | ### UIAlertView and UIActionSheet (Block-based wrappers) 402 | 403 | [PSAlertView](https://github.com/steipete/PSAlertView) by Peter Steinberger 404 | 405 | > Modern block-based wrappers for UIAlertView and UIActionSheet. 406 | 407 | ## Recommended Third Party Libraries for Swift 408 | 409 | ### [Alamofire](https://github.com/Alamofire/Alamofire) 410 | 411 | > HTTP networking library written in Swift. 412 | 413 | ### [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON) 414 | 415 | > JSON parser in Swift. 416 | 417 | ### [PureLayout](https://github.com/PureLayout/PureLayout) 418 | 419 | > AutoLayout utility library. 420 | 421 | 422 | ## Git 423 | 424 | We use Git as our source code management (SCM) system. We host 425 | repositories in GitHub. Here are the best practices of using 426 | Git and GitHub. 427 | 428 | * Commit early and commit often. 429 | 430 | * Don't change published history. Particularly, don't rebase remote branch. 431 | 432 | > Once you git push your changes to the authoritative upstream 433 | repository or otherwise make the commits or tags publicly visible, 434 | you should ideally consider those commits etched in diamond for all 435 | eternity. 436 | 437 | * Use git-flow. 438 | 439 | Gitflow is a Git workflow that Vincent Driessen introduced in his 440 | post [*A successful Git branching 441 | model*](http://nvie.com/posts/a-successful-git-branching-model/). In 442 | addition to that, he released 443 | [git-flow](http://github.com/nvie/gitflow), which is a collection of 444 | Git extensions to provide high-level repository operations for his 445 | branching model. 446 | 447 | * Write good commit messages. 448 | 449 | Here's a model Git commit message: 450 | 451 | Capitalized, short (50 chars or less) summary 452 | 453 | More detailed explanatory text, if necessary. Wrap it to about 72 454 | characters or so. In some contexts, the first line is treated as the 455 | subject of an email and the rest of the text as the body. The blank 456 | line separating the summary from the body is critical (unless you omit 457 | the body entirely); tools like rebase can get confused if you run the 458 | two together. 459 | 460 | Write your commit message in the imperative: "Fix bug" and not "Fixed bug" 461 | or "Fixes bug." This convention matches up with commit messages generated 462 | by commands like git merge and git revert. 463 | 464 | Further paragraphs come after blank lines. 465 | 466 | - Bullet points are okay, too 467 | 468 | - Typically a hyphen or asterisk is used for the bullet, preceded by a 469 | single space, with blank lines in between, but conventions vary here 470 | 471 | - Use a hanging indent 472 | 473 | Read [Tim Pope](http://tpo.pe/)'s post [*A Note About Git Commit 474 | Messages*](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) 475 | for more discussions. 476 | 477 | * Integrate Pivotal Tracker. 478 | 479 | If a commit has related Pivotal Tracker stories, use Pivotal Tracker 480 | post-commit hooks to link the commits to the particular stories. For 481 | all the details, including commit syntax as well as instructions on 482 | how to enable SCM integration, please see the [API help 483 | page](https://www.pivotaltracker.com/help/api?version=v5#Tracker_Updates_in_SCM_Post_Commit_Hooks). 484 | 485 | Here're some typical commit messages that include Pivotal Tracker 486 | post-commit hooks: 487 | 488 | * [#53928321] Create editorial page 489 | * [Fix #55789490] "$" sign appears in a wrong position 490 | * [Finish #53870315] Update icons for review buttons 491 | 492 | Also see [*Commit Often, Perfect Later, Publish Once: Git Best 493 | Practices*](http://sethrobertson.github.com/GitBestPractices/) for more 494 | discussions. 495 | 496 | ### Pull Request 497 | 498 | We use [Pull Requests][using-pr] to initiate code review and genenral 499 | discussion about changes before being merged into a main branch. 500 | 501 | We follow the [maintainer/contributors workflow][pr-workflow]. The tech 502 | lead of each project is the maitainer, who will review the pull requests 503 | submitted by the contributors before merging them into the main branch. 504 | The reset of developers in the team are the contributors, who will 505 | submits their changes through pull requests. 506 | 507 | [using-pr]: https://help.github.com/articles/using-pull-requests 508 | [pr-workflow]: https://github.com/2359media/ios-dev-guide/blob/master/Pull%20Request%20Workflow.md 509 | 510 | ## References 511 | 512 | - [iOS Developer Library](https://developer.apple.com/library/ios) is 513 | where you can find all the [programming guides][guides], [class 514 | references][references], [sample code][code], [videos][videos], etc. 515 | 516 | - [NSBlog](https://mikeash.com/pyblog/) by [Mike Ash](https://mikeash.com). 517 | 518 | - [objc.io](http://www.objc.io/) by [Chris Eidhof](http://eidhof.nl), [Florian Kugler](http://floriankugler.com) and [Daniel Eggert](https://twitter.com/danielboedewadt). 519 | 520 | - [NSHipster](http://nshipster.com) by [Mattt Thompson](http://mattt.me/). 521 | 522 | @phatle collects a huge number of references in his [iOS Topics and 523 | References][t&r], and they are grouped by topics for easily looking up. 524 | It's a handy document for developers who just start out iOS development. 525 | 526 | [guides]: https://developer.apple.com/library/ios/navigation/#section=Resource%20Types&topic=Guides 527 | [references]: https://developer.apple.com/library/ios/navigation/#section=Resource%20Types&topic=Reference 528 | [code]: https://developer.apple.com/library/ios/navigation/#section=Resource%20Types&topic=Sample%20Code 529 | [videos]: https://developer.apple.com/library/ios/navigation/#section=Resource%20Types&topic=Video 530 | [t&r]: https://github.com/2359media/ios-dev-guide/blob/master/iOS%20Topics%20and%20References.md 531 | 532 | -------------------------------------------------------------------------------- /iOS Topics and References.md: -------------------------------------------------------------------------------- 1 | Objective-C & iOS 2 | ================= 3 | 4 | 1. Object-Oriented Programming: 5 | ------------------------------- 6 | 7 | ###Syntax: 8 | 9 | - [Cheat sheet from Raywenderlich](http://cdn1.raywenderlich.com/downloads/RW-Objective-C-Cheatsheet-v-1-5.pdf) 10 | 11 | - Conventions from [NYTimes](https://github.com/NYTimes/objective-c-style-guide), [Github](https://github.com/github/objective-c-conventions), [Google](http://google-styleguide.googlecode.com/svn/trunk/objcguide.xml), ... 12 | 13 | ###Basic Object-Oriented Programming: 14 | - Keywords: Objects, Class, Inheritance, Encapsulation, Polymorphism, Instance Methods vs Class Methods. 15 | 16 | + If you are familiar with these terms, you can watch [Lecture 3](https://itunes.apple.com/us/course/developing-ios-7-apps-for/id733644550) from [Stanford course](http://www.stanford.edu/class/cs193p/cgi-bin/drupal/syllabus) videos and read the [Programming With Objective-C](https://developer.apple.com/library/mac/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011210-CH1-SW1) from Apple. 17 | 18 | + If you are not confident at these terms, unclear about allocation, pointer…, you should play with [Programming in Objective-C](http://www.amazon.com/Programming-Objective-C-Edition-Developers-Library/dp/032188728X) or [The Big Nerd Ranch Guide](http://www.amazon.com/iOS-Programming-Ranch-Edition-Guides/dp/0321821521) book first. 19 | 20 | 2. Xcode: 21 | --------- 22 | 23 | - Overview and basic about xcode, Paul Hegarty explains very well about xcode components, how to use IB in [Lecture 2](https://itunes.apple.com/us/course/developing-ios-7-apps-for/id733644550). 24 | 25 | - [Working efficiently with Xcode](https://developer.apple.com/videos/wwdc/2012/) in WWDC 2012 teaches some saving-tips and demonstrate workflow to help you work faster and efficiently. 26 | 27 | - If you are a fan of Emacs, Xcode already support Emacs typing style. If you are a fan of VIM, you should try [xVim](https://github.com/JugglerShu/XVim) plugin. 28 | 29 | - [Hidden iOS7 development gems in iOS7 Tech Talk](http://devstreaming.apple.com/videos/techtalks/2013/18_Hidden_iOS_7_Development_Gems/Hidden_iOS_7_Development_Gems-sd.mov?dl=1) shows some hidden features in Xcode, Objective-C and iOS simulator. 30 | 31 | - Make sure you don’t miss the article from [MengTo](https://twitter.com/MengTo): [The Power of Xcode](https://medium.com/learning-xcode-as-a-designer/afcfd3f9128b) 32 | 33 | 3. Objective-C programming language 34 | ----------------------------------- 35 | 36 | - [Categories](https://developer.apple.com/library/mac/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html#//apple_ref/doc/uid/TP40011210-CH6-SW1), [Protocol](https://developer.apple.com/library/mac/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html#//apple_ref/doc/uid/TP40011210-CH11-SW1), [Block](https://developer.apple.com/library/mac/documentation/cocoa/conceptual/Blocks/Articles/00_Introduction.html#//apple_ref/doc/uid/TP40007502), [KVC](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueCoding/Articles/KeyValueCoding.html) / [KVO](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html#//apple_ref/doc/uid/10000177i), [ARC](https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226), [Exception](https://developer.apple.com/library/mac/documentation/cocoa/conceptual/Exceptions/Exceptions.html#//apple_ref/doc/uid/10000012i), [Error](https://developer.apple.com/library/mac/documentation/cocoa/conceptual/ErrorHandlingCocoa/ErrorHandling/ErrorHandling.html#//apple_ref/doc/uid/TP40001806), and [Debugging](https://developer.apple.com/library/ios/technotes/tn2239/_index.html) are very important in Objective-C. 37 | 38 | - Working with mobile device is hard job with limited resources. Apple wrote really good document about [Memory Management](https://developer.apple.com/library/ios/documentation/cocoa/conceptual/MemoryMgmt/Articles/MemoryMgmt.html). [Matt Galloway](https://twitter.com/mattjgalloway) explains very clear from ARC to Memory Management with Exception-Safe Code in [his book](http://www.amazon.com/Effective-Objective-C-2-0-Specific-Development/dp/0321917014)(chapter 5), he also shows how to use Zoombies the debug. 39 | 40 | - [Objective-C runtime](https://developer.apple.com/library/mac/documentation/cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html) makes its [dynamically](http://www.youtube.com/watch?v=vrEoUSuMu_c#t=1015). Apple [opens source](http://www.opensource.apple.com/source/objc4/objc4-437.1/runtime/) it. 41 | 42 | - "Many of the programmatic interfaces of the Cocoa and Cocoa Touch frameworks only make sense only if you are aware of the concepts on which they are based" from Apple. So, pls read [The Concept of Objective-C Programming.](https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010810-CH1-SW1) 43 | 44 | - For updated information from Apple. Pls read the [Objective-C Feature Availability Index](https://developer.apple.com/library/ios/releasenotes/ObjectiveC/ObjCAvailabilityIndex/index.html#//apple_ref/doc/uid/TP40012243). 45 | 46 | ###Foundation: 47 | 48 | - [Peter Steinberger](https://twitter.com/steipete) has a great article about [The Foundation Collection Classes](http://www.objc.io/issue-7/collections.html). 49 | 50 | - [Chris Eidhof](http://twitter.com/chriseidhof) also has a great article about [Value Objects](http://www.objc.io/issue-7/value-objects.html) - usually are models. 51 | 52 | - KVC and KVO from [objc.io](http://www.objc.io/issue-7/key-value-coding-and-observing.html), [NSHipster](http://nshipster.com/key-value-observing/) and [how to build KVC](https://www.mikeash.com/pyblog/friday-qa-2013-02-08-lets-build-key-value-coding.html). 53 | 54 | - Communication between objects is really important to know. [Florian Kugler](https://twitter.com/floriankugler) has the best [review](http://www.objc.io/issue-7/communication-patterns.html) on this topic. 55 | 56 | - [Custom Formatters](http://www.objc.io/issue-7/nsformatter.html), [Linguistic Tagging](http://www.objc.io/issue-7/linguistic-tagging.html) from objC.io are excellent to take a look. 57 | 58 | - [Matt](http://mattt.me/) wrote many topics related to this subject. Read it for your [leisure](http://nshipster.com/). 59 | 60 | 4. Cocoa Design Pattern 61 | ----------------------- 62 | 63 | About Cocoa Design Pattern, I can’t see any better resource than the [book](http://www.amazon.com/Cocoa-Design-Patterns-Erik-Buck/dp/0321535022) from [Erik M. Buck](http://www.informit.com/authors/bio.aspx?a=9DFD42AB-371E-4809-9484-BCEB7E78871C) and Donald A. Yacktman. This book has [many](http://oleb.net/blog/2010/01/book-review-cocoa-design-patterns/) [good](http://cocoasamurai.blogspot.com/2009/10/book-review-cocoa-design-patterns.html) [review](http://www.amazon.com/Cocoa-Design-Patterns-Erik-Buck/product-reviews/0321535022). Beside that, there are some small topics related to this topic(In Junfeng listings) like Introspection, Toll-Free Bridge, Receptionist pattern…. you can read it on [The Concept of Objective-C Programming.](https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010810-CH1-SW1) 64 | 65 | 5. Cocoa Touch 66 | -------------- 67 | ###UIKit: 68 | 69 | - To use essential UIKit control like UITextfield, UIButton…. Pls use [cookbook](http://www.amazon.com/iOS-Programming-Cookbook-Vandad-Nahavandipoor/dp/1449372422)(Chapter 1) and [stackoverflow](http://stackoverflow.com/questions/tagged/ios). It helps you in most cases. 70 | 71 | - Lecture 5,6,7 from [Stanford Course](http://www.stanford.edu/class/cs193p/cgi-bin/drupal/syllabus) is very good for introduction to [UIViewController](https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457-CH1-SW1), UINavigationController, UIView and Gestures. Pls read [Lighter View Controllers](http://www.objc.io/issue-1/lighter-view-controllers.html) from [objC.io](http://www.objc.io/) to write testable and clean view controllers. 72 | 73 | - [Ricki Gregersen](https://twitter.com/rickigregersen) wrote really nice [article](http://www.objc.io/issue-1/containment-view-controller.html) about "[Custom Container View Controller](https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html)". 74 | 75 | - "[Customizing View Controller Transitions](http://blog.bignerdranch.com/3871-golden-opportunity-custom-transitions/)" is new in iOS7. Pls see [WWDC 2013 Session 218](https://developer.apple.com/wwdc/videos/) and [iOS7 Tutorials book chap 16](http://www.raywenderlich.com/store/ios-7-by-tutorials). 76 | 77 | - Using [UITableview](https://itunes.apple.com/us/course/developing-ios-7-apps-for/id733644550)(Lecture 11) is normally not hard but to make it [fast](http://floriankugler.com/blog/2013/5/24/layer-trees-vs-flat-drawing-graphics-performance-across-ios-device-generations) [is](http://www.cocoawithlove.com/2009/09/optimizing-loading-of-very-large-table.html) [hard](http://www.cocoawithlove.com/2009/09/optimizing-loading-of-very-large-table.html). If you want know try to build UITableview from scratch to understand deeply, take a look at this [blog](https://www.mikeash.com/pyblog/friday-qa-2013-02-22-lets-build-uitableview.html). Many people seem to confuse about register a cell and dequeue it. If you have too, pls read this [tip](http://tinyletter.com/iosdev/letters/ios-dev-tip-50-uitableview-registerclass-forcellreuseidentifier): 78 | 79 | - From iOS6, Apple introduces UICollectionView at [WWDC 2012](https://developer.apple.com/videos/wwdc/2012/)(session 205, 219). [Ash Forrow](http://ashfurrow.com/) wrote in details about UICollectionView in his [book](http://www.amazon.com/iOS-UICollectionView-Complete-Mobile-Programming-ebook/dp/B00CFLTD50). It will help you from zero to hero. 80 | 81 | - Apple wrote very good document about [UIScrollView](https://developer.apple.com/library/ios/documentation/windowsviews/conceptual/UIScrollView_pg/Introduction/Introduction.html). [WWDC 2013](https://developer.apple.com/wwdc/videos/)(session 217) gave you the power of scrollView in iOS7. 82 | 83 | ###UIKit Dynamics and Motion Effect: 84 | 85 | - [WWDC 2013](https://developer.apple.com/wwdc/videos/) Session 206 Getting Started with UIKit Dynamics 86 | 87 | - [WWDC 2013](https://developer.apple.com/wwdc/videos/) Session 221 Advanced Techniques with UIKit Dynamics 88 | 89 | - [iOS7 Tutorials](http://www.raywenderlich.com/store/ios-7-by-tutorials) Chapter 2. 90 | 91 | - [Tutorial](http://www.teehanlax.com/blog/introduction-to-uikit-dynamics/) [from](http://www.teehanlax.com/blog/introduction-to-uimotioneffect/) [Ash Forrow](http://ashfurrow.com/). 92 | 93 | ###Push Notification 94 | 95 | - [Push Notification Guide](https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html) from Apple. 96 | 97 | - We use [UrbanAirShip](http://urbanairship.com/) at 2359Media. Pls read [dev guide](http://urbanairship.com/resources/developer-resources). 98 | 99 | - [Pusher](http://pusher.com/) and [Parse.com](https://parse.com) are good to give a try. 100 | 101 | ###MapKit: 102 | 103 | - Simple example from [cookbook](http://www.amazon.com/iOS-Programming-Cookbook-Vandad-Nahavandipoor/dp/1449372422) Chap 17. 104 | 105 | - [WWDC 2012](https://developer.apple.com/videos/wwdc/2012/) (session 300) 106 | 107 | - [WWDC 2013](https://developer.apple.com/wwdc/videos/) (session 309, 304) 108 | 109 | - [iOS6 Tutorials](http://www.raywenderlich.com/store/ios-6-by-tutorials) Chap 18. 110 | 111 | - [iOS7 Tutorials](http://www.raywenderlich.com/store/ios-7-by-tutorials) Chap 23. 112 | 113 | - [Mapkit course](https://www.codeschool.com/courses/ios-operation-mapkit) from [codeschool](https://www.codeschool.com/) is awesome to learn by doing. 114 | 115 | ###Game Center: 116 | 117 | - Check out this [list](https://developer.apple.com/game-center/) from apple. 118 | 119 | - [iOS6 Tutorials](http://www.raywenderlich.com/store/ios-6-by-tutorials) Chap 13, 14. 120 | 121 | - [iOS game by tutorials](http://www.raywenderlich.com/store/ios-games-by-tutorials) book. 122 | 123 | ###Ads 124 | 125 | - [iOS7 Tutorials](http://www.raywenderlich.com/store/ios-7-by-tutorials) Chap 29. 126 | 127 | - [WWDC 2011](https://developer.apple.com/videos/wwdc/2011/): Building iAd Rich Media Ads with iAd Producer 128 | 129 | - [WWDC 2013](https://developer.apple.com/wwdc/videos/) (session 611, 613, 604, 609) 130 | 131 | - [iAd Programming Guide](https://developer.apple.com/library/IOs/documentation/UserExperience/Conceptual/iAd_Guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009881) from Apple. 132 | 133 | - [iAd Implementation Best Practices.](https://developer.apple.com/library/IOs/technotes/tn2264/_index.html#//apple_ref/doc/uid/DTS40011827) 134 | 135 | - [Sample code](https://developer.apple.com/library/IOs/samplecode/iAdSuite/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010198) from Apple. 136 | 137 | ###TextKit 138 | 139 | - [iOS7 Tutorials](http://www.raywenderlich.com/store/ios-7-by-tutorials) Chap 4,5. 140 | 141 | - [WWDC 2013](https://developer.apple.com/wwdc/videos/) (session 210, 223, 220) 142 | 143 | - [Text Programming Guide for iOS](https://developer.apple.com/library/IOs/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009542-CH1-SW1). 144 | 145 | ###AirDrop 146 | 147 | - [iOS7 Tutorials](http://www.raywenderlich.com/store/ios-7-by-tutorials) Chap 20. 148 | 149 | - [Sample Code](https://developer.apple.com/library/IOs/samplecode/sc2273/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013842) from Apple. 150 | 151 | ###Auto Layout 152 | 153 | - Simple Introduction. Pls read [cookbook](http://www.amazon.com/iOS-Programming-Cookbook-Vandad-Nahavandipoor/dp/1449372422) Chap 3. 154 | 155 | - [Auto Layout Guide](https://developer.apple.com/library/ios/documentation/userexperience/conceptual/AutolayoutPG/Introduction/Introduction.html) from Apple. 156 | 157 | - WWDC 2012 (session [202](https://developer.apple.com/videos/wwdc/2012/?id=202), [228](https://developer.apple.com/videos/wwdc/2012/?id=228), [232](https://developer.apple.com/videos/wwdc/2012/?id=232)). 158 | 159 | - [WWDC 2013](https://developer.apple.com/wwdc/videos/) session 406. 160 | 161 | - [In-Depth AutoLayout and UIScrollView](https://developer.apple.com/library/IOs/technotes/tn2154/_index.html#//apple_ref/doc/uid/DTS40013309). 162 | 163 | - [Auto Layout performance](http://floriankugler.com/blog/2013/4/21/auto-layout-performance-on-ios). 164 | 165 | - [Auto Layout Revisited](http://www.adevelopingstory.com/blog/2013/05/auto-layout-for-ios-revisited.html). 166 | 167 | ###UI State Preservation 168 | 169 | - [iOS doc](https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/StatePreservation/StatePreservation.html) from Apple. 170 | 171 | - [Simple introduction](http://ideveloper.co/introduction-to-ui-state-preservation-restoration-in-ios6/) from [Matt Tancock](https://twitter.com/mtancock). 172 | 173 | - [iOS6 Tutorials](http://www.raywenderlich.com/store/ios-6-by-tutorials) Chap 16. 174 | 175 | - WWDC 2012 (session [208](https://developer.apple.com/videos/wwdc/2012/?id=208)). 176 | 177 | - [WWDC 2013](https://developer.apple.com/wwdc/videos/) session 222, 101. 178 | 179 | - Care about screen brightness, pls read this [Q&A](https://developer.apple.com/library/IOs/qa/qa1751/_index.html#//apple_ref/doc/uid/DTS40013391). 180 | 181 | - [Sample](https://developer.apple.com/library/IOs/samplecode/StateRestoreChildViews/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013492) [code](https://developer.apple.com/library/IOs/samplecode/StateRestore/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013190) from Apple. 182 | 183 | ###Multitasking 184 | 185 | - [WWDC 2013](https://developer.apple.com/wwdc/videos/) 204 What’s New with Multitasking. 186 | 187 | - [App States and Multitasking](http://d.pr/YB8m/2rcZW9Tt). 188 | 189 | - [iOS7 Tutorials](http://www.raywenderlich.com/store/ios-7-by-tutorials) Chapter 17-18. 190 | 191 | - [cookbook](http://www.amazon.com/iOS-Programming-Cookbook-Vandad-Nahavandipoor/dp/1449372422) Chap 14 192 | 193 | ###Gesture Recognizers 194 | 195 | - Simple Introduction. Pls read [cookbook](http://www.amazon.com/iOS-Programming-Cookbook-Vandad-Nahavandipoor/dp/1449372422) Chap 8. 196 | 197 | - WWDC 2012 session [233](https://developer.apple.com/videos/wwdc/2012/?id=233). 198 | 199 | - [Sample](https://developer.apple.com/library/IOs/samplecode/Touches/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007435) [code](https://developer.apple.com/library/IOs/samplecode/SimpleGestureRecognizers/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009460) from Apple. 200 | 201 | - [Raywenderlich](http://www.raywenderlich.com/) has a very [nice](http://www.raywenderlich.com/21842/how-to-make-a-gesture-driven-to-do-list-app-part-13) [serial](http://www.raywenderlich.com/21952/how-to-make-a-gesture-driven-to-do-list-app-part-23) [blog](http://www.raywenderlich.com/22174/how-to-make-a-gesture-driven-to-do-list-app-part-33) about this topic. 202 | 203 | ###Standard System View Controllers: 204 | 205 | - Simple example. Pls read [cookbook](http://www.amazon.com/iOS-Programming-Cookbook-Vandad-Nahavandipoor/dp/1449372422) Chap 16. 206 | 207 | - Many stuff like: Display or edit contact information, Create or edit calendar events, Compose an email or SMS message, Open or preview the contents of a file, Take a picture or choose a photo from the user’s photo library, Shoot a video clip, .... Pls google it. You will find the shortest way to do this or recommendation opensource. 208 | 209 | 6. Graphics and Media 210 | --------------------- 211 | 212 | -For simple introduction. Pls read [cookbook](http://www.amazon.com/iOS-Programming-Cookbook-Vandad-Nahavandipoor/dp/1449372422) Chap 17. 213 | 214 | ###Core Graphics 215 | 216 | - [Quartz 2D](https://developer.apple.com/library/ios/documentation/graphicsimaging/conceptual/drawingwithquartz2d/Introduction/Introduction.html) is a part of Core Graphics. 217 | 218 | - [Core](https://developer.apple.com/library/IOs/qa/qa1706/_index.html#//apple_ref/doc/uid/DTS40010278) [Graphics](https://developer.apple.com/library/IOs/qa/qa1708/_index.html#//apple_ref/doc/uid/DTS40010245) [Q&A](https://developer.apple.com/library/IOs/qa/qa1509/_index.html#//apple_ref/doc/uid/DTS10004216) 219 | 220 | - [Sample](https://developer.apple.com/library/IOs/samplecode/QuartzDemo/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007531) [code](https://developer.apple.com/library/IOs/samplecode/ZoomingPDFViewer/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010281) [from](https://developer.apple.com/library/IOs/samplecode/LargeImageDownsizing/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011173) Apple. 221 | 222 | - [Smooth drawing](https://www.altamiracorp.com/blog/employee-posts/capture-a-signature-on-ios) using Quartz 2D 223 | 224 | ###Core Animation 225 | 226 | - [Nick Lockwood](https://twitter.com/nicklockwood) wrote great book "[iOS Core Animation Advanced Techniques](http://www.amazon.com/iOS-Core-Animation-Advanced-Techniques-ebook/dp/B00EHJCORC)". 227 | 228 | - [Core animation Programming](https://developer.apple.com/library/ios/documentation/cocoa/conceptual/coreanimation_guide/introduction/introduction.html) Guide from Apple. 229 | 230 | - [Core animation cookbook](https://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/CoreAnimation_Cookbook/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005406) from Apple. 231 | 232 | ### Core Image 233 | 234 | - [Core Image Programming Guide](https://developer.apple.com/library/IOs/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_intro/ci_intro.html#//apple_ref/doc/uid/TP30001185) from Apple. 235 | 236 | - [iOS6 Tutorials](http://www.raywenderlich.com/store/ios-6-by-tutorials) Chap 17. 237 | 238 | - WWDC 2012 (session [511](https://developer.apple.com/videos/wwdc/2012/?id=511), [510](https://developer.apple.com/videos/wwdc/2012/?id=510)). 239 | 240 | - [WWDC 2013](https://developer.apple.com/wwdc/videos/) session 509). 241 | 242 | - [Sample Code](https://developer.apple.com/library/IOs/samplecode/PocketCoreImage/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011220) from Apple. 243 | 244 | ### OpenGL ES and GLKit 245 | 246 | - There are [many document ](https://developer.apple.com/library/IOs/navigation/#section=Frameworks&topic=OpenGLES)from Apple. 247 | 248 | - [Erik M. Buck](http://www.informit.com/authors/bio.aspx?a=9DFD42AB-371E-4809-9484-BCEB7E78871C)(author of [Cocoa Design Pattern book](http://www.amazon.com/Cocoa-Design-Patterns-Erik-Buck/dp/0321535022)) wrote great [book](http://www.amazon.com/Learning-OpenGL-iOS-Hands-Programming/dp/0321741838) about OpenGL ES. 249 | 250 | ###Core Text 251 | 252 | - [Core Text](http://www.raywenderlich.com/4147/core-text-tutorial-for-ios-making-a-magazine-app) Tutorial. 253 | 254 | - [Core Text Programming Guide](https://developer.apple.com/library/IOs/documentation/StringsTextFonts/Conceptual/CoreText_Programming/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005533) from Apple. 255 | 256 | - [Sample](https://developer.apple.com/library/IOs/samplecode/DownloadFont/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013404) [code](https://developer.apple.com/library/IOs/samplecode/CoreTextPageViewer/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010699) from Apple. 257 | 258 | - WWDC 2012 (Session [215](https://developer.apple.com/videos/wwdc/2012/?id=215)). 259 | 260 | ###Image I/O 261 | 262 | -[ Image I/O Programming Guide](https://developer.apple.com/library/IOs/documentation/GraphicsImaging/Conceptual/ImageIOGuide/imageio_intro/ikpg_intro.html#//apple_ref/doc/uid/TP40005462) from Apple. 263 | 264 | - [Technical Q&As](https://developer.apple.com/library/IOs/qa/qa1654/_index.html#//apple_ref/doc/uid/DTS40010280). 265 | 266 | ###AssetsLibrary 267 | 268 | - [Sample](https://developer.apple.com/library/IOs/samplecode/MyImagePicker/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010135) [Code](https://developer.apple.com/library/IOs/samplecode/PhotosByLocation/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010136) from Apple. 269 | 270 | ### Media Player 271 | 272 | - [iPod Library Access Programming Guide](https://developer.apple.com/library/IOs/documentation/Audio/Conceptual/iPodLibraryAccess_Guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008765) from Apple. 273 | 274 | - [Technical](https://developer.apple.com/library/IOs/qa/qa1656/_index.html#//apple_ref/doc/uid/DTS40009076) [Q&As](https://www.google.com/url?q=https%3A%2F%2Fdeveloper.apple.com%2Flibrary%2FIOs%2Fqa%2Fqa1240%2F_index.html%23%2F%2Fapple_ref%2Fdoc%2Fuid%2FDTS40010190&sa=D&sntz=1&usg=AFQjCNFuFTdBHlCNTXHQvnnuoIKIhIbO4w) from [Apple](https://developer.apple.com/library/IOs/qa/qa1661/_index.html#//apple_ref/doc/uid/DTS40009204). 275 | 276 | - [Technical note](https://developer.apple.com/library/IOs/technotes/tn2266/_index.html#//apple_ref/doc/uid/DTS40009989). 277 | 278 | - [Sample](https://developer.apple.com/library/IOs/samplecode/MoviePlayer_iPhone/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007798) [code](https://developer.apple.com/library/IOs/samplecode/AddMusic/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008845) from Apple. 279 | 280 | ###AVFoundation 281 | 282 | - [AVFoundation Programming Guide](https://developer.apple.com/library/IOs/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/00_Introduction.html#//apple_ref/doc/uid/TP40010188) from Apple. 283 | 284 | - [iOS7 Tutorials](http://www.raywenderlich.com/store/ios-7-by-tutorials) Chap 22. 285 | 286 | - There are the [long listings](https://developer.apple.com/library/IOs/navigation/#section=Frameworks&topic=AVFoundation) sample code, technical notes.. from Apple 287 | 288 | ###OpenAL 289 | 290 | - [Guide](http://ohno789.blogspot.com/2013/08/openal-on-ios.html) 291 | 292 | - [Sample code](https://developer.apple.com/library/IOs/samplecode/oalTouch/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007769) from Apple. 293 | 294 | ###Core Audio 295 | 296 | - [Core Audio Overview](https://developer.apple.com/library/IOs/documentation/MusicAudio/Conceptual/CoreAudioOverview/Introduction/Introduction.html#//apple_ref/doc/uid/TP40003577) 297 | 298 | - [Sample code, technical notes](https://developer.apple.com/library/IOs/navigation/#section=Frameworks&topic=CoreAudio)…. from apple. 299 | 300 | ###Core Video 301 | 302 | ###AirPlay 303 | 304 | - [AirPlay Overview](https://developer.apple.com/library/IOs/documentation/AudioVideo/Conceptual/AirPlayGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011045). 305 | 306 | - [Sample code](https://developer.apple.com/library/IOs/samplecode/GLAirplay/Introduction/Intro.html#//apple_ref/doc/uid/DTS40013259) and [Technical Q&As](https://developer.apple.com/library/IOs/qa/qa1803/_index.html#//apple_ref/doc/uid/DTS40013769). 307 | 308 | - WWDC 2011: [AirPlay and External Displays in iOS apps.](https://developer.apple.com/videos/wwdc/2011/includes/airplay-and-external-displays-in-ios-apps.html#airplay-and-external-displays-in-ios-apps) 309 | 310 | 7. Core Services 311 | ---------------- 312 | 313 | ###CoreData 314 | 315 | - Apple wrote great article about [CoreData](https://developer.apple.com/library/IOs/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html#//apple_ref/doc/uid/TP40001075). 316 | 317 | - For simple introduction. Pls read [cookbook](http://www.amazon.com/iOS-Programming-Cookbook-Vandad-Nahavandipoor/dp/1449372422) Chap 15. 318 | 319 | - There are [some](http://www.amazon.com/Pro-Core-Data-Second-Edition/dp/1430236566) [books](http://pragprog.com/book/mzcd2/core-data) good to read. 320 | 321 | - Sample code, videos, Q&As… from [Apple](https://developer.apple.com/library/IOs/navigation/#section=Frameworks&topic=CoreData). 322 | 323 | - [Overview CoreData in detail](http://nshipster.com/core-data-libraries-and-utilities/). 324 | 325 | - objC.io also wrote great article in [CoreData](http://www.objc.io/issue-4) issue. 326 | 327 | ###Grand Central Dispatch(GCD) 328 | 329 | - [cookbook](http://www.amazon.com/iOS-Programming-Cookbook-Vandad-Nahavandipoor/dp/1449372422)(Chap 6) did great job to introduction to concurrency programming. 330 | 331 | - [Matt Galloway](https://twitter.com/mattjgalloway) [book](http://www.amazon.com/Effective-Objective-C-2-0-Specific-Development/dp/0321917014)(Chap 6) 332 | 333 | - Apple wrote very nice [Concurrency Programming Guide](https://developer.apple.com/library/ios/DOCUMENTATION/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html). 334 | 335 | - objC.io has an i[ssue](http://www.objc.io/issue-2) about this topic. It’s high level. 336 | 337 | ###In-App Purchase 338 | 339 | - [In-App Purchase Programming Guide](https://developer.apple.com/library/IOs/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction.html#//apple_ref/doc/uid/TP40008267) from Apple. 340 | 341 | - [Videos, sample code, technical notes](https://developer.apple.com/library/IOs/navigation/#section=Frameworks&topic=StoreKit) from Apple. 342 | 343 | - [iOS6 Tutorials](http://www.raywenderlich.com/store/ios-6-by-tutorials) Chap 9,10. 344 | 345 | ###JavaScriptCore 346 | 347 | - [WWDC 2013](https://developer.apple.com/wwdc/videos/?id=615) session 615 348 | 349 | - Before iOS7, did the [communication between Javascript and objective-C](https://github.com/phatle/HybridKit-iOS) is very [hard job.](https://github.com/phatle/oncourse) 350 | 351 | ###P2P Services 352 | 353 | - [iOS7 Tutorials](http://www.raywenderlich.com/store/ios-7-by-tutorials) Chap 21. 354 | 355 | - WWDC 2013 [Nearby Networking with Multipeer Connectivity](https://developer.apple.com/wwdc/videos/?id=708) 356 | 357 | - [Best practice and limitations ](http://www.slideshare.net/waynehartman/multipeer-connectivity) 358 | 359 | ###iCloud Storage 360 | 361 | - WWDC 2012 (Session [209](https://developer.apple.com/videos/wwdc/2012/?include=209#209), [227](https://developer.apple.com/videos/wwdc/2012/?include=227#227), [224](https://developer.apple.com/videos/wwdc/2012/?include=224#224), [218](https://developer.apple.com/videos/wwdc/2012/?include=218#218), [237](https://developer.apple.com/videos/wwdc/2012/?include=237#237)) 362 | 363 | - WWDC 2013 Session [207](https://developer.apple.com/videos/wwdc/2013/?id=207). 364 | 365 | ###Core Location 366 | 367 | - [cookbook](http://www.amazon.com/iOS-Programming-Cookbook-Vandad-Nahavandipoor/dp/1449372422)(Chap 7) 368 | 369 | - [iOS7 Tutorials](http://www.raywenderlich.com/store/ios-7-by-tutorials) Chap 24 370 | 371 | - WWDC 2012 (Session [303](https://developer.apple.com/videos/wwdc/2012/?id=303)) 372 | 373 | - WWDC 2013 Session [307](https://developer.apple.com/wwdc/videos/?id=307) 374 | 375 | - [Sample](https://developer.apple.com/library/IOs/samplecode/GeocoderDemo/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011097) [code](https://developer.apple.com/library/IOs/samplecode/LocateMe/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007801) from [Apple](https://developer.apple.com/library/IOs/samplecode/Teslameter/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008931). 376 | 377 | ###Core Motion 378 | 379 | - WWDC 2012 [Understanding Core Motion](https://developer.apple.com/videos/wwdc/2012/?id=524). 380 | 381 | - [Sample ](https://developer.apple.com/library/IOs/samplecode/pARk/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011083)[code](https://developer.apple.com/library/IOs/samplecode/MotionGraphs/Introduction/Intro.html#//apple_ref/doc/uid/DTS40012333) from Apple. 382 | 383 | ###EventKit 384 | 385 | - [Calendar and Reminders Programming Guide](https://developer.apple.com/library/IOs/documentation/DataManagement/Conceptual/EventKitProgGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009765) from Apple. 386 | 387 | - [iOS6 Tutorials](http://www.raywenderlich.com/store/ios-6-by-tutorials) Chap 19. 388 | 389 | - WWDC 2012 session [304](https://developer.apple.com/videos/wwdc/2012/?id=304). 390 | 391 | - [Sample code](https://developer.apple.com/library/IOs/samplecode/SimpleEKDemo/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010160) from Apple. 392 | 393 | ###Newsstand 394 | 395 | - WWDC 2012 session [307](https://developer.apple.com/videos/wwdc/2012/?id=307). 396 | 397 | - [iOS5 Tutorials](http://www.raywenderlich.com/store/ios-5-by-tutorials) Chap 13, 14. 398 | 399 | ###Passbook 400 | 401 | -[ Passbook Programming Guide](https://developer.apple.com/library/IOs/documentation/UserExperience/Conceptual/PassKit_PG/Chapters/Introduction.html#//apple_ref/doc/uid/TP40012195) from Apple. 402 | 403 | - [iOS6 Tutorials](http://www.raywenderlich.com/store/ios-6-by-tutorials) Chap 7,8. 404 | 405 | - [iOS7 Tutorials](http://www.raywenderlich.com/store/ios-7-by-tutorials) Chap 27, 28. 406 | 407 | - WWDC 2013 session [301](https://developer.apple.com/videos/wwdc/2012/?id=301), [309](https://developer.apple.com/videos/wwdc/2012/?id=309). 408 | 409 | - WWDC 2013 session [302](https://developer.apple.com/wwdc/videos/?id=302), [303](https://developer.apple.com/wwdc/videos/?id=303). 410 | 411 | - [Passkit FAQ](https://developer.apple.com/library/IOs/technotes/tn2302/_index.html#//apple_ref/doc/uid/DTS40013009). 412 | 413 | 8. CoreOS 414 | --------- 415 | 416 | - [General Tecnology Overview](https://developer.apple.com/library/ios/documentation/miscellaneous/conceptual/iphoneostechoverview/coreoslayer/coreoslayer.html) 417 | 418 | --------------------------------------------------------------------------------