Slide 1

Slide 1 text

UIKonf 2016

Slide 2

Slide 2 text

Us

Slide 3

Slide 3 text

Community

Slide 4

Slide 4 text

Together

Slide 5

Slide 5 text

A Time Lapse View of Swift UIKonf 2016 Daniel H Steinberg @dimsumthinking

Slide 6

Slide 6 text

0 .. 2

Slide 7

Slide 7 text

0 ..< 2

Slide 8

Slide 8 text

-5 ..< 0

Slide 9

Slide 9 text

~ 20 OCE

Slide 10

Slide 10 text

-5 BS

Slide 11

Slide 11 text

Objective - C is so old fashioned

Slide 12

Slide 12 text

Objective - C is so old fashioned It's Holding us Back

Slide 13

Slide 13 text

Objective - C is so old fashioned It's Holding us Back It has Square Brackets

Slide 14

Slide 14 text

Objective - C is so old fashioned It's Holding us Back It has Square Brackets It doesn't have Garbage Collection

Slide 15

Slide 15 text

Objective - C is so old fashioned It's Holding us Back It has Square Brackets It doesn't have Garbage Collection Wah wah wah

Slide 16

Slide 16 text

BS

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

Swift

Slide 19

Slide 19 text

Objective - C

Slide 20

Slide 20 text

#import "MasterViewController.h" #import "DetailViewController.h" #import "Search.h" #import "TextInputViewController.h" @interface MasterViewController () @end @implementation MasterViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.navigationItem.leftBarButtonItem = self.editButtonItem; self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController]; } - (void)viewWillAppear:(BOOL)animated { self.clearsSelectionOnViewWillAppear = self.splitViewController.isCollapsed; [super viewWillAppear:animated]; } - (void)insertNewSearchTerm:(NSString *)searchTerm { NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity]; Search *newSearch = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; newSearch.term = searchTerm; newSearch.timeOfLastSearch = [[NSDate alloc] init]; newSearch.hasBeenSearched = NO; NSError *error = nil; if (![context save:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } } #pragma mark - Segues - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { //... if ([[segue identifier] isEqualToString:@"showDetail"]) { NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; Search *search = [[self fetchedResultsController] objectAtIndexPath:indexPath]; DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController]; [controller setSearch: search]; controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem; controller.navigationItem.leftItemsSupplementBackButton = YES; } else if ([segue.identifier isEqualToString:@"showSearchInput"]){ TextInputViewController *textInputVC = segue.destinationViewController; textInputVC.title = @"Search Term"; textInputVC.placeholderText = @"Enter search term"; textInputVC.cancel = ^{ [self dismissViewControllerAnimated:YES completion:nil]; }; textInputVC.save = ^(NSString *text){ [self insertNewSearchTerm:text];)tableView { return [[self.fetchedResultsController sections] count]; }

Slide 21

Slide 21 text

;

Slide 22

Slide 22 text

[super viewDidLoad];

Slide 23

Slide 23 text

[[self.fetchedRC fetchRequest] entity];

Slide 24

Slide 24 text

NSEntityDescription *entity = [[self.fetchedRC fetchRequest] entity];

Slide 25

Slide 25 text

#import "MasterViewController.h"

Slide 26

Slide 26 text

#import "MasterViewController.h"

Slide 27

Slide 27 text

Objective - C is so old fashioned It's Holding us Back It has Square Brackets It doesn't have Garbage Collection Wah wah wah

Slide 28

Slide 28 text

-5 ..< 0

Slide 29

Slide 29 text

"Apple does not comment on unreleased …"

Slide 30

Slide 30 text

Retina Display

Slide 31

Slide 31 text

Different Aspect Ratios

Slide 32

Slide 32 text

Processor Changes

Slide 33

Slide 33 text

"Apple does not comment on unreleased …"

Slide 34

Slide 34 text

If you pay attention

Slide 35

Slide 35 text

