WEBVTT

1
00:00:17.545 --> 00:00:20.685
<00:00:17.545>All <00:00:17.745>right <00:00:17.945>everyone, <00:00:18.145>so <00:00:18.345>let's <00:00:18.545>talk <00:00:18.745>about <00:00:18.945>Swift

2
00:00:20.865 --> 00:00:22.125
<00:00:20.865>UI <00:00:21.432>in <00:00:21.999>production.

3
00:00:22.975 --> 00:00:24.925
<00:00:22.975>Swift <00:00:23.208>ui, <00:00:23.441>as <00:00:23.675>I <00:00:23.908>just <00:00:24.141>said, <00:00:24.375>currently,

4
00:00:24.985 --> 00:00:26.405
<00:00:24.985>and <00:00:25.304>I'm, <00:00:25.624>I'm <00:00:25.943>talking, <00:00:26.263>uh,

5
00:00:27.445 --> 00:00:31.565
<00:00:27.445>actually <00:00:27.645>May, <00:00:27.845>2021 <00:00:28.045>isn't <00:00:28.245>this <00:00:28.445>really <00:00:28.645>uncomfortable <00:00:28.845>position

6
00:00:31.625 --> 00:00:34.525
<00:00:31.625>of <00:00:31.800>showing <00:00:31.975>a <00:00:32.150>radically <00:00:32.325>different <00:00:32.500>way <00:00:32.674>of <00:00:32.850>building <00:00:33.025>ui,

7
00:00:35.185 --> 00:00:38.805
<00:00:35.185>but <00:00:35.340>also <00:00:35.496>being <00:00:35.651>so <00:00:35.807>new <00:00:35.962>that <00:00:36.118>it's <00:00:36.273>risky <00:00:36.429>to <00:00:36.585>use.

8
00:00:40.105 --> 00:00:43.525
<00:00:40.105>So <00:00:40.338>you <00:00:40.571>both <00:00:40.805>hear <00:00:41.038>people <00:00:41.271>praising <00:00:41.504>it

9
00:00:44.065 --> 00:00:45.285
<00:00:44.065>and <00:00:44.431>people <00:00:44.797>cursing <00:00:45.163>it.

10
00:00:45.545 --> 00:00:47.085
<00:00:45.545>If <00:00:45.776>I'm <00:00:46.007>very <00:00:46.238>honest, <00:00:46.469>I <00:00:46.700>did <00:00:46.931>both.

11
00:00:48.185 --> 00:00:52.205
<00:00:48.185>Um, <00:00:48.340>and <00:00:48.496>that's <00:00:48.651>really <00:00:48.807>great <00:00:48.962>small <00:00:49.118>examples <00:00:49.273>from <00:00:49.429>a <00:00:49.585>lot

12
00:00:52.205 --> 00:00:53.365
<00:00:52.205>of <00:00:52.413>folks <00:00:52.622>and <00:00:52.831>also <00:00:53.040>from <00:00:53.249>Apple

13
00:00:53.365 --> 00:00:54.805
<00:00:53.365>that <00:00:53.581>show <00:00:53.797>you <00:00:54.013>how <00:00:54.229>amazing <00:00:54.445>it <00:00:54.661>is.

14
00:00:55.185 --> 00:00:56.205
<00:00:55.185>And <00:00:55.414>on <00:00:55.644>the <00:00:55.873>other <00:00:56.103>hand,

15
00:00:56.665 --> 00:01:00.365
<00:00:56.665>you <00:00:56.865>see <00:00:57.065>random <00:00:57.265>attributed <00:00:57.464>graph <00:00:57.665>errors <00:00:57.865>or <00:00:58.065>crashes

16
00:01:01.385 --> 00:01:03.645
<00:01:01.385>and <00:01:01.540>all <00:01:01.696>the <00:01:01.851>things <00:01:02.007>that <00:01:02.162>are <00:01:02.318>missing <00:01:02.473>from <00:01:02.629>Swift <00:01:02.785>ui.

17
00:01:04.895 --> 00:01:07.795
<00:01:04.894>So <00:01:05.050>we <00:01:05.206>wanted <00:01:05.361>to <00:01:05.517>know, <00:01:05.672>uh, <00:01:05.828>so <00:01:05.983>we <00:01:06.139>tried <00:01:06.295>it

18
00:01:07.815 --> 00:01:09.595
<00:01:07.815>and <00:01:08.048>recently <00:01:08.281>shipped <00:01:08.515>a <00:01:08.748>major <00:01:08.981>new <00:01:09.215>feature

19
00:01:10.415 --> 00:01:12.955
<00:01:10.414>in <00:01:10.589>completely <00:01:10.764>built, <00:01:10.940>almost <00:01:11.115>completely <00:01:11.289>built <00:01:11.464>in <00:01:11.639>Swift <00:01:11.815>ui.

20
00:01:14.135 --> 00:01:16.275
<00:01:14.135>And <00:01:14.335>also <00:01:14.535>we <00:01:14.735>are <00:01:14.935>still <00:01:15.135>supporting <00:01:15.335>iOS <00:01:15.535>12.

21
00:01:17.095 --> 00:01:20.295
<00:01:17.095>So <00:01:17.211>here's <00:01:17.328>how <00:01:17.445>we <00:01:17.561>did <00:01:17.678>it <00:01:17.795>and, <00:01:17.911>and <00:01:18.028>here <00:01:18.145>is <00:01:18.261>what <00:01:18.378>we <00:01:18.495>learned.

22
00:01:21.325 --> 00:01:23.385
<00:01:21.325>And <00:01:21.605>a <00:01:21.885>little <00:01:22.165>stepping <00:01:22.445>back <00:01:22.725>before.

23
00:01:24.085 --> 00:01:27.305
<00:01:24.085>Um, <00:01:24.201>as <00:01:24.318>you <00:01:24.435>know, <00:01:24.551>my <00:01:24.668>name <00:01:24.785>is <00:01:24.901>Peter. <00:01:25.018>I, <00:01:25.135>I <00:01:25.251>live <00:01:25.368>in <00:01:25.485>Vienna.

24
00:01:27.425 --> 00:01:29.905
<00:01:27.425>I <00:01:27.625>started <00:01:27.825>working <00:01:28.024>this <00:01:28.225>iOS <00:01:28.425>way <00:01:28.625>back <00:01:28.825>when

25
00:01:29.905 --> 00:01:31.065
<00:01:29.905>we <00:01:30.166>still <00:01:30.426>had <00:01:30.688>viewed <00:01:30.949>unload.

26
00:01:31.215 --> 00:01:33.665
<00:01:31.215>Unfortunately, <00:01:31.415>I <00:01:31.615>don't <00:01:31.815>see <00:01:32.015>the, <00:01:32.215>the <00:01:32.415>faces <00:01:32.615>here,

27
00:01:33.665 --> 00:01:36.665
<00:01:33.664>but <00:01:33.792>I <00:01:33.919>would <00:01:34.046>love <00:01:34.174>to <00:01:34.301>see <00:01:34.428>hands <00:01:34.555>who <00:01:34.683>still <00:01:34.810>had <00:01:34.937>to <00:01:35.065>suffer

28
00:01:36.665 --> 00:01:37.665
<00:01:36.664>through <00:01:36.815>the <00:01:36.964>time <00:01:37.115>where <00:01:37.264>you <00:01:37.414>had <00:01:37.565>to

29
00:01:37.665 --> 00:01:38.705
<00:01:37.664>think <00:01:37.976>about <00:01:38.289>view <00:01:38.601>unloading.

30
00:01:39.775 --> 00:01:42.195
<00:01:39.775>And <00:01:39.975>yeah, <00:01:40.175>I <00:01:40.375>love <00:01:40.575>learning <00:01:40.775>new, <00:01:40.975>new <00:01:41.175>things

31
00:01:42.195 --> 00:01:43.155
<00:01:42.195>and <00:01:42.482>thinking <00:01:42.771>to <00:01:43.059>technologies,

32
00:01:43.155 --> 00:01:44.715
<00:01:43.155>especially <00:01:43.355>if <00:01:43.555>you're <00:01:43.755>still <00:01:43.955>a <00:01:44.155>little <00:01:44.355>bit <00:01:44.555>rough.

33
00:01:45.775 --> 00:01:49.155
<00:01:45.775>So <00:01:45.930>currently <00:01:46.086>my, <00:01:46.241>my <00:01:46.397>Twitter <00:01:46.552>is <00:01:46.708>mostly <00:01:46.863>focused <00:01:47.019>about, <00:01:47.175>um,

34
00:01:49.525 --> 00:01:50.635
<00:01:49.525>swift <00:01:50.024>US <00:01:50.523>specifically.

35
00:01:50.635 --> 00:01:52.635
<00:01:50.634>Usually <00:01:50.984>it's <00:01:51.335>always <00:01:51.684>I <00:01:52.035>topics.

36
00:01:52.855 --> 00:01:56.635
<00:01:52.854>You <00:01:53.010>can <00:01:53.166>follow <00:01:53.321>me <00:01:53.477>at <00:01:53.632>stiped <00:01:53.788>and <00:01:53.943>experience <00:01:54.099>the <00:01:54.255>highs

37
00:01:56.635 --> 00:01:57.755
<00:01:56.634>and <00:01:56.970>lows <00:01:57.306>with <00:01:57.643>me.

38
00:01:57.775 --> 00:01:59.875
<00:01:57.775>And <00:01:58.008>I <00:01:58.241>also <00:01:58.475>founded <00:01:58.708>a <00:01:58.941>company, <00:01:59.175>um,

39
00:02:00.375 --> 00:02:02.595
<00:02:00.375>called <00:02:00.725>P-S-P-D-F <00:02:01.075>Kit <00:02:01.425>in <00:02:01.775>2011.

40
00:02:03.685 --> 00:02:06.065
<00:02:03.685>So <00:02:03.825>what <00:02:03.965>we <00:02:04.105>do <00:02:04.245>at <00:02:04.385>the <00:02:04.525>company <00:02:04.665>level <00:02:04.805>is <00:02:04.945>we <00:02:05.085>are,

41
00:02:06.155 --> 00:02:07.345
<00:02:06.155>we're <00:02:06.422>a <00:02:06.690>small <00:02:06.958>remote <00:02:07.226>company.

42
00:02:07.495 --> 00:02:10.065
<00:02:07.495>Obviously <00:02:07.635>we <00:02:07.775>are, <00:02:07.915>we <00:02:08.055>were <00:02:08.195>a <00:02:08.335>remote <00:02:08.475>before <00:02:08.615>it <00:02:08.755>was <00:02:08.895>cool.

43
00:02:10.445 --> 00:02:14.145
<00:02:10.445>Um, <00:02:10.620>and <00:02:10.794>we <00:02:10.970>focus <00:02:11.144>on <00:02:11.320>solutions <00:02:11.495>to <00:02:11.670>show <00:02:11.845>annotate

44
00:02:14.445 --> 00:02:17.025
<00:02:14.445>and <00:02:14.678>also <00:02:14.911>to <00:02:15.144>sign <00:02:15.378>documents, <00:02:15.611>mostly <00:02:15.845>PDF,

45
00:02:17.725 --> 00:02:19.745
<00:02:17.725>but <00:02:17.958>we <00:02:18.191>also <00:02:18.424>support <00:02:18.658>office <00:02:18.891>image <00:02:19.125>files

46
00:02:20.785 --> 00:02:23.085
<00:02:20.785>so <00:02:20.940>you <00:02:21.096>can <00:02:21.251>display <00:02:21.407>them <00:02:21.562>and <00:02:21.718>annotate <00:02:21.873>them, <00:02:22.029>fill <00:02:22.185>forms,

47
00:02:23.085 --> 00:02:24.405
<00:02:23.085>digitally, <00:02:23.382>sign <00:02:23.679>them, <00:02:23.976>merge <00:02:24.273>flat,

48
00:02:24.405 --> 00:02:26.765
<00:02:24.405>and <00:02:24.560>you <00:02:24.716>name <00:02:24.871>it, <00:02:25.027>we <00:02:25.182>are <00:02:25.338>available <00:02:25.493>on <00:02:25.649>all <00:02:25.805>platform.

49
00:02:27.105 --> 00:02:30.205
<00:02:27.105>And <00:02:27.260>the <00:02:27.416>interesting <00:02:27.571>part <00:02:27.727>is <00:02:27.882>that <00:02:28.038>unlike <00:02:28.193>some <00:02:28.349>other, <00:02:28.505>uh,

50
00:02:30.315 --> 00:02:34.645
<00:02:30.315>solutions, <00:02:30.470>we <00:02:30.626>have <00:02:30.781>a <00:02:30.937>custom <00:02:31.092>built <00:02:31.248>UI <00:02:31.403>for <00:02:31.559>each <00:02:31.715>platform.

51
00:02:34.925 --> 00:02:36.045
<00:02:34.925>Specifically, <00:02:35.261>this <00:02:35.597>is <00:02:35.933>harder,

52
00:02:36.665 --> 00:02:38.165
<00:02:36.665>but <00:02:36.935>we <00:02:37.204>did <00:02:37.475>choose <00:02:37.745>this <00:02:38.015>password.

53
00:02:38.165 --> 00:02:40.565
<00:02:38.165>The <00:02:38.320>product <00:02:38.476>feels <00:02:38.631>like <00:02:38.787>a <00:02:38.942>natural <00:02:39.098>extension <00:02:39.253>of <00:02:39.409>the <00:02:39.565>us,

54
00:02:40.565 --> 00:02:43.365
<00:02:40.565>something <00:02:40.740>Google <00:02:40.915>would <00:02:41.090>build <00:02:41.265>or <00:02:41.440>something <00:02:41.615>Apple <00:02:41.790>would <00:02:41.965>build

55
00:02:43.385 --> 00:02:45.485
<00:02:43.385>and, <00:02:43.665>and <00:02:43.945>not <00:02:44.225>across <00:02:44.505>platform <00:02:44.785>compromise.

56
00:02:47.075 --> 00:02:50.215
<00:02:47.075>So <00:02:47.214>I've <00:02:47.355>been <00:02:47.494>actually <00:02:47.635>very <00:02:47.774>critical <00:02:47.915>towards <00:02:48.054>Swift <00:02:48.195>UI <00:02:48.334>in <00:02:48.475>the

57
00:02:50.215 --> 00:02:53.175
<00:02:50.215>beginning, <00:02:50.390>and <00:02:50.565>I <00:02:50.740>would <00:02:50.915>say <00:02:51.090>for <00:02:51.265>about <00:02:51.440>a <00:02:51.615>year,

58
00:02:54.275 --> 00:02:57.095
<00:02:54.275>but <00:02:54.402>I <00:02:54.529>also <00:02:54.656>heard <00:02:54.784>a <00:02:54.911>lot <00:02:55.038>of <00:02:55.165>reports <00:02:55.293>from <00:02:55.420>people <00:02:55.547>that <00:02:55.675>said

59
00:02:57.095 --> 00:02:58.415
<00:02:57.095>how <00:02:57.491>amazing <00:02:57.887>SWIFT <00:02:58.283>is.

60
00:02:58.435 --> 00:02:59.925
<00:02:58.435>So <00:02:58.626>I <00:02:58.818>wanted <00:02:59.009>to <00:02:59.201>give <00:02:59.392>it <00:02:59.584>a <00:02:59.776>go.

61
00:03:00.865 --> 00:03:04.475
<00:03:00.865>There's <00:03:01.020>quite <00:03:01.176>a <00:03:01.331>famous <00:03:01.487>blog <00:03:01.642>post, <00:03:01.798>uh, <00:03:01.953>called <00:03:02.109>the <00:03:02.265>State

62
00:03:04.495 --> 00:03:08.475
<00:03:04.495>of <00:03:04.695>Swift <00:03:04.895>UI <00:03:05.095>where <00:03:05.295>I <00:03:05.495>take <00:03:05.695>apart, <00:03:05.895>uh,

63
00:03:08.745 --> 00:03:10.475
<00:03:08.745>Apple's <00:03:09.211>Fruita <00:03:09.678>example <00:03:10.145>project.

64
00:03:11.635 --> 00:03:16.545
<00:03:11.635>Now, <00:03:11.834>Fruita <00:03:12.035>is <00:03:12.234>a <00:03:12.435>Swift <00:03:12.635>UI <00:03:12.834>multi-platform <00:03:13.035>app.

65
00:03:17.085 --> 00:03:20.025
<00:03:17.085>So <00:03:17.260>it's <00:03:17.435>native <00:03:17.610>each <00:03:17.785>with <00:03:17.960>AppKit <00:03:18.135>and <00:03:18.310>UI <00:03:18.485>kit,

66
00:03:20.025 --> 00:03:21.225
<00:03:20.025>and <00:03:20.241>there's <00:03:20.457>only <00:03:20.673>one <00:03:20.889>code <00:03:21.105>base.

67
00:03:23.015 --> 00:03:24.955
<00:03:23.015>Uh, <00:03:23.248>it's <00:03:23.481>no <00:03:23.714>catalyst <00:03:23.948>being <00:03:24.181>used <00:03:24.415>here.

68
00:03:25.775 --> 00:03:29.435
<00:03:25.775>The <00:03:25.975>AppKit <00:03:26.175>bindings <00:03:26.375>specifically <00:03:26.575>are <00:03:26.775>a <00:03:26.975>little <00:03:27.175>rough.

69
00:03:30.625 --> 00:03:34.085
<00:03:30.625>So <00:03:30.752>as <00:03:30.879>you <00:03:31.006>see <00:03:31.134>here, <00:03:31.261>as <00:03:31.388>I <00:03:31.515>click <00:03:31.643>around, <00:03:31.770>um, <00:03:31.897>there's <00:03:32.025>things

70
00:03:34.085 --> 00:03:36.245
<00:03:34.085>that <00:03:34.285>jump <00:03:34.485>around <00:03:34.685>and <00:03:34.885>it's <00:03:35.085>actually <00:03:35.285>quite <00:03:35.485>easy

71
00:03:36.985 --> 00:03:39.845
<00:03:36.985>to <00:03:37.160>bring <00:03:37.335>it <00:03:37.510>into <00:03:37.685>a <00:03:37.860>state <00:03:38.035>where <00:03:38.210>it <00:03:38.385>crashes.

72
00:03:40.035 --> 00:03:43.205
<00:03:40.035>It's, <00:03:40.210>it's <00:03:40.385>usually <00:03:40.560>always <00:03:40.734>in <00:03:40.910>the <00:03:41.085>attributed <00:03:41.260>graph <00:03:41.435>power,

73
00:03:43.295 --> 00:03:46.605
<00:03:43.295>which <00:03:43.450>is <00:03:43.606>the <00:03:43.761>thing <00:03:43.917>that, <00:03:44.072>that <00:03:44.228>diffs <00:03:44.383>the <00:03:44.539>view <00:03:44.695>and,

74
00:03:46.625 --> 00:03:48.405
<00:03:46.625>and <00:03:46.975>makes <00:03:47.325>Swift <00:03:47.675>UI <00:03:48.025>work.

75
00:03:49.825 --> 00:03:52.725
<00:03:49.825>Now, <00:03:50.024>apple <00:03:50.225>improved <00:03:50.424>things <00:03:50.625>a <00:03:50.825>lot <00:03:51.024>since <00:03:51.225>the,

76
00:03:52.985 --> 00:03:54.365
<00:03:52.985>the <00:03:53.162>first <00:03:53.339>time <00:03:53.517>I <00:03:53.694>looked <00:03:53.872>at <00:03:54.049>the <00:03:54.227>video.

77
00:03:54.505 --> 00:03:56.085
<00:03:54.505>You <00:03:54.680>see <00:03:54.855>that <00:03:55.030>now <00:03:55.204>we <00:03:55.380>are <00:03:55.555>at <00:03:55.730>the <00:03:55.905>crash.

78
00:03:56.985 --> 00:03:59.765
<00:03:56.985>Uh, <00:03:57.218>this <00:03:57.451>specifically <00:03:57.685>is <00:03:57.918>actually <00:03:58.151>like <00:03:58.385>something

79
00:04:00.195 --> 00:04:01.485
<00:04:00.195>with <00:04:00.582>the <00:04:00.969>tool <00:04:01.356>bindings.

80
00:04:03.135 --> 00:04:04.315
<00:04:03.135>Uh, <00:04:03.347>things <00:04:03.559>got <00:04:03.772>a <00:04:03.984>lot <00:04:04.197>better,

81
00:04:04.415 --> 00:04:06.635
<00:04:04.415>but <00:04:04.570>the, <00:04:04.726>the <00:04:04.881>macro <00:04:05.037>bindings <00:04:05.192>are <00:04:05.348>still <00:04:05.503>not <00:04:05.659>as <00:04:05.815>good

82
00:04:06.635 --> 00:04:07.675
<00:04:06.635>as <00:04:06.947>the <00:04:07.259>iris <00:04:07.571>bindings,

83
00:04:08.295 --> 00:04:11.835
<00:04:08.295>but <00:04:08.494>the <00:04:08.695>good <00:04:08.894>news <00:04:09.095>is <00:04:09.295>that <00:04:09.494>you <00:04:09.695>have

84
00:04:11.835 --> 00:04:14.875
<00:04:11.835>to <00:04:11.990>try <00:04:12.146>quite <00:04:12.301>hard <00:04:12.457>now <00:04:12.612>to, <00:04:12.768>to <00:04:12.923>crash <00:04:13.079>an <00:04:13.235>app.

85
00:04:14.875 --> 00:04:17.635
<00:04:14.875>And <00:04:14.991>I <00:04:15.108>would <00:04:15.225>actually <00:04:15.341>argue <00:04:15.458>that <00:04:15.575>if <00:04:15.691>you <00:04:15.808>give <00:04:15.925>me <00:04:16.041>an <00:04:16.158>app, <00:04:16.274>uh,

86
00:04:17.635 --> 00:04:19.195
<00:04:17.635>and <00:04:17.790>I <00:04:17.946>play <00:04:18.101>with <00:04:18.257>it <00:04:18.412>a <00:04:18.568>few <00:04:18.723>minutes, <00:04:18.879>I'm <00:04:19.034>able

87
00:04:19.195 --> 00:04:21.355
<00:04:19.195>to <00:04:19.474>break <00:04:19.755>almost <00:04:20.034>every <00:04:20.315>app, <00:04:20.594>um,

88
00:04:21.665 --> 00:04:22.995
<00:04:21.665>with <00:04:21.964>just <00:04:22.263>like <00:04:22.562>monkey <00:04:22.862>clicking.

89
00:04:24.435 --> 00:04:29.055
<00:04:24.435>But <00:04:24.551>if <00:04:24.668>you <00:04:24.785>mostly <00:04:24.901>focus <00:04:25.018>on <00:04:25.135>I, <00:04:25.251>then <00:04:25.368>things <00:04:25.485>are <00:04:25.601>a <00:04:25.718>lot <00:04:25.835>better.

90
00:04:30.585 --> 00:04:33.725
<00:04:30.585>And <00:04:30.864>I <00:04:31.145>came <00:04:31.424>from <00:04:31.705>a <00:04:31.984>situation

91
00:04:33.725 --> 00:04:36.285
<00:04:33.725>where <00:04:33.865>I <00:04:34.005>had <00:04:34.145>like <00:04:34.285>very <00:04:34.425>little <00:04:34.565>knowledge <00:04:34.705>of <00:04:34.845>Swift <00:04:34.985>I, <00:04:35.125>so

92
00:04:36.545 --> 00:04:40.245
<00:04:36.545>before <00:04:36.700>shipping <00:04:36.856>something <00:04:37.011>in, <00:04:37.167>in <00:04:37.322>our, <00:04:37.478>in <00:04:37.633>our <00:04:37.789>SD <00:04:37.945>K

93
00:04:40.245 --> 00:04:44.005
<00:04:40.245>that's <00:04:40.420>used <00:04:40.595>by <00:04:40.770>many <00:04:40.945>of <00:04:41.120>the <00:04:41.295>Fortune <00:04:41.470>five <00:04:41.645>hundreds,

94
00:04:44.195 --> 00:04:47.045
<00:04:44.195>like <00:04:44.370>Dropbox <00:04:44.545>for <00:04:44.719>example, <00:04:44.895>we <00:04:45.070>wanted <00:04:45.245>to <00:04:45.420>have <00:04:45.594>something

95
00:04:47.045 --> 00:04:48.165
<00:04:47.045>that's <00:04:47.246>a <00:04:47.448>little <00:04:47.649>bit <00:04:47.851>lower <00:04:48.053>risk

96
00:04:48.165 --> 00:04:49.525
<00:04:48.165>where <00:04:48.339>we <00:04:48.514>have <00:04:48.689>a <00:04:48.864>little <00:04:49.039>bit <00:04:49.214>more <00:04:49.389>control.

97
00:04:50.345 --> 00:04:55.235
<00:04:50.345>So <00:04:50.452>I <00:04:50.560>did <00:04:50.668>pick, <00:04:50.775>I <00:04:50.883>did <00:04:50.991>pick <00:04:51.098>PDF <00:04:51.206>Fewer, <00:04:51.314>which <00:04:51.421>is <00:04:51.529>a <00:04:51.637>free <00:04:51.745>app

98
00:04:55.235 --> 00:04:57.355
<00:04:55.235>that <00:04:55.468>we <00:04:55.701>ship <00:04:55.935>for <00:04:56.168>iOS <00:04:56.401>and <00:04:56.635>mes,

99
00:04:57.895 --> 00:05:00.155
<00:04:57.895>and <00:04:58.128>for <00:04:58.361>mes <00:04:58.594>we <00:04:58.828>actually <00:04:59.061>use <00:04:59.294>Catalyst.

100
00:05:00.895 --> 00:05:04.355
<00:05:00.895>Um, <00:05:01.034>and <00:05:01.174>we <00:05:01.315>recently <00:05:01.455>dropped <00:05:01.594>iOS <00:05:01.734>12 <00:05:01.875>there, <00:05:02.015>so <00:05:02.155>it's <00:05:02.294>a

