├── 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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
210 |
211 | **MyAppStaging** Scheme uses **Debug Staging** and **Release
212 | Staging**.
213 |
214 | 
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 |
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 |
--------------------------------------------------------------------------------