"Use pixels not points"

Slide 36

Slide 36 text

"Use NSInteger not int"

Slide 37

Slide 37 text

"Adopt Autolayout"

Slide 38

Slide 38 text

Then you realize

Slide 39

Slide 39 text

While this is happening …

Slide 40

Slide 40 text

http://www.phonearena.com/news/Steve-Jobs-probably-would-have-liked-the-Apple-Pencil_id73815

Slide 41

Slide 41 text

They were already working on …

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

While this is happening …

Slide 44

Slide 44 text

Objective - C is so old fashioned It's Holding us Back It has Square Brackets It doesn't have Garbage Collection Wah wah wah

Slide 45

Slide 45 text

They were already working on Swift.

Slide 46

Slide 46 text

They should have told us

Slide 47

Slide 47 text

You can usually look back and see

Slide 48

Slide 48 text

Autolayout …

Slide 49

Slide 49 text

Phones with different sizes and aspect ratios.

Slide 50

Slide 50 text

NSInteger and int …

Slide 51

Slide 51 text

64 bit

Slide 52

Slide 52 text

Pixels not points …

Slide 53

Slide 53 text

Retina display

Slide 54

Slide 54 text

NSArray *myArray = [[NSArray alloc] initWithObjects:@"one", @"two", @"three", @"four", nil];

Slide 55

Slide 55 text

NSArray *myArray = @[@"one", @"two", @"three", @"four"];

Slide 56

Slide 56 text

let myArray = ["one", "two", "three", "four"]

Slide 57

Slide 57 text

NSString *two = [myArray objectAtIndex: 1];

Slide 58

Slide 58 text

NSString *two = myArray[1];

Slide 59

Slide 59 text

let two = myArray[1]

Slide 60

Slide 60 text

You can look back and see what is coming.

Slide 61

Slide 61 text

0 SE

Slide 62

Slide 62 text

WWDC 2014

Slide 63

Slide 63 text

Swift is Released

Slide 64

Slide 64 text

They Should have released it earlier and shown us what they were working on

Slide 65

Slide 65 text

They Should have released it earlier and shown us what they were working on They should have released it later when it was ready.

Slide 66

Slide 66 text

it's not open source They Should have released it earlier and shown us what they were working on They should have released it later when it was ready.

Slide 67

Slide 67 text

"We haven't thought about it."

Slide 68

Slide 68 text

You can look back and see what is coming.

Slide 69

Slide 69 text

let myArray: Int[]

Slide 70

Slide 70 text

let myArray: [Int]

Slide 71

Slide 71 text

Willing to shake off the past.

Slide 72

Slide 72 text

let myArray = [1, 2, 3]

Slide 73

Slide 73 text

let myArray = [1, 2, 3] myArray[1] = 7

Slide 74

Slide 74 text

That's not what "Let" Means.

Slide 75

Slide 75 text

let myArray = [1, 2, 3] myArray[1] = 7

Slide 76

Slide 76 text

let myArray = [1, 2, 3] myArray[1] = 7

Slide 77

Slide 77 text

var myArray = [1, 2, 3] myArray[1] = 7

Slide 78

Slide 78 text

Willing to change in response to community feedback.

Slide 79

Slide 79 text

You can look back and see what is coming.

Slide 80

Slide 80 text

1 SE

Slide 81

Slide 81 text

WWDC 2015

Slide 82

Slide 82 text

"Swift will be open sourced by the end of this year."

Slide 83

Slide 83 text

End of November, 2015

Slide 84

Slide 84 text

Apple promised Open Source. They Didn't open source Swift yet. They failed.

Slide 85

Slide 85 text

Just shut up

Slide 86

Slide 86 text

Just shut up

Slide 87

Slide 87 text

Apple promised Open Source. They Didn't open source Swift yet. They failed.

Slide 88

Slide 88 text

End of November, 2015

Slide 89

Slide 89 text

"Swift will be open sourced by the end of this year."