101
00:05:05.655 --> 00:05:07.295
<00:05:05.655>relative <00:05:06.005>contained <00:05:06.354>and <00:05:06.705>straightforward <00:05:07.054>target.

102
00:05:07.835 --> 00:05:09.215
<00:05:07.835>Now, <00:05:08.042>what <00:05:08.248>I <00:05:08.455>did <00:05:08.662>here <00:05:08.870>is <00:05:09.077>I,

103
00:05:09.375 --> 00:05:12.255
<00:05:09.375>I <00:05:09.550>first <00:05:09.725>rewrote <00:05:09.900>the <00:05:10.075>existing <00:05:10.250>settings <00:05:10.425>in <00:05:10.600>Swift <00:05:10.775>ui.

104
00:05:12.635 --> 00:05:14.775
<00:05:12.635>As <00:05:12.835>you <00:05:13.034>see <00:05:13.235>in <00:05:13.435>the <00:05:13.635>picture, <00:05:13.835>uh, <00:05:14.034>the,

105
00:05:14.795 --> 00:05:18.215
<00:05:14.795>the <00:05:14.922>settings <00:05:15.049>we <00:05:15.176>had <00:05:15.304>very <00:05:15.431>much <00:05:15.558>looked <00:05:15.685>like <00:05:15.813>settings <00:05:15.940>you <00:05:16.067>do <00:05:16.195>in

106
00:05:18.355 --> 00:05:20.895
<00:05:18.355>iOS <00:05:18.530>and <00:05:18.705>not <00:05:18.880>like <00:05:19.055>settings <00:05:19.230>are <00:05:19.405>on <00:05:19.580>the <00:05:19.755>Mac.

107
00:05:20.915 --> 00:05:24.455
<00:05:20.915>So <00:05:21.042>my <00:05:21.169>first <00:05:21.296>step <00:05:21.424>was <00:05:21.551>to <00:05:21.678>don't <00:05:21.805>care <00:05:21.933>about <00:05:22.060>the <00:05:22.187>ui, <00:05:22.315>just

108
00:05:25.125 --> 00:05:27.775
<00:05:25.125>make <00:05:25.325>it <00:05:25.525>work <00:05:25.725>like <00:05:25.925>the, <00:05:26.125>the <00:05:26.325>previous <00:05:26.525>version

109
00:05:27.835 --> 00:05:29.455
<00:05:27.835>and <00:05:28.068>just <00:05:28.301>rewrite <00:05:28.534>it <00:05:28.768>in <00:05:29.001>Swift <00:05:29.234>ui.

110
00:05:29.765 --> 00:05:31.775
<00:05:29.765>Once <00:05:29.998>we <00:05:30.231>shipped <00:05:30.465>that, <00:05:30.698>I <00:05:30.931>went <00:05:31.164>back

111
00:05:31.795 --> 00:05:35.055
<00:05:31.795>and <00:05:32.075>actually <00:05:32.355>started, <00:05:32.635>uh, <00:05:32.915>styling <00:05:33.195>it.

112
00:05:35.075 --> 00:05:39.575
<00:05:35.075>So <00:05:35.215>it <00:05:35.354>actually <00:05:35.495>looks <00:05:35.635>like, <00:05:35.775>uh, <00:05:35.914>a <00:05:36.055>Mac <00:05:36.195>signature <00:05:36.335>UI <00:05:36.474>and,

113
00:05:39.595 --> 00:05:42.135
<00:05:39.595>and <00:05:39.735>still <00:05:39.875>most <00:05:40.015>of <00:05:40.155>it <00:05:40.295>is <00:05:40.435>shared <00:05:40.575>code, <00:05:40.715>which <00:05:40.855>is <00:05:40.995>also

114
00:05:43.475 --> 00:05:45.465
<00:05:43.475>quite <00:05:43.708>easy <00:05:43.941>because <00:05:44.175>we <00:05:44.408>use <00:05:44.641>Swift <00:05:44.875>ui.

115
00:05:47.295 --> 00:05:49.675
<00:05:47.295>Um, <00:05:47.575>after <00:05:47.855>we <00:05:48.135>shipped <00:05:48.415>that, <00:05:48.695>the,

116
00:05:49.675 --> 00:05:53.835
<00:05:49.675>the <00:05:49.802>next <00:05:49.929>big <00:05:50.056>feature <00:05:50.184>we <00:05:50.311>we <00:05:50.438>picked <00:05:50.565>to <00:05:50.693>try <00:05:50.820>Swift <00:05:50.947>UI <00:05:51.075>was

117
00:05:54.635 --> 00:05:56.835
<00:05:54.635>a <00:05:54.914>new <00:05:55.195>feature <00:05:55.474>for <00:05:55.755>electronic <00:05:56.034>signatures.

118
00:05:56.835 --> 00:05:59.365
<00:05:56.835>Now, <00:05:57.114>signatures <00:05:57.395>are <00:05:57.674>important <00:05:57.955>use <00:05:58.234>case

119
00:05:59.365 --> 00:06:02.725
<00:05:59.365>and <00:05:59.565>we've <00:05:59.765>been <00:05:59.965>supporting <00:06:00.165>PDF <00:06:00.365>signing <00:06:00.565>for <00:06:00.765>years.

120
00:06:03.925 --> 00:06:05.015
<00:06:03.925>It's, <00:06:04.088>it's <00:06:04.252>one <00:06:04.415>of <00:06:04.579>the <00:06:04.742>most <00:06:04.906>used

121
00:06:05.255 --> 00:06:06.335
<00:06:05.255>features <00:06:05.498>on, <00:06:05.741>on <00:06:05.984>our <00:06:06.227>platform.

122
00:06:06.875 --> 00:06:09.895
<00:06:06.875>Um, <00:06:06.991>but <00:06:07.108>with <00:06:07.225>in <00:06:07.341>new <00:06:07.458>flow, <00:06:07.575>you <00:06:07.691>can <00:06:07.808>not <00:06:07.925>only <00:06:08.041>sign <00:06:08.158>via <00:06:08.275>drawing,

123
00:06:10.155 --> 00:06:12.255
<00:06:10.155>but <00:06:10.330>you <00:06:10.505>can <00:06:10.679>also <00:06:10.854>sign <00:06:11.030>via <00:06:11.205>scanning <00:06:11.380>a <00:06:11.554>picture

124
00:06:12.715 --> 00:06:15.935
<00:06:12.715>or <00:06:12.948>just <00:06:13.181>typing <00:06:13.414>a <00:06:13.648>signature, <00:06:13.881>uh, <00:06:14.114>something

125
00:06:16.015 --> 00:06:18.295
<00:06:16.015>that <00:06:16.215>you <00:06:16.414>commonly <00:06:16.615>know <00:06:16.815>from <00:06:17.015>companies <00:06:17.215>like <00:06:17.414>DocuSign.

126
00:06:19.615 --> 00:06:20.715
<00:06:19.615>Now <00:06:20.604>also,

127
00:06:20.715 --> 00:06:23.115
<00:06:20.715>because <00:06:20.890>it's <00:06:21.065>such <00:06:21.239>an <00:06:21.414>initial <00:06:21.590>feature, <00:06:21.765>the <00:06:21.940>previous <00:06:22.114>UI

128
00:06:23.775 --> 00:06:25.595
<00:06:23.775>has <00:06:24.008>been <00:06:24.241>written <00:06:24.474>quite <00:06:24.708>a <00:06:24.941>while <00:06:25.174>ago,

129
00:06:26.855 --> 00:06:29.075
<00:06:26.855>so <00:06:26.971>it <00:06:27.088>was <00:06:27.205>still <00:06:27.321>an <00:06:27.438>objective <00:06:27.555>c <00:06:27.671>it <00:06:27.788>didn't <00:06:27.905>use <00:06:28.021>all <00:06:28.138>the <00:06:28.255>layout.

130
00:06:29.575 --> 00:06:31.675
<00:06:29.575>Uh, <00:06:29.750>it <00:06:29.925>you, <00:06:30.099>you <00:06:30.275>could <00:06:30.450>set <00:06:30.625>doesn't <00:06:30.800>only <00:06:30.974>feel

131
00:06:31.675 --> 00:06:32.875
<00:06:31.675>the <00:06:31.855>age <00:06:32.035>when <00:06:32.215>you <00:06:32.395>worked <00:06:32.575>with <00:06:32.755>it.

132
00:06:34.515 --> 00:06:37.255
<00:06:34.515>Uh, <00:06:34.670>so <00:06:34.826>it <00:06:34.981>was <00:06:35.137>a <00:06:35.292>good <00:06:35.448>candidate <00:06:35.603>for <00:06:35.759>a <00:06:35.914>rewrite.

133
00:06:38.345 --> 00:06:41.565
<00:06:38.345>Now <00:06:38.500>what <00:06:38.656>we <00:06:38.811>did <00:06:38.967>for <00:06:39.122>OS <00:06:39.278>compatibility <00:06:39.433>is <00:06:39.589>we <00:06:39.745>plan

134
00:06:41.565 --> 00:06:44.565
<00:06:41.565>to <00:06:41.720>drop <00:06:41.876>I <00:06:42.031>12 <00:06:42.187>later <00:06:42.342>this <00:06:42.498>summer <00:06:42.653>when <00:06:42.809>we <00:06:42.965>start

135
00:06:44.565 --> 00:06:45.765
<00:06:44.565>working <00:06:44.925>on <00:06:45.284>iOS <00:06:45.645>15.

136
00:06:46.105 --> 00:06:50.005
<00:06:46.105>Um, <00:06:46.232>and <00:06:46.359>I <00:06:46.486>think <00:06:46.614>WWC <00:06:46.741>is <00:06:46.868>now <00:06:46.995>around <00:06:47.123>five <00:06:47.250>weeks <00:06:47.377>away, <00:06:47.505>so

137
00:06:50.005 --> 00:06:51.685
<00:06:50.005>that's <00:06:50.238>actually <00:06:50.471>probably <00:06:50.705>gonna <00:06:50.938>happen <00:06:51.171>very <00:06:51.405>soon,

138
00:06:52.665 --> 00:06:56.245
<00:06:52.665>but <00:06:52.840>until <00:06:53.015>this <00:06:53.190>happens, <00:06:53.365>the <00:06:53.540>existing <00:06:53.715>drawing <00:06:53.890>signature <00:06:54.065>flow,

139
00:06:56.245 --> 00:06:59.045
<00:06:56.245>which <00:06:56.445>works <00:06:56.645>fine, <00:06:56.845>also <00:06:57.045>stays <00:06:57.245>in <00:06:57.445>our <00:06:57.645>product

140
00:06:59.105 --> 00:07:00.205
<00:06:59.105>for <00:06:59.352>the <00:06:59.600>IS <00:06:59.847>12 <00:07:00.094>users.

141
00:07:01.355 --> 00:07:03.455
<00:07:01.355>And <00:07:01.555>if <00:07:01.755>we <00:07:01.955>detect <00:07:02.155>Iris <00:07:02.355>13 <00:07:02.555>or <00:07:02.755>later,

142
00:07:03.835 --> 00:07:05.735
<00:07:03.835>and <00:07:04.068>also <00:07:04.301>with <00:07:04.534>the <00:07:04.768>the <00:07:05.001>correct <00:07:05.234>license,

143
00:07:06.275 --> 00:07:07.855
<00:07:06.275>we <00:07:06.508>switch <00:07:06.741>to <00:07:06.974>the <00:07:07.208>new <00:07:07.441>flow <00:07:07.674>instead.

144
00:07:09.685 --> 00:07:11.985
<00:07:09.685>Um, <00:07:09.918>for <00:07:10.151>us, <00:07:10.385>swift <00:07:10.618>UI <00:07:10.851>is <00:07:11.085>attractive

145
00:07:11.985 --> 00:07:16.105
<00:07:11.985>because <00:07:12.160>it <00:07:12.335>greatly <00:07:12.510>simplifies <00:07:12.685>the <00:07:12.860>flow <00:07:13.035>of <00:07:13.210>updating <00:07:13.385>views.

146
00:07:17.315 --> 00:07:20.165
<00:07:17.315>It's <00:07:17.490>much <00:07:17.665>harder <00:07:17.840>to <00:07:18.015>make <00:07:18.190>an <00:07:18.365>update <00:07:18.540>related <00:07:18.715>bug

147
00:07:20.165 --> 00:07:22.085
<00:07:20.165>and <00:07:20.365>it's <00:07:20.565>easier <00:07:20.765>to <00:07:20.965>reason <00:07:21.165>about <00:07:21.365>the <00:07:21.565>UI

148
00:07:22.085 --> 00:07:23.525
<00:07:22.085>state <00:07:22.409>at <00:07:22.733>any <00:07:23.056>given <00:07:23.381>moment.

149
00:07:23.725 --> 00:07:25.565
<00:07:23.725>I, <00:07:23.900>I <00:07:24.075>would <00:07:24.250>say <00:07:24.425>it's <00:07:24.600>actually <00:07:24.775>much, <00:07:24.950>much <00:07:25.125>easier,

150
00:07:25.565 --> 00:07:27.005
<00:07:25.565>especially <00:07:25.997>for <00:07:26.429>Complex <00:07:26.861>ui.

151
00:07:27.795 --> 00:07:31.925
<00:07:27.795>Another <00:07:27.950>reason <00:07:28.106>that <00:07:28.261>we <00:07:28.417>as <00:07:28.572>a <00:07:28.728>team, <00:07:28.883>we <00:07:29.039>have <00:07:29.195>the,

152
00:07:33.325 --> 00:07:36.385
<00:07:33.325>the <00:07:33.452>motto <00:07:33.579>that <00:07:33.706>we <00:07:33.834>are <00:07:33.961>only <00:07:34.088>allowed <00:07:34.215>to <00:07:34.343>write <00:07:34.470>UI <00:07:34.597>in <00:07:34.724>code.

153
00:07:36.605 --> 00:07:40.385
<00:07:36.605>Now, <00:07:36.780>um, <00:07:36.955>with <00:07:37.130>Xcode <00:07:37.305>you <00:07:37.480>can <00:07:37.655>also <00:07:37.830>build <00:07:38.005>UI

154
00:07:40.695 --> 00:07:43.945
<00:07:40.695>with <00:07:40.835>Interface <00:07:40.974>Builder, <00:07:41.115>but <00:07:41.255>if <00:07:41.395>you <00:07:41.534>work <00:07:41.675>in <00:07:41.815>a <00:07:41.955>larger <00:07:42.094>team

155
00:07:43.965 --> 00:07:47.185
<00:07:43.965>and <00:07:44.120>you <00:07:44.276>tried, <00:07:44.431>uh, <00:07:44.587>to <00:07:44.742>merge <00:07:44.898>files <00:07:45.053>that <00:07:45.209>are <00:07:45.365>conflict,

156
00:07:48.005 --> 00:07:50.385
<00:07:48.005>you <00:07:48.121>know, <00:07:48.238>the <00:07:48.355>pain, <00:07:48.471>uh, <00:07:48.588>so <00:07:48.705>that <00:07:48.821>was <00:07:48.938>one <00:07:49.055>of <00:07:49.171>the <00:07:49.288>reasons <00:07:49.405>why

157
00:07:51.205 --> 00:07:52.985
<00:07:51.205>we <00:07:51.405>said, <00:07:51.604>no, <00:07:51.805>this <00:07:52.005>is <00:07:52.205>not <00:07:52.405>worth <00:07:52.604>it.

158
00:07:53.205 --> 00:07:55.425
<00:07:53.205>We <00:07:53.332>write <00:07:53.459>it <00:07:53.586>in <00:07:53.714>code, <00:07:53.841>it's <00:07:53.968>a <00:07:54.095>little <00:07:54.223>bit <00:07:54.350>more <00:07:54.477>work <00:07:54.604>upfront,

159
00:07:56.165 --> 00:07:58.265
<00:07:56.165>but <00:07:56.305>at <00:07:56.445>least <00:07:56.585>we <00:07:56.725>don't <00:07:56.865>have <00:07:57.005>to <00:07:57.145>deal <00:07:57.285>with <00:07:57.425>merge <00:07:57.565>conflicts.

160
00:07:59.545 --> 00:08:02.565
<00:07:59.545>So <00:07:59.685>because <00:07:59.825>we <00:07:59.965>already <00:08:00.105>write <00:08:00.245>all <00:08:00.385>our <00:08:00.525>UI <00:08:00.665>in <00:08:00.805>code, <00:08:00.945>uh,

161
00:08:02.985 --> 00:08:05.205
<00:08:02.985>safety <00:08:03.185>UI <00:08:03.385>is <00:08:03.585>such <00:08:03.785>a <00:08:03.985>big <00:08:04.185>step <00:08:04.385>up

162
00:08:05.205 --> 00:08:08.435
<00:08:05.205>because <00:08:05.438>it's <00:08:05.671>just <00:08:05.905>so <00:08:06.138>much <00:08:06.371>fewer <00:08:06.604>code

163
00:08:08.435 --> 00:08:13.035
<00:08:08.435>and <00:08:08.551>so <00:08:08.668>much <00:08:08.785>more <00:08:08.901>expressive, <00:08:09.018>um, <00:08:09.135>which <00:08:09.251>we <00:08:09.368>see <00:08:09.485>as <00:08:09.601>a <00:08:09.718>big <00:08:09.835>win.

164
00:08:13.975 --> 00:08:15.305
<00:08:13.975>Another <00:08:14.374>benefit <00:08:14.773>is <00:08:15.172>that

165
00:08:15.655 --> 00:08:17.665
<00:08:15.655>what <00:08:15.810>Apple <00:08:15.966>did <00:08:16.121>right <00:08:16.277>here <00:08:16.432>is <00:08:16.588>it <00:08:16.743>can <00:08:16.899>be <00:08:17.054>mixed

166
00:08:17.935 --> 00:08:20.065
<00:08:17.935>with <00:08:18.285>existing <00:08:18.635>code <00:08:18.985>very <00:08:19.335>easily.

167
00:08:21.415 --> 00:08:23.795
<00:08:21.415>For <00:08:21.648>example, <00:08:21.881>our <00:08:22.115>raw <00:08:22.348>view, <00:08:22.581>the <00:08:22.815>one

168
00:08:23.795 --> 00:08:26.035
<00:08:23.795>where <00:08:23.995>you <00:08:24.195>draw <00:08:24.395>the <00:08:24.595>signature <00:08:24.795>is <00:08:24.995>highly <00:08:25.195>optimized

169
00:08:26.055 --> 00:08:30.195
<00:08:26.055>and <00:08:26.195>we <00:08:26.335>have <00:08:26.475>features <00:08:26.615>such <00:08:26.755>as <00:08:26.895>natural <00:08:27.035>drawing <00:08:27.175>where <00:08:27.315>we, <00:08:27.455>we,

170
00:08:30.295 --> 00:08:33.235
<00:08:30.295>we, <00:08:30.450>we <00:08:30.606>changed <00:08:30.761>the <00:08:30.917>sickness, <00:08:31.072>uh, <00:08:31.228>of, <00:08:31.383>of <00:08:31.539>the <00:08:31.695>past

171
00:08:33.295 --> 00:08:34.755
<00:08:33.294>as <00:08:33.557>you <00:08:33.820>move <00:08:34.083>along <00:08:34.346>to <00:08:34.609>simulate

172
00:08:34.755 --> 00:08:35.955
<00:08:34.755>how <00:08:34.934>you <00:08:35.115>would <00:08:35.295>draw <00:08:35.475>with <00:08:35.655>a <00:08:35.835>pencil.

173
00:08:36.655 --> 00:08:39.035
<00:08:36.655>We, <00:08:36.934>we <00:08:37.214>support <00:08:37.495>predictive <00:08:37.775>touches, <00:08:38.054>especially

174
00:08:39.035 --> 00:08:40.275
<00:08:39.034>with <00:08:39.313>the <00:08:39.592>the <00:08:39.871>Apple <00:08:40.150>pencil.

175
00:08:41.625 --> 00:08:43.325
<00:08:41.625>Uh, <00:08:41.975>we <00:08:42.325>kind <00:08:42.674>of <00:08:43.025>know

176
00:08:43.325 --> 00:08:46.365
<00:08:43.325>where <00:08:43.452>you <00:08:43.579>will <00:08:43.706>already <00:08:43.834>go <00:08:43.961>next <00:08:44.088>based <00:08:44.215>on <00:08:44.343>some <00:08:44.470>of <00:08:44.597>the <00:08:44.725>data.

177
00:08:46.745 --> 00:08:49.845
<00:08:46.745>So <00:08:46.900>you <00:08:47.056>really <00:08:47.211>like <00:08:47.367>get <00:08:47.522>this <00:08:47.678>feeling <00:08:47.833>right <00:08:47.989>where, <00:08:48.145>uh,

178
00:08:49.905 --> 00:08:51.845
<00:08:49.905>as <00:08:50.138>Apple <00:08:50.371>say, <00:08:50.605>it's <00:08:50.838>a <00:08:51.071>magical <00:08:51.305>experience

179
00:08:51.845 --> 00:08:54.765
<00:08:51.845>and <00:08:51.985>the <00:08:52.125>lime <00:08:52.265>just <00:08:52.405>sticks <00:08:52.545>very <00:08:52.685>much <00:08:52.825>to <00:08:52.965>where <00:08:53.105>you <00:08:53.245>draw.

180
00:08:55.585 --> 00:08:57.365
<00:08:55.585>Now <00:08:55.760>there's <00:08:55.935>a <00:08:56.110>lot <00:08:56.285>of <00:08:56.460>tricky <00:08:56.635>mouse <00:08:56.810>in <00:08:56.985>there

181
00:08:57.365 --> 00:08:59.485
<00:08:57.365>and <00:08:57.520>this <00:08:57.676>has <00:08:57.831>been <00:08:57.987>written <00:08:58.142>in <00:08:58.298>objective <00:08:58.453>c <00:08:58.609>plus <00:08:58.765>plus,

182
00:08:59.585 --> 00:09:01.215
<00:08:59.585>and <00:09:00.285>I <00:09:00.985>argue,

183
00:09:01.355 --> 00:09:03.615
<00:09:01.355>and <00:09:01.530>hopefully <00:09:01.705>some, <00:09:01.880>someone <00:09:02.055>challenged <00:09:02.230>me <00:09:02.405>at <00:09:02.580>some <00:09:02.755>point

184
00:09:04.165 --> 00:09:08.215
<00:09:04.165>that <00:09:04.320>currently <00:09:04.476>this <00:09:04.631>cannot <00:09:04.787>be <00:09:04.942>done <00:09:05.098>in <00:09:05.253>pure <00:09:05.409>Swift <00:09:05.564>ui.

185
00:09:08.405 --> 00:09:12.295
<00:09:08.405>There's <00:09:08.579>simply <00:09:08.755>no <00:09:08.930>API <00:09:09.105>for, <00:09:09.280>uh, <00:09:09.454>high <00:09:09.630>frequency <00:09:09.805>touches,

186
00:09:12.435 --> 00:09:14.295
<00:09:12.435>for <00:09:12.714>predictive <00:09:12.994>touches <00:09:13.275>that's <00:09:13.555>just <00:09:13.834>not

187
00:09:14.295 --> 00:09:15.335
<00:09:14.295>have <00:09:14.529>been <00:09:14.763>poured <00:09:14.997>at <00:09:15.231>all.

188
00:09:16.405 --> 00:09:19.345
<00:09:16.405>So <00:09:16.532>if <00:09:16.659>you <00:09:16.786>wanna <00:09:16.914>deal <00:09:17.041>with <00:09:17.168>a <00:09:17.295>great <00:09:17.423>number <00:09:17.550>of <00:09:17.677>points, <00:09:17.805>um,

189
00:09:20.865 --> 00:09:23.285
<00:09:20.865>you <00:09:21.005>probably <00:09:21.145>need <00:09:21.285>to <00:09:21.425>go <00:09:21.565>down <00:09:21.705>to <00:09:21.845>the <00:09:21.985>platform <00:09:22.125>level <00:09:22.265>anyhow.

190
00:09:23.425 --> 00:09:26.725
<00:09:23.425>Now, <00:09:23.564>this <00:09:23.704>might <00:09:23.844>be <00:09:23.984>a <00:09:24.125>little <00:09:24.265>bit <00:09:24.405>overkill <00:09:24.545>for <00:09:24.685>a <00:09:24.824>signature,

191
00:09:27.905 --> 00:09:31.245
<00:09:27.905>but <00:09:28.045>we <00:09:28.185>also <00:09:28.324>reviews <00:09:28.464>the <00:09:28.605>same <00:09:28.745>draw <00:09:28.885>view <00:09:29.025>for <00:09:29.165>PDF <00:09:29.305>pages

192
00:09:31.425 --> 00:09:33.565
<00:09:31.425>and <00:09:31.580>imagine <00:09:31.736>if <00:09:31.891>you <00:09:32.047>make <00:09:32.202>a <00:09:32.358>lot <00:09:32.513>of <00:09:32.669>handwritten <00:09:32.824>notes

193
00:09:33.565 --> 00:09:34.925
<00:09:33.565>that <00:09:33.871>performance <00:09:34.177>is <00:09:34.483>really <00:09:34.789>critical.

194
00:09:35.705 --> 00:09:39.085
<00:09:35.705>Um, <00:09:35.860>and <00:09:36.016>by <00:09:36.171>using <00:09:36.327>Swift <00:09:36.482>UI, <00:09:36.638>we <00:09:36.793>can <00:09:36.949>still <00:09:37.105>use

195
00:09:39.345 --> 00:09:40.765
<00:09:39.345>that's <00:09:39.558>very <00:09:39.771>draw <00:09:39.984>view <00:09:40.197>and <00:09:40.410>don't <00:09:40.623>have

196
00:09:40.765 --> 00:09:41.925
<00:09:40.765>to <00:09:41.026>like <00:09:41.286>reinvent <00:09:41.548>the <00:09:41.809>wheel.

