Building Faster in Xcode
|
|
- Donna Walsh
- 5 years ago
- Views:
Transcription
1 #WWDC18 Building Faster in Xcode Session 408 David Owens, Xcode Engineer Jordan Rose, Swift Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.
2 Building Faster in Xcode
3 Building Faster in Xcode Increasing Build Efficiency Reducing the Work on Rebuilds
4 Building Faster in Xcode Increasing Build Efficiency Reducing the Work on Rebuilds Parallelizing your build process Declaring script inputs and outputs Measuring your build time
5 Building Faster in Xcode Increasing Build Efficiency Reducing the Work on Rebuilds Parallelizing your build process Declaring script inputs and outputs Measuring your build time Understanding dependencies in Swift Dealing with complex expressions Limiting your Objective-C/Swift interface
6 Parallelizing Your Build Increasing build efficiency
7 Xcode s Targets and Dependencies
8 Xcode s Targets and Dependencies Target specifies a product to build ios App Framework Game Unit Tests Framework
9 Xcode s Targets and Dependencies Target specifies a product to build ios App Framework Game Unit Tests Target dependency requires another target Explicit via Target Dependencies Implicit via Link Binary with Libraries Framework
10 Game Dependency Graph Tests Game Shaders Physics Utilities
11 Game Dependency Graph Tests Game List of all targets to build Shaders Physics Utilities
12 Game Dependency Graph Tests Game List of all targets to build Dependency between targets Shaders Physics Utilities
13 Game Dependency Graph List of all targets to build Dependency between targets Build order can be derived Physics Utilities Shaders Game Tests
14 Serialized Build Timeline Physics Utilities Shaders Game Tests
15 Serialized Build Timeline Physics Utilities Shaders Game Tests
16 Parallelized Build Timeline
17 Parallelized Build Timeline
18 Parallelized Build Timeline Amount of work did not change
19 Parallelized Build Timeline Amount of work did not change Time to build decreased
20 Parallelized Build Timeline Time savings Amount of work did not change Time to build decreased
21 Parallelized Build Timeline Time savings Amount of work did not change Time to build decreased Increased hardware utilization
22 Extreme Parallelization
23 Extreme Parallelization
24 How do we get there?
25
26
27
28 Project Configuration Tests Game Shaders Physics Utilities
29 Project Configuration Tests Game Shaders Physics Utilities
30 Project Configuration Tests Game Shaders Physics Utilities
31 Game Target Dependencies Game
32 Game Target Dependencies Game Physics Utilities
33 Game Target Dependencies Game Physics Utilities
34 Game Target Dependencies Game Shaders Physics Utilities
35 Game Target Dependencies Game Shaders Physics Utilities
36 Shaders Target Dependencies Shaders Utilities
37 Utilities Target Dependencies Physics Utilities
38 Tests Target Dependencies Tests Game Shaders Utilities
39 Examine Tests Dependencies Tests Game Shaders Utilities
40 Examine Tests Dependencies UI Tests (Game) Tests (Shaders) Tests (Utilities) Game Shaders Utilities
41 Examine Tests Dependencies UI Tests (Game) Tests (Shaders) Tests (Utilities) Game Shaders Utilities
42 Examine Tests Dependencies UI Tests (Game) Tests (Shaders) Tests (Utilities) Game Shaders Utilities
43 Reduce Dependency Exposure Game Shaders Physics Utilities
44 Reduce Dependency Exposure Game Shaders Physics Utilities
45 Reduce Dependency Exposure Game Shaders Physics Code Gen Utilities
46 Reduce Dependency Exposure Game Shaders Physics Code Gen Utilities
47 Examine Unused Dependencies Physics Utilities
48 Examine Unused Dependencies Physics Utilities
49 Examine Unused Dependencies Physics Utilities
50 Target Build Process
51 Parallelized Target Build Process NEW
52 Parallelized Target Build Process NEW
53 Parallelized Target Build Process NEW Compile sources can start earlier
54 Parallelized Target Build Process NEW Compile sources can start earlier Waits only for what it needs
55 Parallelized Target Build Process NEW Compile sources can start earlier Waits only for what it needs Must wait for Run Script phases
56 Run Script Phases Reducing the work on rebuilds
57 Allows you to customize your build process for your exact needs.
58
59
60
61
62
63
64 File Lists # assets.xcfilelist # Game # Asset masters $(SRCROOT)/Assets/game.psd $(SRCROOT)/Assets/player.psd $(SRCROOT)/Assets/hud.psd
65 File Lists Newline separated # assets.xcfilelist # Game # Asset masters $(SRCROOT)/Assets/game.psd $(SRCROOT)/Assets/player.psd $(SRCROOT)/Assets/hud.psd
66 File Lists Newline separated # assets.xcfilelist # Game Support for build setting variables # Asset masters $(SRCROOT)/Assets/game.psd $(SRCROOT)/Assets/player.psd $(SRCROOT)/Assets/hud.psd
67 File Lists Newline separated # assets.xcfilelist # Game Support for build setting variables # Asset masters Cannot be generated during the build $(SRCROOT)/Assets/game.psd $(SRCROOT)/Assets/player.psd $(SRCROOT)/Assets/hud.psd
68
69
70
71
72 When the Run Script Phase is Run No input files declared Input files changed Output files missing
73 Documentation NEW
74 Dependency Cycle Detection NEW
75 More on Dependency Cycles NEW
76 More on Dependency Cycles NEW
77 Measuring Build Time Increasing build efficiency
78
79
80 Build Log Filters
81 Build Log Filters
82 Build With Timing Summary NEW
83
84
85
86
87 $ xcodebuild -showbuildtimingsummary Build Timing Summary CompileSwiftSources (1 task) seconds PhaseScriptExecution (1 task) seconds CompileAssetCatalog (1 task) seconds CompileStoryboard (1 task) seconds CompileMetalFile (5 tasks) seconds CopySwiftLibs (1 task) seconds Ld (2 tasks) seconds CodeSign (3 tasks) seconds CompileC (1 task) seconds MetalLink (2 tasks) seconds Ditto (4 tasks) seconds LinkStoryboards (1 task) seconds
88 $ xcodebuild -showbuildtimingsummary Build Timing Summary CompileSwiftSources (1 task) seconds PhaseScriptExecution (1 task) seconds CompileAssetCatalog (1 task) seconds CompileStoryboard (1 task) seconds CompileMetalFile (5 tasks) seconds CopySwiftLibs (1 task) seconds Ld (2 tasks) seconds CodeSign (3 tasks) seconds CompileC (1 task) seconds MetalLink (2 tasks) seconds Ditto (4 tasks) seconds LinkStoryboards (1 task) seconds
89 Source-Level Improvements Jordan Rose, Swift Engineer
90 Remove this build time workaround Reducing the work on rebuilds
91 Turn off Whole Module Mode For Debug Builds
92 Turn off Whole Module Mode For Debug Builds
93 Turn off Whole Module Mode For Debug Builds What s New in Swift WWDC 2018 Behind the Scenes of the Xcode Build Process Hall 2 Friday 2:00PM
94 Increasing Build Efficiency Reducing the Work on Rebuilds Parallelizing your build process Declaring script inputs and outputs Measuring your build time Understanding dependencies in Swift Dealing with complex expressions Limiting your Objective-C/Swift interface
95 Dealing with complex expressions Understanding dependencies in Swift Limiting your Objective-C/Swift interface
96 When a build takes a long time, there is often a key piece of information you can add to make it better.
97 Dealing with Complex Expressions Increasing build efficiency
98 Use Explicit Types for Complex Properties struct ContrivedExample { var bignumber = [4, 3, 2].reduce(1) { sofar, next in pow(next, sofar) }. }.
99 Use Explicit Types for Complex Properties struct ContrivedExample { var bignumber: Double = [4, 3, 2].reduce(1) { sofar, next in pow(next, sofar) }. }.
100 Provide Types in Complex Closures func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) {. sofar, next in }. }.
101 Provide Types in Complex Closures func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) {. sofar, next in sofar!= nil && next!= nil? sofar! + next! : (sofar!= nil? sofar! : (next!= nil? next! : nil)) }. }.
102 Provide Types in Complex Closures func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) {. sofar, next in }. sofar!= nil && next!= nil? sofar! + next! : (sofar!= nil? sofar! : (next!= nil? next! : nil)) }. error: the compiler is unable to type-check this expression in reasonable time
103 Provide Types in Complex Closures func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) {. sofar, next in sofar!= nil && next!= nil? sofar! + next! : (sofar!= nil? sofar! : (next!= nil? next! : nil)) }. }.
104 Provide Types in Complex Closures func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) { ( sofar : Int?, next : Int?) -> Int? in sofar!= nil && next!= nil? sofar! + next! : (sofar!= nil? sofar! : (next!= nil? next! : nil)) }. }.
105 Provide Types in Complex Closures func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) { sofar, next in sofar!= nil && next!= nil? sofar! + next! : (sofar!= nil? sofar! : (next!= nil? next! : nil)) }. }.
106 Provide Types in Complex Closures func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) { sofar, next in sofar!= nil && next!= nil? sofar! + next! : (sofar!= nil? sofar! : (next!= nil? next! : nil)) }. }.
107 Provide Types in Complex Closures func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) { sofar, next in sofar!= nil && next!= nil? sofar! + next! : (sofar!= nil? sofar! : (next!= nil? next! : nil)) }. }.
108 Provide Types in Complex Closures func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) { sofar, next in sofar!= nil && next!= nil? sofar! + next! : (sofar!= nil? sofar! : (next!= nil? next! : nil)) }. }.
109 Break Apart Complex Expressions func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) { sofar, next in } }
110 Break Apart Complex Expressions func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) { sofar, next in if sofar!= nil && next!= nil { return sofar! + next! } if sofar!= nil { return sofar! } if next!= nil { return next! } return nil } }
111 Break Apart Complex Expressions func sumnonoptional(i: Int?, j: Int?, k: Int?) -> Int? { return [i, j, k].reduce(0) { sofar, next in if let sofar = sofar { if let next = next { return sofar + next } return sofar } else { return next } } }
112 Use AnyObject Methods and Properties Sparingly weak var delegate: AnyObject? func reportsuccess() { delegate?.myoperationdidsucceed(self) }.
113 Use AnyObject Methods and Properties Sparingly weak var delegate: AnyObject? func reportsuccess() { delegate?.myoperationdidsucceed(self) }.
114 Use AnyObject Methods and Properties Sparingly weak var delegate: AnyObject? func reportsuccess() { delegate?.myoperationdidsucceed(self) }.
115 Use AnyObject Methods and Properties Sparingly weak var delegate: AnyObject? func reportsuccess() { delegate?.myoperationdidsucceed(self) }.?
116 Use AnyObject Methods and Properties Sparingly Define a protocol instead weak var delegate: AnyObject? func reportsuccess() { delegate?.myoperationdidsucceed(self) }. protocol MyOperationDelegate: class { } func myoperationdidsucceed(_ operation: MyOperation)
117 Use AnyObject Methods and Properties Sparingly Define a protocol instead weak var delegate: MyOperationDelegate? func reportsuccess() { delegate?.myoperationdidsucceed(self) }. protocol MyOperationDelegate: class { } func myoperationdidsucceed(_ operation: MyOperation)
118 Use AnyObject Methods and Properties Sparingly Define a protocol instead weak var delegate: MyOperationDelegate? func reportsuccess() { delegate?.myoperationdidsucceed(self) }. protocol MyOperationDelegate: class { } func myoperationdidsucceed(_ operation: MyOperation)
119 Understanding Dependencies in Swift Reducing the work on rebuilds
120 Incremental Builds Are File-Based struct Point { } var x, y: Double
121 Incremental Builds Are File-Based struct Point { let point = Point(x: 3.0, y: 4.0) var x, y: Double } let distance = sqrt(point.x * point.x + point.y * point.y)
122 Incremental Builds Are File-Based struct Point { let point = Point(x: 3.0, y: 4.0) var x, y: Double } let distance = sqrt(point.x * point.x + point.y * point.y)
123 Incremental Builds Are File-Based struct Point { let point = Point(x: 3.0, y: 4.0) var x, y: Double init(x: Double, y: Double) { assert(x.isnormal) assert(y.isnormal) let distance = sqrt(point.x * point.x + point.y * point.y) self.x = x self.y = y } }
124 Incremental Builds Are File-Based struct Point { let point = Point(x: 3.0, y: 4.0) var x, y: Double init(x: Double, y: Double) { assert(x.isnormal) assert(y.isnormal) let distance = sqrt(point.x * point.x + point.y * point.y) self.x = x self.y = y } }
125 Incremental Builds Are File-Based Changes in function bodies do not affect other files struct Point { let point = Point(x: 3.0, y: 4.0) var x, y: Double init(x: Double, y: Double) { assert(x.isfinite) assert(y.isfinite) let distance = sqrt(point.x * point.x + point.y * point.y) self.x = x self.y = y } }
126 Incremental Builds Are File-Based Changes in function bodies do not affect other files struct Point { let point = Point(x: 3.0, y: 4.0) var x, y: Double init(x: Double, y: Double) { assert(x.isfinite) assert(y.isfinite) let distance = sqrt(point.x * point.x + point.y * point.y) self.x = x self.y = y } }
127 Incremental Builds Are File-Based Unrelated changes outside function bodies can still result in rebuilding struct Point { let point = Point(x: 3.0, y: 4.0) var x, y: Double init(x: Double, y: Double) { assert(x.isfinite) assert(y.isfinite) let distance = sqrt(point.x * point.x + point.y * point.y) self.x = x self.y = y } } struct PathSegment { var start, end: Point }
128 Incremental Builds Are File-Based Unrelated changes outside function bodies can still result in rebuilding struct Point { let point = Point(x: 3.0, y: 4.0) var x, y: Double init(x: Double, y: Double) { assert(x.isfinite) assert(y.isfinite) let distance = sqrt(point.x * point.x + point.y * point.y) self.x = x self.y = y } } struct PathSegment { var start, end: Point }
129 Dependencies Within a Target Are Per-File GameView.swift SyncManager.swift MenuController.swift GameAI.swift PlayerState.swift
130 Dependencies Within a Target Are Per-File GameView.swift SyncManager.swift MenuController.swift GameAI.swift PlayerState.swift
131 Dependencies Within a Target Are Per-File GameView.swift SyncManager.swift MenuController.swift GameAI.swift PlayerState.swift
132 Dependencies Within a Target Are Per-File GameView.swift SyncManager.swift MenuController.swift GameAI.swift PlayerState.swift
133 Dependencies Within a Target Are Per-File GameView.swift SyncManager.swift MenuController.swift GameAI.swift PlayerState.swift
134 Cross-Target Dependencies Are Coarse-Grained GameView.swift SyncManager.swift MenuController.swift GameAI.swift PlayerState.swift
135 Cross-Target Dependencies Are Coarse-Grained GameView.swift SyncManager.swift MenuController.swift GameAI.swift PlayerState.swift
136 Cross-Target Dependencies Are Coarse-Grained GameView.swift SyncManager.swift MenuController.swift GameAI.swift PlayerState.swift
137 Cross-Target Dependencies Are Coarse-Grained GameView.swift SyncManager.swift MenuController.swift GameAI.swift PlayerState.swift
138 Cross-Target Dependencies Are Coarse-Grained GameView.swift SyncManager.swift MenuController.swift GameAI.swift PlayerState.swift
139 Swift Dependency Rules
140 Swift Dependency Rules Compiler must be conservative
141 Swift Dependency Rules Compiler must be conservative Changes in function bodies do not affect the file s interface
142 Swift Dependency Rules Compiler must be conservative Changes in function bodies do not affect the file s interface Dependencies within a module are per-file
143 Swift Dependency Rules Compiler must be conservative Changes in function bodies do not affect the file s interface Dependencies within a module are per-file Dependencies across targets are for the whole target
144 Limiting Your Objective-C/Swift Interface Reducing the work on rebuilds
145 Mixed-Source App Targets
146 Mixed-Source App Targets
147 Mixed-Source App Targets Bridging header
148 Mixed-Source App Targets Bridging header
149 Mixed-Source App Targets Bridging header Generated header
150 Mixed-Source App Targets Bridging header Generated header
151 Mixed-Source App Targets Bridging header Generated header
152 Mixed-Source App Targets Bridging header Generated header
153 Mixed-Source App Targets Bridging header Generated header
154 Keep Your Generated Header Minimal Use private when possible class MainViewController: UIViewController var statusfield: func close(_ sender: Any?) { } }
155 Keep Your Generated Header Minimal Use private when possible class MainViewController: UIViewController var statusfield: func close(_ sender: Any?) { } IBOutlet UITextField *statusfield; - (IBAction)close:(id)sender;
156 Keep Your Generated Header Minimal Use private when possible class MainViewController: UIViewController private var statusfield: private func close(_ sender: Any?) { } IBOutlet UITextField *statusfield; - (IBAction)close:(id)sender;.
157 Keep Your Generated Header Minimal Use private when possible class MainViewController: UIViewController private var statusfield: private func close(_ sender: Any?) { } }
158 Keep Your Generated Header Minimal Use private when possible class MainViewController: UIViewController private var statusfield: private func close(_ sender: Any?) { } }
159 Keep Your Generated Header Minimal Use private when func keyboardwillshow(_: Notification) { }. // Important keyboard setup code here. // NotificationCenter.default.addObserver(self, selector: #selector(keyboardwillshow(_:)), )
160 Keep Your Generated Header Minimal Use private when private func keyboardwillshow(_: Notification) { }. // Important keyboard setup code here. // NotificationCenter.default.addObserver(self, selector: #selector(keyboardwillshow(_:)), )
161 Keep Your Generated Header Minimal Use block-based APIs self.observer = NotificationCenter.default.addObserver( forname: UIKeyboardWillShow, object: nil, queue: nil) { // Important keyboard setup code here. }.
162 Keep Your Generated Header Minimal Migrate to Swift 4
163 Keep Your Generated Header Minimal Turn off Swift Inference
164 Keep Your Generated Header Minimal Turn off Swift Inference
165 Keep Your Bridging Header Minimal // Use this file to import your target's public headers that // you would like to expose to Swift. MyApp-Bridging-Header.h #import "MyBackendAPI.h" #import "MyViewController.h" #import "MyUserDefaultsHelpers.h"
166 Keep Your Bridging Header Minimal // Use this file to import your target's public headers that // you would like to expose to Swift. MyApp-Bridging-Header.h #import "MyBackendAPI.h" #import "MyViewController.h" #import "MyUserDefaultsHelpers.h"
167 Keep Your Bridging Header Minimal #import <UIKit/UIKit.h> #import "MyNetworkManager.h" MyViewController: (nonnull) MyNetworkManager *networkmanager;
168 Keep Your Bridging Header Minimal #import <UIKit/UIKit.h> #import "MyNetworkManager.h" MyViewController: (nonnull) MyNetworkManager *networkmanager;
169 Keep Your Bridging Header Minimal #import <UIKit/UIKit.h> #import "MyNetworkManager.h" MyViewController: (nonnull) MyNetworkManager *networkmanager;
170 Keep Your Bridging Header Minimal Use categories to break up your interface #import <UIKit/UIKit.h> #import MyViewController: UIViewController (nonnull) MyNetworkManager *networkmanager;
171 Keep Your Bridging Header Minimal Use categories to break up your interface #import <UIKit/UIKit.h> #import MyViewController: UIViewController (nonnull) MyNetworkManager *networkmanager; #import MyViewController MyViewController+Internal.h
172 Keep Your Bridging Header Minimal Use categories to break up your interface #import <UIKit/UIKit.h> #import MyViewController: UIViewController (nonnull) MyNetworkManager *networkmanager; #import MyViewController MyViewController+Internal.h
173 Keep Your Bridging Header Minimal Use categories to break up your interface #import MyViewController: UIViewController // #import "MyNetworkManager.h" #import MyViewController (nonnull) MyNetworkManager *networkmanager;
174 Keep Your Bridging Header Minimal Use categories to break up your interface #import MyViewController: UIViewController // #import "MyNetworkManager.h" #import MyViewController (nonnull) MyNetworkManager *networkmanager;
175 Less Content, Fewer Changes, Faster Builds Bridging header Generated header
176 Less Content, Fewer Changes, Faster Builds Bridging header Generated header
177 Less Content, Fewer Changes, Faster Builds Bridging header Generated header
178 Summary
179 Building Faster in Xcode Increasing Build Efficiency Reducing the Work on Rebuilds Parallelizing your build process Declaring script inputs and outputs Measuring your build time Understanding dependencies in Swift Dealing with complex expressions Limiting your Objective-C/Swift interface
180 More Information Building Your App with Xcode Technology Lab 8 Thursday 12:00PM Building Your App with Xcode Technology Lab 8 Friday 3:00PM
181
What s New in Xcode App Signing
Developer Tools #WWDC16 What s New in Xcode App Signing Developing and distributing Session 401 Joshua Pennington Tools Engineering Manager Itai Rom Tools Engineer 2016 Apple Inc. All rights reserved.
More informationImplementing UI Designs in Interface Builder
Developer Tools #WWDC15 Implementing UI Designs in Interface Builder Session 407 Kevin Cathey Interface Builder Engineer Tony Ricciardi Interface Builder Engineer 2015 Apple Inc. All rights reserved. Redistribution
More informationios Application Development Lecture 2: Seminar and Unit 1
ios Application Development Lecture 2: Seminar and Unit 1 Dr. Simon Völker & Philipp Wacker Media Computing Group RWTH Aachen University Winter Semester 2017/2018 http://hci.rwth-aachen.de/ios Swift 18
More informationITP 342 Mobile App Dev. Connections
ITP 342 Mobile App Dev Connections User Interface Interactions First project displayed information to the user, but there was no interaction. We want the users of our app to touch UI components such as
More informationIntroducing Password AutoFill for Apps
Session App Frameworks #WWDC17 Introducing Password AutoFill for Apps Reducing friction for your users 206 Ricky Mondello, ios Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display
More informationThread Sanitizer and Static Analysis
Developer Tools #WWDC16 Thread Sanitizer and Static Analysis Help with finding bugs in your code Session 412 Anna Zaks Manager, Program Analysis Team Devin Coughlin Engineer, Program Analysis Team 2016
More informationExtending Your Apps with SiriKit
App Frameworks #WWDC16 Extending Your Apps with SiriKit Session 225 Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering Scott Andrus SiriKit Engineering 2016 Apple Inc. All rights reserved.
More informationWhat s New in Testing
#WWDC18 What s New in Testing Session 403 Honza Dvorsky, Xcode Engineer Ethan Vaughan, Xcode Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written
More informationOptimizing Swift Performance Session 409
Developer Tools #WWDC15 Optimizing Swift Performance Session 409 Nadav Rotem Manager, Swift Performance Team Michael Gottesman Engineer, Swift Performance Team Joe Grzywacz Engineer, Performance Tools
More informationUsing and Extending the Xcode Source Editor
Developer Tools #WWDC16 Using and Extending the Xcode Source Editor Session 414 Mike Swingler Xcode Infrastructure and Editors Chris Hanson Xcode Infrastructure and Editors 2016 Apple Inc. All rights reserved.
More informationEnabling Your App for CarPlay
Session App Frameworks #WWDC17 Enabling Your App for CarPlay 719 Albert Wan, CarPlay Engineering 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationMastering UIKit on tvos
App Frameworks #WWDC16 Mastering UIKit on tvos Session 210 Justin Voss UIKit Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from
More informationMastering Drag and Drop
Session App Frameworks #WWDC17 Mastering Drag and Drop 213 Tom Adriaenssen, UIKit Wenson Hsieh, WebKit Robb Böhnke, UIKit 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationEnhancing your apps for the next dimension of touch
App Frameworks #WWDC16 A Peek at 3D Touch Enhancing your apps for the next dimension of touch Session 228 Tyler Fox UIKit Frameworks Engineer Peter Hajas UIKit Frameworks Engineer 2016 Apple Inc. All rights
More informationFinding Bugs Using Xcode Runtime Tools
Session Developer Tools #WWDC17 Finding Bugs Using Xcode Runtime Tools 406 Kuba Mracek, Program Analysis Engineer Vedant Kumar, Compiler Engineer 2017 Apple Inc. All rights reserved. Redistribution or
More informationlecture 11 Advanced Swift
lecture 11 Advanced Swift cs198-001 : spring 2018 1 Attendances Will be posting sheet on Piazza this week Check that we ve accounted for all of your attendances! Make a private piazza post if there is
More informationQuick Interaction Techniques for watchos
App Frameworks #WWDC16 Quick Interaction Techniques for watchos Session 211 Tom Witkin watchos Engineer Miguel Sanchez watchos Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display
More informationApp. Chapter 19 App. App (ViewController) App. Single View Application Single View Application View. (View Controller)
Chapter 19 App App (ViewController) App 19.1 App App Single View Application Single View Application View Controller View Controller Label Button Button (View Controller) 2 View Controller Utility Area
More informationWhat s New in watchos
Session App Frameworks #WWDC17 What s New in watchos 205 Ian Parks, watchos Engineering 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from
More informationIntroducing On Demand Resources
App Frameworks #WWDC15 Introducing On Demand Resources An element of App Thinning Session 214 Steve Lewallen Frameworks Engineering Tony Parker Cocoa Frameworks 2015 Apple Inc. All rights reserved. Redistribution
More informationWhat s New in tvos #WWDC16. App Frameworks. Session 206. Hans Kim tvos Engineer
App Frameworks #WWDC16 What s New in tvos Session 206 Hans Kim tvos Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Welcome
More informationEngineering for Testability
Session Developer Tools #WWDC17 Engineering for Testability 414 Brian Croom, Xcode Engineer Greg Tracy, Xcode Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationIntegrating Apps and Content with AR Quick Look
Session #WWDC18 Integrating Apps and Content with AR Quick Look 603 David Lui, ARKit Engineering Dave Addey, ARKit Engineering 2018 Apple Inc. All rights reserved. Redistribution or public display not
More informationImproving your Existing Apps with Swift
Developer Tools #WWDC15 Improving your Existing Apps with Swift Getting Swifty with It Session 403 Woody L. in the Sea of Swift 2015 Apple Inc. All rights reserved. Redistribution or public display not
More informationAdvanced Notifications
System Frameworks #WWDC16 Advanced Notifications Session 708 Michele Campeotto ios Notifications 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationWatchKit In-Depth, Part 2
App Frameworks #WWDC15 WatchKit In-Depth, Part 2 Session 208 Nathan de Vries watchos Engineer Chloe Chang watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationSwift. Introducing swift. Thomas Woodfin
Swift Introducing swift Thomas Woodfin Content Swift benefits Programming language Development Guidelines Swift benefits What is Swift Benefits What is Swift New programming language for ios and OS X Development
More informationUnderstanding Undefined Behavior
Session Developer Tools #WWDC17 Understanding Undefined Behavior 407 Fred Riss, Clang Team Ryan Govostes, Security Engineering and Architecture Team Anna Zaks, Program Analysis Team 2017 Apple Inc. All
More informationMedia and Gaming Accessibility
Session System Frameworks #WWDC17 Media and Gaming Accessibility 217 Greg Hughes, Software Engineering Manager Charlotte Hill, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public
More informationMobile Development - Lab 2
Mobile Development - Lab 2 Objectives Illustrate the delegation mechanism through examples Use a simple Web service Show how to simply make a hybrid app Display data with a grid layout Delegation pattern
More informationAdvances in AVFoundation Playback
Media #WWDC16 Advances in AVFoundation Playback Waiting, looping, switching, widening, optimizing Session 503 Sam Bushell Media Systems Architect 2016 Apple Inc. All rights reserved. Redistribution or
More informationAutomatic Strong Passwords and Security Code AutoFill
Session #WWDC18 Automatic Strong Passwords and Security Code AutoFill 204 Chelsea Pugh, ios Engineer Reza Abbasian, ios Engineer Harris Papadopoulos, ios Engineer 2018 Apple Inc. All rights reserved. Redistribution
More informationWhat s New in tvos 12
#WWDC18 What s New in tvos 12 Session 208 Hans Kim, tvos Engineering 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Agenda Agenda
More informationITP 342 Mobile App Dev. Connections
ITP 342 Mobile App Dev Connections User Interface Interactions First project displayed information to the user, but there was no interaction. We want the users of our app to touch UI components such as
More informationData Delivery with Drag and Drop
Session App Frameworks #WWDC17 Data Delivery with Drag and Drop 227 Dave Rahardja, UIKit Tanu Singhal, UIKit 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without
More informationUsing Grouped Notifications
#WWDC18 Using Grouped Notifications Session 711 Michele Campeotto, ios User Notifications 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationWhat s New in SpriteKit
Graphics and Games #WWDC16 What s New in SpriteKit Session 610 Ross Dexter Games Technologies Engineer Clément Boissière Games Technologies Engineer 2016 Apple Inc. All rights reserved. Redistribution
More informationiphone App Basics iphone and ipod touch Development Fall 2009 Lecture 5
iphone App Basics iphone and ipod touch Development Fall 2009 Lecture 5 Questions? Announcements Assignment #1 due this evening by 11:59pm Remember, if you wish to use a free late you must email me before
More informationGetting the Most out of Playgrounds in Xcode
#WWDC18 Getting the Most out of Playgrounds in Xcode Session 402 Tibet Rooney-Rabdau, Xcode Engineer Alex Brown, Core OS Engineer TJ Usiyan, Xcode Engineer 2018 Apple Inc. All rights reserved. Redistribution
More informationIntroduction to Siri Shortcuts
#WWDC8 Introduction to Siri Shortcuts Session 2 Ari Weinstein, Siri Willem Mattelaer, Siri 208 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationUser Interfaces. Lecture 15. Application Programming on Mac OS. Hamza Bennani September 4, 2018
User Interfaces Lecture 15 Application Programming on Mac OS Hamza Bennani hamza@hamzabennani.com September 4, 2018 Logistics Office hours: Tue/Thu, 2pm to 3pm. Office: 250 Geoff Wyvill. Acknowledgment:
More informationMonetize and Promote Your App with iad
Media #WWDC15 Monetize and Promote Your App with iad From design to launch Session 503 Carol Teng Shashank Phadke 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without
More informationCore ML in Depth. System Frameworks #WWDC17. Krishna Sridhar, Core ML Zach Nation, Core ML
System Frameworks #WWDC17 Core ML in Depth Krishna Sridhar, Core ML Zach Nation, Core ML 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from
More informationSeamless Linking to Your App
App Frameworks #WWDC15 Seamless Linking to Your App Session 509 Conrad Shultz Safari and WebKit Software Engineer Jonathan Grynspan Core Services Software Engineer 2015 Apple Inc. All rights reserved.
More informationBuilding Apps with Dynamic Type
Session App Frameworks #WWDC17 Building Apps with Dynamic Type 245 Clare Kasemset, Software Engineering Manager Nandini Sundar, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or
More informationWhat s New in LLDB. Debug your way to fame and glory #WWDC15. Developer Tools. Session 402
Developer Tools #WWDC15 What s New in LLDB Debug your way to fame and glory Session 402 Kate Stone Software Behavioralist Sean Callanan Master of Expressions Enrico Granata Data Wizard 2015 Apple Inc.
More informationWhat's New in Core Spotlight
Session System Frameworks #WWDC17 What's New in Core Spotlight Search on macos and ios 231 John Hörnkvist, Spotlight Lyn Fong, Spotlight 2017 Apple Inc. All rights reserved. Redistribution or public display
More informationModern User Interaction on ios
App Frameworks #WWDC17 Modern User Interaction on ios Mastering the UIKit UIGesture System Session 219 Dominik Wagner, UIKit Engineer Michael Turner, UIKit Engineer Glen Low, UIKit Engineer 2017 Apple
More informationIBM Case Manager Mobile Version SDK for ios Developers' Guide IBM SC
IBM Case Manager Mobile Version 1.0.0.5 SDK for ios Developers' Guide IBM SC27-4582-04 This edition applies to version 1.0.0.5 of IBM Case Manager Mobile (product number 5725-W63) and to all subsequent
More informationApple Watch Docs. Release 0.1. Michael Hahn
Apple Watch Docs Release 0.1 Michael Hahn Nov 20, 2017 Contents 1 First Watch Glance 3 1.1 Create an iphone App.......................................... 3 1.2 Add WatchKit Targets..........................................
More informationYour Apps and the Future of macos Security
#WWDC18 Your Apps and the Future of macos Security Pierre-Olivier Martel, Security Engineering Manager Kelly Yancey, OS Security Garrett Jacobson, Trusted Execution 2018 Apple Inc. All rights reserved.
More informationBuilding the App - Part 5 - Adding a Link
Unit 4 - Coding For Your App Copy and Paste the code below exactly where the tutorials tell you. DO NOT COPY TEXT IN RED. Building the App - Part 5 - Adding a Link XCODE 7 @IBAction func Button1(_ sender:
More informationPorting Objective-C to Swift. Richard Ekle
Porting Objective-C to Swift Richard Ekle rick@ekle.org Why do we need this? 1.2 million apps in the ios App Store http://www.statista.com/statistics/276623/numberof-apps-available-in-leading-app-stores/
More informationWhat s New in Notifications
System Frameworks #WWDC15 What s New in Notifications Session 720 Michele Campeotto ios Notifications Gokul Thirumalai Apple Push Notification Service 2015 Apple Inc. All rights reserved. Redistribution
More informationWhat s New in Core Data?
Session App Frameworks #WWDC17 What s New in Core? Persisting since 2004 210 Melissa Turner, Core Engineer Rishi Verma, Core Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display
More informationCocoa Touch Best Practices
App Frameworks #WWDC15 Cocoa Touch Best Practices Session 231 Luke Hiesterman UIKit Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationios Tic Tac Toe Game John Robinson at Rowan University
ios Tic Tac Toe Game John Robinson at Rowan University Agenda Day 3 Introduction to Swift and Xcode Creating the Tic Tac Toe GUI Lunch Break Writing the Tic Tac Toe Game Code RAMP Wrap up Process for Developing
More informationBuilding for Voice with Siri Shortcuts
#WWDC18 Building for Voice with Siri Shortcuts Session 214 Amit Jain, Siri Ayaka Nonaka, Siri 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationMetal for Ray Tracing Acceleration
Session #WWDC18 Metal for Ray Tracing Acceleration 606 Sean James, GPU Software Engineer Wayne Lister, GPU Software Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationWhat s New in Audio. Media #WWDC17. Akshatha Nagesh, AudioEngine-eer Béla Balázs, Audio Artisan Torrey Holbrook Walker, Audio/MIDI Black Ops
Session Media #WWDC17 What s New in Audio 501 Akshatha Nagesh, AudioEngine-eer Béla Balázs, Audio Artisan Torrey Holbrook Walker, Audio/MIDI Black Ops 2017 Apple Inc. All rights reserved. Redistribution
More informationGetting to Know Swift Package Manager
#WWDC18 Getting to Know Swift Package Manager Session 411 Rick Ballard, SwiftPM Release Manager Boris Buegling, Developer Tools Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display
More informationAnnouncements. Today s Topics
Announcements Lab 2 is due tonight by 11:59 PM Late policy is 10% of lab total per day late So -7.5 points per day late for lab 2 Labs 3 and 4 are posted on the course website Extensible Networking Platform
More informationGetting the Most Out of HealthKit
App Frameworks #WWDC16 Getting the Most Out of HealthKit What s new and best practices Session 209 Matthew Salesi ios Software Engineer Joefrey Kibuule ios Software Engineer 2016 Apple Inc. All rights
More informationWorking with Metal Overview
Graphics and Games #WWDC14 Working with Metal Overview Session 603 Jeremy Sandmel GPU Software 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationDocument Version Date: 1st March, 2015
7 Minute Fitness: ios(swift) Application Document Version 1.0.1 Date: 1st March, 2015 2 [7 MINUTE FITNESS: APP DOCUMENTATION] Important Notes:... 5 AppDelegate Class Reference... 6 Tasks... 6 Instance
More informationWhat s New in imessage Apps
Session App Frameworks #WWDC17 What s New in imessage Apps 234 Eugene Bistolas, Messages Engineer Jay Chae, Messages Engineer Stephen Lottermoser, Messages Engineer 2017 Apple Inc. All rights reserved.
More informationLocalizing with Xcode 9
Session Developer Tools #WWDC17 Localizing with Xcode 9 401 Sara Radi, Software Engineer Aya Siblini, Software Engineer Chris Hanson, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution
More informationAdvanced Scrollviews and Touch Handling Techniques
Frameworks #WWDC14 Advanced Scrollviews and Touch Handling Techniques Session 235 Josh Shaffer ios Apps and Frameworks Engineer Eliza Block ios Apps and Frameworks Engineer 2014 Apple Inc. All rights reserved.
More informationUI Design and Storyboarding
UI Design and Storyboarding Mobile Application Development in ios School of EECS Washington State University Instructor: Larry Holder Mobile Application Development in ios 1 Outline Model-View-Controller
More informationI, J. Key-value observing (KVO), Label component, 32 text property, 39
Index A Abstract factory pattern, 207 concrete factory, 213 examples in Cocoa, 227 groups of objects, 212 implementing, 213 abstract factories, 214 concrete factories, 214 215 operations, 212 213 pitfalls,
More informationSwift API Design Guidelines
Developer Tools #WWDC16 Swift API Design Guidelines The Grand Renaming Session 403 Doug Gregor Swift Engineer Michael Ilseman Swift Engineer 2016 Apple Inc. All rights reserved. Redistribution or public
More informationTopics in Mobile Computing
Topics in Mobile Computing Workshop 1I - ios Fundamental Prepared by Y.H. KWOK What is ios? From Wikipedia (http://en.wikipedia.org/wiki/ios): ios is an operating system for iphone, ipad and Apple TV.
More informationCreating Audio Apps for watchos
Session #WWDC18 Creating Audio Apps for watchos 504 Neil Desai, watchos Frameworks Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationios Core Data Example Application
ios Core Data Example Application The Core Data framework provides an abstract, object oriented interface to database storage within ios applications. This does not require extensive knowledge of database
More informationiphone Application Programming Lab 2: MVC and Delegation + A01 discussion
Lab 2: MVC and Delegation + A01 discussion Nur Al-huda Hamdan RWTH Aachen University Winter Semester 2015/2016 http://hci.rwth-aachen.de/iphone Learning Objectives Discuss A01 + demo Concepts: debugging
More informationAssignment I: Concentration
Assignment I: Concentration Objective The goal of this assignment is to recreate the demonstration given in lecture and then make some small enhancements. It is important that you understand what you are
More informationNew UIKit Support for International User Interfaces
App Frameworks #WWDC15 New UIKit Support for International User Interfaces Session 222 Sara Radi Internationalization Software Engineer Aaltan Ahmad Internationalization Software Engineer Paul Borokhov
More informationWhat s New in Swift #WWDC18. Ted Kremenek, Languages & Runtimes Manager Slava Pestov, Swift Compiler Engineer
Session #WWDC18 What s New in Swift 401 Ted Kremenek, Languages & Runtimes Manager Slava Pestov, Swift Compiler Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationQuestions. Exams: no. Get by without own Mac? Why ios? ios vs Android restrictions. Selling in App store how hard to publish? Future of Objective-C?
Questions Exams: no Get by without own Mac? Why ios? ios vs Android restrictions Selling in App store how hard to publish? Future of Objective-C? Grading: Lab/homework: 40%, project: 40%, individual report:
More informationSceneKit: What s New Session 604
Graphics and Games #WWDC17 SceneKit: What s New Session 604 Thomas Goossens, SceneKit engineer Amaury Balliet, SceneKit engineer Anatole Duprat, SceneKit engineer Sébastien Métrot, SceneKit engineer 2017
More informationWhat s New in CloudKit
System Frameworks #WWDC15 What s New in CloudKit Session 704 Olivier Bonnet icloud Client Eric Krugler icloud Server 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationWhat s New in MapKit. App Frameworks #WWDC17. Fredrik Olsson
Session App Frameworks #WWDC17 What s New in MapKit 237 Fredrik Olsson 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. MKMapView.mapType.standard
More informationIntroducing the Contacts Framework
App Frameworks #WWDC15 Introducing the Contacts Framework For OS X, ios, and watchos Session 223 Bruce Stadnyk ios Contacts Engineer Dave Dribin OS X Contacts Engineer Julien Robert ios Contacts Engineer
More informationApp Extension Best Practices
App Frameworks #WWDC15 App Extension Best Practices Session 224 Sophia Teutschler UIKit Engineer Ian Baird CoreOS Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted
More informationJavaScript for Automation
Services #WWDC14 JavaScript for Automation Session 306 Sal Soghoian Product Manger Automation Technologies 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written
More informationMobile Application Programming. Swift Classes
Mobile Application Programming Swift Classes Swift Top-Level Entities Like C/C++ but unlike Java, Swift allows declarations of functions, variables, and constants at the top-level, outside any class declaration
More informationios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility
App Frameworks #WWDC15 ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written
More informationLeveraging Touch Input on ios
App Frameworks #WWDC16 Leveraging Touch Input on ios And getting the most out of Apple Pencil Session 220 Dominik Wagner UIKit Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display
More informationSceneKit in Swift Playgrounds
Session Graphics and Games #WWDC17 SceneKit in Swift Playgrounds 605 Michael DeWitt, Gem Collector Lemont Washington, Draw Call Blaster 2017 Apple Inc. All rights reserved. Redistribution or public display
More information1 Build Your First App. The way to get started is to quit talking and begin doing. Walt Disney
1 Build Your First App The way to get started is to quit talking and begin doing. Walt Disney Copyright 2015 AppCoda Limited All rights reserved. Please do not distribute or share without permission. No
More informationS A M P L E C H A P T E R
SAMPLE CHAPTER Anyone Can Create an App by Wendy L. Wise Chapter 5 Copyright 2017 Manning Publications brief contents PART 1 YOUR VERY FIRST APP...1 1 Getting started 3 2 Building your first app 14 3 Your
More informationManaging Documents In Your ios Apps
Session #WWDC18 Managing Documents In Your ios Apps 216 Brandon Tennant, Software Engineer Thomas Deniau, Software Engineer Rony Fadel, Software Engineer 2018 Apple Inc. All rights reserved. Redistribution
More informationWhat s New in ARKit 2
Session #WWDC18 What s New in ARKit 2 602 Arsalan Malik, ARKit Engineer Reinhard Klapfer, ARKit Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written
More informationIntroducing the Photos Frameworks
Media #WWDC14 Introducing the Photos Frameworks Session 511 Adam Swift ios Photos Frameworks 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationStanford CS193p. Developing Applications for ios. Winter CS193p. Winter 2017
Stanford Developing Applications for ios Today Error Handling in Swift try Extensions A simple, powerful, but easily overused code management syntax Protocols Last (but certainly not least important) typing
More informationNews- ipad: ios(swift) Application
News- ipad: ios(swift) Application Document Version 1.0.1 Date: 9 th Nov, 2014 2 [NEWS- IPAD: APP DOCUMENTATION] Important Notes:... 6 AppDelegate Class Reference... 7 Tasks... 7 Instance Methods... 7
More informationDesigning for Apple Watch
Design #WWDC15 Designing for Apple Watch Session 802 Mike Stern User Experience Evangelist 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationUsing Swift with Cocoa and Objective-C
Using Swift with Cocoa and Objective-C Contents Getting Started 5 Basic Setup 6 Setting Up Your Swift Environment 6 Understanding the Swift Import Process 7 Interoperability 9 Interacting with Objective-C
More informationCore Data Best Practices
#WWDC18 Core Data Best Practices Session 224 Scott Perry, Engineer Nick Gillett, Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission
More informationXcode 6 and ios 8 What s New for Software Developers
Xcode 6 and ios 8 What s New for Software Developers August 2014 Norman McEntire! norman.mcentire@servin.com Slides and Video of this presentation will be posted on Tuesday Aug 26 here: http://servin.com!1
More information