Slide 90

Slide 90 text

"Swift will be open sourced by the end of this year."

Slide 91

Slide 91 text

December 3, 2015

Slide 92

Slide 92 text

No content

Slide 93

Slide 93 text

"Swift will be open sourced by the end of this year."

Slide 94

Slide 94 text

Look at the license. It's not "really" Open Source.

Slide 95

Slide 95 text

Open?

Slide 96

Slide 96 text

Open?

Slide 97

Slide 97 text

No content

Slide 98

Slide 98 text

Proposals from the community

Slide 99

Slide 99 text

PR from the community

Slide 100

Slide 100 text

Committers

Slide 101

Slide 101 text

Conversation

Slide 102

Slide 102 text

Apple is listening

Slide 103

Slide 103 text

really listening

Slide 104

Slide 104 text

Sometimes the Core Team decides differently.

Slide 105

Slide 105 text

See? I told you It's not "really" Open Source.

Slide 106

Slide 106 text

I won't argue.

Slide 107

Slide 107 text

Apple is listening

Slide 108

Slide 108 text

Apple is responding

Slide 109

Slide 109 text

Apple is sharing

Slide 110

Slide 110 text

Core Team: why

Slide 111

Slide 111 text

Core Team: what we're thinking

Slide 112

Slide 112 text

Core Team: plans

Slide 113

Slide 113 text

No content

Slide 114

Slide 114 text

No content

Slide 115

Slide 115 text

No content

Slide 116

Slide 116 text

Swift 3

Slide 117

Slide 117 text

Stable ABI Resilience Portability Type system cleanup and documentation Complete generics Focus and refine the language API design guidelines

Slide 118

Slide 118 text

Stable ABI Resilience Portability Type system cleanup and documentation Complete generics Focus and refine the language API design guidelines

Slide 119

Slide 119 text

Stable ABI Resilience Portability Type system cleanup and documentation Complete generics Focus and refine the language API design guidelines

Slide 120

Slide 120 text

Stable ABI Resilience Portability Type system cleanup and documentation Complete generics Focus and refine the language API design guidelines

Slide 121

Slide 121 text

Stable ABI Resilience Portability Type system cleanup and documentation Complete generics Focus and refine the language API design guidelines

Slide 122

Slide 122 text

Stable ABI Resilience Portability Type system cleanup and documentation Complete generics Focus and refine the language API design guidelines

Slide 123

Slide 123 text

Stable ABI Resilience Portability Type system cleanup and documentation Complete generics Focus and refine the language API design guidelines

Slide 124

Slide 124 text

May 16, 2016

Slide 125

Slide 125 text

Chris Lattner

Slide 126

Slide 126 text

"As we get deeper into the Swift 3 release cycle, we’re beginning to have a more precise understanding about what the release will shape up to be."

Slide 127

Slide 127 text

"This release […] will redefine the feel of Swift and make a major leap towards maturing the Swift language and development experience. "

Slide 128

Slide 128 text

"We have had a focus on getting to source stability, with the forward-looking goal of making Swift 4 as source compatible with Swift 3 as we can[…]. It tackled API naming head on […], made major improvements to the consistency and feel of the language.…"

Slide 129

Slide 129 text

"We have had a focus on getting to source stability, with the forward-looking goal of making Swift 4 as source compatible with Swift 3 as we can[…]. It tackled API naming head on […], made major improvements to the consistency and feel of the language.…"

Slide 130

Slide 130 text

"We have had a focus on getting to source stability, with the forward-looking goal of making Swift 4 as source compatible with Swift 3 as we can[…]. It tackled API naming head on […], made major improvements to the consistency and feel of the language.…"

Slide 131

Slide 131 text

"We have had a focus on getting to source stability, with the forward-looking goal of making Swift 4 as source compatible with Swift 3 as we can[…]. It tackled API naming head on […], made major improvements to the consistency and feel of the language.…"