197
00:09:43.055 --> 00:09:47.195
<00:09:43.055>Now, <00:09:43.210>I <00:09:43.366>did <00:09:43.521>imagine <00:09:43.677>that <00:09:43.832>our <00:09:43.988>SDK <00:09:44.143>started <00:09:44.299>in <00:09:44.454>2011.

198
00:09:48.495 --> 00:09:49.645
<00:09:48.495>There <00:09:48.702>is <00:09:48.909>a <00:09:49.116>lot <00:09:49.323>of <00:09:49.530>code

199
00:09:50.225 --> 00:09:53.645
<00:09:50.225>and <00:09:50.425>until <00:09:50.625>very <00:09:50.825>recently <00:09:51.025>actually <00:09:51.225>with <00:09:51.425>Swift <00:09:51.625>five,

200
00:09:54.815 --> 00:09:56.115
<00:09:54.815>we <00:09:55.107>couldn't <00:09:55.400>use <00:09:55.692>Swift <00:09:55.985>ui.

201
00:09:57.895 --> 00:09:58.915
<00:09:57.895>Uh, <00:09:58.078>we <00:09:58.262>couldn't <00:09:58.445>use <00:09:58.629>Swift <00:09:58.813>UI

202
00:09:58.915 --> 00:10:01.955
<00:09:58.915>because <00:09:59.148>our <00:09:59.381>customers, <00:09:59.615>they <00:09:59.848>wanna <00:10:00.081>have <00:10:00.314>flexibility

203
00:10:01.955 --> 00:10:03.315
<00:10:01.955>of <00:10:02.261>using <00:10:02.567>different <00:10:02.873>xcode <00:10:03.179>versions

204
00:10:03.935 --> 00:10:06.875
<00:10:03.935>and <00:10:04.109>only <00:10:04.285>with <00:10:04.459>version <00:10:04.635>five <00:10:04.810>Apple <00:10:04.984>added <00:10:05.160>binary <00:10:05.334>compatibility.

205
00:10:07.275 --> 00:10:08.755
<00:10:07.275>Previously <00:10:07.608>you <00:10:07.941>would've <00:10:08.274>been <00:10:08.607>bound

206
00:10:08.775 --> 00:10:10.675
<00:10:08.775>to <00:10:09.008>the <00:10:09.241>very <00:10:09.475>patch <00:10:09.708>version <00:10:09.941>of <00:10:10.175>Xcode.

207
00:10:11.255 --> 00:10:13.355
<00:10:11.255>So <00:10:11.410>there's <00:10:11.566>still <00:10:11.721>a <00:10:11.877>lot <00:10:12.032>of <00:10:12.188>objective <00:10:12.343>C <00:10:12.499>in <00:10:12.655>there

208
00:10:13.355 --> 00:10:14.555
<00:10:13.355>and <00:10:13.625>it's, <00:10:13.895>it's <00:10:14.165>not <00:10:14.435>realistic

209
00:10:14.575 --> 00:10:15.955
<00:10:14.575>or <00:10:14.989>useful <00:10:15.403>to <00:10:15.817>write,

210
00:10:16.135 --> 00:10:18.355
<00:10:16.135>to <00:10:16.310>rewrite <00:10:16.485>everything <00:10:16.660>just <00:10:16.835>for <00:10:17.010>the <00:10:17.185>sake <00:10:17.360>of <00:10:17.535>rewriting.

211
00:10:19.275 --> 00:10:21.335
<00:10:19.275>But <00:10:19.430>also, <00:10:19.586>don't <00:10:19.741>worry, <00:10:19.897>this <00:10:20.052>will <00:10:20.208>be <00:10:20.363>the <00:10:20.519>only <00:10:20.675>slide

212
00:10:21.725 --> 00:10:22.975
<00:10:21.725>with <00:10:22.006>objective <00:10:22.287>C <00:10:22.568>on <00:10:22.850>it.

213
00:10:24.015 --> 00:10:27.705
<00:10:24.015>Uh, <00:10:24.142>in <00:10:24.269>this <00:10:24.396>code <00:10:24.524>you <00:10:24.651>see <00:10:24.778>that <00:10:24.905>how <00:10:25.033>we <00:10:25.160>invoke <00:10:25.287>the <00:10:25.415>feature,

214
00:10:27.765 --> 00:10:30.225
<00:10:27.765>the <00:10:27.920>Swift <00:10:28.076>Air <00:10:28.231>code <00:10:28.387>is <00:10:28.542>encapsulated <00:10:28.698>in <00:10:28.853>a <00:10:29.009>UI <00:10:29.165>hosting

215
00:10:30.465 --> 00:10:33.385
<00:10:30.465>controller <00:10:30.698>presentation <00:10:30.931>is <00:10:31.165>handled <00:10:31.398>by <00:10:31.631>UI <00:10:31.865>kit

216
00:10:34.045 --> 00:10:36.425
<00:10:34.045>and <00:10:34.278>Swift <00:10:34.511>GI <00:10:34.745>really <00:10:34.978>is <00:10:35.211>fairly <00:10:35.444>contained

217
00:10:36.445 --> 00:10:37.585
<00:10:36.445>in <00:10:36.787>the <00:10:37.129>signature <00:10:37.471>component.

218
00:10:37.685 --> 00:10:41.025
<00:10:37.685>If <00:10:37.824>we <00:10:37.964>detect <00:10:38.104>iOS <00:10:38.244>12, <00:10:38.385>um, <00:10:38.525>that <00:10:38.665>is <00:10:38.805>the <00:10:38.944>first <00:10:39.084>part

219
00:10:41.025 --> 00:10:42.505
<00:10:41.025>that <00:10:41.358>we <00:10:41.691>call <00:10:42.024>legacy <00:10:42.357>signatures.

220
00:10:42.965 --> 00:10:45.665
<00:10:42.965>We, <00:10:43.140>we <00:10:43.315>defer <00:10:43.490>to <00:10:43.665>the, <00:10:43.840>the <00:10:44.015>previous <00:10:44.190>signature <00:10:44.365>component.

221
00:10:45.855 --> 00:10:49.735
<00:10:45.855>This <00:10:46.030>still <00:10:46.205>works <00:10:46.380>great <00:10:46.555>just <00:10:46.730>in <00:10:46.905>this <00:10:47.080>feature <00:10:47.255>Rich.

222
00:10:50.675 --> 00:10:52.495
<00:10:50.675>If <00:10:50.849>we <00:10:51.025>detect <00:10:51.199>that <00:10:51.375>we <00:10:51.550>are <00:10:51.724>a <00:10:51.900>modern <00:10:52.074>OS

223
00:10:52.515 --> 00:10:56.615
<00:10:52.515>and <00:10:52.689>that <00:10:52.865>the <00:10:53.040>internal <00:10:53.215>licensing <00:10:53.390>works <00:10:53.564>out, <00:10:53.740>we <00:10:53.915>move

224
00:10:56.635 --> 00:10:59.335
<00:10:56.635>to <00:10:56.868>the <00:10:57.101>new <00:10:57.335>signature <00:10:57.568>creation <00:10:57.801>view <00:10:58.035>controller.

225
00:11:01.425 --> 00:11:03.765
<00:11:01.425>And <00:11:01.580>uh, <00:11:01.736>the <00:11:01.891>only <00:11:02.047>difference <00:11:02.202>you <00:11:02.358>probably <00:11:02.513>see <00:11:02.669>here <00:11:02.824>is

226
00:11:03.765 --> 00:11:07.395
<00:11:03.765>that <00:11:03.920>in <00:11:04.076>our <00:11:04.231>new <00:11:04.387>component <00:11:04.542>we <00:11:04.698>use <00:11:04.853>navigation <00:11:05.009>view, <00:11:05.165>uh,

227
00:11:07.395 --> 00:11:10.395
<00:11:07.395>because <00:11:07.595>you <00:11:07.795>also <00:11:07.995>wanna <00:11:08.194>fine <00:11:08.395>tune <00:11:08.595>the <00:11:08.795>buttons

228
00:11:10.455 --> 00:11:11.555
<00:11:10.455>in <00:11:10.950>Swift <00:11:11.444>directly.

229
00:11:12.175 --> 00:11:15.675
<00:11:12.175>So <00:11:12.330>there's <00:11:12.486>like <00:11:12.641>a <00:11:12.797>bull <00:11:12.952>that <00:11:13.108>indicates <00:11:13.263>if, <00:11:13.419>if <00:11:13.574>the,

230
00:11:15.775 --> 00:11:17.395
<00:11:15.775>the <00:11:16.008>controller <00:11:16.241>needs <00:11:16.475>wrapping <00:11:16.708>or <00:11:16.941>not, <00:11:17.175>but

231
00:11:17.395 --> 00:11:19.355
<00:11:17.395>otherwise <00:11:17.628>the <00:11:17.861>flow <00:11:18.095>is <00:11:18.328>very <00:11:18.561>much <00:11:18.795>similar.

232
00:11:20.215 --> 00:11:22.635
<00:11:20.215>And <00:11:20.448>ultimately <00:11:20.681>our <00:11:20.915>customers, <00:11:21.148>they <00:11:21.381>never <00:11:21.615>know

233
00:11:23.145 --> 00:11:24.355
<00:11:23.145>that <00:11:23.417>they're <00:11:23.689>actually <00:11:23.961>using <00:11:24.234>swift.

234
00:11:24.825 --> 00:11:27.235
<00:11:24.825>They <00:11:25.000>still <00:11:25.175>have <00:11:25.350>an <00:11:25.525>objective <00:11:25.700>CEPI <00:11:25.875>if <00:11:26.050>they <00:11:26.225>do.

235
00:11:27.235 --> 00:11:29.635
<00:11:27.235>So, <00:11:27.435>uh, <00:11:27.635>we <00:11:27.835>have <00:11:28.035>some <00:11:28.235>large <00:11:28.435>customers <00:11:28.635>that,

236
00:11:29.745 --> 00:11:31.435
<00:11:29.745>that <00:11:30.095>still <00:11:30.445>have <00:11:30.795>code <00:11:31.145>bases

237
00:11:31.435 --> 00:11:32.835
<00:11:31.435>where <00:11:31.645>they <00:11:31.855>don't <00:11:32.064>wanna <00:11:32.275>move <00:11:32.485>to <00:11:32.695>Swift.

238
00:11:33.215 --> 00:11:35.595
<00:11:33.215>So <00:11:33.342>it <00:11:33.469>was <00:11:33.596>important <00:11:33.724>to <00:11:33.851>like <00:11:33.978>have <00:11:34.105>the <00:11:34.233>full <00:11:34.360>range <00:11:34.487>offering <00:11:34.615>on

239
00:11:35.595 --> 00:11:39.275
<00:11:35.595>the <00:11:35.750>API <00:11:35.906>level, <00:11:36.061>but <00:11:36.217>also <00:11:36.372>we <00:11:36.528>can <00:11:36.683>use <00:11:36.839>like, <00:11:36.995>uh,

240
00:11:39.535 --> 00:11:40.755
<00:11:39.535>really <00:11:40.084>recent <00:11:40.633>technologies.

241
00:11:42.055 --> 00:11:46.555
<00:11:42.055>Now <00:11:42.171>there <00:11:42.288>is <00:11:42.405>of <00:11:42.521>course <00:11:42.638>also <00:11:42.755>a <00:11:42.871>lot <00:11:42.988>of <00:11:43.104>challenges <00:11:43.221>of <00:11:43.338>Swift <00:11:43.454>ui

242
00:11:47.295 --> 00:11:50.475
<00:11:47.295>and <00:11:47.422>in <00:11:47.549>this <00:11:47.676>presentation <00:11:47.804>I'll <00:11:47.931>refer <00:11:48.058>to <00:11:48.185>Swift <00:11:48.313>GI <00:11:48.440>for <00:11:48.567>Iris <00:11:48.694>13

243
00:11:50.475 --> 00:11:55.045
<00:11:50.475>and <00:11:50.650>Catalina <00:11:50.825>as <00:11:51.000>Swift <00:11:51.175>one <00:11:51.350>and <00:11:51.525>Swift <00:11:51.700>UI <00:11:51.875>14

244
00:11:55.065 --> 00:11:57.525
<00:11:55.065>and <00:11:55.298>Big <00:11:55.531>sir <00:11:55.765>as <00:11:55.998>Swift <00:11:56.231>UI <00:11:56.465>two.

245
00:11:57.625 --> 00:11:59.605
<00:11:57.625>And <00:11:57.780>in <00:11:57.936>a <00:11:58.091>few <00:11:58.247>weeks <00:11:58.402>we'll <00:11:58.558>all <00:11:58.713>be <00:11:58.869>waiting <00:11:59.025>for

246
00:12:00.305 --> 00:12:02.435
<00:12:00.305>basically <00:12:00.538>the <00:12:00.771>announcement <00:12:01.005>of <00:12:01.238>Swift <00:12:01.471>UI <00:12:01.704>three

247
00:12:04.145 --> 00:12:07.975
<00:12:04.145>now <00:12:04.425>supporting <00:12:04.704>Swift <00:12:04.985>UI <00:12:05.265>one <00:12:05.545>especially

248
00:12:07.975 --> 00:12:09.975
<00:12:07.975>as <00:12:08.175>its <00:12:08.375>challenges <00:12:08.575>often <00:12:08.775>when <00:12:08.975>people <00:12:09.175>write <00:12:09.375>about

249
00:12:10.885 --> 00:12:12.775
<00:12:10.885>this <00:12:11.118>cannot <00:12:11.351>be <00:12:11.585>done <00:12:11.818>in <00:12:12.051>Swift <00:12:12.285>ui,

250
00:12:13.325 --> 00:12:15.415
<00:12:13.325>they're <00:12:13.675>both <00:12:14.025>correct <00:12:14.375>and <00:12:14.725>wrong.

251
00:12:17.655 --> 00:12:20.235
<00:12:17.655>The <00:12:17.795>the <00:12:17.935>beauty <00:12:18.074>of <00:12:18.214>Swift <00:12:18.355>UI <00:12:18.495>is <00:12:18.635>that <00:12:18.775>it's <00:12:18.915>so <00:12:19.055>easy

252
00:12:20.255 --> 00:12:23.395
<00:12:20.255>to <00:12:20.430>like <00:12:20.605>freely <00:12:20.780>mix <00:12:20.955>components <00:12:21.130>with <00:12:21.305>the <00:12:21.480>platform <00:12:21.655>ones

253
00:12:23.395 --> 00:12:25.315
<00:12:23.395>with <00:12:23.550>c <00:12:23.706>UI <00:12:23.861>kit <00:12:24.017>or <00:12:24.172>app <00:12:24.328>kit <00:12:24.483>on <00:12:24.639>the <00:12:24.795>Mac.

254
00:12:25.935 --> 00:12:28.035
<00:12:25.935>So <00:12:26.135>you <00:12:26.334>can <00:12:26.535>always <00:12:26.734>add <00:12:26.935>missing <00:12:27.135>features <00:12:27.334>yourself

255
00:12:28.175 --> 00:12:31.715
<00:12:28.175>or <00:12:28.314>Workaround <00:12:28.454>Box, <00:12:28.594>and <00:12:28.734>I'll <00:12:28.875>show <00:12:29.015>you <00:12:29.155>a <00:12:29.295>few <00:12:29.435>of <00:12:29.574>the,

256
00:12:32.095 --> 00:12:33.675
<00:12:32.095>the <00:12:32.328>workarounds <00:12:32.561>we <00:12:32.795>had <00:12:33.028>to <00:12:33.261>do <00:12:33.495>to,

257
00:12:33.675 --> 00:12:35.715
<00:12:33.675>to <00:12:33.954>polish <00:12:34.234>our <00:12:34.515>electronic <00:12:34.795>signature <00:12:35.074>component.

258
00:12:37.655 --> 00:12:41.865
<00:12:37.655>Also <00:12:37.829>consider <00:12:38.005>that <00:12:38.180>if <00:12:38.355>you <00:12:38.530>are <00:12:38.704>adding <00:12:38.880>hacks <00:12:39.055>specifically

259
00:12:41.965 --> 00:12:45.705
<00:12:41.965>for <00:12:42.092>Swift <00:12:42.219>GI <00:12:42.346>one, <00:12:42.474>this <00:12:42.601>is <00:12:42.728>a <00:12:42.855>fairly <00:12:42.983>safe <00:12:43.110>thing <00:12:43.237>to <00:12:43.365>do.

260
00:12:46.685 --> 00:12:48.185
<00:12:46.685>The <00:12:47.022>OS <00:12:47.359>has <00:12:47.697>already <00:12:48.035>shipped,

261
00:12:48.485 --> 00:12:51.145
<00:12:48.485>and <00:12:48.640>even <00:12:48.796>if <00:12:48.951>you <00:12:49.107>apply <00:12:49.262>something <00:12:49.418>you <00:12:49.573>would <00:12:49.729>consider <00:12:49.885>dirty

262
00:12:52.655 --> 00:12:56.185
<00:12:52.655>such <00:12:52.855>as <00:12:53.055>introspecting, <00:12:53.255>the <00:12:53.454>view, <00:12:53.655>it'll <00:12:53.855>work <00:12:54.055>reliable

263
00:12:56.415 --> 00:12:59.345
<00:12:56.415>because <00:12:56.615>that <00:12:56.814>version <00:12:57.015>is <00:12:57.214>done, <00:12:57.415>that <00:12:57.615>version <00:12:57.814>shipped

264
00:12:59.345 --> 00:13:01.145
<00:12:59.345>and <00:12:59.578>that <00:12:59.811>version <00:13:00.045>is <00:13:00.278>no <00:13:00.511>longer <00:13:00.745>changing.

265
00:13:01.845 --> 00:13:03.585
<00:13:01.845>So <00:13:02.045>you <00:13:02.245>can <00:13:02.445>like <00:13:02.645>really <00:13:02.845>test <00:13:03.045>your <00:13:03.245>hack

266
00:13:03.885 --> 00:13:06.105
<00:13:03.885>and <00:13:04.040>just <00:13:04.196>make <00:13:04.351>sure <00:13:04.507>that <00:13:04.662>you <00:13:04.818>don't <00:13:04.973>ship <00:13:05.129>those <00:13:05.285>things

267
00:13:06.885 --> 00:13:09.225
<00:13:06.885>in <00:13:07.118>Swift <00:13:07.351>U2 <00:13:07.585>and <00:13:07.818>the <00:13:08.051>current <00:13:08.285>us

268
00:13:09.225 --> 00:13:11.305
<00:13:09.225>because <00:13:09.425>of <00:13:09.625>course <00:13:09.825>it's, <00:13:10.025>it's <00:13:10.225>much <00:13:10.425>more <00:13:10.625>risky

269
00:13:11.375 --> 00:13:16.345
<00:13:11.375>that <00:13:11.515>Apple <00:13:11.655>changes <00:13:11.795>something <00:13:11.935>in, <00:13:12.075>let's <00:13:12.215>say, <00:13:12.355>um, <00:13:12.495>I <00:13:12.635>was <00:13:12.775>14.5

270
00:13:16.345 --> 00:13:17.425
<00:13:16.345>that <00:13:16.539>came <00:13:16.733>out <00:13:16.928>two <00:13:17.122>days <00:13:17.317>ago,

271
00:13:17.765 --> 00:13:20.185
<00:13:17.765>and <00:13:17.920>it <00:13:18.076>will <00:13:18.231>definitely <00:13:18.387>change <00:13:18.542>a <00:13:18.698>lot <00:13:18.853>in <00:13:19.009>iOS <00:13:19.165>15.

272
00:13:20.695 --> 00:13:24.025
<00:13:20.695>That <00:13:20.802>will <00:13:20.910>come <00:13:21.018>out <00:13:21.125>at <00:13:21.233>least <00:13:21.341>a <00:13:21.448>a <00:13:21.556>a <00:13:21.664>beta <00:13:21.771>in <00:13:21.879>a <00:13:21.987>few <00:13:22.095>weeks.

273
00:13:26.345 --> 00:13:29.725
<00:13:26.345>And <00:13:26.545>yes, <00:13:26.745>because <00:13:26.945>um, <00:13:27.145>there's <00:13:27.345>probably <00:13:27.545>a <00:13:27.745>question

274
00:13:29.845 --> 00:13:31.045
<00:13:29.845>that <00:13:30.115>that <00:13:30.385>that <00:13:30.655>comes <00:13:30.925>up.

275
00:13:31.665 --> 00:13:34.005
<00:13:31.665>We <00:13:31.865>found <00:13:32.064>that <00:13:32.265>Swift, <00:13:32.464>our <00:13:32.665>previous <00:13:32.865>are <00:13:33.064>not

276
00:13:35.155 --> 00:13:36.715
<00:13:35.155>specifically <00:13:35.505>well <00:13:35.855>working <00:13:36.204>for <00:13:36.555>us.

277
00:13:37.425 --> 00:13:39.595
<00:13:37.425>They <00:13:37.599>seem <00:13:37.775>to <00:13:37.949>work <00:13:38.125>well <00:13:38.300>for <00:13:38.474>a <00:13:38.650>small <00:13:38.824>project,

278
00:13:40.295 --> 00:13:43.755
<00:13:40.295>but <00:13:40.435>in <00:13:40.574>our, <00:13:40.714>in <00:13:40.854>our <00:13:40.995>larger <00:13:41.135>one, <00:13:41.275>they <00:13:41.415>frequently <00:13:41.555>timed <00:13:41.694>out

279
00:13:43.815 --> 00:13:46.315
<00:13:43.815>or <00:13:44.165>just <00:13:44.515>showed <00:13:44.865>random <00:13:45.215>errors.

280
00:13:46.785 --> 00:13:48.235
<00:13:46.785>This <00:13:47.002>is <00:13:47.220>an <00:13:47.437>era <00:13:47.655>where <00:13:47.872>I <00:13:48.090>hope,

281
00:13:48.955 --> 00:13:50.155
<00:13:48.955>I <00:13:49.171>really <00:13:49.387>hope <00:13:49.603>Apple <00:13:49.819>will <00:13:50.035>improve

282
00:13:50.155 --> 00:13:53.435
<00:13:50.155>because <00:13:50.310>they <00:13:50.466>have <00:13:50.621>by <00:13:50.777>far <00:13:50.932>the <00:13:51.088>fastest <00:13:51.243>way <00:13:51.399>to <00:13:51.555>iterate.

283
00:13:54.665 --> 00:13:56.285
<00:13:54.665>But <00:13:54.944>even <00:13:55.224>if <00:13:55.505>you <00:13:55.785>ignore <00:13:56.064>those,

284
00:13:56.305 --> 00:13:58.445
<00:13:56.305>and <00:13:56.460>even <00:13:56.616>if <00:13:56.771>you <00:13:56.927>just <00:13:57.082>have <00:13:57.238>to <00:13:57.393>restart <00:13:57.549>your <00:13:57.704>app

285
00:13:58.445 --> 00:14:01.125
<00:13:58.445>and <00:13:58.620>go <00:13:58.795>to <00:13:58.970>the <00:13:59.145>scene, <00:13:59.320>you're <00:13:59.495>still <00:13:59.670>much <00:13:59.845>faster

286
00:14:01.675 --> 00:14:03.645
<00:14:01.675>than <00:14:01.875>writing <00:14:02.074>plain <00:14:02.275>UI <00:14:02.474>kit <00:14:02.675>or <00:14:02.875>app <00:14:03.074>kit.

287
00:14:05.945 --> 00:14:08.645
<00:14:05.945>Now <00:14:06.120>let's <00:14:06.295>start <00:14:06.470>with <00:14:06.645>the <00:14:06.820>first <00:14:06.995>trick <00:14:07.170>we <00:14:07.345>had

288
00:14:08.645 --> 00:14:11.525
<00:14:08.645>to <00:14:08.878>apply <00:14:09.111>presenting <00:14:09.345>a <00:14:09.578>popover <00:14:09.811>on <00:14:10.045>iPhone.

289
00:14:12.075 --> 00:14:15.525
<00:14:12.075>This <00:14:12.230>is <00:14:12.386>something <00:14:12.541>that <00:14:12.697>looks <00:14:12.852>simple <00:14:13.008>but <00:14:13.163>really <00:14:13.319>is <00:14:13.475>not.

290
00:14:16.665 --> 00:14:19.045
<00:14:16.665>Now, <00:14:16.865>when <00:14:17.064>our <00:14:17.265>signature <00:14:17.464>controller <00:14:17.665>is <00:14:17.865>in <00:14:18.064>landscape,

291
00:14:19.625 --> 00:14:21.245
<00:14:19.625>we <00:14:19.858>don't <00:14:20.091>have <00:14:20.325>space <00:14:20.558>for <00:14:20.791>the <00:14:21.025>font.

292
00:14:21.265 --> 00:14:24.565
<00:14:21.265>So <00:14:21.372>what <00:14:21.480>we <00:14:21.588>do <00:14:21.695>is <00:14:21.803>we <00:14:21.911>use <00:14:22.018>a <00:14:22.126>popover <00:14:22.234>to <00:14:22.341>show <00:14:22.449>the <00:14:22.557>font <00:14:22.665>picker

293
00:14:25.785 --> 00:14:30.565
<00:14:25.785>in, <00:14:25.912>in <00:14:26.039>Swift <00:14:26.166>UI <00:14:26.294>pop <00:14:26.421>was <00:14:26.548>always <00:14:26.675>presented <00:14:26.803>as <00:14:26.930>a <00:14:27.057>as <00:14:27.185>sheets

294
00:14:31.105 --> 00:14:35.675
<00:14:31.105>in <00:14:31.280>compact <00:14:31.455>size <00:14:31.630>class <00:14:31.805>environments, <00:14:31.980>which <00:14:32.155>the <00:14:32.330>iPhone <00:14:32.505>is,

295
00:14:36.415 --> 00:14:37.955
<00:14:36.415>um, <00:14:37.108>uploaded <00:14:37.801>something

296
00:14:37.955 --> 00:14:39.915
<00:14:37.955>that's <00:14:38.305>called <00:14:38.655>adaptive <00:14:39.005>presentation <00:14:39.355>style.

297
00:14:40.695 --> 00:14:43.955
<00:14:40.695>And <00:14:40.802>if <00:14:40.910>you <00:14:41.018>use <00:14:41.125>that, <00:14:41.233>you <00:14:41.341>can <00:14:41.448>show <00:14:41.556>a <00:14:41.664>pop <00:14:41.771>where <00:14:41.879>even <00:14:41.987>an <00:14:42.095>iPhone

298
00:14:44.535 --> 00:14:47.915
<00:14:44.535>via <00:14:44.735>returning <00:14:44.935>none <00:14:45.135>in, <00:14:45.334>in <00:14:45.535>this <00:14:45.735>specific <00:14:45.935>delegate.

299
00:14:48.535 --> 00:14:50.315
<00:14:48.535>Now <00:14:48.662>this <00:14:48.789>is, <00:14:48.916>this <00:14:49.044>is <00:14:49.171>how <00:14:49.298>you <00:14:49.425>do <00:14:49.553>it <00:14:49.680>in <00:14:49.807>your <00:14:49.935>kit

300
00:14:50.315 --> 00:14:53.005
<00:14:50.315>and <00:14:50.470>there's <00:14:50.626>just <00:14:50.781>no <00:14:50.937>equivalent <00:14:51.092>for <00:14:51.248>that <00:14:51.403>in <00:14:51.559>Swift <00:14:51.715>Dry.

301
00:14:53.585 --> 00:14:56.485
<00:14:53.585>It <00:14:53.760>is <00:14:53.935>of <00:14:54.110>course <00:14:54.285>possible <00:14:54.460>that <00:14:54.635>you <00:14:54.810>completely <00:14:54.985>rebuild

302
00:14:56.485 --> 00:14:58.405
<00:14:56.485>that <00:14:56.835>popover <00:14:57.185>experience <00:14:57.535>by <00:14:57.885>yourself,

303
00:14:59.385 --> 00:15:01.885
<00:14:59.385>but <00:14:59.540>you <00:14:59.696>know, <00:14:59.851>there <00:15:00.007>is <00:15:00.162>shadow, <00:15:00.318>there's <00:15:00.473>like <00:15:00.629>a <00:15:00.785>lot

304
00:15:01.885 --> 00:15:03.885
<00:15:01.885>of <00:15:02.040>little <00:15:02.196>details <00:15:02.351>that <00:15:02.507>you <00:15:02.662>have <00:15:02.818>to <00:15:02.973>get <00:15:03.129>right, <00:15:03.285>um,

305
00:15:03.975 --> 00:15:05.765
<00:15:03.975>where <00:15:04.208>tapping <00:15:04.441>works, <00:15:04.675>where <00:15:04.908>it's <00:15:05.141>being <00:15:05.375>dismissed,

306
00:15:06.455 --> 00:15:08.325
<00:15:06.455>which <00:15:06.688>just <00:15:06.921>seems <00:15:07.155>a <00:15:07.388>lot <00:15:07.621>of <00:15:07.855>work.

307
00:15:09.135 --> 00:15:13.265
<00:15:09.135>First, <00:15:09.335>using <00:15:09.535>the <00:15:09.735>existing <00:15:09.935>UI <00:15:10.135>framework <00:15:10.335>logic <00:15:10.535>now

308
00:15:13.765 --> 00:15:17.705
<00:15:13.765>to <00:15:13.881>mix <00:15:13.998>and <00:15:14.115>match <00:15:14.231>between <00:15:14.348>the <00:15:14.465>two <00:15:14.581>worlds, <00:15:14.698>we <00:15:14.814>do <00:15:14.931>need <00:15:15.048>a <00:15:15.165>Citrix

309
00:15:18.555 --> 00:15:21.305
<00:15:18.555>presenting <00:15:18.710>pop <00:15:18.866>within, <00:15:19.021>within <00:15:19.177>UI <00:15:19.332>kit <00:15:19.488>needs <00:15:19.643>a <00:15:19.799>source <00:15:19.954>view

310
00:15:21.725 --> 00:15:24.735
<00:15:21.725>to <00:15:22.005>anchor <00:15:22.285>you <00:15:22.565>need <00:15:22.845>the <00:15:23.125>coordinates

311
00:15:25.275 --> 00:15:27.815
<00:15:25.275>and <00:15:25.430>also <00:15:25.586>you <00:15:25.741>need <00:15:25.897>a <00:15:26.052>view <00:15:26.208>controller <00:15:26.363>to <00:15:26.519>present <00:15:26.675>it.

312
00:15:28.955 --> 00:15:31.415
<00:15:28.955>We <00:15:29.110>have <00:15:29.266>nothing <00:15:29.421>like <00:15:29.577>that <00:15:29.732>in <00:15:29.888>Swift <00:15:30.043>UI <00:15:30.199>by <00:15:30.355>default,

313
00:15:31.515 --> 00:15:32.815
<00:15:31.515>not <00:15:31.807>even <00:15:32.100>a <00:15:32.392>UI <00:15:32.685>view.

314
00:15:33.365 --> 00:15:36.935
<00:15:33.365>However, <00:15:33.565>if <00:15:33.765>we <00:15:33.965>embed <00:15:34.165>a <00:15:34.365>UI <00:15:34.565>kit <00:15:34.765>view

315
00:15:37.635 --> 00:15:40.895
<00:15:37.635>in <00:15:37.790>the <00:15:37.946>Swift <00:15:38.101>your <00:15:38.257>hierarchy, <00:15:38.412>we <00:15:38.568>later <00:15:38.723>can <00:15:38.879>access <00:15:39.035>it

316
00:15:41.115 --> 00:15:42.175
<00:15:41.115>and <00:15:41.353>post <00:15:41.592>get <00:15:41.830>the <00:15:42.069>View.

317
00:15:42.875 --> 00:15:45.575
<00:15:42.875>And <00:15:43.108>from <00:15:43.341>there <00:15:43.575>also <00:15:43.808>the <00:15:44.041>view <00:15:44.275>controller.

318
00:15:47.255 --> 00:15:50.355
<00:15:47.255>We <00:15:47.395>got <00:15:47.535>a <00:15:47.675>small <00:15:47.814>helper <00:15:47.955>clause <00:15:48.095>that <00:15:48.235>we <00:15:48.375>called <00:15:48.515>anchor <00:15:48.655>button,

319
00:15:51.655 --> 00:15:52.725
<00:15:51.655>which <00:15:52.136>resolves <00:15:52.618>this

320
00:15:52.725 --> 00:15:56.485
<00:15:52.725>and <00:15:52.865>passes <00:15:53.005>the, <00:15:53.145>the <00:15:53.285>view <00:15:53.425>that <00:15:53.565>it <00:15:53.705>embeds <00:15:53.845>on <00:15:53.985>a <00:15:54.125>tab.

321
00:15:57.175 --> 00:16:00.475
<00:15:57.175>So <00:15:57.302>in <00:15:57.429>the <00:15:57.556>action <00:15:57.684>tab <00:15:57.811>you <00:15:57.938>can <00:15:58.065>use <00:15:58.193>the <00:15:58.320>view <00:15:58.447>to <00:15:58.574>show

322
00:16:01.135 --> 00:16:02.355
<00:16:01.135>the <00:16:01.501>font <00:16:01.867>list <00:16:02.233>controller.

323
00:16:04.545 --> 00:16:07.125
<00:16:04.545>Um, <00:16:04.700>what <00:16:04.856>we <00:16:05.011>do <00:16:05.167>once <00:16:05.322>we <00:16:05.478>have <00:16:05.633>the <00:16:05.789>view, <00:16:05.944>uh,

324
00:16:07.445 --> 00:16:10.685
<00:16:07.445>actually <00:16:07.620>our <00:16:07.795>font <00:16:07.970>list <00:16:08.145>controller <00:16:08.320>offers <00:16:08.495>a <00:16:08.670>convenient <00:16:08.845>way,

325
00:16:10.945 --> 00:16:14.445
<00:16:10.945>uh, <00:16:11.120>called <00:16:11.295>present <00:16:11.470>to <00:16:11.645>present <00:16:11.820>itself <00:16:11.995>on <00:16:12.170>a <00:16:12.345>view.

326
00:16:16.145 --> 00:16:17.825
<00:16:16.145>I <00:16:16.345>would <00:16:16.545>say <00:16:16.745>this <00:16:16.944>is <00:16:17.145>fairly <00:16:17.345>straightforward <00:16:17.545>logic

327
00:16:17.845 --> 00:16:18.945
<00:16:17.845>as <00:16:18.043>you <00:16:18.241>know, <00:16:18.439>from <00:16:18.637>UI <00:16:18.835>Kit.

328
00:16:19.605 --> 00:16:22.745
<00:16:19.605>The <00:16:19.721>one <00:16:19.838>thing <00:16:19.955>that <00:16:20.071>special <00:16:20.188>about <00:16:20.305>it <00:16:20.421>is <00:16:20.538>that <00:16:20.655>we <00:16:20.771>need <00:16:20.888>to <00:16:21.005>get

329
00:16:23.335 --> 00:16:26.105
<00:16:23.335>from <00:16:23.462>a <00:16:23.589>view <00:16:23.716>to <00:16:23.844>the <00:16:23.971>controller <00:16:24.098>and <00:16:24.225>we <00:16:24.353>are <00:16:24.480>using <00:16:24.607>the <00:16:24.735>helper.

330
00:16:27.205 --> 00:16:30.625
<00:16:27.205>Uh, <00:16:27.405>you <00:16:27.605>see <00:16:27.805>sender, <00:16:28.005>psp, <00:16:28.205>fco <00:16:28.405>closed <00:16:28.605>view,

331
00:16:30.695 --> 00:16:32.345
<00:16:30.695>closest <00:16:31.161>view <00:16:31.628>controller <00:16:32.095>here.

332
00:16:32.645 --> 00:16:35.465
<00:16:32.645>And <00:16:32.772>what <00:16:32.899>we <00:16:33.026>do <00:16:33.154>here <00:16:33.281>is <00:16:33.408>we <00:16:33.535>actually <00:16:33.663>use <00:16:33.790>the <00:16:33.917>responder <00:16:34.045>chain,

333
00:16:36.315 --> 00:16:40.265
<00:16:36.315>which <00:16:36.490>next <00:16:36.665>responder <00:16:36.840>to <00:16:37.015>find <00:16:37.190>the <00:16:37.365>nearest <00:16:37.540>view <00:16:37.715>controller.

334
00:16:40.655 --> 00:16:42.425
<00:16:40.655>This <00:16:40.829>might <00:16:41.005>feel <00:16:41.180>a <00:16:41.355>little <00:16:41.530>bit <00:16:41.704>dirty <00:16:41.880>to <00:16:42.055>you,

335
00:16:42.615 --> 00:16:44.265
<00:16:42.615>however, <00:16:42.965>you <00:16:43.315>have <00:16:43.665>to <00:16:44.015>note

336
00:16:44.265 --> 00:16:46.265
<00:16:44.265>that <00:16:44.498>the <00:16:44.731>responder <00:16:44.965>chain <00:16:45.198>is <00:16:45.431>fully <00:16:45.665>documented.

337
00:16:46.325 --> 00:16:48.985
<00:16:46.325>It <00:16:46.558>is <00:16:46.791>documented <00:16:47.025>that <00:16:47.258>it <00:16:47.491>includes <00:16:47.725>views

338
00:16:49.005 --> 00:16:50.905
<00:16:49.005>and <00:16:49.205>view <00:16:49.405>controller <00:16:49.605>and <00:16:49.805>also <00:16:50.005>in <00:16:50.205>which <00:16:50.405>order.

339
00:16:52.305 --> 00:16:54.205
<00:16:52.305>So <00:16:52.479>really <00:16:52.655>this <00:16:52.829>is <00:16:53.005>a <00:16:53.180>safe <00:16:53.354>operation <00:16:53.530>to <00:16:53.704>do

340
00:16:54.205 --> 00:16:57.445
<00:16:54.205>and <00:16:54.360>even <00:16:54.516>Apple <00:16:54.671>does <00:16:54.827>this <00:16:54.982>sometimes <00:16:55.138>internally <00:16:55.293>in <00:16:55.449>UI <00:16:55.605>kit.

341
00:16:58.905 --> 00:17:01.645
<00:16:58.905>Now <00:16:59.105>in <00:16:59.305>the <00:16:59.505>remaining <00:16:59.704>logic <00:16:59.905>in <00:17:00.105>Viewed <00:17:00.305>Load,

342
00:17:01.905 --> 00:17:04.125
<00:17:01.905>we <00:17:02.138>simply <00:17:02.371>add <00:17:02.605>the <00:17:02.838>signature <00:17:03.071>font <00:17:03.305>list.

343
00:17:04.695 --> 00:17:08.325
<00:17:04.694>Again, <00:17:04.869>a <00:17:05.044>Swift <00:17:05.220>UI <00:17:05.395>view <00:17:05.569>as <00:17:05.744>the <00:17:05.919>hosting <00:17:06.095>controller.

344
00:17:09.335 --> 00:17:11.915
<00:17:09.335>So <00:17:09.490>in <00:17:09.646>this <00:17:09.801>case <00:17:09.957>we <00:17:10.112>are <00:17:10.268>using <00:17:10.423>a <00:17:10.579>helper <00:17:10.735>to,

345
00:17:11.935 --> 00:17:13.635
<00:17:11.935>to <00:17:12.214>set <00:17:12.494>up <00:17:12.774>other <00:17:13.054>layout <00:17:13.335>constraints

346
00:17:13.735 --> 00:17:15.075
<00:17:13.734>so <00:17:13.935>it <00:17:14.137>it <00:17:14.338>has <00:17:14.539>the <00:17:14.740>same <00:17:14.941>size.

347
00:17:15.695 --> 00:17:17.755
<00:17:15.694>Um, <00:17:16.395>and <00:17:17.095>also

348
00:17:17.755 --> 00:17:20.435
<00:17:17.755>because <00:17:17.882>we, <00:17:18.009>we <00:17:18.136>really <00:17:18.264>want <00:17:18.391>to <00:17:18.518>get <00:17:18.645>all <00:17:18.773>the <00:17:18.900>details <00:17:19.027>right, <00:17:19.155>we

349
00:17:21.025 --> 00:17:24.675
<00:17:21.025>pass <00:17:21.258>in <00:17:21.491>a, <00:17:21.725>uh, <00:17:21.958>uh, <00:17:22.191>a <00:17:22.425>delegate

350
00:17:25.825 --> 00:17:29.405
<00:17:25.825>air <00:17:25.980>closure, <00:17:26.136>sorry, <00:17:26.291>so <00:17:26.447>you <00:17:26.602>can <00:17:26.758>dismiss <00:17:26.913>the <00:17:27.069>container <00:17:27.225>view

351
00:17:29.405 --> 00:17:30.685
<00:17:29.405>controller <00:17:30.557>programmatically.

352
00:17:31.965 --> 00:17:35.265
<00:17:31.965>Um, <00:17:32.139>if <00:17:32.314>we <00:17:32.490>put <00:17:32.665>all <00:17:32.840>together, <00:17:33.014>then <00:17:33.189>we <00:17:33.365>have

353
00:17:36.605 --> 00:17:38.335
<00:17:36.605>popover <00:17:36.955>presentation <00:17:37.305>via <00:17:37.655>UI <00:17:38.005>kit,

354
00:17:38.335 --> 00:17:40.775
<00:17:38.335>but <00:17:38.490>we <00:17:38.646>only <00:17:38.801>use <00:17:38.957>Swift <00:17:39.112>air <00:17:39.268>components <00:17:39.423>for <00:17:39.579>the <00:17:39.735>view.

355
00:17:41.115 --> 00:17:43.055
<00:17:41.115>Now <00:17:41.290>the <00:17:41.465>beauty <00:17:41.640>here <00:17:41.815>is <00:17:41.990>if <00:17:42.165>you <00:17:42.340>rotate <00:17:42.515>again

356
00:17:43.155 --> 00:17:46.535
<00:17:43.155>or <00:17:43.271>if <00:17:43.388>you <00:17:43.504>have <00:17:43.621>enough <00:17:43.738>size, <00:17:43.855>again, <00:17:43.971>we <00:17:44.088>don't <00:17:44.205>need <00:17:44.321>any <00:17:44.438>of <00:17:44.555>that

357
00:17:46.535 --> 00:17:48.855
<00:17:46.535>and <00:17:46.690>we <00:17:46.846>can <00:17:47.001>just <00:17:47.157>use <00:17:47.312>the <00:17:47.468>signature <00:17:47.623>font <00:17:47.779>list <00:17:47.935>view

358
00:17:49.625 --> 00:17:50.845
<00:17:49.625>in <00:17:49.991>Swift <00:17:50.357>GI <00:17:50.723>directly.

359
00:17:52.455 --> 00:17:54.595
<00:17:52.455>Now, <00:17:53.155>currently <00:17:53.855>the,

360
00:17:54.985 --> 00:17:57.955
<00:17:54.985>this <00:17:55.218>whole <00:17:55.451>presentation <00:17:55.685>logic <00:17:55.918>is <00:17:56.151>used <00:17:56.385>just

361
00:17:57.975 --> 00:18:00.995
<00:17:57.975>for <00:17:58.115>the <00:17:58.254>font <00:17:58.395>controller, <00:17:58.534>so <00:17:58.675>we <00:17:58.814>haven't <00:17:58.955>made <00:17:59.094>the <00:17:59.235>generic <00:17:59.375>yet,

362
00:18:01.495 --> 00:18:03.075
<00:18:01.495>but <00:18:01.728>it <00:18:01.961>honestly <00:18:02.195>would <00:18:02.428>be <00:18:02.661>pretty <00:18:02.895>easy

363
00:18:03.095 --> 00:18:04.995
<00:18:03.095>to <00:18:03.328>make <00:18:03.561>the <00:18:03.795>cyber <00:18:04.028>usable <00:18:04.261>component <00:18:04.495>and,

364
00:18:05.175 --> 00:18:07.635
<00:18:05.175>and <00:18:05.375>use <00:18:05.575>in <00:18:05.774>different <00:18:05.975>parts <00:18:06.175>for <00:18:06.375>codebase <00:18:06.575>is

365
00:18:09.095 --> 00:18:12.475
<00:18:09.095>in <00:18:09.295>our <00:18:09.495>coding <00:18:09.695>philosophy, <00:18:09.895>we <00:18:10.095>apply <00:18:10.295>yna, <00:18:10.495>uh,

366
00:18:13.095 --> 00:18:14.275
<00:18:13.095>you <00:18:13.360>ain't <00:18:13.626>gonna <00:18:13.891>need <00:18:14.157>it,

367
00:18:15.015 --> 00:18:17.795
<00:18:15.015>so <00:18:15.170>we <00:18:15.326>will <00:18:15.481>refactor <00:18:15.637>if <00:18:15.792>we <00:18:15.948>have <00:18:16.103>the <00:18:16.259>need <00:18:16.415>and,

368
00:18:17.895 --> 00:18:20.315
<00:18:17.895>and, <00:18:18.070>uh, <00:18:18.245>we <00:18:18.420>know <00:18:18.595>that <00:18:18.770>we <00:18:18.945>have <00:18:19.120>this <00:18:19.295>now,

369
00:18:20.415 --> 00:18:23.435
<00:18:20.415>but <00:18:20.542>so <00:18:20.669>far <00:18:20.796>there <00:18:20.924>just <00:18:21.051>hasn't <00:18:21.178>been, <00:18:21.305>it <00:18:21.433>hasn't <00:18:21.560>been <00:18:21.687>a <00:18:21.815>need

370
00:18:23.435 --> 00:18:24.435
<00:18:23.435>to <00:18:23.659>actually <00:18:23.885>make <00:18:24.110>this <00:18:24.335>generic

371
00:18:24.435 --> 00:18:26.995
<00:18:24.435>and <00:18:24.668>often <00:18:24.901>this <00:18:25.135>is <00:18:25.368>like <00:18:25.601>unneeded <00:18:25.835>work.

372
00:18:28.375 --> 00:18:31.985
<00:18:28.375>Another <00:18:28.575>benefit <00:18:28.775>is <00:18:28.975>that <00:18:29.175>by <00:18:29.375>using <00:18:29.575>this <00:18:29.775>approach,

373
00:18:32.365 --> 00:18:35.585
<00:18:32.365>we <00:18:32.520>are <00:18:32.676>actually <00:18:32.831>working <00:18:32.987>around <00:18:33.142>the <00:18:33.298>bug <00:18:33.453>in <00:18:33.609>Swift <00:18:33.765>ui.

374
00:18:35.875 --> 00:18:40.385
<00:18:35.875>We're <00:18:36.030>defining <00:18:36.186>more <00:18:36.341>than <00:18:36.497>one <00:18:36.652>pop <00:18:36.808>over <00:18:36.963>modifier <00:18:37.119>doesn't <00:18:37.275>work

375
00:18:40.435 --> 00:18:42.025
<00:18:40.435>until <00:18:40.901>I <00:18:41.368>was <00:18:41.835>14.5.

376
00:18:42.645 --> 00:18:45.505
<00:18:42.645>So <00:18:42.785>this <00:18:42.925>is <00:18:43.065>also <00:18:43.205>something <00:18:43.345>that <00:18:43.485>you <00:18:43.625>have <00:18:43.764>to <00:18:43.905>be <00:18:44.045>aware

377
00:18:45.505 --> 00:18:47.745
<00:18:45.505>with <00:18:45.785>Swift <00:18:46.065>UI <00:18:46.345>because <00:18:46.625>it <00:18:46.905>is,

378
00:18:48.505 --> 00:18:50.185
<00:18:48.505>I <00:18:48.785>would <00:18:49.065>say <00:18:49.345>hot <00:18:49.625>cook <00:18:49.905>technology.

379
00:18:51.415 --> 00:18:54.245
<00:18:51.415>Apple <00:18:51.570>does <00:18:51.726>fix <00:18:51.881>a <00:18:52.037>lot <00:18:52.192>of <00:18:52.348>things <00:18:52.503>in <00:18:52.659>minor <00:18:52.815>versions,

380
00:18:54.425 --> 00:18:58.085
<00:18:54.425>so <00:18:54.580>you <00:18:54.736>do <00:18:54.891>want <00:18:55.047>to <00:18:55.202>test <00:18:55.358>this <00:18:55.513>with <00:18:55.669>iOS <00:18:55.825>13.0

381
00:18:58.785 --> 00:19:01.165
<00:18:58.785>and <00:18:59.135>also <00:18:59.485>14.0 <00:18:59.835>and <00:19:00.185>14.5

382
00:19:01.165 --> 00:19:03.005
<00:19:01.165>because <00:19:01.365>there <00:19:01.565>might <00:19:01.764>be <00:19:01.965>fixes <00:19:02.165>along <00:19:02.365>the <00:19:02.565>way

383
00:19:03.455 --> 00:19:04.885
<00:19:03.455>where <00:19:04.098>everything <00:19:04.742>works

384
00:19:04.885 --> 00:19:08.525
<00:19:04.885>because <00:19:05.060>you <00:19:05.235>test <00:19:05.410>in <00:19:05.585>the <00:19:05.760>Monday's <00:19:05.935>release <00:19:06.110>of <00:19:06.285>14.5,

385
00:19:09.105 --> 00:19:11.925
<00:19:09.105>but <00:19:09.280>then <00:19:09.455>the <00:19:09.630>popover <00:19:09.805>doesn't <00:19:09.980>show <00:19:10.155>up <00:19:10.330>in <00:19:10.505>14.4.

386
00:19:14.625 --> 00:19:17.085
<00:19:14.625>Now <00:19:14.825>let's <00:19:15.025>get <00:19:15.225>back <00:19:15.425>to <00:19:15.625>to <00:19:15.825>anchor <00:19:16.025>button.

387
00:19:17.745 --> 00:19:19.525
<00:19:17.745>Uh, <00:19:17.945>it's <00:19:18.145>actually <00:19:18.344>been <00:19:18.544>found <00:19:18.745>not <00:19:18.945>as <00:19:19.145>tricky

388
00:19:19.585 --> 00:19:21.605
<00:19:19.585>as <00:19:19.865>you <00:19:20.145>might <00:19:20.425>imagine <00:19:20.705>it <00:19:20.985>internally,

389
00:19:21.785 --> 00:19:23.885
<00:19:21.785>the <00:19:22.065>struck <00:19:22.345>reps <00:19:22.625>a <00:19:22.905>regular <00:19:23.185>button

390
00:19:24.825 --> 00:19:29.325
<00:19:24.825>and <00:19:24.952>we <00:19:25.079>also, <00:19:25.206>as <00:19:25.334>I <00:19:25.461>mentioned, <00:19:25.588>add <00:19:25.715>a, <00:19:25.843>uh, <00:19:25.970>wrapped <00:19:26.097>U <00:19:26.225>view

391
00:19:29.325 --> 00:19:32.725
<00:19:29.325>behind <00:19:29.465>the <00:19:29.605>button, <00:19:29.745>uh, <00:19:29.885>in <00:19:30.025>what <00:19:30.165>Apple <00:19:30.305>calls <00:19:30.445>a <00:19:30.585>set <00:19:30.725>stack.

392
00:19:33.485 --> 00:19:35.285
<00:19:33.485>I <00:19:33.685>could <00:19:33.885>probably <00:19:34.084>also <00:19:34.284>just <00:19:34.485>use, <00:19:34.685>uh, <00:19:34.885>uh,

393
00:19:35.285 --> 00:19:37.325
<00:19:35.285>that <00:19:35.485>dot <00:19:35.685>background <00:19:35.885>property <00:19:36.085>to <00:19:36.285>do <00:19:36.485>the <00:19:36.685>same.