Slide 132

Slide 132 text

Stabilize the language.

Slide 133

Slide 133 text

Apple is listening

Slide 134

Slide 134 text

"That said, it is also clear at this point that some of the loftier goals that we started out with aren’t going to fit into the release"

Slide 135

Slide 135 text

"including some of the most important generics features needed in order to lock down the ABI of the standard library."

Slide 136

Slide 136 text

"the generics and ABI stability goals will roll into a future release of Swift, where I expect them to be the *highest* priority features to get done."

Slide 137

Slide 137 text

The world is ending

Slide 138

Slide 138 text

No content

Slide 139

Slide 139 text

We are here

Slide 140

Slide 140 text

What's the rush?

Slide 141

Slide 141 text

Big here

Slide 142

Slide 142 text

Long now

Slide 143

Slide 143 text

Now: Stabilize the language.

Slide 144

Slide 144 text

Next: Finish generics while we play with the wealth of changes that have been added.

Slide 145

Slide 145 text

I'm glad the binary isn't set yet.

Slide 146

Slide 146 text

What changes are still in scope?

Slide 147

Slide 147 text

"The highest priority to me is to get the 'little syntactic stuff' done […] because it affects source stability."

Slide 148

Slide 148 text

"The highest priority to me is to get the 'little syntactic stuff' done […] because it affects source stability."

Slide 149

Slide 149 text

"The highest priority to me is to get the 'little syntactic stuff' done […] because it affects source stability."

Slide 150

Slide 150 text

Open

Slide 151

Slide 151 text

Transparent

Slide 152

Slide 152 text

Disappointing is my first thought, in fact worrying. Two years after the language was announced, the ABI is still not stable.

Slide 153

Slide 153 text

Of the original […] seven goals [Only two Will] be achieved in Swift 3, this looks like failure.

Slide 154

Slide 154 text

Failure?

Slide 155

Slide 155 text

Community Response

Slide 156

Slide 156 text

Swift 3 initial scope was determined prior to the input of the Swift Evolution community, just as it was being Open Sourced. The fact they are open to changing timelines and ensuring we get fundamentals of the language sorted is a testament to their commitment to the quality of Swift as a whole.

Slide 157

Slide 157 text

Swift 3 initial scope was determined prior to the input of the Swift Evolution community, just as it was being Open Sourced. The fact they are open to changing timelines and ensuring we get fundamentals of the language sorted is a testament to their commitment to the quality of Swift as a whole.

Slide 158

Slide 158 text

Swift 3 initial scope was determined prior to the input of the Swift Evolution community, just as it was being Open Sourced. The fact they are open to changing timelines and ensuring we get fundamentals of the language sorted is a testament to their commitment to the quality of Swift as a whole.

Slide 159

Slide 159 text

Greg Parker Runtime Wrangler

Slide 160

Slide 160 text

"We apologize for the inconvenience."

Slide 161

Slide 161 text

"The OS X and iOS architecture transitions demonstrate the two fundamental laws of ABI changes:"

Slide 162

Slide 162 text

"1. Opportunities to break ABI compatibility are rare."

Slide 163

Slide 163 text

"2. Any opportunity to break ABI compatibility will suffer from severe schedule pressure."

Slide 164

Slide 164 text

"If we tried to rush Swift ABI stability out the door for Swift 3 we would certainly end up with deliberate or accidental flaws[…] Being able to take the time to get it right is a rare luxury."

Slide 165

Slide 165 text

"If we tried to rush Swift ABI stability out the door for Swift 3 we would certainly end up with deliberate or accidental flaws[…] Being able to take the time to get it right is a rare luxury."

Slide 166

Slide 166 text

"If we tried to rush Swift ABI stability out the door for Swift 3 we would certainly end up with deliberate or accidental flaws[…] Being able to take the time to get it right is a rare luxury."

Slide 167

Slide 167 text

But this will hurt adoption

Slide 168

Slide 168 text