394
00:19:38.945 --> 00:19:41.485
<00:19:38.945>Um, <00:19:39.225>yeah, <00:19:39.504>there's <00:19:39.784>no <00:19:40.064>particular <00:19:40.345>reason

395
00:19:41.485 --> 00:19:42.805
<00:19:41.485>where <00:19:41.683>one <00:19:41.880>is <00:19:42.079>better <00:19:42.277>than <00:19:42.475>the <00:19:42.673>other.

396
00:19:44.265 --> 00:19:46.765
<00:19:44.265>Now <00:19:44.440>we <00:19:44.615>keep <00:19:44.790>track <00:19:44.965>of <00:19:45.140>the <00:19:45.315>U <00:19:45.490>of <00:19:45.665>U

397
00:19:47.025 --> 00:19:48.805
<00:19:47.025>and <00:19:47.200>pass <00:19:47.375>it <00:19:47.550>as <00:19:47.725>a <00:19:47.900>parameter <00:19:48.075>to <00:19:48.250>the <00:19:48.425>closure.

398
00:19:48.985 --> 00:19:50.605
<00:19:48.985>That's <00:19:49.218>called <00:19:49.451>when <00:19:49.685>the <00:19:49.918>button <00:19:50.151>is <00:19:50.385>pressed,

399
00:19:51.265 --> 00:19:54.205
<00:19:51.265>and <00:19:51.465>that's <00:19:51.665>already <00:19:51.865>everything <00:19:52.065>that's <00:19:52.265>to <00:19:52.465>it, <00:19:52.665>huh?

400
00:19:54.745 --> 00:19:56.085
<00:19:54.745>Um, <00:19:55.046>I'm <00:19:55.348>linking <00:19:55.649>the <00:19:55.951>gist.

401
00:19:57.185 --> 00:19:58.885
<00:19:57.185>So <00:19:57.360>you <00:19:57.534>can, <00:19:57.710>you <00:19:57.885>can <00:19:58.060>check <00:19:58.235>out <00:19:58.409>the <00:19:58.585>code.

402
00:19:59.025 --> 00:20:02.165
<00:19:59.025>Um, <00:19:59.152>it <00:19:59.279>doesn't <00:19:59.406>have <00:19:59.534>a <00:19:59.661>blog <00:19:59.788>post <00:19:59.915>where <00:20:00.043>this <00:20:00.170>is <00:20:00.297>listed <00:20:00.425>again,

403
00:20:02.265 --> 00:20:05.245
<00:20:02.265>so <00:20:02.405>feel <00:20:02.545>free <00:20:02.685>to <00:20:02.825>use <00:20:02.965>this <00:20:03.105>code <00:20:03.245>whenever <00:20:03.385>you <00:20:03.525>need <00:20:03.665>it.

404
00:20:05.385 --> 00:20:08.685
<00:20:05.385>Uh, <00:20:05.525>everything <00:20:05.665>we, <00:20:05.805>we <00:20:05.945>share <00:20:06.085>is <00:20:06.225>usually <00:20:06.365>licensed <00:20:06.504>on <00:20:06.645>the <00:20:06.785>MIT.

405
00:20:10.265 --> 00:20:11.845
<00:20:10.265>Now <00:20:10.545>let's <00:20:10.825>talk <00:20:11.105>about <00:20:11.385>the <00:20:11.665>toolbar.

406
00:20:11.885 --> 00:20:16.605
<00:20:11.885>API <00:20:12.085>Swift <00:20:12.285>UI <00:20:12.485>two <00:20:12.685>introduces <00:20:12.885>that <00:20:13.085>toolbar <00:20:13.285>modifier,

407
00:20:16.605 --> 00:20:19.005
<00:20:16.605>which <00:20:16.885>greatly <00:20:17.165>improves <00:20:17.445>the <00:20:17.725>toolbar, <00:20:18.005>uh,

408
00:20:19.535 --> 00:20:20.935
<00:20:19.535>how <00:20:19.787>tool <00:20:20.039>items <00:20:20.291>can <00:20:20.543>be <00:20:20.795>added.

409
00:20:21.155 --> 00:20:23.855
<00:20:21.155>The, <00:20:21.310>the <00:20:21.466>new <00:20:21.621>API <00:20:21.777>gets <00:20:21.932>a <00:20:22.088>few <00:20:22.243>details, <00:20:22.399>right, <00:20:22.555>such

410
00:20:23.855 --> 00:20:26.215
<00:20:23.855>as <00:20:24.088>making <00:20:24.321>the <00:20:24.555>done <00:20:24.788>button <00:20:25.021>confirmation <00:20:25.255>bold

411
00:20:26.875 --> 00:20:30.465
<00:20:26.875>and <00:20:27.108>really <00:20:27.341>almost <00:20:27.575>a <00:20:27.808>hundred <00:20:28.041>percent <00:20:28.275>matching

412
00:20:30.465 --> 00:20:31.545
<00:20:30.465>their <00:20:30.951>AR <00:20:31.437>experience.

413
00:20:31.765 --> 00:20:35.265
<00:20:31.765>Um, <00:20:31.920>I <00:20:32.076>was <00:20:32.231>certain <00:20:32.387>there's <00:20:32.542>a <00:20:32.698>different <00:20:32.853>API <00:20:33.009>called <00:20:33.165>navigation

414
00:20:35.265 --> 00:20:36.625
<00:20:35.265>by <00:20:35.571>items <00:20:35.877>leading <00:20:36.183>and <00:20:36.489>trading.

415
00:20:37.405 --> 00:20:39.625
<00:20:37.405>Um, <00:20:37.638>however, <00:20:37.871>there <00:20:38.105>is <00:20:38.338>no <00:20:38.571>simple <00:20:38.805>API

416
00:20:39.625 --> 00:20:42.025
<00:20:39.625>to <00:20:39.858>actually <00:20:40.091>center <00:20:40.325>elements <00:20:40.558>on <00:20:40.791>the <00:20:41.025>toolbar.

417
00:20:42.915 --> 00:20:44.575
<00:20:42.915>And <00:20:43.090>if <00:20:43.264>you <00:20:43.440>remember <00:20:43.615>the <00:20:43.790>picture <00:20:43.965>that <00:20:44.139>I <00:20:44.315>posted

418
00:20:44.595 --> 00:20:49.285
<00:20:44.595>before, <00:20:44.735>we <00:20:44.875>have <00:20:45.015>this <00:20:45.155>big, <00:20:45.295>uh, <00:20:45.435>control <00:20:45.575>in <00:20:45.715>the <00:20:45.855>middle <00:20:45.995>to

419
00:20:50.295 --> 00:20:52.995
<00:20:50.295>to <00:20:50.528>toggle <00:20:50.761>between <00:20:50.995>signature <00:20:51.228>image <00:20:51.461>or <00:20:51.695>text.

420
00:20:53.535 --> 00:20:55.675
<00:20:53.535>And <00:20:53.768>this <00:20:54.001>needs <00:20:54.235>this, <00:20:54.468>this <00:20:54.701>needs <00:20:54.935>centering.

421
00:20:56.295 --> 00:20:59.675
<00:20:56.295>Now <00:20:56.422>what <00:20:56.549>we <00:20:56.676>do <00:20:56.804>here <00:20:56.931>is <00:20:57.058>we <00:20:57.185>actually <00:20:57.313>just <00:20:57.440>use <00:20:57.567>Swift <00:20:57.695>UIX.

422
00:20:59.935 --> 00:21:03.515
<00:20:59.935>Uh, <00:21:00.062>it's <00:21:00.189>a, <00:21:00.316>it's <00:21:00.444>a <00:21:00.571>really <00:21:00.698>good <00:21:00.825>project <00:21:00.953>that <00:21:01.080>fills <00:21:01.207>in <00:21:01.335>gaps

423
00:21:03.515 --> 00:21:05.035
<00:21:03.515>that <00:21:03.788>are <00:21:04.062>missing <00:21:04.335>in <00:21:04.609>Swift <00:21:04.883>ui.

424
00:21:05.495 --> 00:21:09.955
<00:21:05.495>Uh, <00:21:05.650>it's <00:21:05.806>free <00:21:05.961>to <00:21:06.117>use <00:21:06.272>in, <00:21:06.428>in <00:21:06.583>our <00:21:06.739>case, <00:21:06.895>we,

425
00:21:10.135 --> 00:21:13.195
<00:21:10.135>we <00:21:10.275>didn't <00:21:10.415>pick <00:21:10.555>the <00:21:10.695>whole <00:21:10.835>project <00:21:10.975>because <00:21:11.115>we <00:21:11.254>are <00:21:11.395>an <00:21:11.535>SDK

426
00:21:13.495 --> 00:21:15.235
<00:21:13.495>and <00:21:13.844>size <00:21:14.195>is <00:21:14.544>quite <00:21:14.895>important.

427
00:21:15.335 --> 00:21:17.355
<00:21:15.335>So <00:21:15.490>we <00:21:15.646>really <00:21:15.801>only <00:21:15.957>pick <00:21:16.112>the <00:21:16.268>file <00:21:16.423>that <00:21:16.579>we <00:21:16.735>need.

428
00:21:17.535 --> 00:21:19.515
<00:21:17.535>If <00:21:17.735>you, <00:21:17.935>if <00:21:18.135>you <00:21:18.335>don't <00:21:18.535>have <00:21:18.735>these <00:21:18.935>constraints,

429
00:21:19.515 --> 00:21:22.475
<00:21:19.515>you <00:21:19.631>can <00:21:19.748>just <00:21:19.865>add <00:21:19.981>a <00:21:20.098>Swift <00:21:20.215>PM <00:21:20.331>package <00:21:20.448>and <00:21:20.565>and <00:21:20.681>have <00:21:20.798>it <00:21:20.915>all.

430
00:21:23.215 --> 00:21:24.835
<00:21:23.215>And <00:21:23.495>there <00:21:23.774>we <00:21:24.054>have <00:21:24.334>a <00:21:24.615>version

431
00:21:25.095 --> 00:21:27.995
<00:21:25.095>that's <00:21:25.328>called <00:21:25.561>the <00:21:25.795>vacation <00:21:26.028>bios <00:21:26.261>leading <00:21:26.495>center

432
00:21:28.295 --> 00:21:31.955
<00:21:28.295>and <00:21:28.495>trailing, <00:21:28.695>uh, <00:21:28.895>which <00:21:29.095>made <00:21:29.295>this <00:21:29.495>very <00:21:29.695>easy.

433
00:21:32.055 --> 00:21:33.835
<00:21:32.055>And <00:21:32.210>you <00:21:32.366>see <00:21:32.521>in <00:21:32.677>the <00:21:32.832>code <00:21:32.988>here <00:21:33.143>that <00:21:33.299>we <00:21:33.455>actually

434
00:21:34.645 --> 00:21:36.075
<00:21:34.645>wrote <00:21:35.288>both <00:21:35.932>versions

435
00:21:36.075 --> 00:21:39.195
<00:21:36.075>because <00:21:36.275>we <00:21:36.475>already <00:21:36.675>anticipate <00:21:36.875>that <00:21:37.075>in <00:21:37.275>a <00:21:37.475>year

436
00:21:39.255 --> 00:21:43.215
<00:21:39.255>or <00:21:39.382>in <00:21:39.509>two <00:21:39.636>years, <00:21:39.764>more <00:21:39.891>two <00:21:40.018>years, <00:21:40.145>we <00:21:40.273>can <00:21:40.400>drop <00:21:40.527>IRA <00:21:40.655>certain

437
00:21:44.035 --> 00:21:45.375
<00:21:44.035>and <00:21:44.276>then <00:21:44.517>we <00:21:44.758>have <00:21:44.999>cleaner <00:21:45.241>code

438
00:21:45.435 --> 00:21:47.455
<00:21:45.435>and <00:21:45.635>we <00:21:45.835>don't <00:21:46.034>have <00:21:46.235>to <00:21:46.435>rethink <00:21:46.635>of, <00:21:46.835>okay,

439
00:21:47.475 --> 00:21:50.095
<00:21:47.475>how <00:21:47.615>can <00:21:47.754>we <00:21:47.895>rewrite <00:21:48.034>this <00:21:48.175>and <00:21:48.314>why <00:21:48.455>did <00:21:48.594>we <00:21:48.735>use, <00:21:48.875>uh,

440
00:21:50.095 --> 00:21:51.375
<00:21:50.095>the <00:21:50.383>old <00:21:50.671>API <00:21:50.959>back <00:21:51.247>then?

441
00:21:56.215 --> 00:21:58.315
<00:21:56.215>Now <00:21:56.495>actually <00:21:56.774>one <00:21:57.054>thing <00:21:57.334>I <00:21:57.615>forgot.

442
00:21:58.375 --> 00:22:00.875
<00:21:58.375>If <00:21:58.491>you <00:21:58.608>look <00:21:58.725>at <00:21:58.841>the, <00:21:58.958>the <00:21:59.075>code, <00:21:59.191>you <00:21:59.308>might <00:21:59.425>argue <00:21:59.541>that <00:21:59.658>we <00:21:59.775>could

443
00:22:01.635 --> 00:22:03.355
<00:22:01.635>probably <00:22:02.101>de-duplicate <00:22:02.568>some <00:22:03.035>things.

444
00:22:03.575 --> 00:22:05.755
<00:22:03.575>We <00:22:03.775>could <00:22:03.975>use <00:22:04.175>a <00:22:04.375>a <00:22:04.575>conditional <00:22:04.775>view <00:22:04.975>modifier,

445
00:22:07.235 --> 00:22:08.775
<00:22:07.235>and <00:22:07.408>this <00:22:07.581>is <00:22:07.754>also <00:22:07.928>a <00:22:08.101>pattern <00:22:08.274>that <00:22:08.447>you <00:22:08.621>will

446
00:22:08.775 --> 00:22:10.015
<00:22:08.775>see <00:22:08.998>a <00:22:09.221>lot <00:22:09.444>in <00:22:09.667>Swift <00:22:09.891>ui.

447
00:22:11.245 --> 00:22:13.705
<00:22:11.245>Um, <00:22:11.445>however, <00:22:11.645>in <00:22:11.844>our <00:22:12.044>case, <00:22:12.245>the <00:22:12.445>old <00:22:12.645>API

448
00:22:13.705 --> 00:22:15.065
<00:22:13.705>and <00:22:13.949>I <00:22:14.194>certain <00:22:14.439>is <00:22:14.684>not <00:22:14.929>available.

449
00:22:15.245 --> 00:22:17.785
<00:22:15.245>So <00:22:15.445>we <00:22:15.645>had <00:22:15.844>to <00:22:16.044>use <00:22:16.245>this <00:22:16.445>hashtag <00:22:16.645>available,

450
00:22:18.355 --> 00:22:21.985
<00:22:18.355>which <00:22:18.588>doesn't <00:22:18.821>directly <00:22:19.055>work <00:22:19.288>with <00:22:19.521>postfix <00:22:19.755>expressions.

451
00:22:22.205 --> 00:22:24.705
<00:22:22.205>So <00:22:22.360>the, <00:22:22.516>the <00:22:22.671>macro <00:22:22.827>stuff <00:22:22.982>that <00:22:23.138>you <00:22:23.293>have <00:22:23.449>in <00:22:23.605>Swift,

452
00:22:24.735 --> 00:22:28.265
<00:22:24.735>it's <00:22:24.862>not <00:22:24.989>quite <00:22:25.116>the <00:22:25.244>same <00:22:25.371>as <00:22:25.498>the <00:22:25.625>macros <00:22:25.753>in <00:22:25.880>in <00:22:26.007>iOS, <00:22:26.135>uh,

453
00:22:28.325 --> 00:22:29.785
<00:22:28.325>in <00:22:28.763>in <00:22:29.201>objective <00:22:29.639>C.

454
00:22:30.325 --> 00:22:33.865
<00:22:30.325>So <00:22:30.500>currently <00:22:30.675>it's <00:22:30.850>not <00:22:31.025>possible <00:22:31.200>to <00:22:31.375>write <00:22:31.550>this <00:22:31.725>easier,

455
00:22:33.965 --> 00:22:36.625
<00:22:33.965>but <00:22:34.198>there <00:22:34.431>is <00:22:34.665>a <00:22:34.898>proposal, <00:22:35.131>current <00:22:35.365>integration

456
00:22:37.235 --> 00:22:41.265
<00:22:37.235>named <00:22:37.435>SES <00:22:37.635>308, <00:22:37.834>which <00:22:38.034>will <00:22:38.235>allow <00:22:38.435>you <00:22:38.635>to

457
00:22:42.495 --> 00:22:45.505
<00:22:42.495>support <00:22:42.774>if <00:22:43.054>in <00:22:43.334>postfix <00:22:43.614>member <00:22:43.895>expressions.

458
00:22:45.565 --> 00:22:46.705
<00:22:45.565>Now, <00:22:45.821>this <00:22:46.078>all <00:22:46.334>sounds <00:22:46.591>fancy,

459
00:22:46.805 --> 00:22:48.465
<00:22:46.805>but <00:22:47.085>you <00:22:47.365>see <00:22:47.645>on <00:22:47.925>the <00:22:48.205>picture

460
00:22:48.535 --> 00:22:50.585
<00:22:48.535>that <00:22:48.735>is <00:22:48.935>actually <00:22:49.135>quite <00:22:49.335>a <00:22:49.535>simple <00:22:49.735>concept <00:22:49.935>where

461
00:22:51.365 --> 00:22:54.225
<00:22:51.365>you <00:22:51.565>can <00:22:51.765>use <00:22:51.965>if <00:22:52.165>within <00:22:52.365>these <00:22:52.565>dot <00:22:52.765>stacking

462
00:22:54.365 --> 00:22:55.425
<00:22:54.365>and <00:22:54.524>don't <00:22:54.683>have <00:22:54.842>to <00:22:55.001>think <00:22:55.159>about <00:22:55.319>it.

463
00:22:55.425 --> 00:22:56.865
<00:22:55.425>This <00:22:55.641>is <00:22:55.857>currently <00:22:56.072>something <00:22:56.289>that's <00:22:56.505>not <00:22:56.721>working,

464
00:22:57.525 --> 00:22:59.185
<00:22:57.525>but <00:22:57.805>my <00:22:58.085>guess <00:22:58.365>is <00:22:58.645>that <00:22:58.925>in

465
00:22:59.895 --> 00:23:02.585
<00:22:59.895>five <00:23:00.050>weeks <00:23:00.206>when <00:23:00.361>they <00:23:00.517>stepped <00:23:00.672>up <00:23:00.828>in <00:23:00.983>the <00:23:01.139>new <00:23:01.295>code,

466
00:23:02.705 --> 00:23:05.745
<00:23:02.705>this <00:23:02.860>will <00:23:03.016>be <00:23:03.171>implemented <00:23:03.327>and <00:23:03.482>then <00:23:03.638>you <00:23:03.793>can <00:23:03.949>actually <00:23:04.105>further

467
00:23:06.055 --> 00:23:08.025
<00:23:06.055>conditional <00:23:06.335>analyze <00:23:06.615>and <00:23:06.895>simplify <00:23:07.175>the <00:23:07.455>code.

468
00:23:10.395 --> 00:23:13.245
<00:23:10.395>Okay, <00:23:10.595>uh, <00:23:10.795>now <00:23:10.995>let's <00:23:11.195>talk <00:23:11.395>about <00:23:11.595>every <00:23:11.795>swift

469
00:23:13.515 --> 00:23:15.085
<00:23:13.515>developer's <00:23:14.215>worst <00:23:14.915>nightmare.

470
00:23:15.625 --> 00:23:17.645
<00:23:15.625>The <00:23:15.975>attributed <00:23:16.325>graph, <00:23:16.675>precondition <00:23:17.025>failure.

471
00:23:18.705 --> 00:23:22.345
<00:23:18.705>Now <00:23:18.938>the <00:23:19.171>beauty, <00:23:19.405>horrible <00:23:19.638>beauty <00:23:19.871>about <00:23:20.105>this,

472
00:23:22.345 --> 00:23:26.025
<00:23:22.345>that <00:23:22.485>this <00:23:22.625>crash <00:23:22.765>usually <00:23:22.905>has <00:23:23.045>no <00:23:23.185>symbols <00:23:23.325>of <00:23:23.465>your <00:23:23.605>own <00:23:23.745>code.

473
00:23:27.775 --> 00:23:30.915
<00:23:27.775>So <00:23:27.930>to <00:23:28.086>maybe <00:23:28.241>explain <00:23:28.397>a <00:23:28.552>little <00:23:28.708>bit <00:23:28.863>like <00:23:29.019>Swift <00:23:29.175>UI

474
00:23:31.695 --> 00:23:34.345
<00:23:31.695>creates <00:23:31.895>a <00:23:32.095>a, <00:23:32.294>a <00:23:32.495>structure <00:23:32.695>of <00:23:32.895>your <00:23:33.095>view

475
00:23:34.845 --> 00:23:39.175
<00:23:34.845>and <00:23:34.972>then <00:23:35.099>it <00:23:35.226>uses <00:23:35.354>the <00:23:35.481>attributed <00:23:35.608>graph <00:23:35.735>to <00:23:35.863>build <00:23:35.990>UI <00:23:36.117>out <00:23:36.245>of

476
00:23:39.175 --> 00:23:41.575
<00:23:39.175>that <00:23:39.350>structure <00:23:39.524>and <00:23:39.700>also <00:23:39.875>to <00:23:40.050>diff <00:23:40.225>the <00:23:40.399>existing <00:23:40.575>UI

477
00:23:41.955 --> 00:23:43.895
<00:23:41.955>and <00:23:42.155>modified <00:23:42.355>so <00:23:42.554>it <00:23:42.754>matches <00:23:42.955>your <00:23:43.155>new <00:23:43.355>structure.

478
00:23:45.215 --> 00:23:47.305
<00:23:45.215>There's <00:23:45.415>a <00:23:45.615>lot <00:23:45.814>of <00:23:46.014>can <00:23:46.215>and <00:23:46.415>complicated <00:23:46.615>code.

479
00:23:47.685 --> 00:23:51.455
<00:23:47.685>Um, <00:23:47.812>it's <00:23:47.939>a <00:23:48.066>lot <00:23:48.194>of <00:23:48.321>c <00:23:48.448>plus <00:23:48.575>plus <00:23:48.703>at <00:23:48.830>Apple <00:23:48.957>wrote <00:23:49.085>there

480
00:23:51.795 --> 00:23:53.815
<00:23:51.795>and <00:23:52.075>there <00:23:52.355>are <00:23:52.635>bugs <00:23:52.915>in <00:23:53.195>it.

481
00:23:53.815 --> 00:23:55.535
<00:23:53.815>So <00:23:54.048>sometimes <00:23:54.281>you <00:23:54.515>just <00:23:54.748>find <00:23:54.981>a <00:23:55.215>condition

482
00:23:55.535 --> 00:23:57.015
<00:23:55.535>where <00:23:55.979>things <00:23:56.423>just <00:23:56.867>crash.

483
00:23:57.715 --> 00:24:01.655
<00:23:57.715>Um, <00:23:57.915>that's <00:23:58.115>unfortunate <00:23:58.314>with <00:23:58.514>almost <00:23:58.715>any <00:23:58.915>new <00:23:59.115>technology.

484
00:24:03.365 --> 00:24:06.345
<00:24:03.365>And <00:24:03.540>in, <00:24:03.715>in <00:24:03.890>Apple <00:24:04.065>Specifical <00:24:04.240>case, <00:24:04.415>it's <00:24:04.590>also <00:24:04.765>problematic

485
00:24:06.345 --> 00:24:10.685
<00:24:06.345>because <00:24:06.485>you <00:24:06.625>can't <00:24:06.765>ship <00:24:06.905>your <00:24:07.045>own <00:24:07.185>swift <00:24:07.325>year <00:24:07.465>in <00:24:07.605>the <00:24:07.745>app.

486
00:24:10.685 --> 00:24:12.685
<00:24:10.685>You <00:24:10.840>have <00:24:10.996>to <00:24:11.151>use <00:24:11.307>the <00:24:11.462>swift <00:24:11.618>year <00:24:11.773>versions <00:24:11.929>on <00:24:12.085>the

487
00:24:12.705 --> 00:24:14.325
<00:24:12.705>us <00:24:13.054>uh, <00:24:13.405>on <00:24:13.754>the <00:24:14.105>device.

488
00:24:14.665 --> 00:24:17.905
<00:24:14.665>So <00:24:14.865>if <00:24:15.065>there's <00:24:15.264>a <00:24:15.465>bug, <00:24:15.665>you'll <00:24:15.865>probably <00:24:16.065>have

489
00:24:17.905 --> 00:24:18.945
<00:24:17.905>to <00:24:18.038>live <00:24:18.172>with <00:24:18.306>it <00:24:18.439>for <00:24:18.573>quite <00:24:18.707>a <00:24:18.841>while.

490
00:24:20.105 --> 00:24:24.045
<00:24:20.105>Um, <00:24:20.338>there's <00:24:20.571>no, <00:24:20.805>there's <00:24:21.038>no <00:24:21.271>great <00:24:21.505>concept

491
00:24:24.105 --> 00:24:25.285
<00:24:24.105>to <00:24:24.370>actually <00:24:24.636>work <00:24:24.901>around <00:24:25.167>this.

492
00:24:26.095 --> 00:24:27.225
<00:24:26.095>It's <00:24:26.349>good <00:24:26.603>to <00:24:26.857>test <00:24:27.111>early

493
00:24:27.225 --> 00:24:30.265
<00:24:27.225>and <00:24:27.425>test <00:24:27.625>often, <00:24:27.824>which <00:24:28.024>the <00:24:28.225>iteration <00:24:28.425>cycle <00:24:28.625>actually

494
00:24:30.945 --> 00:24:32.935
<00:24:30.945>makes <00:24:31.145>you <00:24:31.345>wanna <00:24:31.544>do <00:24:31.745>automatically <00:24:31.945>in <00:24:32.145>Swift <00:24:32.345>ui.

495
00:24:33.595 --> 00:24:36.295
<00:24:33.595>Um, <00:24:33.722>I <00:24:33.849>can <00:24:33.976>just <00:24:34.104>give <00:24:34.231>you <00:24:34.358>like <00:24:34.485>one <00:24:34.613>tip <00:24:34.740>that <00:24:34.867>we <00:24:34.995>found.

496
00:24:37.685 --> 00:24:40.185
<00:24:37.685>Uh, <00:24:37.918>we, <00:24:38.151>we <00:24:38.385>did <00:24:38.618>chip <00:24:38.851>our <00:24:39.085>app

497
00:24:40.285 --> 00:24:42.305
<00:24:40.285>and <00:24:40.518>then <00:24:40.751>looked <00:24:40.985>at <00:24:41.218>the <00:24:41.451>crash <00:24:41.685>reporting

498
00:24:42.305 --> 00:24:45.385
<00:24:42.305>and <00:24:42.445>we <00:24:42.585>noticed <00:24:42.725>that <00:24:42.865>of <00:24:43.005>course <00:24:43.145>there <00:24:43.285>was <00:24:43.425>such <00:24:43.565>a <00:24:43.705>crash,

499
00:24:45.445 --> 00:24:48.145
<00:24:45.445>an <00:24:45.678>invalid <00:24:45.911>input <00:24:46.145>index <00:24:46.378>two <00:24:46.611>or <00:24:46.845>whatever.

500
00:24:48.735 --> 00:24:49.865
<00:24:48.735>However, <00:24:49.073>we, <00:24:49.413>we <00:24:49.752>noticed

501
00:24:49.865 --> 00:24:52.065
<00:24:49.865>that <00:24:50.098>it <00:24:50.331>only <00:24:50.565>happened <00:24:50.798>on <00:24:51.031>Neck <00:24:51.265>catalyst

502
00:24:52.285 --> 00:24:54.425
<00:24:52.285>and <00:24:52.485>only <00:24:52.685>when <00:24:52.885>it <00:24:53.085>was <00:24:53.285>running <00:24:53.485>macros <00:24:53.685>Catalina,

503
00:24:54.485 --> 00:24:55.905
<00:24:54.485>so <00:24:54.740>the <00:24:54.996>dreaded <00:24:55.251>Swift <00:24:55.507>GI <00:24:55.763>one.

504
00:24:56.805 --> 00:24:59.225
<00:24:56.805>Now <00:24:56.932>there's <00:24:57.059>a <00:24:57.186>pattern <00:24:57.314>that <00:24:57.441>I've <00:24:57.568>seen <00:24:57.695>quite <00:24:57.823>a <00:24:57.950>few <00:24:58.077>times <00:24:58.205>is

505
00:25:00.155 --> 00:25:02.945
<00:25:00.155>often <00:25:00.355>when <00:25:00.555>you <00:25:00.754>have <00:25:00.955>a <00:25:01.155>geometry, <00:25:01.355>uh, <00:25:01.555>uh,

506
00:25:03.375 --> 00:25:06.825
<00:25:03.375>such <00:25:03.550>a <00:25:03.725>geometry <00:25:03.900>reader <00:25:04.075>crash, <00:25:04.250>it's <00:25:04.425>re <00:25:04.600>related <00:25:04.775>to

507
00:25:07.705 --> 00:25:08.745
<00:25:07.705>geometry <00:25:08.640>readers.

508
00:25:09.785 --> 00:25:11.205
<00:25:09.785>Now <00:25:09.967>I'm <00:25:10.150>not <00:25:10.332>gonna <00:25:10.515>explain <00:25:10.697>the <00:25:10.880>whole <00:25:11.062>concept

509
00:25:11.225 --> 00:25:12.725
<00:25:11.225>of <00:25:11.449>a <00:25:11.675>geometry <00:25:11.899>reader <00:25:12.125>in <00:25:12.350>this <00:25:12.574>talk.

510
00:25:13.385 --> 00:25:16.445
<00:25:13.385>Um, <00:25:13.560>basically <00:25:13.735>you <00:25:13.910>can <00:25:14.085>get <00:25:14.260>information <00:25:14.435>of <00:25:14.610>the <00:25:14.785>layout

511
00:25:16.445 --> 00:25:18.445
<00:25:16.445>that <00:25:16.725>do <00:25:17.004>like <00:25:17.284>some <00:25:17.564>calculations <00:25:17.845>and

512
00:25:18.675 --> 00:25:21.965
<00:25:18.675>because <00:25:18.908>our <00:25:19.141>layout <00:25:19.375>is, <00:25:19.608>it's <00:25:19.841>very <00:25:20.075>adaptive,

513
00:25:22.225 --> 00:25:24.205
<00:25:22.225>we <00:25:22.399>actually <00:25:22.574>had <00:25:22.750>a <00:25:22.925>situation <00:25:23.100>where <00:25:23.274>we <00:25:23.449>used <00:25:23.625>two

514
00:25:24.765 --> 00:25:28.675
<00:25:24.765>geometry <00:25:24.940>readers <00:25:25.115>in, <00:25:25.290>in <00:25:25.465>one, <00:25:25.640>uh, <00:25:25.815>block <00:25:25.990>of <00:25:26.165>view.

515
00:25:29.985 --> 00:25:32.405
<00:25:29.985>And <00:25:30.140>we <00:25:30.296>noticed <00:25:30.451>that <00:25:30.607>usually <00:25:30.762>this <00:25:30.918>is, <00:25:31.073>this <00:25:31.229>is <00:25:31.385>one

516
00:25:32.405 --> 00:25:34.485
<00:25:32.405>of <00:25:32.638>the <00:25:32.871>cases <00:25:33.105>where <00:25:33.338>things <00:25:33.571>go <00:25:33.805>bad.

517
00:25:34.985 --> 00:25:37.445
<00:25:34.985>You're <00:25:35.112>fine <00:25:35.239>if <00:25:35.366>you <00:25:35.494>put <00:25:35.621>a <00:25:35.748>geometry <00:25:35.875>reader <00:25:36.003>at <00:25:36.130>the <00:25:36.257>very <00:25:36.385>first

518
00:25:37.815 --> 00:25:41.125
<00:25:37.815>stage, <00:25:37.990>but <00:25:38.165>in <00:25:38.340>our <00:25:38.515>case, <00:25:38.690>the, <00:25:38.865>the <00:25:39.040>second <00:25:39.215>one,

519
00:25:41.785 --> 00:25:44.685
<00:25:41.785>not <00:25:41.960>the <00:25:42.135>AL <00:25:42.310>metrics, <00:25:42.485>but <00:25:42.660>the <00:25:42.835>metrics <00:25:43.010>one, <00:25:43.185>accessing

520
00:25:44.685 --> 00:25:47.005
<00:25:44.685>that <00:25:44.885>on <00:25:45.085>the <00:25:45.284>address, <00:25:45.485>uh, <00:25:45.685>caused <00:25:45.885>a <00:25:46.085>crash.

521
00:25:50.475 --> 00:25:52.855
<00:25:50.475>Um, <00:25:50.824>now <00:25:51.175>in <00:25:51.524>our <00:25:51.875>case

522
00:25:54.595 --> 00:25:57.185
<00:25:54.595>since <00:25:54.770>the <00:25:54.945>crash <00:25:55.120>was <00:25:55.295>exclusively <00:25:55.470>a <00:25:55.645>problem <00:25:55.820>for <00:25:55.995>Catalyst

523
00:25:57.185 --> 00:25:58.945
<00:25:57.185>and <00:25:57.418>there <00:25:57.651>was <00:25:57.885>no <00:25:58.118>compact <00:25:58.351>size <00:25:58.585>class,

524
00:25:59.405 --> 00:26:00.825
<00:25:59.405>you <00:25:59.618>don't <00:25:59.831>make <00:26:00.044>the <00:26:00.257>windows <00:26:00.470>so <00:26:00.683>small

525
00:26:00.825 --> 00:26:02.385
<00:26:00.825>that <00:26:01.058>you <00:26:01.291>would <00:26:01.525>reach <00:26:01.758>complex <00:26:01.991>size <00:26:02.225>class

526
00:26:02.445 --> 00:26:03.865
<00:26:02.445>and <00:26:02.658>it <00:26:02.870>was <00:26:03.084>not <00:26:03.297>implemented <00:26:03.510>that <00:26:03.723>way.

527
00:26:04.565 --> 00:26:07.225
<00:26:04.565>We <00:26:04.765>simply <00:26:04.965>don't <00:26:05.165>call <00:26:05.365>the <00:26:05.565>inner <00:26:05.765>metrics <00:26:05.965>callback.

528
00:26:07.285 --> 00:26:10.225
<00:26:07.285>And <00:26:07.412>as <00:26:07.539>long <00:26:07.666>as <00:26:07.794>you <00:26:07.921>don't <00:26:08.048>call <00:26:08.175>it <00:26:08.303>swift <00:26:08.430>doesn't <00:26:08.557>actually <00:26:08.685>try

529
00:26:10.225 --> 00:26:11.865
<00:26:10.225>to <00:26:10.574>calculate <00:26:10.925>everything <00:26:11.274>and <00:26:11.625>crashes.

530
00:26:12.605 --> 00:26:14.825
<00:26:12.605>So <00:26:12.780>we <00:26:12.955>didn't <00:26:13.130>even <00:26:13.305>have <00:26:13.480>to <00:26:13.655>rewrite <00:26:13.830>the <00:26:14.005>call.

531
00:26:14.845 --> 00:26:17.985
<00:26:14.845>We <00:26:15.000>just <00:26:15.156>made <00:26:15.311>sure <00:26:15.467>that <00:26:15.622>if <00:26:15.778>we <00:26:15.933>are <00:26:16.089>on <00:26:16.245>catalyst

532
00:26:18.965 --> 00:26:21.905
<00:26:18.965>on <00:26:19.245>SWIFT <00:26:19.524>R <00:26:19.804>one, <00:26:20.084>don't <00:26:20.365>try

533
00:26:21.905 --> 00:26:24.625
<00:26:21.905>to <00:26:22.060>like <00:26:22.216>move <00:26:22.371>yourself <00:26:22.527>into <00:26:22.682>like <00:26:22.838>a <00:26:22.993>different <00:26:23.149>smaller <00:26:23.305>version.

534
00:26:26.645 --> 00:26:29.025
<00:26:26.645>Uh, <00:26:26.800>another <00:26:26.956>quirk <00:26:27.111>that <00:26:27.267>you <00:26:27.422>should <00:26:27.578>be <00:26:27.733>aware <00:26:27.889>of <00:26:28.045>is

535
00:26:29.025 --> 00:26:33.305
<00:26:29.025>that <00:26:29.225>observable <00:26:29.425>object <00:26:29.625>doesn't <00:26:29.825>actually <00:26:30.025>work <00:26:30.225>for <00:26:30.425>objects

536
00:26:33.305 --> 00:26:34.745
<00:26:33.305>that <00:26:33.629>inherit <00:26:33.953>from <00:26:34.277>NS <00:26:34.601>object.

537
00:26:35.815 --> 00:26:37.595
<00:26:35.815>Now <00:26:36.048>why, <00:26:36.281>why <00:26:36.515>would <00:26:36.748>we <00:26:36.981>need <00:26:37.215>this?

538
00:26:38.095 --> 00:26:41.435
<00:26:38.095>Um, <00:26:38.235>we <00:26:38.375>need <00:26:38.515>this <00:26:38.655>space <00:26:38.795>cloud <00:26:38.935>since <00:26:39.075>we <00:26:39.215>still <00:26:39.355>support <00:26:39.495>API

539
00:26:41.435 --> 00:26:42.875
<00:26:41.435>access <00:26:42.083>objective <00:26:42.731>C

540
00:26:43.505 --> 00:26:46.525
<00:26:43.505>and <00:26:43.680>the <00:26:43.855>ad <00:26:44.030>objective <00:26:44.205>C <00:26:44.380>attribute <00:26:44.555>does <00:26:44.730>require <00:26:44.905>an

541
00:26:46.625 --> 00:26:48.005
<00:26:46.625>object <00:26:47.039>as <00:26:47.453>a <00:26:47.867>parent.

542
00:26:49.305 --> 00:26:51.685
<00:26:49.305>Uh, <00:26:49.505>again, <00:26:49.705>this <00:26:49.905>is <00:26:50.105>fixed <00:26:50.305>in <00:26:50.505>iOS <00:26:50.705>14,

543
00:26:51.825 --> 00:26:55.665
<00:26:51.825>but <00:26:51.952>if <00:26:52.079>you <00:26:52.206>have <00:26:52.334>to <00:26:52.461>support <00:26:52.588>iOS <00:26:52.715>13, <00:26:52.843>it's <00:26:52.970>actually <00:26:53.097>quite <00:26:53.225>easy.

544
00:26:55.725 --> 00:26:59.865
<00:26:55.725>You <00:26:55.899>can <00:26:56.074>manually <00:26:56.250>define <00:26:56.425>the <00:26:56.600>object <00:26:56.774>will <00:26:56.949>change, <00:26:57.125>uh,

545
00:27:01.225 --> 00:27:03.675
<00:27:01.225>publisher <00:27:01.458>and <00:27:01.691>then <00:27:01.925>just <00:27:02.158>simply <00:27:02.391>call <00:27:02.625>it

546
00:27:03.955 --> 00:27:05.725
<00:27:03.955>yourself <00:27:04.655>interval <00:27:05.355>set.

547
00:27:05.725 --> 00:27:09.805
<00:27:05.725>This <00:27:05.880>matches <00:27:06.036>exactly <00:27:06.191>what <00:27:06.347>Swift <00:27:06.502>UI <00:27:06.658>would <00:27:06.813>do <00:27:06.969>by <00:27:07.125>default

548
00:27:11.455 --> 00:27:14.235
<00:27:11.455>and <00:27:11.655>doesn't <00:27:11.855>break <00:27:12.054>anything <00:27:12.254>on <00:27:12.455>IO <00:27:12.655>for <00:27:12.855>them

549
00:27:14.235 --> 00:27:15.515
<00:27:14.235>because <00:27:14.465>you're <00:27:14.695>just <00:27:14.926>doing <00:27:15.156>it <00:27:15.387>manual

550
00:27:15.565 --> 00:27:17.195
<00:27:15.565>where <00:27:15.915>it <00:27:16.265>would've <00:27:16.615>happened <00:27:16.965>automatically.

551
00:27:17.855 --> 00:27:19.315
<00:27:17.855>And <00:27:18.117>once <00:27:18.380>we <00:27:18.643>drop <00:27:18.906>IO <00:27:19.169>search

552
00:27:19.315 --> 00:27:21.395
<00:27:19.315>that <00:27:19.470>you <00:27:19.626>can <00:27:19.781>simply <00:27:19.937>delete <00:27:20.092>a <00:27:20.248>few <00:27:20.403>lines <00:27:20.559>of <00:27:20.715>code

553
00:27:21.395 --> 00:27:24.275
<00:27:21.395>and <00:27:21.570>everything <00:27:21.745>will <00:27:21.920>still <00:27:22.095>work <00:27:22.270>exactly <00:27:22.445>the <00:27:22.620>same <00:27:22.795>way.

554
00:27:25.795 --> 00:27:26.845
<00:27:25.795>This <00:27:26.031>could <00:27:26.267>also <00:27:26.503>be <00:27:26.740>worked

555
00:27:26.905 --> 00:27:30.005
<00:27:26.905>by <00:27:27.080>separating <00:27:27.254>the <00:27:27.430>class <00:27:27.605>from <00:27:27.780>the <00:27:27.955>objective <00:27:28.129>C <00:27:28.305>compatibility

556
00:27:30.005 --> 00:27:32.085
<00:27:30.005>layer <00:27:30.355>that <00:27:30.705>forwards <00:27:31.055>this <00:27:31.405>model.

557
00:27:32.085 --> 00:27:34.365
<00:27:32.085>However, <00:27:32.435>we <00:27:32.785>chose <00:27:33.135>this <00:27:33.485>approach

558
00:27:34.365 --> 00:27:36.805
<00:27:34.365>because <00:27:34.645>we, <00:27:34.925>we, <00:27:35.205>we <00:27:35.485>figured <00:27:35.765>out

559
00:27:36.805 --> 00:27:38.685
<00:27:36.805>that <00:27:37.038>this <00:27:37.271>is <00:27:37.505>actually <00:27:37.738>less <00:27:37.971>boiler <00:27:38.205>plate

560
00:27:38.685 --> 00:27:40.285
<00:27:38.685>and <00:27:39.151>ultimately <00:27:39.618>more <00:27:40.085>elegant.

561
00:27:42.295 --> 00:27:45.865
<00:27:42.295>Now <00:27:42.450>a <00:27:42.606>very <00:27:42.761>common <00:27:42.917>complaint <00:27:43.072>in, <00:27:43.228>in <00:27:43.383>Swift <00:27:43.539>year <00:27:43.695>is

562
00:27:45.865 --> 00:27:47.745
<00:27:45.865>that <00:27:46.145>you <00:27:46.425>can <00:27:46.705>do <00:27:46.985>this, <00:27:47.265>uh,

563
00:27:47.765 --> 00:27:50.065
<00:27:47.765>and <00:27:47.965>that <00:27:48.165>you <00:27:48.365>can <00:27:48.565>do <00:27:48.765>this <00:27:48.965>categories <00:27:49.165>setting.

564
00:27:50.205 --> 00:27:54.305
<00:27:50.205>The <00:27:50.379>first <00:27:50.554>responder <00:27:50.730>you <00:27:50.905>notice <00:27:51.080>when <00:27:51.254>you <00:27:51.429>select <00:27:51.605>type

565
00:27:54.485 --> 00:27:55.825
<00:27:54.485>and <00:27:54.657>maybe <00:27:54.829>I, <00:27:55.001>I <00:27:55.174>show <00:27:55.346>it <00:27:55.518>once <00:27:55.691>more.

566
00:27:55.825 --> 00:27:58.395
<00:27:55.825>So <00:27:56.025>you <00:27:56.225>look, <00:27:56.425>when <00:27:56.625>you <00:27:56.825>select <00:27:57.025>type <00:27:57.225>here,

567
00:27:58.575 --> 00:28:00.195
<00:27:58.575>we <00:27:58.925>automatically <00:27:59.275>show <00:27:59.625>a <00:27:59.975>keyboard.

568
00:28:01.375 --> 00:28:03.035
<00:28:01.375>Uh, <00:28:01.575>so <00:28:01.775>you <00:28:01.975>can <00:28:02.175>like <00:28:02.375>start <00:28:02.575>right <00:28:02.775>away

569
00:28:03.055 --> 00:28:06.555
<00:28:03.055>and <00:28:03.255>it's <00:28:03.455>not <00:28:03.655>like <00:28:03.855>clunky <00:28:04.055>Android <00:28:04.255>Android <00:28:04.455>experience

570
00:28:06.555 --> 00:28:07.835
<00:28:06.555>where <00:28:06.719>you <00:28:06.884>have <00:28:07.048>to <00:28:07.213>tap <00:28:07.377>in <00:28:07.542>once <00:28:07.707>more

571
00:28:08.175 --> 00:28:09.435
<00:28:08.175>to <00:28:08.401>actually <00:28:08.628>get <00:28:08.855>the <00:28:09.082>keyboard <00:28:09.309>going.

572
00:28:11.125 --> 00:28:14.345
<00:28:11.125>And <00:28:11.300>while <00:28:11.475>folks <00:28:11.650>are <00:28:11.825>correct <00:28:12.000>that <00:28:12.175>you <00:28:12.350>cannot <00:28:12.525>do

573
00:28:14.345 --> 00:28:17.385
<00:28:14.345>that <00:28:14.545>in <00:28:14.745>Swift <00:28:14.945>ui, <00:28:15.145>it's <00:28:15.345>also <00:28:15.545>extremely <00:28:15.745>easy

574
00:28:17.385 --> 00:28:18.545
<00:28:17.385>to <00:28:17.646>work <00:28:17.907>around <00:28:18.168>it, <00:28:18.429>huh?

575
00:28:19.405 --> 00:28:21.705
<00:28:19.405>So <00:28:19.580>my <00:28:19.754>guess <00:28:19.930>is <00:28:20.105>also <00:28:20.280>that <00:28:20.455>this <00:28:20.629>is <00:28:20.805>something

576
00:28:21.705 --> 00:28:26.585
<00:28:21.705>where <00:28:21.845>we <00:28:21.985>see <00:28:22.125>an <00:28:22.264>improvement <00:28:22.405>in <00:28:22.544>WBC <00:28:22.685>2021, <00:28:22.824>but <00:28:22.965>why <00:28:23.105>wait?

577
00:28:27.725 --> 00:28:31.385
<00:28:27.725>We <00:28:27.852>can <00:28:27.979>access <00:28:28.106>the <00:28:28.234>inner <00:28:28.361>UI <00:28:28.488>text <00:28:28.615>field <00:28:28.743>that <00:28:28.870>Swift <00:28:28.997>UI <00:28:29.125>uses

578
00:28:32.055 --> 00:28:33.425
<00:28:32.055>with <00:28:32.363>a <00:28:32.671>custom <00:28:32.979>view <00:28:33.288>modifier.

579
00:28:35.425 --> 00:28:39.405
<00:28:35.425>And <00:28:35.625>once <00:28:35.825>we, <00:28:36.024>we <00:28:36.225>resolve <00:28:36.425>this <00:28:36.625>custom <00:28:36.825>object,

580
00:28:39.465 --> 00:28:43.325
<00:28:39.465>we <00:28:39.620>simply <00:28:39.776>call <00:28:39.931>become <00:28:40.087>first <00:28:40.242>responder <00:28:40.398>on <00:28:40.553>this <00:28:40.709>view, <00:28:40.865>just

581
00:28:43.325 --> 00:28:47.045
<00:28:43.325>as <00:28:43.452>you <00:28:43.579>do <00:28:43.706>in <00:28:43.834>UI <00:28:43.961>kit <00:28:44.088>as <00:28:44.215>an <00:28:44.343>add <00:28:44.470>benefit, <00:28:44.597>getting <00:28:44.725>access

582
00:28:47.045 --> 00:28:49.965
<00:28:47.045>to <00:28:47.200>the <00:28:47.356>internally <00:28:47.511>used <00:28:47.667>UI <00:28:47.822>text <00:28:47.978>view <00:28:48.133>also <00:28:48.289>enables <00:28:48.445>us

583
00:28:50.025 --> 00:28:53.365
<00:28:50.025>to <00:28:50.165>set <00:28:50.305>a <00:28:50.445>few <00:28:50.585>custom, <00:28:50.725>uh, <00:28:50.865>properties <00:28:51.005>like <00:28:51.145>return <00:28:51.285>key <00:28:51.425>type,

584
00:28:53.695 --> 00:28:57.245
<00:28:53.695>which <00:28:53.835>is <00:28:53.975>also <00:28:54.115>missing <00:28:54.254>from <00:28:54.395>Swift <00:28:54.534>UI <00:28:54.675>here <00:28:54.814>in <00:28:54.955>this <00:28:55.095>case,

585
00:28:57.445 --> 00:29:00.325
<00:28:57.445>the <00:28:57.620>text <00:28:57.794>view <00:28:57.970>finder <00:28:58.145>is <00:28:58.320>a <00:28:58.495>simple <00:28:58.669>UVU <00:28:58.845>subclass.

586
00:29:00.865 --> 00:29:05.285
<00:29:00.865>You <00:29:01.005>notice <00:29:01.145>a <00:29:01.285>pattern, <00:29:01.425>again, <00:29:01.565>we're <00:29:01.705>using <00:29:01.845>a <00:29:01.985>uvu, <00:29:02.125>uh, <00:29:02.265>class

587
00:29:05.285 --> 00:29:09.805
<00:29:05.285>of <00:29:05.440>V <00:29:05.596>embed <00:29:05.751>and <00:29:05.907>this <00:29:06.062>UVU <00:29:06.218>subclass <00:29:06.373>overrides <00:29:06.529>did <00:29:06.685>move

588
00:29:09.825 --> 00:29:13.165
<00:29:09.825>to <00:29:09.965>window <00:29:10.105>and <00:29:10.245>in <00:29:10.385>there <00:29:10.525>it <00:29:10.665>looks <00:29:10.805>for <00:29:10.945>your <00:29:11.085>text <00:29:11.225>field

589
00:29:13.305 --> 00:29:14.765
<00:29:13.305>that's <00:29:13.633>added <00:29:13.962>by <00:29:14.290>Swift <00:29:14.619>ui.

590
00:29:15.775 --> 00:29:19.275
<00:29:15.775>Now <00:29:15.915>you <00:29:16.055>do <00:29:16.195>need <00:29:16.335>to <00:29:16.475>be <00:29:16.615>aware <00:29:16.755>that <00:29:16.895>this <00:29:17.035>is <00:29:17.175>undocumented.

591
00:29:19.275 --> 00:29:21.235
<00:29:19.275>There's <00:29:19.555>no <00:29:19.835>guarantee <00:29:20.115>that <00:29:20.395>Swift <00:29:20.675>J

592
00:29:21.675 --> 00:29:22.755
<00:29:21.675>actually <00:29:21.869>uses <00:29:22.063>you <00:29:22.258>a <00:29:22.452>text <00:29:22.647>field.

593
00:29:23.125 --> 00:29:26.195
<00:29:23.125>Apple <00:29:23.300>could <00:29:23.475>just <00:29:23.650>decide <00:29:23.825>that <00:29:24.000>they're <00:29:24.175>gonna <00:29:24.350>rewrite, <00:29:24.525>uh,

594
00:29:26.315 --> 00:29:28.075
<00:29:26.315>controls <00:29:26.595>or <00:29:26.875>use <00:29:27.155>something <00:29:27.435>completely <00:29:27.715>different