Community

Slide 169

Slide 169 text

"I would be wholly concerned if any of Swift's goals were being defined by winning the short-term favor of business people."

Slide 170

Slide 170 text

"I would be wholly concerned if any of Swift's goals were being defined by winning the short-term favor of business people."

Slide 171

Slide 171 text

Swift 3

Slide 172

Slide 172 text

API design guidelines Automatic application of naming guidelines to imported Objective-C APIs Adoption of naming guidelines in key APIs Swiftification of imported Objective-C APIs Focus and refine the language Improvements to tooling quality

Slide 173

Slide 173 text

API design guidelines Automatic application of naming guidelines to imported Objective-C APIs Adoption of naming guidelines in key APIs Swiftification of imported Objective-C APIs Focus and refine the language Improvements to tooling quality

Slide 174

Slide 174 text

API design guidelines Automatic application of naming guidelines to imported Objective-C APIs Adoption of naming guidelines in key APIs Swiftification of imported Objective-C APIs Focus and refine the language Improvements to tooling quality

Slide 175

Slide 175 text

API design guidelines Automatic application of naming guidelines to imported Objective-C APIs Adoption of naming guidelines in key APIs Swiftification of imported Objective-C APIs Focus and refine the language Improvements to tooling quality

Slide 176

Slide 176 text

API design guidelines Automatic application of naming guidelines to imported Objective-C APIs Adoption of naming guidelines in key APIs Swiftification of imported Objective-C APIs Focus and refine the language Improvements to tooling quality

Slide 177

Slide 177 text

API design guidelines Automatic application of naming guidelines to imported Objective-C APIs Adoption of naming guidelines in key APIs Swiftification of imported Objective-C APIs Focus and refine the language Improvements to tooling quality

Slide 178

Slide 178 text

No content

Slide 179

Slide 179 text

No content

Slide 180

Slide 180 text

API design guidelines Focus and refine the language Adoption of naming guidelines in Automatic application of naming imported Objective-C APIs Swiftification of imported Objectiv Improvements to tooling quality API design guidelines Focus and refine the language Type system cleanup and documentation Resilience Portability Complete generics Stable ABI

Slide 181

Slide 181 text

API design guidelines Focus and refine the language Adoption of naming guidelines in Automatic application of naming imported Objective-C APIs Swiftification of imported Objectiv Improvements to tooling quality API design guidelines Focus and refine the language Type system cleanup and documentation Resilience Portability Complete generics Stable ABI

Slide 182

Slide 182 text

API design guidelines Focus and refine the language Adoption of naming guidelines in Automatic application of naming imported Objective-C APIs Swiftification of imported Objectiv Improvements to tooling quality API design guidelines Focus and refine the language Type system cleanup and documentation Resilience Portability Complete generics Stable ABI

Slide 183

Slide 183 text

API design guidelines Focus and refine the language Adoption of naming guidelines in Automatic application of naming imported Objective-C APIs Swiftification of imported Objectiv Improvements to tooling quality API design guidelines Focus and refine the language Type system cleanup and documentation Resilience Portability Complete generics Stable ABI

Slide 184

Slide 184 text

"the generics and ABI stability goals will […] be the *highest* priority features"

Slide 185

Slide 185 text

BS

Slide 186

Slide 186 text

0 SE

Slide 187

Slide 187 text

We are here

Slide 188

Slide 188 text

Swift 3

Slide 189

Slide 189 text

ABI Stability

Slide 190

Slide 190 text

No content

Slide 191

Slide 191 text

Long now

Slide 192

Slide 192 text

Open Source

Slide 193

Slide 193 text

Them

Slide 194

Slide 194 text

Them

Slide 195

Slide 195 text

Us

Slide 196

Slide 196 text

Community

Slide 197

Slide 197 text

Together

Slide 198

Slide 198 text

A Time Lapse View of Swift UIKonf 2016 Daniel H Steinberg @dimsumthinking