595
00:29:28.075 --> 00:29:30.795
<00:29:28.075>that's <00:29:28.355>internal <00:29:28.635>only <00:29:28.915>some <00:29:29.195>private <00:29:29.475>viewing

596
00:29:30.795 --> 00:29:32.795
<00:29:30.795>or <00:29:31.028>doing <00:29:31.261>it <00:29:31.495>in <00:29:31.728>completely <00:29:31.961>different <00:29:32.195>way.

597
00:29:33.015 --> 00:29:34.875
<00:29:33.015>So <00:29:33.215>you <00:29:33.415>need <00:29:33.615>to <00:29:33.815>be <00:29:34.015>smart <00:29:34.215>about <00:29:34.415>this.

598
00:29:35.255 --> 00:29:38.475
<00:29:35.255>In <00:29:35.410>our <00:29:35.566>case, <00:29:35.721>we <00:29:35.877>wrote <00:29:36.032>this <00:29:36.188>with <00:29:36.343>checking <00:29:36.499>the <00:29:36.655>types.

599
00:29:38.615 --> 00:29:41.165
<00:29:38.615>So <00:29:38.815>the <00:29:39.015>worst <00:29:39.215>case <00:29:39.415>that <00:29:39.615>could <00:29:39.815>happen <00:29:40.015>is

600
00:29:41.165 --> 00:29:43.965
<00:29:41.165>that <00:29:41.365>the <00:29:41.565>keyboard <00:29:41.764>doesn't <00:29:41.965>automatically <00:29:42.165>show <00:29:42.365>up <00:29:42.565>anymore

601
00:29:43.985 --> 00:29:48.525
<00:29:43.985>and <00:29:44.092>the <00:29:44.200>user <00:29:44.308>has <00:29:44.415>to <00:29:44.523>have <00:29:44.631>one <00:29:44.738>more <00:29:44.846>tab <00:29:44.954>until <00:29:45.061>uh, <00:29:45.169>we <00:29:45.277>fix <00:29:45.385>it

602
00:29:49.875 --> 00:29:51.375
<00:29:49.875>so <00:29:50.212>everything <00:29:50.550>is <00:29:50.887>usable, <00:29:51.225>which,

603
00:29:51.665 --> 00:29:53.895
<00:29:51.665>which <00:29:51.865>means <00:29:52.065>we <00:29:52.264>are <00:29:52.465>okay <00:29:52.665>with <00:29:52.865>this <00:29:53.065>pattern.

604
00:29:55.355 --> 00:29:57.415
<00:29:55.355>Um, <00:29:55.555>even <00:29:55.755>more <00:29:55.955>so <00:29:56.155>actually <00:29:56.355>I <00:29:56.555>would <00:29:56.755>argue

605
00:29:57.415 --> 00:30:01.015
<00:29:57.415>that <00:29:57.615>the <00:29:57.815>introspection <00:29:58.014>pattern <00:29:58.215>is <00:29:58.415>something <00:29:58.615>that <00:29:58.815>is

606
00:30:01.655 --> 00:30:04.975
<00:30:01.655>absolutely <00:30:01.888>necessary <00:30:02.121>to <00:30:02.355>really <00:30:02.588>polish <00:30:02.821>Swift <00:30:03.055>ui.

607
00:30:05.515 --> 00:30:09.945
<00:30:05.515>And <00:30:05.631>if <00:30:05.748>you <00:30:05.865>see <00:30:05.981>from <00:30:06.098>the <00:30:06.215>table <00:30:06.331>here, <00:30:06.448>swift <00:30:06.565>UI <00:30:06.681>uses <00:30:06.798>a <00:30:06.915>lot

608
00:30:09.945 --> 00:30:11.345
<00:30:09.945>of <00:30:10.365>existing <00:30:10.785>UI <00:30:11.205>components.

609
00:30:11.445 --> 00:30:15.185
<00:30:11.445>So <00:30:11.585>there's <00:30:11.725>a <00:30:11.865>lot <00:30:12.004>of <00:30:12.145>things <00:30:12.284>where <00:30:12.425>via <00:30:12.564>introspection <00:30:12.705>you <00:30:12.845>can

610
00:30:15.935 --> 00:30:17.125
<00:30:15.935>tweak <00:30:16.202>a <00:30:16.470>few <00:30:16.738>more <00:30:17.006>things

611
00:30:17.145 --> 00:30:21.445
<00:30:17.145>and <00:30:17.345>like <00:30:17.545>further <00:30:17.745>increase, <00:30:17.945>uh, <00:30:18.145>the <00:30:18.345>app <00:30:18.545>polish,

612
00:30:23.195 --> 00:30:25.935
<00:30:23.195>the <00:30:23.475>popular <00:30:23.754>Swift <00:30:24.034>UI <00:30:24.314>introspect <00:30:24.595>library

613
00:30:26.585 --> 00:30:27.615
<00:30:26.585>implements <00:30:27.048>this <00:30:27.512>feature

614
00:30:27.615 --> 00:30:29.655
<00:30:27.615>and <00:30:27.895>implements <00:30:28.175>all <00:30:28.455>of <00:30:28.735>these <00:30:29.015>extensions.

615
00:30:30.315 --> 00:30:32.295
<00:30:30.315>Um, <00:30:30.548>actually <00:30:30.781>there's <00:30:31.015>a <00:30:31.248>pull <00:30:31.481>request <00:30:31.715>open

616
00:30:32.295 --> 00:30:33.615
<00:30:32.295>where <00:30:32.532>I <00:30:32.770>added <00:30:33.007>a <00:30:33.245>few <00:30:33.483>more,

617
00:30:33.625 --> 00:30:35.175
<00:30:33.625>which <00:30:33.904>I <00:30:34.183>needed <00:30:34.462>for <00:30:34.741>another <00:30:35.020>project.

618
00:30:36.375 --> 00:30:39.275
<00:30:36.375>But <00:30:36.491>again, <00:30:36.608>like <00:30:36.725>I <00:30:36.841>need <00:30:36.958>to <00:30:37.075>stress <00:30:37.191>this, <00:30:37.308>this, <00:30:37.425>this <00:30:37.541>is <00:30:37.658>a <00:30:37.775>hack

619
00:30:39.295 --> 00:30:41.115
<00:30:39.295>and <00:30:39.495>it's <00:30:39.695>not <00:30:39.895>something <00:30:40.095>that's <00:30:40.295>documented <00:30:40.495>to <00:30:40.695>work,

620
00:30:41.895 --> 00:30:44.165
<00:30:41.895>so <00:30:42.245>don't <00:30:42.595>rely <00:30:42.945>on <00:30:43.295>this.

621
00:30:45.025 --> 00:30:47.765
<00:30:45.025>Unlike, <00:30:45.200>for <00:30:45.375>example, <00:30:45.550>the <00:30:45.725>the <00:30:45.900>first <00:30:46.075>responder <00:30:46.250>chain <00:30:46.425>trick,

622
00:30:47.765 --> 00:30:50.765
<00:30:47.765>which <00:30:47.920>is <00:30:48.076>documented <00:30:48.231>and <00:30:48.387>while <00:30:48.542>people <00:30:48.698>think <00:30:48.853>it's <00:30:49.009>a <00:30:49.165>trick

623
00:30:50.915 --> 00:30:52.845
<00:30:50.915>that <00:30:51.090>one <00:30:51.264>fully <00:30:51.440>works <00:30:51.615>and <00:30:51.790>has <00:30:51.965>to <00:30:52.139>keep <00:30:52.315>working

624
00:30:52.845 --> 00:30:56.965
<00:30:52.845>because <00:30:53.020>it's <00:30:53.195>documented <00:30:53.370>that <00:30:53.545>way, <00:30:53.720>if <00:30:53.895>you <00:30:54.070>require <00:30:54.245>access

625
00:30:56.965 --> 00:30:59.725
<00:30:56.965>to <00:30:57.120>a <00:30:57.276>UI <00:30:57.431>kit <00:30:57.587>control, <00:30:57.742>if <00:30:57.898>this <00:30:58.053>is <00:30:58.209>like <00:30:58.365>functionality

626
00:30:59.755 --> 00:31:01.805
<00:30:59.755>that <00:30:59.988>is <00:31:00.221>really <00:31:00.455>necessary <00:31:00.688>for <00:31:00.921>your <00:31:01.155>app

627
00:31:02.305 --> 00:31:05.765
<00:31:02.305>and <00:31:02.480>not <00:31:02.655>an <00:31:02.830>extension <00:31:03.005>like <00:31:03.180>showing <00:31:03.355>the <00:31:03.530>keyboard, <00:31:03.705>then

628
00:31:06.115 --> 00:31:10.525
<00:31:06.115>what <00:31:06.255>you <00:31:06.395>can <00:31:06.535>do <00:31:06.675>is <00:31:06.815>instead <00:31:06.955>of <00:31:07.095>trusting <00:31:07.235>Swift <00:31:07.375>UI <00:31:07.515>to

629
00:31:11.105 --> 00:31:13.845
<00:31:11.105>use <00:31:11.260>this <00:31:11.416>component, <00:31:11.571>just <00:31:11.727>wrap <00:31:11.882>the <00:31:12.038>UI <00:31:12.193>kit <00:31:12.349>component <00:31:12.505>yourself.

630
00:31:14.035 --> 00:31:15.205
<00:31:14.035>This <00:31:14.298>is <00:31:14.561>actually <00:31:14.824>quite <00:31:15.088>easy.

631
00:31:15.745 --> 00:31:17.605
<00:31:15.745>You <00:31:15.945>can <00:31:16.145>write <00:31:16.344>a <00:31:16.544>helper <00:31:16.745>to <00:31:16.945>do <00:31:17.145>that

632
00:31:18.705 --> 00:31:20.925
<00:31:18.705>and <00:31:18.860>in <00:31:19.016>the <00:31:19.171>end <00:31:19.327>you <00:31:19.482>get <00:31:19.638>basically <00:31:19.793>the <00:31:19.949>same <00:31:20.105>control

633
00:31:21.595 --> 00:31:24.565
<00:31:21.595>than <00:31:21.735>using <00:31:21.875>it <00:31:22.015>in <00:31:22.155>Swift <00:31:22.295>U <00:31:22.435>because <00:31:22.575>it's <00:31:22.715>the <00:31:22.855>same <00:31:22.995>control.

634
00:31:28.125 --> 00:31:31.545
<00:31:28.125>Now <00:31:28.280>some <00:31:28.436>bugs <00:31:28.591>are <00:31:28.747>easier <00:31:28.902>to <00:31:29.058>work <00:31:29.213>around <00:31:29.369>than <00:31:29.525>others.

635
00:31:32.875 --> 00:31:36.045
<00:31:32.875>When <00:31:33.050>testing, <00:31:33.225>we <00:31:33.400>noticed <00:31:33.575>again <00:31:33.750>with <00:31:33.925>Swift <00:31:34.100>UI <00:31:34.275>one,

636
00:31:37.185 --> 00:31:41.405
<00:31:37.185>the <00:31:37.325>setting <00:31:37.465>a <00:31:37.605>value <00:31:37.745>other <00:31:37.885>than <00:31:38.024>one <00:31:38.165>on <00:31:38.304>minimum <00:31:38.445>scale <00:31:38.585>factor

637
00:31:41.615 --> 00:31:44.285
<00:31:41.615>would <00:31:41.848>simply <00:31:42.081>cause <00:31:42.315>an <00:31:42.548>endless <00:31:42.781>layout <00:31:43.015>loop

638
00:31:44.615 --> 00:31:47.085
<00:31:44.615>after <00:31:44.815>deleting <00:31:45.015>the <00:31:45.215>last <00:31:45.415>character <00:31:45.615>on <00:31:45.815>the <00:31:46.015>text

639
00:31:47.085 --> 00:31:49.355
<00:31:47.085>field <00:31:47.551>as <00:31:48.018>a <00:31:48.485>workaround.

640
00:31:49.415 --> 00:31:50.875
<00:31:49.415>And <00:31:49.634>because <00:31:49.853>we <00:31:50.072>wanted <00:31:50.291>to <00:31:50.510>make <00:31:50.729>sure

641
00:31:50.895 --> 00:31:52.915
<00:31:50.895>to <00:31:51.128>like <00:31:51.361>not <00:31:51.595>make <00:31:51.828>this <00:31:52.061>mistake <00:31:52.295>again,

642
00:31:53.785 --> 00:31:57.405
<00:31:53.785>we <00:31:53.960>simply <00:31:54.135>wrote <00:31:54.310>a <00:31:54.485>custom <00:31:54.660>view <00:31:54.835>extension <00:31:55.010>called <00:31:55.185>safe

643
00:31:57.445 --> 00:31:58.565
<00:31:57.445>minimum <00:31:57.949>scale <00:31:58.453>factor.

644
00:31:59.065 --> 00:32:02.365
<00:31:59.065>To <00:31:59.345>generalize <00:31:59.625>this <00:31:59.905>workaround <00:32:00.185>the <00:32:00.465>experience

645
00:32:02.365 --> 00:32:03.725
<00:32:02.365>for <00:32:02.569>I <00:32:02.773>certain <00:32:02.976>is <00:32:03.181>still <00:32:03.385>pretty <00:32:03.589>good.

646
00:32:03.795 --> 00:32:05.445
<00:32:03.795>This <00:32:04.028>really <00:32:04.261>was <00:32:04.495>like <00:32:04.728>a <00:32:04.961>scaling <00:32:05.195>issue.

647
00:32:05.445 --> 00:32:07.045
<00:32:05.445>So <00:32:05.620>like <00:32:05.794>your <00:32:05.970>signature <00:32:06.145>can <00:32:06.320>be <00:32:06.495>a <00:32:06.669>little <00:32:06.845>larger

648
00:32:08.065 --> 00:32:10.685
<00:32:08.065>and <00:32:08.240>eventually <00:32:08.415>we <00:32:08.590>can <00:32:08.765>just <00:32:08.940>remove <00:32:09.115>this <00:32:09.290>hack <00:32:09.465>once

649
00:32:10.685 --> 00:32:11.805
<00:32:10.685>Swift <00:32:10.937>UR <00:32:11.189>one <00:32:11.441>is <00:32:11.693>dropped.

650
00:32:13.975 --> 00:32:15.315
<00:32:13.975>Now <00:32:14.377>you've <00:32:14.779>seen <00:32:15.181>that

651
00:32:15.885 --> 00:32:19.035
<00:32:15.885>we've <00:32:16.060>wrapped <00:32:16.235>custom <00:32:16.410>views <00:32:16.585>quite <00:32:16.760>a <00:32:16.935>bit <00:32:17.110>here <00:32:17.285>already.

652
00:32:19.705 --> 00:32:21.555
<00:32:19.705>Most <00:32:19.879>of <00:32:20.054>the <00:32:20.230>time <00:32:20.405>it <00:32:20.580>is <00:32:20.754>the <00:32:20.929>same <00:32:21.105>code

653
00:32:21.935 --> 00:32:23.955
<00:32:21.935>and <00:32:22.168>we <00:32:22.401>can <00:32:22.635>write <00:32:22.868>a <00:32:23.101>small <00:32:23.335>helper

654
00:32:23.955 --> 00:32:25.435
<00:32:23.955>that <00:32:24.221>makes <00:32:24.487>this <00:32:24.754>much <00:32:25.020>more <00:32:25.287>simpler.

655
00:32:26.835 --> 00:32:29.795
<00:32:26.835>Remember <00:32:26.990>the <00:32:27.146>fine <00:32:27.301>tuned <00:32:27.457>objective <00:32:27.612>c <00:32:27.768>plus <00:32:27.923>plus <00:32:28.079>based <00:32:28.235>draw

656
00:32:29.795 --> 00:32:31.755
<00:32:29.795>view, <00:32:30.028>here's <00:32:30.261>how <00:32:30.495>we <00:32:30.728>can <00:32:30.961>wrap <00:32:31.195>it

657
00:32:31.755 --> 00:32:34.435
<00:32:31.755>and <00:32:31.930>configure <00:32:32.105>it <00:32:32.280>in <00:32:32.455>three <00:32:32.630>lines <00:32:32.805>of <00:32:32.980>Swift <00:32:33.155>ui.

658
00:32:35.245 --> 00:32:38.145
<00:32:35.245>In <00:32:35.419>this <00:32:35.594>case <00:32:35.770>actually <00:32:35.945>if <00:32:36.120>we <00:32:36.294>change <00:32:36.469>stroke <00:32:36.645>color.

659
00:32:39.185 --> 00:32:41.365
<00:32:39.185>So <00:32:39.325>you <00:32:39.465>have <00:32:39.605>to <00:32:39.745>able <00:32:39.885>to <00:32:40.024>automatically <00:32:40.165>re <00:32:40.304>rebuild <00:32:40.445>the <00:32:40.585>UI

660
00:32:41.825 --> 00:32:43.325
<00:32:41.825>so <00:32:42.095>you <00:32:42.365>get <00:32:42.635>all <00:32:42.905>the <00:32:43.175>benefits

661
00:32:43.325 --> 00:32:47.325
<00:32:43.325>of <00:32:43.480>Swift <00:32:43.636>UI <00:32:43.791>performance <00:32:43.947>viewing <00:32:44.102>even <00:32:44.258>for <00:32:44.413>existing <00:32:44.569>UI <00:32:44.725>views.

662
00:32:49.805 --> 00:32:51.985
<00:32:49.805>The <00:32:50.005>wrap <00:32:50.205>is <00:32:50.405>a, <00:32:50.605>is <00:32:50.805>a <00:32:51.005>straightforward <00:32:51.205>struck,

663
00:32:52.245 --> 00:32:53.945
<00:32:52.245>we <00:32:52.524>use <00:32:52.804>your <00:32:53.084>view <00:32:53.364>representable <00:32:53.645>here.

664
00:32:53.945 --> 00:32:55.065
<00:32:53.945>This <00:32:54.089>is <00:32:54.233>the <00:32:54.377>standard <00:32:54.521>way <00:32:54.665>to <00:32:54.809>do <00:32:54.953>it

665
00:32:56.325 --> 00:32:58.425
<00:32:56.325>and <00:32:56.558>we <00:32:56.791>also <00:32:57.025>expose <00:32:57.258>an <00:32:57.491>update <00:32:57.725>block

666
00:32:58.605 --> 00:33:01.385
<00:32:58.605>to <00:32:58.780>make <00:32:58.955>easy <00:32:59.130>configurative <00:32:59.305>view <00:32:59.480>after <00:32:59.655>it's <00:32:59.830>been <00:33:00.005>created.

667
00:33:04.095 --> 00:33:07.585
<00:33:04.095>Now <00:33:04.295>a <00:33:04.495>few <00:33:04.695>those <00:33:04.895>things <00:33:05.095>to <00:33:05.295>inspire <00:33:05.495>you.

668
00:33:08.445 --> 00:33:11.395
<00:33:08.445>We, <00:33:08.725>we <00:33:09.004>do <00:33:09.284>modify <00:33:09.564>the <00:33:09.845>UI

669
00:33:11.765 --> 00:33:14.395
<00:33:11.765>after <00:33:11.940>drawing <00:33:12.115>a <00:33:12.290>signature <00:33:12.465>so <00:33:12.640>that <00:33:12.815>that <00:33:12.990>add <00:33:13.165>button

670
00:33:14.425 --> 00:33:16.995
<00:33:14.425>that <00:33:14.580>you <00:33:14.736>see, <00:33:14.891>um, <00:33:15.047>I <00:33:15.202>can <00:33:15.358>show <00:33:15.513>it <00:33:15.669>once <00:33:15.825>more.

671
00:33:18.415 --> 00:33:22.505
<00:33:18.415>It's <00:33:18.570>only <00:33:18.726>enabled <00:33:18.881>once <00:33:19.037>you <00:33:19.192>actually <00:33:19.348>draw <00:33:19.503>a <00:33:19.659>signature <00:33:19.815>and,

672
00:33:22.605 --> 00:33:25.225
<00:33:22.605>and <00:33:22.780>not <00:33:22.955>before <00:33:23.130>you <00:33:23.305>don't <00:33:23.480>insert <00:33:23.655>an <00:33:23.830>empty <00:33:24.005>signature.

673
00:33:25.225 --> 00:33:27.865
<00:33:25.225>It <00:33:25.341>wouldn't <00:33:25.458>make <00:33:25.574>any <00:33:25.691>sense. <00:33:25.808>What <00:33:25.925>we <00:33:26.041>do <00:33:26.158>it <00:33:26.274>is <00:33:26.391>we <00:33:26.508>use <00:33:26.625>a

674
00:33:28.065 --> 00:33:31.265
<00:33:28.065>combined <00:33:28.298>publisher <00:33:28.531>because <00:33:28.765>combined <00:33:28.998>just <00:33:29.231>works <00:33:29.465>really,

675
00:33:31.265 --> 00:33:33.025
<00:33:31.265>really <00:33:31.615>well <00:33:31.965>with <00:33:32.315>Swift <00:33:32.665>ui.

676
00:33:34.475 --> 00:33:38.535
<00:33:34.475>Now <00:33:34.615>the <00:33:34.754>problem <00:33:34.895>is <00:33:35.034>that <00:33:35.175>of <00:33:35.314>course <00:33:35.455>the <00:33:35.594>the <00:33:35.735>draw <00:33:35.875>view

677
00:33:38.765 --> 00:33:40.975
<00:33:38.765>that <00:33:38.940>we <00:33:39.115>use <00:33:39.290>is, <00:33:39.465>is <00:33:39.640>still <00:33:39.815>written <00:33:39.990>to <00:33:40.165>you.

678
00:33:40.975 --> 00:33:44.855
<00:33:40.975>See <00:33:41.149>it <00:33:41.324>was <00:33:41.500>written <00:33:41.675>long <00:33:41.850>before <00:33:42.024>Apple <00:33:42.199>made <00:33:42.375>combine.

679
00:33:48.185 --> 00:33:50.745
<00:33:48.185>So <00:33:48.465>when <00:33:48.745>we <00:33:49.024>write <00:33:49.304>this <00:33:49.585>publisher,

680
00:33:54.225 --> 00:33:56.325
<00:33:54.225>let <00:33:54.399>me <00:33:54.574>see <00:33:54.750>when <00:33:54.925>we <00:33:55.100>write <00:33:55.274>this, <00:33:55.449>this <00:33:55.625>publisher,

681
00:33:57.285 --> 00:33:59.825
<00:33:57.285>we <00:33:57.401>don't <00:33:57.518>have <00:33:57.635>a <00:33:57.751>a <00:33:57.868>simple <00:33:57.985>way <00:33:58.101>to <00:33:58.218>just <00:33:58.335>add <00:33:58.451>it <00:33:58.568>to <00:33:58.685>the,

682
00:33:59.965 --> 00:34:02.585
<00:33:59.965>the <00:34:00.139>structure <00:34:00.314>directly, <00:34:00.490>but <00:34:00.665>we <00:34:00.840>can <00:34:01.014>use <00:34:01.189>an <00:34:01.365>extension

683
00:34:03.885 --> 00:34:07.905
<00:34:03.885>and <00:34:04.025>we <00:34:04.165>can, <00:34:04.305>we <00:34:04.445>can <00:34:04.585>use <00:34:04.725>existing <00:34:04.865>mechanisms <00:34:05.004>where <00:34:05.145>the <00:34:05.285>view

684
00:34:09.275 --> 00:34:11.195
<00:34:09.275>notifies <00:34:09.475>us <00:34:09.675>of <00:34:09.875>a <00:34:10.075>change <00:34:10.275>in <00:34:10.475>this <00:34:10.675>way.

685
00:34:11.535 --> 00:34:15.515
<00:34:11.534>Um, <00:34:11.710>a <00:34:11.884>common <00:34:12.060>pattern <00:34:12.234>is <00:34:12.409>that <00:34:12.585>use <00:34:12.759>notification <00:34:12.935>center

686
00:34:16.335 --> 00:34:19.395
<00:34:16.335>and <00:34:16.475>in <00:34:16.615>this <00:34:16.755>case <00:34:16.895>that <00:34:17.034>raw <00:34:17.175>view <00:34:17.315>did <00:34:17.455>change <00:34:17.595>point <00:34:17.735>sequences

687
00:34:19.975 --> 00:34:24.275
<00:34:19.975>and <00:34:20.255>there's <00:34:20.534>another <00:34:20.815>one, <00:34:21.094>um, <00:34:21.375>for,

688
00:34:24.575 --> 00:34:25.835
<00:34:24.574>for <00:34:24.858>for <00:34:25.141>the <00:34:25.425>draw <00:34:25.708>layouts.

689
00:34:26.255 --> 00:34:30.835
<00:34:26.255>And <00:34:26.410>then <00:34:26.566>you <00:34:26.721>can <00:34:26.877>map <00:34:27.032>those <00:34:27.188>existing <00:34:27.343>ways <00:34:27.499>of <00:34:27.655>notification.

690
00:34:31.055 --> 00:34:33.355
<00:34:31.054>You <00:34:31.230>can <00:34:31.404>see <00:34:31.580>the <00:34:31.754>first <00:34:31.929>one <00:34:32.105>is <00:34:32.279>notification <00:34:32.455>center,

691
00:34:33.375 --> 00:34:34.795
<00:34:33.375>the <00:34:33.630>second <00:34:33.886>one <00:34:34.141>is <00:34:34.397>actually <00:34:34.653>KBO.

692
00:34:35.175 --> 00:34:36.635
<00:34:35.175>And <00:34:35.394>then <00:34:35.613>you <00:34:35.832>can <00:34:36.051>map <00:34:36.270>this <00:34:36.489>and,

693
00:34:36.655 --> 00:34:40.515
<00:34:36.655>and <00:34:36.830>push <00:34:37.005>this <00:34:37.180>into <00:34:37.355>a <00:34:37.530>combined <00:34:37.705>publisher <00:34:37.880>like <00:34:38.055>the,

694
00:34:40.535 --> 00:34:42.115
<00:34:40.534>the <00:34:40.768>view <00:34:41.001>part <00:34:41.234>doesn't <00:34:41.468>need <00:34:41.701>to <00:34:41.935>appear

695
00:34:42.855 --> 00:34:44.355
<00:34:42.855>how <00:34:43.192>this <00:34:43.530>publisher <00:34:43.867>was <00:34:44.205>created.

696
00:34:44.455 --> 00:34:47.155
<00:34:44.455>It <00:34:44.594>will <00:34:44.735>just <00:34:44.875>work <00:34:45.014>and <00:34:45.154>eventually <00:34:45.295>if <00:34:45.435>you <00:34:45.574>modernize <00:34:45.715>the <00:34:45.855>view,

697
00:34:47.415 --> 00:34:50.035
<00:34:47.415>you <00:34:47.570>can <00:34:47.726>use <00:34:47.881>a <00:34:48.037>more <00:34:48.192>efficient <00:34:48.348>way <00:34:48.503>of <00:34:48.659>doing <00:34:48.815>things.

698
00:34:51.435 --> 00:34:53.925
<00:34:51.435>Alright, <00:34:51.634>uh, <00:34:51.835>we <00:34:52.034>have <00:34:52.235>a <00:34:52.435>few <00:34:52.634>more <00:34:52.835>minutes.

699
00:34:54.345 --> 00:34:56.985
<00:34:54.344>One <00:34:54.694>more <00:34:55.044>trick <00:34:55.395>keyboard <00:34:55.745>avoidance.

700
00:34:57.045 --> 00:34:59.625
<00:34:57.045>So <00:34:57.200>this <00:34:57.356>is <00:34:57.511>like <00:34:57.667>a <00:34:57.822>topic <00:34:57.978>that's <00:34:58.133>like <00:34:58.289>a <00:34:58.445>theme

701
00:34:59.765 --> 00:35:02.105
<00:34:59.765>and <00:35:00.045>it's <00:35:00.325>always <00:35:00.605>fun <00:35:00.884>or <00:35:01.165>not.

702
00:35:02.685 --> 00:35:04.705
<00:35:02.685>Um, <00:35:03.151>50 <00:35:03.618>I <00:35:04.085>two

703
00:35:05.245 --> 00:35:09.025
<00:35:05.245>has <00:35:05.444>great <00:35:05.645>automated <00:35:05.845>keyboard <00:35:06.045>avoidance, <00:35:06.245>right <00:35:06.444>built <00:35:06.645>in.

704
00:35:09.155 --> 00:35:12.785
<00:35:09.155>Great. <00:35:09.295>This <00:35:09.435>feature <00:35:09.575>doesn't <00:35:09.715>exist <00:35:09.855>in <00:35:09.995>Swift <00:35:10.135>I <00:35:10.275>one <00:35:10.415>at <00:35:10.555>all.

705
00:35:14.015 --> 00:35:16.235
<00:35:14.015>So <00:35:14.248>we <00:35:14.481>had <00:35:14.714>to <00:35:14.948>retrofit <00:35:15.181>it <00:35:15.415>ourselves

706
00:35:18.105 --> 00:35:19.405
<00:35:18.105>in <00:35:18.495>the <00:35:18.885>signature <00:35:19.275>view.

707
00:35:20.225 --> 00:35:22.685
<00:35:20.225>We <00:35:20.505>add <00:35:20.785>a <00:35:21.065>keyboard <00:35:21.345>view <00:35:21.625>just

708
00:35:22.775 --> 00:35:25.685
<00:35:22.775>below <00:35:22.950>the <00:35:23.125>bottom <00:35:23.300>toolbar <00:35:23.475>so <00:35:23.650>you <00:35:23.825>don't <00:35:24.000>see <00:35:24.175>it.

709
00:35:25.685 --> 00:35:27.685
<00:35:25.685>It's, <00:35:25.918>it's <00:35:26.151>invisible <00:35:26.384>but <00:35:26.618>it's <00:35:26.851>basically <00:35:27.085>now

710
00:35:27.865 --> 00:35:29.125
<00:35:27.865>hidden <00:35:28.243>behind <00:35:28.621>the <00:35:28.999>keyboard.

711
00:35:30.535 --> 00:35:32.905
<00:35:30.535>Initially <00:35:30.768>it <00:35:31.001>has <00:35:31.234>a <00:35:31.468>hate <00:35:31.701>of <00:35:31.935>zero

712
00:35:33.045 --> 00:35:35.305
<00:35:33.045>and <00:35:33.245>once <00:35:33.445>the <00:35:33.645>keyboard <00:35:33.845>comes <00:35:34.045>up, <00:35:34.245>the <00:35:34.445>hate

713
00:35:35.305 --> 00:35:37.245
<00:35:35.305>of <00:35:35.538>this <00:35:35.771>keyboard <00:35:36.004>view <00:35:36.238>is <00:35:36.471>modified, <00:35:36.705>modified

714
00:35:37.965 --> 00:35:40.815
<00:35:37.965>with <00:35:38.140>a <00:35:38.315>calculation <00:35:38.490>of <00:35:38.665>the <00:35:38.840>overlap <00:35:39.015>that <00:35:39.190>we <00:35:39.365>need.

715
00:35:40.835 --> 00:35:42.495
<00:35:40.835>So <00:35:41.068>the <00:35:41.301>control <00:35:41.535>is <00:35:41.768>still <00:35:42.001>fully <00:35:42.235>there.

716
00:35:44.145 --> 00:35:47.725
<00:35:44.145>Now <00:35:44.345>this <00:35:44.545>all <00:35:44.745>is <00:35:44.945>a <00:35:45.145>little <00:35:45.345>tricky, <00:35:45.545>um,

717
00:35:48.465 --> 00:35:50.445
<00:35:48.465>but <00:35:48.640>the <00:35:48.815>keyboard <00:35:48.990>view <00:35:49.165>itself <00:35:49.340>is <00:35:49.515>actually <00:35:49.690>quite <00:35:49.865>simple.

718
00:35:50.545 --> 00:35:53.405
<00:35:50.545>It <00:35:50.778>simply <00:35:51.011>wraps <00:35:51.245>again, <00:35:51.478>uh, <00:35:51.711>your <00:35:51.945>view.

719
00:35:55.295 --> 00:35:58.715
<00:35:55.295>And <00:35:55.435>we <00:35:55.575>also <00:35:55.715>use <00:35:55.855>a <00:35:55.995>a <00:35:56.135>coordinator, <00:35:56.275>which <00:35:56.415>is <00:35:56.555>also <00:35:56.695>something

720
00:35:58.715 --> 00:36:02.955
<00:35:58.715>that's <00:35:58.948>a <00:35:59.181>pat <00:35:59.415>on <00:35:59.648>the <00:35:59.881>new <00:36:00.115>reviews.

721
00:36:03.735 --> 00:36:06.115
<00:36:03.735>So <00:36:03.968>we <00:36:04.201>add <00:36:04.435>additional <00:36:04.668>logic <00:36:04.901>in <00:36:05.135>there

722
00:36:06.375 --> 00:36:07.475
<00:36:06.375>and <00:36:06.705>in <00:36:07.035>the <00:36:07.365>coordinator,

723
00:36:07.575 --> 00:36:09.835
<00:36:07.575>I'm <00:36:07.714>sorry <00:36:07.855>this <00:36:07.995>is <00:36:08.134>not <00:36:08.274>a <00:36:08.415>little <00:36:08.555>bit <00:36:08.694>more <00:36:08.835>code, <00:36:08.975>uh,

724
00:36:10.095 --> 00:36:12.235
<00:36:10.095>all <00:36:10.328>the <00:36:10.561>technology <00:36:10.794>parts <00:36:11.028>are <00:36:11.261>in <00:36:11.495>there.

725
00:36:13.335 --> 00:36:15.515
<00:36:13.335>So <00:36:13.510>coordinator <00:36:13.685>is <00:36:13.860>a <00:36:14.035>class <00:36:14.210>and <00:36:14.385>not <00:36:14.560>a <00:36:14.735>Instruc

726
00:36:16.585 --> 00:36:19.165
<00:36:16.585>and <00:36:16.785>Swift, <00:36:16.985>yeah, <00:36:17.185>will <00:36:17.385>make <00:36:17.585>sure <00:36:17.785>to <00:36:17.985>keep

727
00:36:19.165 --> 00:36:20.965
<00:36:19.165>around <00:36:19.445>the <00:36:19.725>coordinator <00:36:20.005>class <00:36:20.285>as <00:36:20.565>long

728
00:36:20.965 --> 00:36:23.285
<00:36:20.965>as <00:36:21.315>your <00:36:21.665>view <00:36:22.015>is <00:36:22.365>displayed.

729
00:36:23.705 --> 00:36:27.085
<00:36:23.705>We <00:36:23.880>do <00:36:24.055>listen <00:36:24.230>to <00:36:24.404>keyboard <00:36:24.580>will <00:36:24.755>change <00:36:24.930>frame <00:36:25.105>notification

730
00:36:28.265 --> 00:36:32.565
<00:36:28.265>and <00:36:28.392>on <00:36:28.519>getting <00:36:28.646>it <00:36:28.774>we <00:36:28.901>get <00:36:29.028>the <00:36:29.155>keyboard <00:36:29.283>racked, <00:36:29.410>we <00:36:29.537>convert <00:36:29.665>it

731
00:36:32.705 --> 00:36:34.885
<00:36:32.705>to <00:36:32.985>be <00:36:33.265>in <00:36:33.545>the <00:36:33.825>hosting <00:36:34.105>controller

732
00:36:35.345 --> 00:36:37.565
<00:36:35.345>and <00:36:35.578>then <00:36:35.811>we <00:36:36.044>calculate <00:36:36.278>the <00:36:36.511>intersection <00:36:36.745>heat.

733
00:36:37.995 --> 00:36:40.325
<00:36:37.995>This <00:36:38.194>is <00:36:38.395>now <00:36:38.595>only <00:36:38.795>because <00:36:38.995>keyboards <00:36:39.194>are <00:36:39.395>tricky

734
00:36:41.735 --> 00:36:43.755
<00:36:41.735>and <00:36:41.875>in <00:36:42.015>this <00:36:42.155>code <00:36:42.295>we <00:36:42.435>also <00:36:42.575>make <00:36:42.715>sure <00:36:42.855>that <00:36:42.995>we <00:36:43.135>deal

735
00:36:44.145 --> 00:36:46.835
<00:36:44.145>with <00:36:44.320>situations <00:36:44.495>where <00:36:44.670>the <00:36:44.845>keyboard <00:36:45.020>is <00:36:45.195>not <00:36:45.370>docked, <00:36:45.545>um,

736
00:36:46.835 --> 00:36:49.595
<00:36:46.835>which <00:36:46.962>is <00:36:47.089>seen <00:36:47.216>on <00:36:47.344>the <00:36:47.471>iPad <00:36:47.598>with <00:36:47.725>a <00:36:47.853>lot <00:36:47.980>of <00:36:48.107>people <00:36:48.235>forget.

737
00:36:50.535 --> 00:36:52.795
<00:36:50.535>Now <00:36:50.884>also <00:36:51.234>you <00:36:51.585>can <00:36:51.935>forget

738
00:36:52.795 --> 00:36:56.475
<00:36:52.795>that <00:36:52.935>the <00:36:53.075>form <00:36:53.215>sheet <00:36:53.355>we <00:36:53.495>use <00:36:53.635>the <00:36:53.775>present <00:36:53.915>is <00:36:54.055>UI <00:36:54.195>kit,

739
00:36:56.615 --> 00:36:59.915
<00:36:56.615>but <00:36:56.814>the <00:36:57.015>presentation <00:36:57.214>logic <00:36:57.415>itself <00:36:57.615>has <00:36:57.814>keyboard <00:36:58.015>avoidance

740
00:36:59.915 --> 00:37:00.955
<00:36:59.915>built <00:37:00.383>in, <00:37:00.851>but

741
00:37:00.955 --> 00:37:03.235
<00:37:00.955>of <00:37:01.130>course <00:37:01.305>only <00:37:01.480>like <00:37:01.654>the <00:37:01.830>sheet <00:37:02.005>cannot <00:37:02.180>actually <00:37:02.355>move

742
00:37:03.235 --> 00:37:04.475
<00:37:03.235>content <00:37:03.607>in <00:37:03.979>the <00:37:04.351>sheet.

743
00:37:05.335 --> 00:37:09.275
<00:37:05.335>So <00:37:05.451>what <00:37:05.568>we <00:37:05.685>do <00:37:05.801>here <00:37:05.918>is <00:37:06.035>actually <00:37:06.151>we, <00:37:06.268>we <00:37:06.385>wait <00:37:06.501>one <00:37:06.618>run <00:37:06.735>loop.

744
00:37:10.795 --> 00:37:13.545
<00:37:10.795>So <00:37:10.970>we <00:37:11.145>wait <00:37:11.320>for <00:37:11.495>UI <00:37:11.670>kit <00:37:11.845>to <00:37:12.020>adapt <00:37:12.195>the,

745
00:37:13.885 --> 00:37:15.705
<00:37:13.885>the <00:37:14.118>whole <00:37:14.351>sheet <00:37:14.585>and <00:37:14.818>move <00:37:15.051>it <00:37:15.285>up.

746
00:37:16.605 --> 00:37:18.505
<00:37:16.605>And <00:37:16.838>then <00:37:17.071>after <00:37:17.305>this <00:37:17.538>run <00:37:17.771>loop <00:37:18.005>dance,

747
00:37:18.575 --> 00:37:19.985
<00:37:18.575>then <00:37:18.892>we <00:37:19.209>do <00:37:19.526>our <00:37:19.844>calculations

748
00:37:20.085 --> 00:37:23.665
<00:37:20.085>and <00:37:20.240>see <00:37:20.396>how <00:37:20.551>much <00:37:20.707>more <00:37:20.862>we <00:37:21.018>have <00:37:21.173>to <00:37:21.329>adjust <00:37:21.485>uh,

749
00:37:24.565 --> 00:37:26.425
<00:37:24.565>to <00:37:24.845>calculate, <00:37:25.125>to <00:37:25.405>actually <00:37:25.685>make <00:37:25.965>sure

750
00:37:26.425 --> 00:37:27.985
<00:37:26.425>that <00:37:26.705>all <00:37:26.985>our <00:37:27.265>content <00:37:27.545>is <00:37:27.825>visible.

751
00:37:29.285 --> 00:37:33.065
<00:37:29.285>Now <00:37:29.424>in <00:37:29.565>order <00:37:29.705>to <00:37:29.845>get <00:37:29.984>the <00:37:30.125>exact <00:37:30.265>same <00:37:30.404>behavior <00:37:30.545>and <00:37:30.685>14

752
00:37:33.485 --> 00:37:34.625
<00:37:33.485>and <00:37:33.741>keep <00:37:33.998>the <00:37:34.254>code <00:37:34.511>simpler,

753
00:37:35.365 --> 00:37:37.745
<00:37:35.365>we <00:37:35.645>disable <00:37:35.924>automatic <00:37:36.205>avoidance <00:37:36.484>I <00:37:36.765>14.

754
00:37:38.845 --> 00:37:41.935
<00:37:38.845>It's <00:37:39.000>quite <00:37:39.156>easy. <00:37:39.311>There's <00:37:39.467>a <00:37:39.622>ignore <00:37:39.778>a <00:37:39.933>safe <00:37:40.089>area <00:37:40.245>property,

755
00:37:42.235 --> 00:37:44.295
<00:37:42.235>but <00:37:42.435>again <00:37:42.635>it's <00:37:42.835>only <00:37:43.035>available <00:37:43.235>in <00:37:43.435>IS <00:37:43.635>14

756
00:37:44.675 --> 00:37:46.575
<00:37:44.675>so <00:37:44.830>you <00:37:44.986>wanna <00:37:45.141>ride <00:37:45.297>a <00:37:45.452>helper, <00:37:45.608>like <00:37:45.763>read <00:37:45.919>it <00:37:46.075>here,

757
00:37:46.575 --> 00:37:48.095
<00:37:46.575>ignore <00:37:47.031>builtin <00:37:47.486>keyboard <00:37:47.942>avoidance

758
00:37:48.605 --> 00:37:50.085
<00:37:48.605>that <00:37:48.871>just <00:37:49.137>does <00:37:49.404>the <00:37:49.670>right <00:37:49.937>thing.

759
00:37:50.085 --> 00:37:52.125
<00:37:50.085>And <00:37:50.318>basically <00:37:50.551>that's <00:37:50.785>nothing <00:37:51.018>on <00:37:51.251>I <00:37:51.485>13.

760
00:37:53.335 --> 00:37:57.595
<00:37:53.335>Now <00:37:53.475>we <00:37:53.615>could <00:37:53.755>rale <00:37:53.895>that <00:37:54.035>once <00:37:54.175>we <00:37:54.315>drop <00:37:54.455>IRS <00:37:54.595>13, <00:37:54.735>but

761
00:37:57.595 --> 00:38:00.155
<00:37:57.595>because <00:37:57.770>this <00:37:57.944>works <00:37:58.120>and <00:37:58.294>it <00:37:58.470>works <00:37:58.645>in <00:37:58.819>both <00:37:58.995>versions

762
00:38:00.375 --> 00:38:02.595
<00:38:00.375>and <00:38:00.725>getting <00:38:01.075>the <00:38:01.425>keyboard <00:38:01.775>avoidance

763
00:38:02.625 --> 00:38:03.875
<00:38:02.625>just <00:38:02.906>right <00:38:03.187>is <00:38:03.468>often <00:38:03.750>tricky.

764
00:38:04.725 --> 00:38:06.265
<00:38:04.725>Uh, <00:38:04.956>we <00:38:05.187>probably <00:38:05.417>just <00:38:05.649>leave <00:38:05.880>that <00:38:06.111>in.

765
00:38:08.535 --> 00:38:11.085
<00:38:08.535>There <00:38:08.674>is <00:38:08.815>no <00:38:08.955>need <00:38:09.095>to <00:38:09.234>to <00:38:09.375>branch <00:38:09.515>out <00:38:09.654>and <00:38:09.795>redo <00:38:09.935>it

766
00:38:11.245 --> 00:38:12.605
<00:38:11.245>after <00:38:11.857>which <00:38:12.469>operation.

767
00:38:14.425 --> 00:38:16.245
<00:38:14.425>Now <00:38:14.891>feeding <00:38:15.358>everything <00:38:15.825>together.

768
00:38:16.305 --> 00:38:17.965
<00:38:16.305>And <00:38:16.480>so <00:38:16.654>you <00:38:16.830>like <00:38:17.004>have <00:38:17.180>some <00:38:17.355>idea <00:38:17.529>this <00:38:17.705>is

769
00:38:18.025 --> 00:38:19.485
<00:38:18.025>how <00:38:18.463>keyboard <00:38:18.901>was <00:38:19.339>used.

770
00:38:19.555 --> 00:38:21.365
<00:38:19.555>It's <00:38:19.754>basically <00:38:19.955>the <00:38:20.154>last <00:38:20.355>view <00:38:20.555>in <00:38:20.754>the <00:38:20.955>section.

771
00:38:21.465 --> 00:38:23.125
<00:38:21.465>You <00:38:21.745>have <00:38:22.025>the, <00:38:22.305>the <00:38:22.585>text <00:38:22.865>field,

772
00:38:23.145 --> 00:38:24.565
<00:38:23.145>you <00:38:23.400>have <00:38:23.656>the <00:38:23.911>signature <00:38:24.167>font <00:38:24.423>list,

773
00:38:24.565 --> 00:38:26.325
<00:38:24.565>you <00:38:24.845>have <00:38:25.125>the <00:38:25.405>signature <00:38:25.685>button <00:38:25.965>toolbar,

774
00:38:26.585 --> 00:38:28.005
<00:38:26.585>and <00:38:26.798>then <00:38:27.011>you <00:38:27.224>have <00:38:27.437>this <00:38:27.650>keyboard <00:38:27.863>view,

775
00:38:28.005 --> 00:38:29.605
<00:38:28.005>which <00:38:28.355>is <00:38:28.705>in <00:38:29.055>initially <00:38:29.405>zero,

776
00:38:30.525 --> 00:38:33.825
<00:38:30.525>but <00:38:30.680>as <00:38:30.836>we <00:38:30.991>listen <00:38:31.147>to <00:38:31.302>the <00:38:31.458>keyboard <00:38:31.613>it <00:38:31.769>might <00:38:31.925>expand

777
00:38:33.965 --> 00:38:35.325
<00:38:33.965>and <00:38:34.373>change <00:38:34.781>in <00:38:35.189>hate.

778
00:38:36.625 --> 00:38:40.225
<00:38:36.625>Now <00:38:36.765>to <00:38:36.905>summarize, <00:38:37.045>we <00:38:37.185>talked <00:38:37.325>about <00:38:37.465>the <00:38:37.605>state <00:38:37.745>of <00:38:37.885>Swift <00:38:38.025>ui.

779
00:38:41.045 --> 00:38:45.295
<00:38:41.045>We <00:38:41.200>consider, <00:38:41.356>uh, <00:38:41.511>we <00:38:41.667>talked <00:38:41.822>about <00:38:41.978>mixing <00:38:42.133>this <00:38:42.289>existing <00:38:42.445>code.

780
00:38:45.715 --> 00:38:50.095
<00:38:45.715>We <00:38:45.915>talked <00:38:46.115>about <00:38:46.315>presenting <00:38:46.515>popover <00:38:46.715>tool, <00:38:46.915>biologic <00:38:47.115>working

781
00:38:50.095 --> 00:38:54.305
<00:38:50.095>around <00:38:50.270>box, <00:38:50.444>especially <00:38:50.620>with <00:38:50.794>the <00:38:50.970>geometry <00:38:51.145>reader <00:38:51.319>ing <00:38:51.495>views

782
00:38:54.915 --> 00:38:57.425
<00:38:54.915>first, <00:38:55.265>responder <00:38:55.615>setting, <00:38:55.965>retrofitting <00:38:56.315>combined.

783
00:38:57.725 --> 00:39:02.065
<00:38:57.725>Um, <00:38:57.880>ultimately <00:38:58.036>we <00:38:58.191>consider <00:38:58.347>a <00:38:58.502>SWIFT <00:38:58.658>U <00:38:58.813>experiment <00:38:58.969>a <00:38:59.125>success.

784
00:39:03.035 --> 00:39:06.585
<00:39:03.035>While <00:39:03.234>we <00:39:03.435>were <00:39:03.634>not <00:39:03.835>any <00:39:04.035>faster <00:39:04.234>this <00:39:04.435>time

785
00:39:06.585 --> 00:39:09.705
<00:39:06.585>around <00:39:06.740>building <00:39:06.896>the <00:39:07.051>feature, <00:39:07.207>we <00:39:07.362>now <00:39:07.518>have <00:39:07.673>a <00:39:07.829>robust <00:39:07.985>set

786
00:39:09.705 --> 00:39:12.625
<00:39:09.705>of <00:39:09.904>workarounds <00:39:10.105>and <00:39:10.305>also <00:39:10.505>the <00:39:10.705>experience <00:39:10.904>to <00:39:11.105>deal

787
00:39:12.625 --> 00:39:14.505
<00:39:12.625>with <00:39:12.975>SWIFT <00:39:13.325>UI <00:39:13.675>ones <00:39:14.025>issues.

788
00:39:15.645 --> 00:39:19.825
<00:39:15.645>And <00:39:15.820>ultimately <00:39:15.995>we <00:39:16.170>are <00:39:16.345>more <00:39:16.520>confident <00:39:16.695>in <00:39:16.870>the <00:39:17.045>correctness

789
00:39:19.825 --> 00:39:21.865
<00:39:19.825>of <00:39:20.058>our <00:39:20.291>code <00:39:20.524>related <00:39:20.758>to <00:39:20.991>state <00:39:21.225>changes

790
00:39:21.865 --> 00:39:25.135
<00:39:21.865>because <00:39:22.020>that's <00:39:22.176>something <00:39:22.331>that <00:39:22.487>Swift <00:39:22.642>R <00:39:22.798>just <00:39:22.953>gets <00:39:23.109>really <00:39:23.265>well

791
00:39:26.165 --> 00:39:28.095
<00:39:26.165>plus, <00:39:26.445>and <00:39:26.725>you, <00:39:27.005>you <00:39:27.285>can't <00:39:27.565>dismiss

792
00:39:28.095 --> 00:39:30.855
<00:39:28.095>that <00:39:28.234>everybody <00:39:28.375>in <00:39:28.515>the <00:39:28.654>team <00:39:28.794>was <00:39:28.935>psyched <00:39:29.075>and <00:39:29.214>excited <00:39:29.355>to <00:39:29.495>learn

793
00:39:31.715 --> 00:39:34.535
<00:39:31.715>and <00:39:31.870>try <00:39:32.026>and, <00:39:32.181>and <00:39:32.337>use <00:39:32.492>and <00:39:32.648>ship <00:39:32.803>a <00:39:32.959>new <00:39:33.115>technology

794
00:39:35.875 --> 00:39:38.335
<00:39:35.875>and <00:39:36.155>we'll <00:39:36.435>definitely <00:39:36.715>increase <00:39:36.995>our <00:39:37.275>use

795
00:39:38.335 --> 00:39:39.615
<00:39:38.335>of <00:39:38.565>Swift <00:39:38.795>UI <00:39:39.026>in <00:39:39.256>the <00:39:39.486>future.

796
00:39:41.995 --> 00:39:45.415
<00:39:41.995>All <00:39:42.150>right, <00:39:42.306>thank <00:39:42.461>you <00:39:42.617>and <00:39:42.772>I'm <00:39:42.928>looking <00:39:43.083>forward <00:39:43.239>to <00:39:43.395>hearing.