-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfeed.rss
1341 lines (1006 loc) · 300 KB
/
feed.rss
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content"><channel><title>CodeCompletion.io</title><description>We are a group of developers and educators specializing in Apple Platform development, here to try something new.
New content coming out every week.</description><link>https://codecompletion.io</link><language>en</language><lastBuildDate>Thu, 23 Dec 2021 19:23:44 +0000</lastBuildDate><pubDate>Thu, 23 Dec 2021 19:23:44 +0000</pubDate><ttl>250</ttl><atom:link href="https://codecompletion.io/feed.rss" rel="self" type="application/rss+xml"/><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-61</guid><title>Episode 61: Worth Learning A Little Bit About</title><description>We introduce web development for iOS developers!</description><link>https://codecompletion.io/episodes/2021/ep-61</link><pubDate>Wed, 22 Dec 2021 13:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 61! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>Web Development:<ul><li><a href="https://www.destroyallsoftware.com/talks/wat">wat</a></li><li><a href="https://www.macstadium.com/colo#products">MacStadium Collocation</a></li><li><a href="http://vapor.codes">Vapor</a></li><li><a href="https://www.w3schools.com">W3Schools</a></li></ul></li></ul>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-60</guid><title>Episode 60: Basically the Wild West</title><description>We discuss NFTs, Blockchains, and Cryptocurrencies.</description><link>https://codecompletion.io/episodes/2021/ep-60</link><pubDate>Wed, 15 Dec 2021 13:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 60! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://c-command.com/dropdmg/">DropDMG</a> by <a href="https://twitter.com/mjtsai">Michael Tsai</a></li></ul></li></ul><ul><li>NFTs, Blockchains, and Cryptocurrencies<ul><li><a href="https://www.wired.com/story/squid-game-coin-crypto-scam/">Squidcoin Scam</a></li><li><a href="https://www.youtube.com/c/Coffeezilla">Coffeezilla on YouTube</a></li><li><a href="https://www.lootproject.com/">Loot Project</a></li><li><a href="https://www.youtube.com/watch?v=IxXaizglscw">Steve Mould’s Water Computer</a></li><li><a href="https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/">Proof of Stake</a></li></ul></li></ul><ul><li>Mini Review Corner:<ul><li><a href="https://playbackbone.com/products/backbone-one/">Backbone One</a></li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How can you make sure both load methods run concurrently?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// How can you make sure both load methods run concurrently?</span>
<span class="splashkeyword">func</span> loadItem(<span class="splashkeyword">_</span> id: <span class="splashtype">UUID</span>) <span class="splashcall">async</span> {
<span class="splashkeyword">let</span> image = await <span class="splashcall">loadImage</span>(id)
<span class="splashkeyword">let</span> metadata = await <span class="splashcall">loadMetadata</span>(id)
<span class="splashcall">presentItem</span>(id, image: image, metadata: metadata)
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Cryptocurrencies!</p><ol><li>One of the first cryptocurrencies, Litecoin was created in 2011 based on Scrypt out of concern that GPU-based mining was too high a barrier to entry.</li><li>Zcash, founded by Zooko Wilcox, is the first open, permission less financial system employing zero-knowledge security, and employed a “ceremony” to generate the system’s private key.</li><li>Titcoin was created in 2014 as the first cryptocurrency to be nominated for a major adult industry award, and featured greatly improved transaction speeds over Bitcoin.</li><li>iCANhaz was an ill-fated cryptocurrency founded by Burger King in 2018 that could be earned by purchasing cheeseburgers, though most ended up lost since wallets containing the coin were printed on wrappers themselves.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a>! Search for <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-59</guid><title>Episode 59: Premature Abstraction Is The Actual Root Of All Evil</title><description>We discuss when it's appropriate to abstract your code.</description><link>https://codecompletion.io/episodes/2021/ep-59</link><pubDate>Tue, 7 Dec 2021 13:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 59! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://apps.apple.com/app/id1494942612#?platform=iphone">Morpho</a> by <a href="https://twitter.com/thinktapwork">Jeremy and Casey</a></li></ul></li></ul><ul><li>Abstraction while coding<ul><li><a href="https://www.youtube.com/channel/UCS0N5baNlQWJCUrhCEo8WlA">Ben Eater</a></li><li><a href="https://www.youtube.com/watch?v=IxXaizglscw">Steve Mould’s Water Computer</a></li></ul></li></ul><ul><li>Mini Review Corner:<ul><li><a href="https://www.amazon.com/Nintendo-Game-Watch-not-machine-specific/dp/B097B1ZJ5T?ref_=ast_sto_dp">Legend of Zelda Game and Watch</a></li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How can you make all calls to `loadImage()` run concurrently, and return images in the same order?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
9
10
11
</code><code><span class="splashcomment">// How can you make all calls to loadImage() run concurrently,
// and return images in the same order?</span>
<span class="splashkeyword">func</span> loadImages(<span class="splashkeyword">_</span> ids: [<span class="splashtype">UUID</span>]) <span class="splashcall">async</span> {
<span class="splashkeyword">var</span> images: [<span class="splashtype">Image</span>] = []
<span class="splashkeyword">for</span> id <span class="splashkeyword">in</span> ids {
<span class="splashkeyword">let</span> image = await <span class="splashcall">loadImage</span>(id)
images.<span class="splashcall">append</span>(image)
}
<span class="splashkeyword">return</span> images
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Not Phở</a>. <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for “Not Pho” on the iOS and macOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-58</guid><title>Episode 58: The Nintendo Ninjas, They Get Everyone</title><description>We discuss some differences between game development and app development.</description><link>https://codecompletion.io/episodes/2021/ep-58</link><pubDate>Tue, 30 Nov 2021 13:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 58! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://yaacoub.github.io/apps/christmas-guide/">Christmas Guide</a> by <a href="https://twitter.com/yaapete">Peter Yaacoub</a></li></ul></li></ul><ul><li>Tools for Game development<ul><li><a href="https://developer.apple.com/documentation/spritekit/">SpriteKit</a></li><li><a href="https://developer.apple.com/documentation/scenekit/">SceneKit</a></li><li><a href="https://developer.apple.com/documentation/arkit/">ARKit</a></li><li><a href="https://unity.com">Unity</a></li><li><a href="https://www.yoyogames.com/en/gamemaker">GameMaker Studio</a></li><li><a href="https://play.date/dev/">Pulp for playdate</a></li></ul></li></ul><ul><li>Games:<ul><li><a href="https://undertale.com">Undertale</a></li><li><a href="https://frenzic.com">Frenzic Overtime</a></li><li><a href="https://www.oceanhorn.com">Oceanhorn</a></li><li><a href="https://www.youtube.com/watch?v=y-_qlaywKBs">Geometry Wars</a></li><li><a href="https://mochidev.com/apps/sluzzuls">SLUZZULS</a></li><li><a href="https://www.youtube.com/watch?v=AUci0fV7FWQ">The Legend of Zelda, Ocarina of Time Beta Showcase by ZFG</a></li><li><a href="https://www.youtube.com/watch?v=gcUBEWmIJkk">Corridor Crew Bob Ross Challenge</a></li></ul></li></ul><ul><li>Mini Review Corner: COVID-19 Booster</li><li>Commented Out:<ul><li><a href="https://www.amazon.com/Nintendo-Game-Watch-not-machine-specific/dp/B097B1ZJ5T?ref_=ast_sto_dp">Game and Watch Zelda</a></li><li><a href="https://www.amazon.com/Game-Watch-Super-Mario-Nintendo-switch/dp/B08GZ3DRLW?ref_=ast_sto_dp">Game and Watch Mario</a></li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How can you make all calls to `loadImage()` run concurrently, and return images in the same order?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
9
10
11
</code><code><span class="splashcomment">// How can you make all calls to loadImage() run concurrently,
// and return images in the same order?</span>
<span class="splashkeyword">func</span> loadImages(<span class="splashkeyword">_</span> ids: [<span class="splashtype">UUID</span>]) <span class="splashcall">async</span> {
<span class="splashkeyword">var</span> images: [<span class="splashtype">Image</span>] = []
<span class="splashkeyword">for</span> id <span class="splashkeyword">in</span> ids {
<span class="splashkeyword">let</span> image = await <span class="splashcall">loadImage</span>(id)
images.<span class="splashcall">append</span>(image)
}
<span class="splashkeyword">return</span> images
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a> on the Mac App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-57</guid><title>Episode 57: Teeps For Developers</title><description>We discuss how to file a good bug report.</description><link>https://codecompletion.io/episodes/2021/ep-57</link><pubDate>Tue, 23 Nov 2021 13:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 57! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://noteifyapp.com/command-tab-plus/">Command-Tab Plus</a> by <a href="https://twitter.com/gerasim_sergey">Gerasim Sergey</a></li></ul></li></ul><ul><li>Bug tracking, and how to file good bugs:<ul><li><a href="https://developer.apple.com/bug-reporting/">Feedback Assistant</a></li><li><a href="https://www.theregister.com/2016/03/23/npm_left_pad_chaos/">left-pad</a></li><li><a href="https://developer.apple.com/tech-talks/">Tech Talks</a></li><li><a href="https://mobile.twitter.com/Teekachu1/status/1461410136451436547">Ting Becker on Twitter</a></li></ul></li></ul><ul><li>Mini Review Corner<ul><li><a href="https://eshop.macsales.com/shop/owc-thunderbolt-dock">OWC Thunderbolt Dock</a></li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How can you make sure both load methods run concurrently?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// How can you make sure both load methods run concurrently?</span>
<span class="splashkeyword">func</span> loadItem(<span class="splashkeyword">_</span> id: <span class="splashtype">UUID</span>) <span class="splashcall">async</span> {
<span class="splashkeyword">let</span> image = await <span class="splashcall">loadImage</span>(id)
<span class="splashkeyword">let</span> metadata = await <span class="splashcall">loadMetadata</span>(id)
<span class="splashcall">presentItem</span>(id, image: image, metadata: metadata)
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Apple Radar!</p><ol><li>The internal Apple Radar app for iOS comes with a sticker pack, allowing Apple engineers to communicate bug statuses in style.</li><li>The mascot for Apple Radar is a purple ant eater named Fixie, so inspired because the engineer’s daughter was doing a report on them at the time.</li><li>Although the full app was never available to the public, a separate tool called Bug Reporter could be used to file radars, though it was made unavailable in 2019.</li><li>It wasn’t until after the iPhone was released that Tim Burks decided to create Open Radar in 2008 to make sharing and duplicating Radars easier for developers.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by Fernando and his new book: <a href="https://fromjuniortosenior.gumroad.com/l/the_missing_onboarding">The Junior Dev’s Onboarding Guide</a>. Go to <a href="https://fromjuniortosenior.gumroad.com/l/the_missing_onboarding">https://fromjuniortosenior.gumroad.com/l/the<em>missing</em>onboarding</a> today to learn more!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-56</guid><title>Episode 56: Real Artists Ship, So Instead We Made a Podcast</title><description>We discuss whether it is better to ship, or better to take your time perfecting your craft.</description><link>https://codecompletion.io/episodes/2021/ep-56</link><pubDate>Wed, 17 Nov 2021 13:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 56! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://apps.apple.com/us/app/mitynote/id1465314505">Mitynote</a> by <a href="https://twitter.com/austboston">Austin Blake</a></li></ul></li></ul><ul><li>Better to Ship, or Better to Perfect<ul><li>Open Sourcing Ideas</li><li>Polishing Design Skills</li><li>Iterating as much as you can to improve</li></ul></li></ul><ul><li>Mini Review Corner<ul><li><a href="https://www.caldigit.com/thunderbolt-4-element-hub/">CalDigit Element Hub</a></li></ul></li></ul><ul><li>Commented Out: Adventures in Async Sequences<ul><li><a href="https://github.com/mochidev/Bytes">Bytes</a></li><li><a href="https://github.com/mochidev/URLSessionBackport">URLSessionBackport</a></li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How can you make sure both load methods run concurrently?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// How can you make sure both load methods run concurrently?</span>
<span class="splashkeyword">func</span> loadItem(<span class="splashkeyword">_</span> id: <span class="splashtype">UUID</span>) <span class="splashcall">async</span> {
<span class="splashkeyword">let</span> image = await <span class="splashcall">loadImage</span>(id)
<span class="splashkeyword">let</span> metadata = await <span class="splashcall">loadMetadata</span>(id)
<span class="splashcall">presentItem</span>(id, image: image, metadata: metadata)
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://www.jonnybcodes.com">JohnnyB</a>'s Bon Voyage eCommerce App course. Visit <a href="http://bon-voyage.app/course">bon-voyage.app/course</a> and be sure to follow Bon Voyage's instructor <a href="https://twitter.com/jonnybcodes">@jonnybcodes</a> on Twitter to learn more and stay up to date with all his courses!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-55</guid><title>Episode 55: Faster Than a Car</title><description>We review the new MacBook Pros, and discuss how the lack of premature optimization may have been more evil after all…</description><link>https://codecompletion.io/episodes/2021/ep-55</link><pubDate>Tue, 9 Nov 2021 13:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 55! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://apps.apple.com/us/app/kwayet/id1545093715">Kwayet</a> by <a href="https://twitter.com/seun_eagle">Seun Adeyemi</a></li></ul></li></ul><ul><li>MacBook Pro Review<ul><li><a href="https://twitter.com/softwarejameson/status/1455971162060697613">Jameson on Twitter</a></li><li><a href="https://www.youtube.com/watch?v=rr2XfL_df3o">MKBHD’s Review</a></li><li>Benchmark results</li><li><a href="https://developer.blender.org/D13109">Blender’s Metal Updates on Cycles Renderer</a></li><li>What’s next for the M1 family of chips</li></ul></li></ul><ul><li>You should actually prematurely optimize when you can.<ul><li>“You should be the slowest factor”</li><li>Older hardware is often left behind</li><li><a href="https://twitter.com/nicklockwood/status/1456191543027671045">Nick Lockwood on Twitter</a></li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How can you make sure both load methods run concurrently?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// How can you make sure both load methods run concurrently?</span>
<span class="splashkeyword">func</span> loadItem(<span class="splashkeyword">_</span> id: <span class="splashtype">UUID</span>) <span class="splashcall">async</span> {
<span class="splashkeyword">let</span> image = await <span class="splashcall">loadImage</span>(id)
<span class="splashkeyword">let</span> metadata = await <span class="splashcall">loadMetadata</span>(id)
<span class="splashcall">presentItem</span>(id, image: image, metadata: metadata)
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Huuungry</a>. <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for Huuungry on the iOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-54</guid><title>Episode 54: You Are Such a DoIt</title><description>We discuss what makes a great Mac app, and what doesn't…</description><link>https://codecompletion.io/episodes/2021/ep-54</link><pubDate>Tue, 2 Nov 2021 17:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 54! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://apps.apple.com/app/id1330097506#?platform=iphone">Huh?</a> by <a href="https://twitter.com/yaapete">Peter Yaacoub</a></li></ul></li></ul><ul><li>What makes a great Mac app?<ul><li>Menus and key commands</li><li>Building on positive experiences</li><li>Windowing</li><li>Dogfooding</li><li>Consistent functionality</li><li>Losing UI Knowledge and the Human Interface Guidelines<ul><li><a href="https://mjtsai.com/blog/2021/10/15/old-apple-human-interface-guidelines/">Older HIGs</a></li></ul></li></ul></li></ul><ul><li>Undo, and <a href="https://apple.stackexchange.com/questions/189327/old-versions-of-the-os-x-human-interface-guidelines">“Forgiveness”</a><ul><li>Contextual Menus</li></ul></li></ul><ul><li>The Aftershow’s Rebranding: Commented Out:<ul><li><a href="https://www.folklore.org">Folklore.org</a></li><li>Bash.org:<ul><li><a href="http://bash.org/?104383">Next-level role-play</a></li><li><a href="http://bash.org/?244321">Passwords</a></li></ul></li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How can you make the same enum available in both Swift and Objective-C?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// How can you make the enum below available in both Swift and Objective-C?</span>
<span class="splashkeyword">enum</span> Choices {
<span class="splashkeyword">case</span> firstOne
<span class="splashkeyword">case</span> secondOne
<span class="splashkeyword">case</span> thirdOne
<span class="splashkeyword">case</span> fourthOne
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Classic Mac Apps!</p><ol><li>First Draft was a vector-based drawing app for Classic MacOS that featured a simplified toolset for making basic illustrations and line art.</li><li>BOOM is a Mac game that blends Bomberman and DOOM, featuring Bomberman-style gameplay for one or two players, with enemies and sound effects closely inspirited by DOOM.</li><li>Suitcase was an integral tool for any graphics professional, automating the process of enabling and disabling fonts based on the project at hand.</li><li>Stuffit Expander was the solution for Mac users to decompress archives, and was an integral part of the shareware community, serving as the de-facto filetype for many downloaded Mac apps.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://twitter.com/swiftexercises">Weekly Swift Exercises</a>! Subscribe to the <a href="https://mailchi.mp/hey/weekly-swift-exercise-signup">Mailinglist</a> today to subscribe!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-53</guid><title>Episode 53: Nobody Likes C++</title><description>We interview Matt Ronge, cofounder and creator of Astropad and Luna Display!</description><link>https://codecompletion.io/episodes/2021/ep-53</link><pubDate>Tue, 26 Oct 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 53! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://apps.apple.com/us/app/timedeck/id1525031563">TimeDeck</a> by <a href="https://twitter.com/CalebPanza">Caleb Panza</a></li></ul></li></ul><ul><li>Our interview with special guest Matt Ronge, co-founder and creator of Astropad and Luna Display!<ul><li><a href="https://twitter.com/mronge">Matt Ronge</a> on Twitter</li><li><a href="https://astropad.com">Astropad</a></li><li><a href="https://astropad.com/product/lunadisplay/">Luna Display</a></li><li><a href="https://astropad.com/podcast/">Building Astropad</a> Podcast</li></ul></li></ul><ul><li>Questions:<ul><li>How did you get started with development?</li><li>What were you doing pre-Astropad?</li><li>How did it come about?</li><li>How did you build a business off of Astropad?</li><li>What was the inspiration that lead into Luna?</li><li>How did you grow your team?</li><li>Why Windows?</li><li>How different is Rust?</li><li>Why not Swift?</li><li>How did the Windows release go?</li><li>What’s next?</li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>What can go wrong in this code that switches on an indexPath when a cell is tapped?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
9
10
11
</code><code><span class="splashcomment">// What can go wrong in this code that switches on an indexPath when a cell is tapped?</span>
<span class="splashkeyword">switch</span> (indexPath.<span class="splashproperty">row</span>) {
<span class="splashkeyword">case</span> <span class="splashnumber">0</span>:
[<span class="splashkeyword">self</span> presentAbout];
<span class="splashkeyword">case</span> <span class="splashnumber">1</span>:
[<span class="splashkeyword">self</span> presentHelp];
<span class="splashkeyword">case</span> <span class="splashnumber">2</span>:
[<span class="splashkeyword">self</span> presentContact];
<span class="splashkeyword">default</span>:
<span class="splashkeyword">break</span>;
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Latest Display Technologies!</p><ol><li>Thunderbolt 4 not only supports DisplayPort 2.0, but also allows the full 80 Gbps to be dedicated for video output, allowing 8K displays up to a whopping 240 fps.</li><li>DisplayLink allows displays to be connected over USB or ethernet by using an adapter that transforms the data signal into a DisplayPort or HDMI signal.</li><li>SDI, or serial digital interface, is the preferred connection on film sets connecting cameras to recording equipment, and allows for up to 48 Gbps over a single connection.</li><li>Also limited to 48 Gbps, HDMI 2.1 supports HDR10 footage of up to an 8K resolution at 120 Hz on supported cables.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-52</guid><title>Episode 52: We Apparently Really Want eGPU Support</title><description>We discuss Apple's Unleashed Event!</description><link>https://codecompletion.io/episodes/2021/ep-52</link><pubDate>Tue, 19 Oct 2021 03:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 52! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-51</guid><title>Episode 51: We Apparently Really Want eGPU Support</title><description>We predict what may be announced at Apple's Unleashed Event!</description><link>https://codecompletion.io/episodes/2021/ep-51</link><pubDate>Sun, 17 Oct 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 51! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="http://dailytimetracking.com/">Daily Time Tracking</a> by <a href="https://twitter.com/nielsmouthaan">Niels Mouthaan</a></li></ul></li></ul><ul><li>Our predictions for Apple’s Unleashed Event.</li><li>The case for new Intel Mac Pros:<ul><li>Metal support coming to Blender’s Cycles renderer: https://twitter.com/marcedwards/status/1448776972947976204</li><li><a href="https://en.wikipedia.org/wiki/Cascade_Lake_(microarchitecture">Cascade Lake Workstation CPUs</a>#Xeon<em>W-3200</em>series)</li><li><a href="https://en.wikipedia.org/wiki/Ice_Lake_(microprocessor">Ice Lake Workstation CPUs</a>#Workstation_processors)</li><li><a href="https://twitter.com/realmrpippy/status/1402316211619123202">Leak in Xcode 13 betas</a></li><li><a href="https://twitter.com/yuuki_ans/status/1419638932208164865">More leaks</a></li></ul></li></ul><ul><li>What we think will be coming to the new MacBook Air, MacBook Pro, Mac mini, iMac Pro, and potential Apple displays.</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>What can go wrong in this code that switches on an indexPath when a cell is tapped?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
9
10
11
</code><code><span class="splashcomment">// What can go wrong in this code that switches on an indexPath when a cell is tapped?</span>
<span class="splashkeyword">switch</span> (indexPath.<span class="splashproperty">row</span>) {
<span class="splashkeyword">case</span> <span class="splashnumber">0</span>:
[<span class="splashkeyword">self</span> presentAbout];
<span class="splashkeyword">case</span> <span class="splashnumber">1</span>:
[<span class="splashkeyword">self</span> presentHelp];
<span class="splashkeyword">case</span> <span class="splashnumber">2</span>:
[<span class="splashkeyword">self</span> presentContact];
<span class="splashkeyword">default</span>:
<span class="splashkeyword">break</span>;
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a>! Search for <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-50</guid><title>Episode 50: This Is Not Clear</title><description>We discuss Objective-C for Swift Developers!</description><link>https://codecompletion.io/episodes/2021/ep-50</link><pubDate>Wed, 13 Oct 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 50! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://apps.apple.com/de/app/pasty-smart-clipboard/id1544620654?l=en&mt=12">Pasty</a> by <a href="https://twitter.com/iSapozhnik">Ivan Sapozhnik</a></li></ul></li></ul><ul><li>Objective-C for Swift Developers</li><li>The Apple Watch Pre-orders</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How can you use UIViewController's updateViewConstraints() to quickly swap between very different view layouts?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// How can you use UIViewController's updateViewConstraints() to quickly swap between very different view layouts?</span>
<span class="splashkeyword">override func</span> updateViewConstraints() {
<span class="splashcomment">// What goes in here?</span>
<span class="splashkeyword">super</span>.<span class="splashcall">updateViewConstraints</span>()
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Swift on Other Platforms</p><ol><li>DroidUI builds on earlier efforts to get Swift compiling for Android by adding interconnects to existing Java-based libraries so an entire app could be built.</li><li>project1 is an attempt at implementing an x86 kernel completely in Swift that can run bare metal on Intel Macs and PCs.</li><li>swift-embedded is a toolchain to compile Swift so it can run on a microcontroller directly with no host operating system.</li><li>SwiftWasm is a toolchain allowing swift code to be compiled to WebAssembly, with full bridging to the DOM.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Not Phở</a>. <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for “Not Pho” on the iOS and macOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-49</guid><title>Episode 49: I For One Welcome Our Safety Overlords</title><description>We discuss what's new in Swift 5.5!</description><link>https://codecompletion.io/episodes/2021/ep-49</link><pubDate>Tue, 5 Oct 2021 21:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 49! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://apps.apple.com/us/app/smartfilter-for-sms/id1271258894">SmartFilter</a> by <a href="https://twitter.com/mmgreenmms">Jake Grant</a></li></ul></li></ul><ul><li>New Features in Swift 5.5<ul><li><a href="https://www.whatsnewinswift.com/?from=5.4&to=5.5">What’s new in Swift</a></li><li><a href="https://swift.org/blog/swift-5-5-released/">Swift 5.5 Release</a></li><li><a href="https://www.wwdcnotes.com/notes/wwdc21/10192/">Updated From WWDC21</a></li><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0310-effectful-readonly-properties.md">SE-0319</a> - Read only properties can now throw</li><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0308-postfix-if-config-expressions.md">SE-0308</a> - #if within postfix member expressions</li><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0307-allow-interchangeable-use-of-double-cgfloat-types.md">SE-0307</a> - Automatic Bridging between CGFloat and Double</li><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0295-codable-synthesis-for-enums-with-associated-values.md">SE-0295</a> - Codable synthesis for enums with associated values</li><li>Faster JSON serialization</li><li>Lazy in local contexts</li><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0293-extend-property-wrappers-to-function-and-closure-parameters.md">SE-0293</a> - Property wrappers on function parameters</li><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0299-extend-generic-static-member-lookup.md">SE-0299</a> - Static members on protocols</li><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0291-package-collections.md">SE-0291</a> - Package Collections</li><li>Async/Await:<ul><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0296-async-await.md">SE-0296</a></li><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0317-async-let.md">SE-0317</a></li><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0300-continuation.md">SE-0300</a></li></ul></li></ul></li></ul><ul><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0298-asyncsequence.md">SE-0298</a> - Async Sequences<ul><li><a href="https://twitter.com/Catfish_Man/status/1442919592431538178">How to think about for-await loops</a></li></ul></li></ul><ul><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0304-structured-concurrency.md">SE-0304</a> - Structured concurrency<ul><li>WWDC21 - <a href="https://developer.apple.com/videos/play/wwdc2021/10134/">Explore structured concurrency in Swift</a></li><li>WWDC21 - <a href="https://developer.apple.com/videos/play/wwdc2021/10254/">Swift concurrency: Behind the scenes</a></li></ul></li></ul><ul><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0306-actors.md">SE-0306</a> - Actors<ul><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0316-global-actors.md">SE-0316</a> - Global Actors</li><li><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0302-concurrent-value-and-concurrent-closures.md">SE-0302</a> - Sendable</li></ul></li></ul><ul><li>Discussion on Swift Evolution Proposals and the Future of Swift<ul><li><a href="https://forums.swift.org/t/declarative-string-processing-overview/52459">Declarative String Processing</a></li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How can you use UIViewController's updateViewConstraints() to quickly swap between very different view layouts?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// How can you use UIViewController's updateViewConstraints() to quickly swap between very different view layouts?</span>
<span class="splashkeyword">override func</span> updateViewConstraints() {
<span class="splashcomment">// What goes in here?</span>
<span class="splashkeyword">super</span>.<span class="splashcall">updateViewConstraints</span>()
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a> on the Mac App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-48</guid><title>Episode 48: The Announcement Announcement</title><description>We discuss and review the iPhone 13 Pro!</description><link>https://codecompletion.io/episodes/2021/ep-48</link><pubDate>Tue, 28 Sep 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 48! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://noteifyapp.com/dockview/">DockView</a> by <a href="https://twitter.com/gerasim_sergey">Gerasim Sergey</a></li></ul></li></ul><ul><li>iPhone 13 Pro Reviews</li><li>European Union device charging port requirements</li><li>Nintendo Direct</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How would you transform the code below to use the new async/await pattern?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
9
10
11
</code><code><span class="splashcomment">// How would you transform the code below to use the new async/await pattern?</span>
<span class="splashcall">print</span>(<span class="splashstring">"Preparing request…"</span>)
urlSession.<span class="splashcall">dataTask</span>(with: httpRequest) { data, response, error <span class="splashkeyword">in</span>
<span class="splashtype">DispatchQueue</span>.<span class="splashproperty">main</span>.<span class="splashcall">async</span> {
<span class="splashcall">print</span>(<span class="splashstring">"Received response:</span> \(response)<span class="splashstring">"</span>)
}
}.<span class="splashcall">resume</span>()
<span class="splashcall">print</span>(<span class="splashstring">"Sent request!"</span>)
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://www.jonnybcodes.com">JohnnyB</a>'s Bon Voyage eCommerce App course. Visit <a href="http://bon-voyage.app/course">bon-voyage.app/course</a> and be sure to follow Bon Voyage's instructor <a href="https://twitter.com/jonnybcodes">@jonnybcodes</a> on Twitter to learn more and stay up to date with all his courses!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-47</guid><title>Episode 47: Did You Know Apple Lives In California?</title><description>We discuss last week's California Streaming Apple Event!</description><link>https://codecompletion.io/episodes/2021/ep-47</link><pubDate>Tue, 21 Sep 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 47! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://mustud.app/">Mustud</a> by <a href="https://twitter.com/BeauNouvelle">Beau Nouvelle</a></li><li>Apple’s California Streaming iPhone Event:</li><li><a href="https://twitter.com/jon_prosser/status/1437849243172196353">John Prosser on Twitter</a></li><li><a href="https://twitter.com/keleftheriou/status/1437845736951992321">FlickType by Kosta Eleftheriou</a></li><li><a href="https://twitter.com/JonyIveParody/status/1437462250995036162">Not Jony Ive on Twitter</a></li><li><a href="https://twitter.com/dimitribouniol/status/1437880744462802945">Dimitri’s Twitter Poll</a></li><li><a href="http://codeworkshop.net/objc-diff/sdkdiffs/">Objective-C SDK Diffs</a></li><li>Aftershow: Linh’s kernel-paniking SwiftUI compiler bug.</li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How would you transform the code below to use the new async/await pattern?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
9
10
11
</code><code><span class="splashcomment">// How would you transform the code below to use the new async/await pattern?</span>
<span class="splashcall">print</span>(<span class="splashstring">"Preparing request…"</span>)
urlSession.<span class="splashcall">dataTask</span>(with: httpRequest) { data, response, error <span class="splashkeyword">in</span>
<span class="splashtype">DispatchQueue</span>.<span class="splashproperty">main</span>.<span class="splashcall">async</span> {
<span class="splashcall">print</span>(<span class="splashstring">"Received response:</span> \(response)<span class="splashstring">"</span>)
}
}.<span class="splashcall">resume</span>()
<span class="splashcall">print</span>(<span class="splashstring">"Sent request!"</span>)
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: New Autocompletions in Xcode 13</p><ol><li>Our favorite optional binding <code>if let</code> will now autocomplete existing optionals as the left-hand side of the binding as you type it.</li></ol><ol start="2"><li>For loops will detect if you type the singular form of an existing collection type and autocomplete the entire statement for you.</li></ol><ol start="3"><li>When calling functions, the editor will prioritize variables with similar names to the argument you are autocompleting to make getting through long argument lists easier.</li></ol><ol start="4"><li>When dot-chaining members of an expression like <code>view.undoManager.canUndo</code>, the editor will now allow you to skip and will automatically insert <code>undoManager</code> for you if you type <code>view.canUndo</code>.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Huuungry</a>. <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for Huuungry on the iOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-46</guid><title>Episode 46: Let Me Solve All Your Problems</title><description>We discuss SwiftUI from multiple levels of experience, and lightly discuss this week's event along with why nobody should get the Ceramic Apple Watch!</description><link>https://codecompletion.io/episodes/2021/ep-46</link><pubDate>Mon, 13 Sep 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 46! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://jellycuts.com/">Jellycuts</a> by <a href="https://twitter.com/LinemanZachary">Zachary Lineman</a></li></ul></li></ul><ul><li>Our experience using SwiftUI, best practices, and hidden complexity.<ul><li><a href="https://www.underdogdevs.org/">Underdog devs</a></li><li><a href="https://twitter.com/i/web/status/1422716472099487744 ">Asam sharp (@azamsharp) on Twitter</a></li><li><a href="https://swiftui-lab.com">SwiftUI Lab</a></li><li>Objc.io - <a href="https://www.objc.io/books/thinking-in-swiftui/">Understanding SwiftUI</a></li><li>WWDC21 - <a href="https://developer.apple.com/videos/play/wwdc2021/10022/">Demystify SwiftUI</a></li></ul></li></ul><ul><li>The best architecture for SwiftUI does not exist.<ul><li>Enums are great in Swift, and everyone should use them.</li></ul></li></ul><ul><li>What announcements we expect at Apple’s California Streaming event.<ul><li>Ceramic Apple Watches are a danger to paint jobs everywhere.</li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>How would you transform the code below to use the new async/await pattern?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
9
10
11
</code><code><span class="splashcomment">// How would you transform the code below to use the new async/await pattern?</span>
<span class="splashcall">print</span>(<span class="splashstring">"Preparing request…"</span>)
urlSession.<span class="splashcall">dataTask</span>(with: httpRequest) { data, response, error <span class="splashkeyword">in</span>
<span class="splashtype">DispatchQueue</span>.<span class="splashproperty">main</span>.<span class="splashcall">async</span> {
<span class="splashcall">print</span>(<span class="splashstring">"Received response:</span> \(response)<span class="splashstring">"</span>)
}
}.<span class="splashcall">resume</span>()
<span class="splashcall">print</span>(<span class="splashstring">"Sent request!"</span>)
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: SwiftUI View Modifiers!</p><ol><li>Much like UIKit, SwiftUI allows the interface orientation to be manipulated using <code>statusBar(orientation:)</code>, moving the status bar to one of the four screen edges.</li></ol><ol start="2"><li>Tooltips can be added to SwiftUI views using the <code>help(_:)</code> modifier, helping to guide the user around the interface without them needing to directly invoke any actions.</li></ol><ol start="3"><li>Any view in the hierarchy can be modified with <code>onOpenURL(perform:)</code> to perform localized URL handling so long as it is part of the hierarchy when the URL is opened.</li></ol><ol start="4"><li>A badge can be added to tab bar items using the <code>badge(_:)</code> modifier, but this will also add a visual indicator to list rows to help convey supplementary information.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://twitter.com/swiftexercises">Weekly Swift Exercises</a>! Subscribe to the <a href="https://mailchi.mp/hey/weekly-swift-exercise-signup">Mailinglist</a> today to subscribe!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-45</guid><title>Episode 45: You Are Not Your Code</title><description>We interview Andrew Kozlik and Tom Marks, creators of Recipe Box, about the details of being Indie!</description><link>https://codecompletion.io/episodes/2021/ep-45</link><pubDate>Tue, 7 Sep 2021 13:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 45! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://apps.apple.com/us/app/waay-learn-music-theory/id974357313">Waay</a> by <a href="https://twitter.com/leakywellington">Alex Andrews</a></li></ul></li></ul><ul><li>Our interview with Andrew Kozlik and Tom Marks, creators of Recipe Box!<ul><li><a href="https://www.getrecipebox.com">Recipe Box</a></li><li><a href="https://twitter.com/AndrewKozlik">Andrew Kozlik</a></li><li><a href="https://twitter.com/London_atlas">Tom Marks</a></li></ul></li></ul><ul><li><a href="https://www.zendesk.com">Zendesk</a></li><li><a href="https://republic.co/">Republic</a></li><li>Non Dilutive Capital raising with <a href="https://pipe.com/">Pipe</a></li><li>Steve Troughton-Smith’s <a href="https://www.highcaffeinecontent.com/blog/20210605-Catalyst-Sample-Code-Roundup">Catalyst Roundup</a></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>Why is this SwiftUI code not advisable, and how can you fix it?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
</code><code><span class="splashcomment">// Why is this SwiftUI code not advisable, and how can you fix it?</span>
<span class="splashkeyword">var</span> body: <span class="splashkeyword">some</span> <span class="splashtype">View</span> {
<span class="splashkeyword">if</span> isLoggedIn {
<span class="splashtype">Text</span>(<span class="splashstring">"You are logged in!"</span>)
} <span class="splashkeyword">else</span> {
<span class="splashtype">Text</span>(<span class="splashstring">"You must first log in!"</span>)
}
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Apple Antitrust Cases!</p><ol><li>In its first antitrust case, Apple Computer was sued in 1997 by publishing houses for not licensing its MacOS system software to run on other compatible hardware at the time.</li></ol><ol start="2"><li>Apple was sued in 2005 for allegedly operating a music-downloading monopoly through iTunes and the iPod music player, preventing RealNetworks music from playing on iPods.</li></ol><ol start="3"><li>Just a few months after the original iPhone was released, Apple was sued in a case that lasted until 2019 partly over the fact that the just-released device could not run third-party apps.</li></ol><ol start="4"><li>After only a year and a half of litigation, Apple was found guilty in a case where there was compelling evidence that they played a central role to eliminate retail competition.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-44</guid><title>Episode 44: The Biggest, Richest Child</title><description>We discuss Apple's CSAM Strategy, and their just-announced Settlement with US Developers!</description><link>https://codecompletion.io/episodes/2021/ep-44</link><pubDate>Tue, 31 Aug 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 44! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://jordanhipwell.com/MusicInfo/">Music Info</a> by <a href="https://twitter.com/JordanHipwell">Jordan Hipwell</a></li></ul></li></ul><ul><li>Our thoughts on Apple’s CSAM strategy</li><li>Hot off the press: <a href="https://www.apple.com/newsroom/2021/08/apple-us-developers-agree-to-app-store-updates/">Apple’s class action settlement with US Developers</a></li><li><a href="https://twitter.com/cabel/status/1366878238539087872">Panic’s workaround</a></li><li><a href="https://pcalc.com/dice/">Dice by PCalc</a></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>Why is this SwiftUI code not advisable, and how can you fix it?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
</code><code><span class="splashcomment">// Why is this SwiftUI code not advisable, and how can you fix it?</span>
<span class="splashkeyword">var</span> body: <span class="splashkeyword">some</span> <span class="splashtype">View</span> {
<span class="splashkeyword">if</span> isLoggedIn {
<span class="splashtype">Text</span>(<span class="splashstring">"You are logged in!"</span>)
} <span class="splashkeyword">else</span> {
<span class="splashtype">Text</span>(<span class="splashstring">"You must first log in!"</span>)
}
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Git commands!</p><ol><li><code>git whatchanged --since="2 weeks ago"</code> will show a log of commit messages that have been made since 2 weeks ago.</li></ol><ol start="2"><li><code>git add -p</code> will allow you to stage hunks of code interactively from the command line.</li></ol><ol start="3"><li><code>git worktree add</code> allows you to checkout a specific branch to a separate directory.</li></ol><ol start="4"><li><code>git grog</code> generates an ascii-art graphical log showing branch points leading up to the current commit.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a>! Search for <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-43</guid><title>Episode 43: There Are Dozens of Us</title><description>We discuss ideal App Development Team Sizes and Project Architectures!</description><link>https://codecompletion.io/episodes/2021/ep-43</link><pubDate>Tue, 24 Aug 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 43! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://www.timewave.studio">TimeWave</a>) by <a href="https://twitter.com/mdsahilak">Muhammed Sahil Arayakandy</a></li></ul></li></ul><ul><li>Ideal team sizes for app development</li><li>Mental map of a project</li><li>Project Architectures</li><li>Aftershow: HomeKit</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>Why could the data task handler not get a response back from the server?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
</code><code><span class="splashcomment">// Why could the data task handler not get a response back from the server?</span>
urlSession.<span class="splashcall">dataTask</span>(with: httpRequest) { data, response, error <span class="splashkeyword">in</span>
<span class="splashcall">print</span>(<span class="splashstring">"📮 Response:</span> \(response)<span class="splashstring">"</span>)
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Not Phở</a>. <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for “Not Pho” on the iOS and macOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-42</guid><title>Episode 42: Comically Large Audio</title><description>We discuss Accessibility, VoiceOver, and Spencer's experience with it!</description><link>https://codecompletion.io/episodes/2021/ep-42</link><pubDate>Tue, 17 Aug 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 42! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="http://calendarpasteapp.com">Calendar Paste</a> by <a href="https://twitter.com/ctietze">Christian Tietze</a></li><li>Spencer’s temporary need for Accessibility features</li><li>Apple’s accessibility settings</li><li>Widgets and dynamic type</li><li>Layout and scroll views</li><li>Accessibility labels and identifiers</li><li>Accessibility inspector and auditing the UI</li><li>Use Accessibility features yourself to improve your own implementations</li><li>Not just graphics: Audio, haptics</li><li><a href="https://developer.apple.com/design/human-interface-guidelines/">HIG</a></li><li>Control-zoom</li><li><a href="https://store.steampowered.com/app/1282730/Loop_Hero/">Loop Hero</a></li><li>Back tap</li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>Given the SwiftUI Button below, how would you make it accessible?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
</code><code><span class="splashcomment">// Given the Button below, how would you make it accessible?</span>
<span class="splashtype">Button</span>(action: submitAnswer) {
<span class="splashtype">Image</span>(systemName: <span class="splashstring">"paperplane.fill"</span>)
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a> on the Mac App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-41</guid><title>Episode 41: Humans are Weird</title><description>We discuss Developer Productivity and Motivation!</description><link>https://codecompletion.io/episodes/2021/ep-41</link><pubDate>Tue, 10 Aug 2021 16:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 41! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://c-command.com/toothfairy/">ToothFairy</a> by <a href="https://twitter.com/mjtsai">Michael Tsai</a></li></ul></li></ul><ul><li>Fernando:<ul><li><a href="https://selfcontrolapp.com/">Self Control</a></li><li>YouTube premium</li><li><a href="https://www.amazon.com/ajedrez-digital-temporizador-profesional-funci%C3%B3n/dp/B07M5RP9SC/ref=sr_1_4_sspa">Fernando’s Chess Clock</a></li><li><a href="https://apps.apple.com/us/app/seven-7-minute-hiit-workout/id650276551">Seven</a></li></ul></li></ul><ul><li>Paul:<ul><li>Getting Sleep</li><li>Are you stuck?</li><li>Exercise</li><li><a href="https://ugmonk.com/blogs/journal/analog-the-simplest-productivity-system">Analog</a></li><li><a href="https://jamesclear.com/habit-journal">Journa</a></li><li><a href="https://apps.apple.com/us/app/super-easy-timer/id1353137878?mt=12">SuperEasyTimer</a></li><li><a href="https://multimarkdown.com/composer4/">MultiMarkdown Composer</a></li><li>Doing Research</li><li>Solid blocks of time to focus, Meditation with <a href="https://apps.apple.com/us/app/calm/id571800810">Calm</a></li><li><a href="https://todoist.com/productivity-methods/pomodoro-technique">Pomodoro method</a></li><li>Intermittent Fasting (<a href="https://www.zerofasting.com">Zero</a>)</li><li>Document your energy</li></ul></li></ul><ul><li>Spencer:<ul><li>Taking naps</li><li>Cultivate the zone</li><li>Having Music on</li><li>Reducing Friction</li><li><a href="https://www.samsung.com/us/computing/monitors/gaming/49--odyssey-g9-gaming-monitor-lc49g95tssnxza/">Spencer’s super-wide display</a></li><li>Financial motivations</li></ul></li></ul><ul><li>Ben:<ul><li>Have reminders</li><li>Keeping main work in front of you</li><li>Soundtracks are great for concentration</li><li>Batman soundtrack link</li><li>Cyberpunk/FtL, Passengers</li><li>Keeping things fresh with coding problems</li><li>A distraction you have control over</li><li>Noise cancelling headphones</li><li>Protect your energy and time</li><li>Decision fatigue</li></ul></li></ul><ul><li>Dimitri:<ul><li>Drift between interests to avoid burnout</li><li><a href="https://rattibha.com/thread/1388107620574171140?lang=en">Burnout anecdote</a></li><li>Concentrating in silence</li><li>Understand the problem well before diving in</li><li>Dimitri was wrong; <a href="https://en.wikipedia.org/wiki/Gluconeogenesis">Gluconeogenesis</a></li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>What could potentially go wrong with this particular error handling code?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// What could potentially go wrong with the code below?</span>
<span class="splashtype">NSError</span> *theError;
<span class="splashtype">BOOL</span> result = [anObject doSomethingThatCanFailWithError:&theError];
<span class="splashkeyword">if</span> (theError) {
<span class="splashtype">NSLog</span>(<span class="splashkeyword">@"The</span> operation failed! %<span class="splashstring">@", theError);</span>
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Blast from the past!</p><ol><li>Swift Literals: Although Dictionaries prohibit it, <code>ExpressibleByDictionaryLiteral</code> allows for multiple entries with the same key.</li></ol><ol start="2"><li>Emacs key bindings in Cocoa: You may know of the <code>⌘⌫</code> command to delete the entire line to the left of the text cursor, but <code>⌃K</code> can be used to delete the line to the right of the text cursor.</li></ol><ol start="3"><li>Objective-C method names in the iOS SDK: <code>convolveWithDestination:tempBuffer:sourceOffsetToRegionOfInterestX:sourceOffsetToRegionOfInterestY:kernel:kernelHeight:kernelWidth:divisor:backgroundColor:options:</code> is one of many related Objective-C methods in the Accelerate framework for manipulating images.</li></ol><ol start="4"><li>Unicode names for Mac modifier keys: Located between the control and command keys on the keyboard, the option key is unoriginally called <code>OPTION KEY</code> in the unicode specification, but was also known as the “closed apple key” on Apple II series computers.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://www.jonnybcodes.com">JohnnyB</a>'s Bon Voyage eCommerce App course. Visit <a href="http://bon-voyage.app/course">bon-voyage.app/course</a> and be sure to follow Bon Voyage's instructor <a href="https://twitter.com/jonnybcodes">@jonnybcodes</a> on Twitter to learn more and stay up to date with all his courses!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-40</guid><title>Episode 40: Merge Commits Are Evil</title><description>We discuss Git and how to get better at it!</description><link>https://codecompletion.io/episodes/2021/ep-40</link><pubDate>Tue, 3 Aug 2021 14:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 40! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with a new app for you to check out:<ul><li><a href="https://apps.apple.com/us/app/billsly/id1560270556">Billsly</a> by <a href="https://twitter.com/CaptainnClayton">Clayton Watkins</a></li></ul></li></ul><ul><li>The need for git as a modern developer</li><li>Basic usage of git</li><li>MacOS versioning is similar but different</li><li>Using Git as a note taking tool (in the command line, preferably) to get more comfortable with it.</li><li>Good commit messages and staging</li><li>Setting up a global git ignore file</li><li>Git Apps:<ul><li><a href="https://desktop.github.com">GitHub Desktop</a></li><li><a href="https://www.git-tower.com/mac">Git Tower</a></li><li><a href="https://git-fork.com">Fork</a></li><li><a href="https://www.gitkraken.com">Git Kracken</a></li></ul></li></ul><ul><li>What a Pull request is, and why they are useful<ul><li><a href="https://github.com">GitHub</a></li><li><a href="https://about.gitlab.com">GitLab</a></li><li><a href="https://bitbucket.org/product">Bitbucket</a></li></ul></li></ul><ul><li>Doing a self reviews before having others review your code</li><li>Setting up branch protections to keep from messing up</li><li>Dimitri’s <a href="https://github.com/lambdaschool/ios-git-setup">Git starter link and wiki</a></li><li>Bonus: <a href="https://www.youtube.com/watch?v=8wUOUmeulNs">Spooning by Bitbucket</a></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>Assuming these steps need to be performed in the order they are presented, how would you improve this code?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// Assuming these steps need to be performed in the order
// they are presented, how would you improve this code?</span>
<span class="splashkeyword">let</span> results = array
.<span class="splashcall">map</span> { $0.<span class="splashproperty">path</span> }
.<span class="splashcall">filter</span> { $0.<span class="splashcall">hasPrefix</span>(<span class="splashstring">"/Documents"</span>) }
.<span class="splashcall">compactMap</span> { $0.<span class="splashcall">components</span>(separatedBy: <span class="splashstring">"/"</span>).<span class="splashproperty">last</span> }
.<span class="splashcall">prefix</span>(maxEntries)
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Huuungry</a>. <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for Huuungry on the iOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-39</guid><title>Episode 39: Breakpoint Breadcrumbs</title><description>We discuss Debugging Tips and Techniques!</description><link>https://codecompletion.io/episodes/2021/ep-39</link><pubDate>Tue, 27 Jul 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 39! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with two apps for you to check out:<ul><li><a href="https://songkit.app">SongKit</a> by <a href="https://twitter.com/tgrapperon">Thomas Grapperon</a></li><li><a href="https://minimal.app">Minimal</a> by <a href="https://twitter.com/arthurofbabylon">Arthur Van Siclen</a></li></ul></li></ul><ul><li>Debugging Discussion</li><li>View Debugging<ul><li>Reveal: https://revealapp.com</li></ul></li></ul><ul><li>Console Commands: <code>v</code>, <code>p</code>, <code>po</code></li><li>The usefulness of print debugging</li><li>Breakpoints<ul><li><a href="https://www.youtube.com/watch?v=kpk2tdsPh0A">Parallel Universes</a></li></ul></li></ul><ul><li>os_signpost and logging</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>Assuming these steps need to be performed in the order they are presented, how would you improve this code?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// Assuming these steps need to be performed in the order
// they are presented, how would you improve this code?</span>
<span class="splashkeyword">let</span> results = array
.<span class="splashcall">map</span> { $0.<span class="splashproperty">path</span> }
.<span class="splashcall">filter</span> { $0.<span class="splashcall">hasPrefix</span>(<span class="splashstring">"/Documents"</span>) }
.<span class="splashcall">compactMap</span> { $0.<span class="splashcall">components</span>(separatedBy: <span class="splashstring">"/"</span>).<span class="splashproperty">last</span> }
.<span class="splashcall">prefix</span>(maxEntries)
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Error Handling!</p><ol><li>NSError supports built-in error recovery through the use of a recovery attempter, allowing the origin of the error a chance to handle things like retries when delivered to an NSAlert.</li></ol><ol start="2"><li>A custom Swift Error type can provide localized description information by conforming to LocalizedError and overriding localizedDescription.</li></ol><ol start="3"><li>Although it isn’t possible to specify the type of Error thrown from a method in Swift, it is possible to restrict the error type when it is delivered within a Result.</li></ol><ol start="4"><li>It is possible to omit localized descriptions and failure reasons when creating an NSError while still making this information available to consumers of the error by creating a userInfo provider for the error domain.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://mailchi.mp/hey/weekly-swift-exercise-signup">Weekly Swift Exercises</a>! Subscribe to the <a href="https://mailchi.mp/hey/weekly-swift-exercise-signup">Mailinglist</a> today to subscribe!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-38</guid><title>Episode 38: We Hand Chiseled Our Corners</title><description>We discuss Server-configured UI and Native VS Cross Platform development!</description><link>https://codecompletion.io/episodes/2021/ep-38</link><pubDate>Tue, 20 Jul 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 38! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with two apps for you to check out:<ul><li><a href="https://noteifyapp.com/activedock/">ActiveDock</a> by <a href="https://twitter.com/gerasim_sergey">Gerasim Sergey</a></li><li><a href="https://timingapp.com/?lang=en">Timing</a> by <a href="https://twitter.com/daniel_a_a">Daniel Alm</a></li></ul></li></ul><ul><li>Server-configured UI<ul><li><a href="https://medium.com/airbnb-engineering/a-deep-dive-into-airbnbs-server-driven-ui-system-842244c5f5">AirBnB</a></li><li><a href="https://turbo.hotwired.dev">Turbo</a></li><li><a href="https://developer.apple.com/documentation/tvml">TVML</a></li></ul></li></ul><ul><li>iOS VS Web Development</li><li>Websites in App Form</li><li>Native vs. Cross-Platform Development: Dropbox and Airbnb’s Backpedaling</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>What’s the best way to check if the file that is passed in exists or not?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
</code><code><span class="splashkeyword">func</span> checkIfExists(<span class="splashkeyword">_</span> fileURL: <span class="splashtype">URL</span>) -> <span class="splashtype">Bool</span> {
<span class="splashcomment">// What's the best way to check if the file at fileURL
// exists or not?</span>
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Email Validation!</p><ol><li>"I love Objective-C"@coders.com</li></ol><ol start="2"><li>[email protected]</li></ol><ol start="3"><li>admin@[IPv6:2020:de9::1]</li></ol><ol start="4"><li>appsupport(See Dimitri)@helpdesk</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-37</guid><title>Episode 37: Can you Verizon me now?</title><description>We are joined by special guest Michael Redig and discuss how he got into development, and how to get your foot in the door as a Junior Developer!</description><link>https://codecompletion.io/episodes/2021/ep-37</link><pubDate>Tue, 13 Jul 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 37! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with two apps for you to check out:<ul><li><a href="https://c-command.com/spamsieve/">SpamSieve</a> by <a href="https://twitter.com/mjtsai">Michael Tsai</a></li><li><a href="https://tableflipapp.com">TableFlip</a> by <a href="https://twitter.com/ctietze">Christian Tietze</a></li></ul></li></ul><ul><li>Interview with <a href="https://twitter.com/mredig">Michael Redig</a><ul><li>How did you get into development?</li><li>When did you start making an “application”?</li><li>What was the transition from learning SpriteKit first to more traditional iOS development like?</li><li>When did you start making more “properly” built UIKit apps?</li><li>What projects are you working on right now?</li><li>Any tips for someone who wants to do development full-time?</li></ul></li></ul><ul><li><a href="https://copilot.github.com">GitHub CoPilot</a></li><li><a href="https://apps.apple.com/us/app/email-link-protector/id1566806044?mt=12">Email Link Protector</a></li><li><a href="https://testflight.apple.com/join/iJImKDBd">KnowMe</a></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>What’s the best way to check if the file that is passed in exists or not?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
</code><code><span class="splashkeyword">func</span> checkIfExists(<span class="splashkeyword">_</span> fileURL: <span class="splashtype">URL</span>) -> <span class="splashtype">Bool</span> {
<span class="splashcomment">// What's the best way to check if the file at fileURL
// exists or not?</span>
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Obscure Foundation File Classes!</p><ol><li>NSFileVolume is a class that allows you to perform fundamental file system operations on volumes, such as injecting its partitions.</li></ol><ol start="2"><li>NSFileWrapper represents nodes in the file system, such as directories known as file packages, but can also represent regular files and symbolic links.</li></ol><ol start="3"><li>NSFileHandle provides a wrapper for file system descriptors, allowing you to perform basic file IO such as reading, writing, and locking files.</li></ol><ol start="4"><li>NSURLProtocol allows you to implement custom loading strategies for your own protocols, so they can be used anywhere a regular NSURL is used.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a>! Search for <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-36</guid><title>Episode 36: O(unable to type-check this expression in reasonable time)</title><description>We discuss Project Planning and Management!</description><link>https://codecompletion.io/episodes/2021/ep-36</link><pubDate>Tue, 6 Jul 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 36! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with two apps for you to check out:<ul><li><a href="https://apps.apple.com/us/app/eventzones/id1541274241">EventZones</a> by <a href="https://twitter.com/BharatDevk">Bharat Kumar</a></li><li><a href="https://timeinorbit.com">Orbit</a> by <a href="https://twitter.com/malinsundberg">Malin Sundberg</a></li></ul></li></ul><ul><li><a href="https://adrianmejia.com/most-popular-algorithms-time-complexity-every-programmer-should-know-free-online-tutorial-course/">Computational complexity, and Big O notation</a>,</li><li>The importance of documenting algorithms,</li><li>Benchmarking and profiling before optimizing,</li><li>CMTime and all its weirdness.</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>Which key command in Xcode will allow you to rename the variable you have selected everywhere it appears in the current scope?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// Which key command in Xcode will rename the selected variable
// within the current scope?</span>
<span class="splashkeyword">let</span> lable = <span class="splashtype">UILabel</span>()
lable.<span class="splashproperty">text</span> = <span class="splashstring">"Name"</span>
lable.<span class="splashproperty">textColor</span> = .<span class="splashdotAccess">blue</span>
rootView.<span class="splashcall">addSubview</span>(lable)
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Not Phở</a>. <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for “Not Pho” on the iOS and macOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-35</guid><title>Episode 35: I Didn't Watch the Video</title><description>We discuss Project Planning and Management!</description><link>https://codecompletion.io/episodes/2021/ep-35</link><pubDate>Tue, 29 Jun 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 35! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with two apps for you to check out:<ul><li><a href="https://apps.apple.com/app/appwage/id834352667">AppWage</a> by <a href="https://twitter.com/kyle_hankinson">Kyle Hankinson</a></li><li><a href="https://litur.app/">Litur</a> by <a href="https://twitter.com/knightbenax">Bezaleel Reuben Ashefor</a></li></ul></li></ul><ul><li>Do you plan a project beforehand or jump in headfirst?</li><li>Why design an app in a graphics (non-IDE) application?</li><li>Do you a begin a project with the model layer or UI first?<ul><li><a href="https://twitter.com/shituserstory">Shit user stories</a></li><li><a href="https://youtu.be/nn2FB1P_Mn8">IT Crowd: “Have you tried turning it off and on again?”</a></li></ul></li></ul><ul><li>Common Project Management Tool Terminology.</li><li>Aftershow: Tiktok is crazy town:<ul><li><a href="https://vm.tiktok.com/ZMdPJt4X1/">NJ crazy squatter</a></li><li><a href="https://www.tiktok.com/@pollypocketsy/video/6925516290513833222?lang=en&is_copy_url=1&is_from_webapp=v1">Crazy Ex Husband</a></li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>Which key command in Xcode will allow you to rename the variable you have selected everywhere it appears in the current scope?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashcomment">// Which key command in Xcode will rename the selected variable
// within the current scope?</span>
<span class="splashkeyword">let</span> lable = <span class="splashtype">UILabel</span>()
lable.<span class="splashproperty">text</span> = <span class="splashstring">"Name"</span>
lable.<span class="splashproperty">textColor</span> = .<span class="splashdotAccess">blue</span>
rootView.<span class="splashcall">addSubview</span>(lable)
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Swift Actors!</p><ol><li>Actors are a reference type distinct from classes that enable thread-safe access to the data within the actor by gating access behind async members.</li></ol><ol start="2"><li>Actors can be used from Objective-C so long as the type is marked with @objc, and only non-isolated and asynchronous methods are called.</li></ol><ol start="3"><li>Actors can be accessed from non-asynchronous code within the same module so long as only let properties or non isolated methods are called.</li></ol><ol start="4"><li>Actors are implemented using special GCD queues and locks under the hood at compile time, minimizing bugs that arise from incorrect usage of isolated properties.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a> on the Mac App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-34</guid><title>Episode 34: Design is Hard</title><description>We discuss Cocoa graphics frameworks and UI design!</description><link>https://codecompletion.io/episodes/2021/ep-34</link><pubDate>Tue, 22 Jun 2021 17:30:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 34! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with two apps for you to check out:<ul><li><a href="https://wordcounterapp.com">Word Counter</a> by <a href="https://twitter.com/ctietze">Christian Tietze</a></li><li><a href="https://apps.apple.com/us/app/pro-ledger/id1524370871">Pro Ledger</a> by <a href="https://twitter.com/theandynadal">Andy Nadal</a></li></ul></li></ul><ul><li>A tour of Cocoa graphics frameworks: CoreGraphics, AppKit/UIKit, and SwiftUI,<ul><li><a href="https://bignerdranch.com/blog/core-graphics-part-4-a-path-a-path/">Big Nerd Ranch on bezier paths</a></li><li><a href="https://ciechanow.ski/drawing-bezier-curves/">Drawing Bézier Curves by Bartosz Ciechanowshi</a></li><li><a href="https://www.paintcodeapp.com">Paintcode</a></li></ul></li></ul><ul><li>How to improve your design skills and what to look out for.</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>Which key command in Xcode will build a template doc comment for the function below?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
</code><code><span class="splashcomment">// Which key command in Xcode will build a template documentation
// comment for the function below?</span>
<span class="splashkeyword">func</span> doTheCoolThing(name: <span class="splashtype">String</span>, food: <span class="splashtype">Food</span>) -> <span class="splashtype">CoolerThing</span> {
...
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://www.jonnybcodes.com">JohnnyB</a>'s Bon Voyage eCommerce App course. Visit <a href="http://bon-voyage.app/course">bon-voyage.app/course</a> and be sure to follow Bon Voyage's instructor <a href="https://twitter.com/jonnybcodes">@jonnybcodes</a> on Twitter to learn more and stay up to date with all his courses!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-33</guid><title>Episode 33: 💧 Vapor-ware</title><description>We discuss Vapor, server-side swift, and async/await!</description><link>https://codecompletion.io/episodes/2021/ep-33</link><pubDate>Wed, 16 Jun 2021 02:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 33! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with two apps for you to check out:<ul><li><a href="https://apps.apple.com/gb/app/worth-it/id1515358890">Worth It</a> by <a href="https://twitter.com/maxmzzn">Maxime Mazzone</a></li><li><a href="https://apps.apple.com/us/app/unwind-mindful-breathing/id1470613384">Unwind</a> by <a href="https://twitter.com/kushsolitary">Kushagra Agarwal</a></li></ul></li></ul><ul><li>Server side swift,</li><li>Vapor,</li><li>async/await, and</li><li>Futures and Promisses.</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>Which key command in Xcode will build a template doc comment for the function below?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
</code><code><span class="splashcomment">// Which key command in Xcode will build a template documentation
// comment for the function below?</span>
<span class="splashkeyword">func</span> doTheCoolThing(name: <span class="splashtype">String</span>, food: <span class="splashtype">Food</span>) -> <span class="splashtype">CoolerThing</span> {
...
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Huuungry</a>. <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for Huuungry on the iOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-32</guid><title>Episode 32: I Learned A Lot Today</title><description>With special guest Linh Bouniol, we discuss all the new announcements from WWDC21 for later this year!</description><link>https://codecompletion.io/episodes/2021/ep-32</link><pubDate>Wed, 9 Jun 2021 18:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 32! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with three apps for you to check out:<ul><li><a href="https://apps.apple.com/us/app/filmlog/id635642879">Filmlog</a> by <a href="https://twitter.com/_sbraun">Simon Braun</a></li><li><a href="https://zettelkasten.de/the-archive/">The Archive</a> by <a href="https://twitter.com/ctietze">Christian Tietze</a></li><li><a href="https://sensei.app">Sensei</a> by <a href="https://twitter.com/oskargroth">Oskar Groth</a></li></ul></li></ul><ul><li>New announcements at WWDC!</li></ul><h2>⚠️ Compiler Error</h2><p>This week's theme: WWDC!</p><ol><li>Marking the start of the jacket trend that would be used for several years, WWDC10 gave each attendee a black track jacket with the number 10 stitched on the back.</li></ol><ol start="2"><li>WWDC12 was the last event hosted by Steve Jobs, but did see the introduction of the final generation of AirPort Extremes and Time Capsules, which would no longer be updated.</li></ol><ol start="3"><li>WWDC13 sold out in a tremendously fast 71 seconds, but some attendees would later say attendance was worth it since it featured Phil Schiller’s "Can't innovate anymore, my ass!" quote.</li></ol><ol start="4"><li>WWDC16 marked the first departure from holding the Keynote at the Moscone Center in years by hosting it at the Bill Graham Civic Auditorium instead.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-31</guid><title>Episode 31: What's an íPad?</title><description>With special guest Paul Solt, we discuss our final thoughts on Basecamp, the Epic vs Apple trial, and go over the new device reviews!</description><link>https://codecompletion.io/episodes/2021/ep-31</link><pubDate>Sat, 5 Jun 2021 22:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 31! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with three apps for you to check out:<ul><li><a href="https://tomato2.app">Tomato 2</a> by <a href="https://twitter.com/_vojto">Vojtech Rinik</a></li><li><a href="https://devutils.app">DevUtils</a> by <a href="https://twitter.com/tdinh_me">Tony Dinh</a></li><li><a href="https://codakuma.com/personal-best/">Personal Best</a> by <a href="https://twitter.com/shauneba">Shaun Donnelly</a></li></ul></li></ul><ul><li>Our final thoughts on Basecamp,</li><li>New Device Reviews: iMac, iPad, Apple TV</li><li>The Epic vs Apple Trial</li></ul><h2>⚠️ Compiler Error</h2><p>This week's theme: The NSString Class Cluster!</p><ol><li>Most dynamically allocated NSStrings are actually _NSCFString, which is essentially represented by a CFStringRef or CFMutableStringRef.</li></ol><ol start="2"><li>NSSecuredString is a specialized implementation of a string that keeps its contents encrypted at rest until they are accessed directly, preventing RAM snapshot analysis.</li></ol><ol start="3"><li>Whenever path component methods are used, NSPathStore2 is returned, providing an optimized view into an array of path components.</li></ol><ol start="4"><li>NSCheapMutableString is a limited mutable string that allows for zero-copy initialization, primarily used for temporarily wrapping stack buffers.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a>! Search for <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-30</guid><title>Episode 30: It's a Big Sure</title><description>We discuss what WWDC will bring to us as developers.</description><link>https://codecompletion.io/episodes/2021/ep-30</link><pubDate>Wed, 26 May 2021 21:30:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 30! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with three apps for you to check out:<ul><li><a href="https://apps.apple.com/us/app/charty-for-shortcuts/id1494386093?ls=1">Charty</a> by <a href="https://twitter.com/rodrigoaraujo">Rodrigo Araujo</a></li><li><a href="https://apps.apple.com/us/app/cone-live-color-picker/id1221305627?mt=8">Cone</a> by <a href="https://twitter.com/kushsolitary">Kushagra Agarwal</a></li><li><a href="https://minbrowser.org">MinBrowser</a> by <a href="https://twitter.com/MinBrowser">Ben Standaert</a></li></ul></li></ul><ul><li>WWDC Software and Hardware Predictions,</li><li>App Clips one year later,</li><li>In-App Purchases and External Payments,</li><li>How Can The App Store Be a Better Place for Us As Developers?</li><li>The Future of Objective-C</li></ul><h2>⚠️ Compiler Error</h2><p>This week's theme: Cryptography!</p><ol><li>AES, or the American Encryption Standard, is a suite of symmetric block cyphers that was selected as a part of an open process hosted by NIST and the US government from 1997 to 2000 to replace DES.</li></ol><ol start="2"><li>A one time pad is an early but very robust encryption technique, which can be uncrackable so long as the key on the pad is never re-used, is truly random, is longer than the plaintext, and is kept completely secret.</li></ol><ol start="3"><li>Symmetric key algorithms use the same cryptographic keys for both encryption and decryption, while asymmetric key algorithms make use of a public key and a private key to encrypt and decrypt information.</li></ol><ol start="4"><li>Unlike RSA which relies on large prime number factorization, Elliptic-curve cryptography makes use of a given elliptic curve’s geometric and algebraic properties, ultimately providing the same level of security as RSA with smaller keys.</li></ol><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Not Phở</a>. <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for “Not Pho” on the iOS and macOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-29</guid><title>Episode 29: Don't Do That</title><description>We discuss Basecamp's recent messups, and how not do that.</description><link>https://codecompletion.io/episodes/2021/ep-29</link><pubDate>Sun, 16 May 2021 01:30:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 29! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with three apps for you to check out:<ul><li><a href="https://adrian.schoenig.me/longplay/">Longplay</a> by <a href="https://twitter.com/nhawk">Adrian Schönig</a>,</li><li><a href="https://www.moneyflow.app">Money Flow</a> by <a href="https://twitter.com/romero_ios">Daniel Romero</a>, and</li><li><a href="https://proxyman.io">Proxyman</a> by <a href="https://twitter.com/_nghiatran">Nghia Tran</a>.</li></ul></li></ul><ul><li>Basecamp's mistake</li><li>The Epic vs Apple Trial</li></ul><h2>⚠️ Compiler Error</h2><p>This week's theme: Esoteric Programming Languages!</p><ol><li>Chef is a language designed to make a program look like a cooking recipe, with a stated goal that “Program recipes should not only generate valid output, but be easy to prepare and delicious”.</li></ol><ol start="2"><li>LOLCODE brings coders back to the early days of memes with keywords such as HAI, CAN HAS STDIO, and KTHXBYE, all phrases that may have come up as a caption for a lolcat image.</li></ol><ol start="3"><li>INTERCAL, short for "Compiler Language With No Pronounceable Acronym”, is an older parody language that satirizes aspects of the various programming languages of the time.</li></ol><ol start="4"><li>Inspired by a similarly sounding language, Brainfudge is a language that makes use of only 8 characters: !@#$%^&*; but otherwise uses the same syntax as its inspiration, BrainF*ck.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Spencer went first, followed by Ben. Let's see how they did!</p>
<blockquote>1. Chef is a language designed to make a program look like a cooking recipe, with a stated goal that “Program recipes should not only generate valid output, but be easy to prepare and delicious”.</blockquote>
<p>Both Spencer and Ben believed this to be true, which as a <em>code completion</em>, it was!</p>
<blockquote>2. LOLCODE brings coders back to the early days of memes with keywords such as HAI, CAN HAS STDIO, and KTHXBYE, all phrases that may have come up as a caption for a lolcat image.</blockquote>
<p>No one doubted the existance of LOLCODE either, since it was also a <em>code completion</em>!</p>
<blockquote>3. INTERCAL, short for "Compiler Language With No Pronounceable Acronym”, is an older parody language that satirizes aspects of the various programming languages of the time.</blockquote>
<p>Spencer doubted how crazy crazy programming languages could be, but this was a <em>code completion</em>!</p>
<p>Which means…</p>
<blockquote>4. Inspired by a similarly sounding language, Brainfudge is a language that makes use of only 8 characters: !@#$%^&*; but otherwise uses the same syntax as its inspiration, BrainF*ck.</blockquote>
<p>Ben correctly sussed out this <strong>compiler error</strong>! Although BrainF*ck is a real language, Brainfudge as described is not…</p>
<h3>Learn More →</h3>
<ul>
<li><a href="https://esolangs.org/wiki/Chef">Chef</a></li>
<li><a href="https://en.wikipedia.org/wiki/Esoteric_programming_language">Esoteric programming languages on Wikipedia</a></li>
<li><a href="https://en.wikipedia.org/wiki/Brainfuck">Brainf*ck on Wikipedia</a></li>
<li><a href="https://en.wikipedia.org/wiki/INTERCAL">INTERCAL on Wikipedia</a></li>
</ul>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/us/app/mystiko/id1148340942?pt=14724&ct=CodeCompletion1&mt=8">Mystiko</a>. <a href="https://apps.apple.com/us/app/mystiko/id1148340942?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for Mystiko on the iMessage App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-28</guid><title>Episode 28: Host Spotlight: Spencer — I Don’t Plan, Man!</title><description>We are spotlight our very own host, Spencer Curtis, and learn how he got into teaching!</description><link>https://codecompletion.io/episodes/2021/ep-28</link><pubDate>Sat, 8 May 2021 19:15:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 28! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>How did you get into development?</li><li>Did you ever think you'd end up being a teacher?</li><li>What pushed you to keep learning about more advanced topics?</li><li>Did knowing your teachers help you get your first job?</li><li>What was the first app that you published on the App Store?</li><li>If you had unlimited time, what would you work on?<ul><li><a href="https://youtu.be/PZ7SevBiT5s">VFX Artists React to TRON</a></li><li><a href="https://youtu.be/T2-yhFTCCzY">TRON Remade</a></li></ul></li></ul><ul><li>WWDC/2021 wishlist?</li><li>What would you take up if tech was no longer an option?<ul><li><a href="https://podcast.explainitslowly.show/10">Explain it Slowly, "What is a stenographer?"</a></li></ul></li></ul><ul><li>Advice for budding programmers?</li><li>Advice for becoming a teacher?<ul><li><a href="https://www.youtube.com/watch?v=opqIa5Jiwuw&list=PLibNZv5Zd0dyCoQ6f4pdXUFnpAIlKgm3N">Explaining One Concept in 5 Levels of Difficulty playlist</a></li></ul></li></ul><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a> on the Mac App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-27</guid><title>Episode 27: Spring Loaded Zoom Zoom</title><description>We discuss Apple's Spring Loaded event announcements.</description><link>https://codecompletion.io/episodes/2021/ep-27</link><pubDate>Tue, 27 Apr 2021 04:45:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 27! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with three apps for you to check out:<ul><li><a href="https://lighthouse16.com/quiet/">Quiet</a> by <a href="https://twitter.com/lighthouse16_hq">Peter Cammeraat</a>,</li><li><a href="https://apps.apple.com/us/app/id1441959317?ls=1">Mezzanine Theater Diary</a> by <a href="https://twitter.com/BenPackard">Ben Packard</a>, and</li><li><a href="https://apps.apple.com/us/app/home-inventory/id413564952?mt=12">Home Inventory</a> by <a href="https://twitter.com/DianeRHamilton">Diane Hamilton</a>.</li></ul></li></ul><ul><li>We review Apple's Spring Loaded event:<ul><li>New iMacs</li><li>Potential future iMac Pro</li><li>Where Apple will take the M1/M2/M1S/M1X</li><li>AirTags</li><li>New iPad Pros<ul><li><a href="https://www.youtube.com/watch?v=_fw_ptyy9GM">5G</a></li></ul></li><li>The new Apple TV 4K</li><li>Mac mini bumped with 10Gbase-T ethernet option</li><li>Lavender iPhone 12</li><li>Podcasting subscriptions</li><li>Apple Card Family and shared credit</li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>In which order would Swift prioritize the following overloaded methods??</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
</code><code><span class="splashkeyword">func</span> processValue<T: <span class="splashtype">BinaryFloatingPoint</span>>(<span class="splashkeyword">_</span> value: <span class="splashtype">T</span>) <span class="splashcomment">// 1</span>
<span class="splashkeyword">func</span> processValue<T: <span class="splashtype">BinaryFloatingPoint</span>&<span class="splashtype">Decodable</span>>(<span class="splashkeyword">_</span> value: <span class="splashtype">T</span>) <span class="splashcomment">// 2</span>
<span class="splashkeyword">func</span> processValue<T: <span class="splashtype">Decodable</span>>(<span class="splashkeyword">_</span> value: <span class="splashtype">T</span>) <span class="splashcomment">// 3</span>
<span class="splashkeyword">func</span> processValue(<span class="splashkeyword">_</span> value: <span class="splashtype">Double</span>) <span class="splashcomment">// 4</span>
<span class="splashkeyword">func</span> processValue<T: <span class="splashtype">Numeric</span>>(<span class="splashkeyword">_</span> value: <span class="splashtype">T</span>) <span class="splashcomment">// 5</span>
<span class="splashkeyword">let</span> value: <span class="splashtype">Double</span> = <span class="splashnumber">3.14</span>
<span class="splashcall">processValue</span>(value) <span class="splashcomment">// Which order would the swift compiler rank these methods in?</span>
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Ultra-wideband!</p><ol><li>Ultra-wideband, or UWB for short, is a specific technology for short-range, low-energy, high-bandwidth communication over a large portion of the radio spectrum.</li></ol><ol start="2"><li>Apple’s U1 chip can accurately position another U1 device within an omnidirectional field of view as long as the devices are within 100 feet of each other.</li></ol><ol start="3"><li>Formerly known as pulse radio, UWB works by generating radio energy at specific time intervals over a large bandwidth, where the polarity and timing of the pulse determine the data being transmitted.</li></ol><ol start="4"><li>Despite these devices not having a U1 chip, AirTags are compatible with iPhone SE, iPhone 6s or later so long as they are running iOS 14.5 or later.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Fernando went first, followed by Ben. Let's see how they did!</p>
<blockquote>4. Despite these devices not having a U1 chip, AirTags are compatible with iPhone SE, iPhone 6s or later so long as they are running iOS 14.5 or later.</blockquote>
<p>Dimitri basically spoiled this one mid episode, making this an easy <em>code completion</em>!</p>
<blockquote>1. Ultra-wideband, or UWB for short, is a specific technology for short-range, low-energy, high-bandwidth communication over a large portion of the radio spectrum.</blockquote>
<p>No one was led astray by this basic definition, since it was also a <em>code completion</em>!</p>
<blockquote>2. Apple’s U1 chip can accurately position another U1 device within an omnidirectional field of view as long as the devices are within 100 feet of each other.</blockquote>
<p>Everyone trusted this to be fact, despite it being the <strong>compiler error</strong> all along! The U1 can't have an omnidirectional field of view, otherwise it wouldn't be able to tell where another device is! Not to mention it is only usable over much shorter distances…</p>
<p>Which means…</p>
<blockquote>3. Formerly known as pulse radio, UWB works by generating radio energy at specific time intervals over a large bandwidth, where the polarity and timing of the pulse determine the data being transmitted.</blockquote>
<p>Both Fernando and Ben were led astray by such <em>simple</em> physics, because this one was a plain old <em>code completion</em>!</p>
<h3>Learn More →</h3>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Ultra-wideband">Ultra-wideband on Wikipedia</a></li>
<li><a href="https://www.apple.com/shop/buy-airtag/airtag">AirTag requirements</a></li>
</ul>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by Swiftly Built's <a href="https://www.eventbrite.com/e/swiftly-built-advanced-data-display-tickets-147152558263?aff=CodeCompletion">Advanced Data Display course</a>. Buy your ticket now on Eventbrite for one month of live iOS instruction starting on May 1st!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-26</guid><title>Episode 26: Building a Cable Museum</title><description>We discuss what we do with old tech, Apple's upcoming Spring Loaded event, and what we really want out of iPads.</description><link>https://codecompletion.io/episodes/2021/ep-26</link><pubDate>Mon, 19 Apr 2021 17:15:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 26! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with three apps for you to check out:<ul><li><a href="https://dronetrails.app">Drone Trails</a> by <a href="https://twitter.com/soupyn00dles">Rahul Ravindran</a>,</li><li><a href="https://newsbite.app">Newsbite</a> by <a href="https://twitter.com/chrisajenkins">Chris Jenkins</a>, and</li><li><a href="http://www.pkclsoft.com/wp/app/world-of-hex/">World of Hex</a> by <a href="https://twitter.com/PKCLsoft">Peter Easdown</a>.</li></ul></li></ul><ul><li>Dimitri's trade-in experience.</li><li>What to do with old devices and boxes.</li><li>Our predictions for this week's Spring Loaded Apple Event.</li><li>The need for better iPad stories rather than faster iPads.</li></ul><h2>⚠️ Compiler Error</h2><p>This week's theme: HDR Video!</p><ol><li>High dynamic range video expands on standard dynamic range by increasing not only the luminance, but also the bit depth and color volume.</li></ol><ol start="2"><li>Standard dynamic range video is defined according to a maximum luminance of 100 nits, limited by the capabilities of CRT-based display technology.</li></ol><ol start="3"><li>The Ultra HD Alliance defines a display as being HDR-capable only if it is able to reach a limited peak brightness of at least 1000 nits.</li></ol><ol start="4"><li>An HDR display is capable of displaying content mastered for any maximum brightness thanks to a technique called tone mapping.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Spencer went first, followed by Ben. Let's see how they did!</p>
<blockquote>1. High dynamic range video expands on standard dynamic range by increasing not only the luminance, but also the bit depth and color volume.</blockquote>
<p>Ben and Spencer believed this to be a <em>code completion</em>, which it was!</p>
<blockquote>2. Standard dynamic range video is defined according to a maximum luminance of 100 nits, limited by the capabilities of CRT-based display technology.</blockquote>
<p>No one was led astray by this, which is unfortunate (for Dimitri) since it was also a <em>code completion</em>!</p>
<blockquote>3. The Ultra HD Alliance defines a display as being HDR-capable only if it is able to reach a limited peak brightness of at least 1000 nits.</blockquote>
<p>Everyone trusted this to be fact, despite it being the <strong>compiler error</strong> all along! Turns out the requirements are a lot lower than that, or else most displays would not be HDR capable at all!</p>
<p>Which means…</p>
<blockquote>4. An HDR display is capable of displaying content mastered for any maximum brightness thanks to a technique called tone mapping.</blockquote>
<p>Both Spencer and Ben were led astray by the terminology, because this one was a plain old <em>code completion</em>!</p>
<h3>Learn More →</h3>
<ul>
<li><a href="https://en.wikipedia.org/wiki/High_dynamic_range#Visual">High Dynamic Range on Wikipedia</a></li>
<li><a href="https://en.wikipedia.org/wiki/Standard-dynamic-range_video">Standard Dynamic Range on Wikipedia</a></li>
<li><a href="https://en.wikipedia.org/wiki/High-dynamic-range_video">High Dynamic Range Video on Wikipedia</a></li>
<li><a href="https://gizmodo.com/how-dolby-vision-works-and-how-it-could-revolutionize-1594894563 ">How Dolby Vision Works, and How It Could Revolutionize TVs Forever</a></li>
</ul>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by Swiftly Built's <a href="https://www.eventbrite.com/e/swiftly-built-advanced-data-display-tickets-147152558263?aff=CodeCompletion">Advanced Data Display course</a>. Buy your ticket now on Eventbrite for one month of live iOS instruction starting on May 1st!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-25</guid><title>Episode 25: Subjective-C</title><description>We discuss the relevance of Objective-C for new developers.</description><link>https://codecompletion.io/episodes/2021/ep-25</link><pubDate>Thu, 15 Apr 2021 21:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 25! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with three apps for you to check out:<ul><li><a href="https://twitter.com/boundaudio">Bound Audio</a> by <a href="https://twitter.com/timbueno">Tim Bueno</a>,</li><li><a href="https://moneycoach.ai">MoneyCoach</a> by <a href="https://twitter.com/PerjanDuro">Perjan Duro</a>, and</li><li><a href="https://apps.apple.com/us/app/attendance2/id536206472">Attendance2</a> by <a href="https://twitter.com/davereed">Dave Reed</a>.</li></ul></li></ul><ul><li>The relevance of Objective-C for new and existing developers.</li><li>The complexity of Swift.</li><li>SwiftUI vs UIKit.</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>Can you spot and fix the memory leak?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
9
10
11
12
</code><code><span class="splashkeyword">class</span> DelayedTask {
<span class="splashkeyword">var</span> complete = <span class="splashkeyword">false
var</span> task: <span class="splashtype">DispatchWorkItem</span>?
<span class="splashkeyword">func</span> configure() {
task = <span class="splashtype">DispatchWorkItem</span> {
<span class="splashtype">DispatchQueue</span>.<span class="splashproperty">main</span>.<span class="splashcall">asyncAfter</span>(.<span class="splashcall">now</span>() + <span class="splashnumber">5</span>) { [<span class="splashkeyword">weak self</span>] <span class="splashkeyword">in
self</span>?.<span class="splashproperty">complete</span> = <span class="splashkeyword">true</span>
}
}
}
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Objective-C ARC!</p><ol><li>Much like Swift, ARC can be configured to operate on CoreFoundation types in Objective-C code using the option -f-objc-arc-cftypes at compile time.</li></ol><ol start="2"><li>Automatic Reference Counting was originally called Automatic Retain Release, abbreviated as ARR, and was ultimately changed to ARC before release.</li></ol><ol start="3"><li>Unlike with ARC, Objective-C Garbage Collection required users to implement -finalize rather than -dealloc for object cleanup.</li></ol><ol start="4"><li>Although they were introduced with ARC, @autoreleasepool blocks can also be used in code where ARC is disabled since it offers a performance improvement.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Fernando went first, followed by Ben and Spencer. Let's see how they did!</p>
<blockquote>4. Although they were introduced with ARC, @autoreleasepool blocks can also be used in code where ARC is disabled since it offers a performance improvement.</blockquote>
<p>Ben and Spencer believed this to be true, but Fernando thought it must be wrong… which he was wrong to think, because it was a <em>code completion</em>!</p>
<blockquote>3. Unlike with ARC, Objective-C Garbage Collection required users to implement -finalize rather than -dealloc for object cleanup.</blockquote>
<p>Everyone thought this was plausible, since it was also a <em>code completion</em>!</p>
<blockquote>2. Automatic Reference Counting was originally called Automatic Retain Release, abbreviated as ARR, and was ultimately changed to ARC before release.</blockquote>
<p>No one was tricked by the pirate sounding accronym, because it is also a <em>code completion</em>!</p>
<p>Which means…</p>
<blockquote>1. Much like Swift, ARC can be configured to operate on CoreFoundation types in Objective-C code using the option -f-objc-arc-cftypes at compile time.</blockquote>
<p>Both Ben and Spencer trusted their gut, which payed off since this was the <strong>compiler error</strong>! Only Swift got this magical functionality through its C overlay, which Objective-C can't participate in to this day…</p>
<h3>Learn More →</h3>
<ul>
<li><a href="https://opensource.apple.com/source/objc4/objc4-493.11/runtime/objc-arr.mm">Objective-C ARR source code</a></li>
<li><a href="https://developer.apple.com/documentation/objectivec/nsobject/1418513-finalize?language=objc"><code>-[NSObject finalize]</code></a></li>
<li><a href="https://developer.apple.com/documentation/foundation/nsautoreleasepool "><code>NSAutoreleasePool</code></a></li>
</ul>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://twitter.com/UnderdogDevs">Underdog Devs</a>' Spring Into Swift event. Follow <a href="https://twitter.com/UnderdogDevs">@UnderdogDevs</a> on Twitter to learn more and stay tuned for more information about the <a href="https://twitter.com/hashtag/SpringIntoSwift">Spring Into Swift</a> event!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-24</guid><title>Episode 24: Shark Proof Cabling</title><description>We discuss recent rumors about Apple TV, HomeKit, and potential new Macs.</description><link>https://codecompletion.io/episodes/2021/ep-24</link><pubDate>Thu, 1 Apr 2021 16:30:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 24! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with three apps for you to check out:<ul><li><a href="https://apps.apple.com/us/app/highlighted-book-highlighter/id1480216009">Highlighted</a> by <a href="https://twitter.com/stuhecdamir">Damir Stuhec</a>,</li><li><a href="https://apps.apple.com/us/app/pro-wrestling-simulator-2021/id1513020607">Pro Wrestling Simulator 2021</a> by <a href="https://twitter.com/j_t_saeed">James Saeed</a>, and</li><li><a href="https://apps.apple.com/app/id1468495939">Replica</a> by <a href="https://twitter.com/martinho_t">Tiago Martinho</a>.</li></ul></li></ul><ul><li>Rumors around Apple TV, HomePod, and future Apple Silicon Macs.</li><li>The state of Siri and HomeKit.</li></ul><h2>⚠️ Compiler Error</h2><p>This week's theme: Undersea Cabling!</p><ol><li>A colony of electric eels was responsible in 2013 for disturbing the operation of fiber optic cabling resulting in significant packet loss to the islands of French Polynesia.</li></ol><ol start="2"><li>In 2014, a security camera revealed that sharks were biting undersea fiber optic cabling, presumably attracted to the magnetic field emitted by the high voltage power required for optical repeaters.</li></ol><ol start="3"><li>An undersea cable is technically referred as a submarine communications cable, and unlike the name implies, has little to do with submarines, but the cables were used as early as the 1850’s with the telegraph.</li></ol><ol start="4"><li>It took more than a year to construct and install the MAREA cable, a 4000 mile cable connecting Spain to the United States, that can transmit up to 200 terabits per second.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Ben went first, followed by Spencer. Let's see how they did!</p>
<blockquote>4. It took more than a year to construct and install the MAREA cable, a 4000 mile cable connecting Spain to the United States, that can transmit up to 200 terabits per second.</blockquote>
<p>Both our completionists believed this to be true, because it was a <em>code completion</em>!</p>
<blockquote>3. An undersea cable is technically referred as a submarine communications cable, and unlike the name implies, has little to do with submarines, but the cables were used as early as the 1850’s with the telegraph.</blockquote>
<p>Ben had doubts about the long history of submarine communications cables, but this was also a <em>code completion</em>!</p>
<blockquote>2. In 2014, a security camera revealed that sharks were biting undersea fiber optic cabling, presumably attracted to the magnetic field emitted by the high voltage power required for optical repeaters.</blockquote>
<p>Spencer thought they would have thought about sharks eating cables before, but they didn't, since it was also a <em>code completion</em>!</p>
<p>Which means…</p>
<blockquote>1. A colony of electric eels was responsible in 2013 for disturbing the operation of fiber optic cabling resulting in significant packet loss to the islands of French Polynesia.</blockquote>
<p>That's right, the <strong>compiler error</strong>! Turns out electric eels were impacted by some undersea cabling, but they never caused such an incident before…</p>
<h3>Learn More →</h3>
<ul>
<li><a href="https://www.researchgate.net/publication/230165374_Sub-sea_power_cables_and_migration_behaviour_of_the_European_eel">Sub-sea power cables and migration behaviour of the European eel</a></li>
<li><a href="https://www.theguardian.com/technology/2014/aug/14/google-undersea-fibre-optic-cables-shark-attacks">Shark Attacks on Fiber Optic Cables</a></li>
<li><a href="https://en.wikipedia.org/wiki/Submarine_communications_cable">Submarine communications cable on Wikipedia</a></li>
<li><a href="https://en.wikipedia.org/wiki/MAREA">MAREA on Wikipedia</a></li>
</ul>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Huuungry</a>. <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for Huuungry on the iOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-23</guid><title>Episode 23: Fernando will Host Your Backups (* <4TB only)</title><description>We discuss each of our backup strategies, and difficulties managing them.</description><link>https://codecompletion.io/episodes/2021/ep-23</link><pubDate>Tue, 23 Mar 2021 17:10:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 23! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://codecompletion.io/jointheclub">Join</a> the Code Completion Club at <a href="https://codecompletion.io/jointheclub">https://codecompletion.io/jointheclub</a>!</li><li>Indie App Spotlight, with three apps for you to check out:<ul><li><a href="https://www.relateios.app">Relate</a> by <a href="https://twitter.com/thesamcoe">Samuel Coe</a>,</li><li><a href="https://github.com/SamusAranX/MinimalMIDIPlayer">MinimalMIDIPlayer</a> by <a href="https://twitter.com/SamusAranX">Peter</a>, and</li><li><a href="https://simonemontalto.com/projects/book-track">Book Track</a> by <a href="https://twitter.com/SimoneMontalto">Simone Montalto</a>.</li></ul></li></ul><ul><li>What we each do for backups.</li></ul><h2>⚠️ Compiler Error</h2><p>This week's theme: RAID!</p><ol><li>RAID exists in 7 standard levels, 0 through 6, all of which implement striping in various configurations, except for RAID 1 which implements a full mirror of the data set instead of using striping.</li></ol><ol start="2"><li>Originally referred to as “Redundant Array of Inexpensive Disks”, RAID was renamed to “Redundant Array of Independent Disks” by industry manufacturers.</li></ol><ol start="3"><li>Despite the existence of standardized RAID levels, implementations of those same RAID levels are completely proprietary, and no interoperability between major manufacturers currently exists.</li></ol><ol start="4"><li>A cousin of RAID, MAID or Massive Array of Idle Drives, is an architecture that uses hundreds of drives, where latencies can be very high, but operational costs may be more manageable since not every drive needs to be online at any given time.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Spencer went first, followed by Fernando. Let's see how they did!</p>
<blockquote>4. A cousin of RAID, MAID or Massive Array of Idle Drives, is an architecture that uses hundreds of drives, where latencies can be very high, but operational costs may be more manageable since not every drive needs to be online at any given time.</blockquote>
<p>Fernando wasn't so sure about this one being true, but it was a <em>code completion</em>!</p>
<blockquote>3. Despite the existence of standardized RAID levels, implementations of those same RAID levels are completely proprietary, and no interoperability between major manufacturers currently exists.</blockquote>
<p>Both our completionists believed this, and so did Dimitri! Until he looked into it, because it was the <strong>compiler error</strong>! Turns out the Disk Data Format is a standardized format just for this use case!</p>
<p>Which means…</p>
<blockquote>2. Originally referred to as “Redundant Array of Inexpensive Disks”, RAID was renamed to “Redundant Array of Independent Disks” by industry manufacturers.</blockquote>
<p>Both our completionists weren't phased by the odd naming, since it was a <em>code completion</em>.</p>
<blockquote>1. RAID exists in 7 standard levels, 0 through 6, all of which implement striping in various configurations, except for RAID 1 which implements a full mirror of the data set instead of using striping.</blockquote>
<p>Spencer had doubts, but those doubts led him astray, since it was also a <em>code completion</em>!</p>
<h3>Learn More →</h3>
<ul>
<li><a href="https://en.wikipedia.org/wiki/RAID">RAID on Wikipedia</a></li>
<li><a href="https://en.wikipedia.org/wiki/Standard_RAID_levels">Standard RAID levels on Wikipedia</a></li>
<li><a href="https://en.wikipedia.org/wiki/Non-RAID_drive_architectures#MAID">MAID on Wikipedia</a></li>
<li><a href="https://www.snia.org/tech_activities/standards/curr_standards/ddf">Disk Data Format Specification</a></li>
</ul>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://twitter.com/UnderdogDevs">Underdog Devs</a>' Spring Into Swift event. Follow <a href="https://twitter.com/UnderdogDevs">@UnderdogDevs</a> on Twitter to learn more and stay tuned for more information about the <a href="https://twitter.com/hashtag/SpringIntoSwift">Spring Into Swift</a> event!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-22</guid><title>Episode 22: Not a Soapbox</title><description>We discuss Fernando's new course and alternative ways of leveing up as a developer.</description><link>https://codecompletion.io/episodes/2021/ep-22</link><pubDate>Mon, 15 Mar 2021 18:30:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 22! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>Indie App Spotlight, with three apps for you to check out:<ul><li><a href="https://apps.apple.com/us/app/print-to-size/id949490225?ign-mpt=uo%3D4">Print to Size</a> by <a href="https://twitter.com/sebmolines">Seb</a>,</li><li><a href="https://coppiceapp.com">Coppice</a> by <a href="https://twitter.com/pilky">Martin Pilkington</a>, and</li><li><a href="https://tumult.com/hype/">Tumult Hype</a> by <a href="https://twitter.com/jmfd">Jonathan Deutsch</a>.</li></ul></li></ul><ul><li>Fernando's New Course.</li><li>Teaching and Learning iOS Development.</li></ul><h2>⚠️ Compiler Error</h2><p>This week's theme: FireWire!</p><ol><li>FireWire comes in 3 protocol flavors: FireWire 400 over a 4-pin connector, FireWire 600 over a 6-pin connector, and FireWire 800 over a 9-pin connector.</li></ol><ol start="2"><li>The technology behind FireWire, known as IEEE 1394, was not only used in consumer electronics, but also automobiles, military vehicles, and even satellites.</li></ol><ol start="3"><li>FireWire was expected to reach speeds up to 6.4 Gbps over single mode fiber, but development was largely halted after 2010, and fully withdrawn in 2013.</li></ol><ol start="4"><li>Unlike USB where these is a single host to the topology of connected devices, FireWire implements a pure peer-to-peer network, allowing for multiple hosts and devices to share the same bus for communication.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Ben went first, followed by Fernando. Let's see how they did!</p>
<blockquote>4. Unlike USB where these is a single host to the topology of connected devices, FireWire implements a pure peer-to-peer network, allowing for multiple hosts and devices to share the same bus for communication.</blockquote>
<p>Both our completionists trusted this to be fact, which it was since it is a <em>code completion</em>!</p>
<blockquote>2. The technology behind FireWire, known as IEEE 1394, was not only used in consumer electronics, but also automobiles, military vehicles, and even satellites.</blockquote>
<p>Neither of them was tricked by this one either as it was also a <em>code completion</em>!</p>
<blockquote>3. FireWire was expected to reach speeds up to 6.4 Gbps over single mode fiber, but development was largely halted after 2010, and fully withdrawn in 2013.</blockquote>
<p>Ben doubted this one, but was deniged his right to change his mind, since it was a <em>code completion</em>!</p>
<p>Which means…</p>
<blockquote>1. FireWire comes in 3 protocol flavors: FireWire 400 over a 4-pin connector, FireWire 600 over a 6-pin connector, and FireWire 800 over a 9-pin connector.</blockquote>
<p>You guess it, and so did Fernando: the <strong>compiler error</strong>!</p>
<h3>Learn More →</h3>
<ul>
<li><a href="https://en.wikipedia.org/wiki/IEEE_1394">IEEE 1394 on Wikipedia</a></li>
</ul>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://www.jonnybcodes.com">JohnnyB</a>'s Bon Voyage eCommerce App course. Visit <a href="http://bon-voyage.app/course">bon-voyage.app/course</a> and be sure to follow Bon Voyage's instructor <a href="https://twitter.com/jonnybcodes">@jonnybcodes</a> on Twitter to learn more and stay up to date with all his courses!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-21</guid><title>Episode 21: I Fear For My Wallet</title><description>We make predictions for Apple products in 2021, and review those that were released last year!</description><link>https://codecompletion.io/episodes/2021/ep-21</link><pubDate>Wed, 24 Feb 2021 17:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 21! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>Indie App Spotlight, with three apps for you to check out:<ul><li><a href="https://apps.apple.com/app/thirstic-smart-water-tracker/id1471500028">Thirstic</a> by <a href="https://twitter.com/ersjoh">Johannes Erschbamer</a>,</li><li><a href="https://apps.apple.com/us/app/memorypie/id1071872226">MemoryPie</a> by <a href="https://twitter.com/literalPie">Ben Kindle</a>, and</li><li><a href="https://sparkleapp.com/">Sparkle</a> by <a href="https://twitter.com/dannyturmoils">Daniele Trambusti</a> and <a href="https://twitter.com/duncanwilcox">Duncan Wilcox</a>.</li></ul></li></ul><ul><li>Predictions for 2021.</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>What built-in way that doesn't require the use of an internet connection can you use to get documentation on many C functions like <code>malloc()</code>?</blockquote><pre><code class="splashlineNumbers">1
</code><code>void *myQuoteObjectUnquote = <span class="splashcall">malloc</span>(<span class="splashnumber">8</span>);
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Apple releases in 2020!</p><ol><li>March of 2020 saw the release of many new updates, including the Powerbeats: a low cost wired version of the Powerbeats Pro and an upgrade to the Powerbeats 3.</li></ol><ol start="2"><li>The Mac mini was updated not once, but three times in 2020, offering lower-priced storage options back in March, a limited release Developer Transition Kit in June, followed by the much-anticipated M1 transition in November.</li></ol><ol start="3"><li>Also updated twice in 2020, the March update of the MacBook Air did away with the rose gold color option, but replaced the keyboard, introducing TouchID without a TouchBar for the first time.</li></ol><ol start="4"><li>In true Mac Pro fashion, Apple kept its promise and released Apple Fitness+ before the end of 2020, completing Apple’s Apple One offering, announced back in September.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Johnny went first, followed by Spencer. Let's see how they did!</p>
<blockquote>1. March of 2020 saw the release of many new updates, including the Powerbeats: a low cost wired version of the Powerbeats Pro and an upgrade to the Powerbeats 3.</blockquote>
<p>Spencer wasn't so sure Powerbeats got updates, but they did, making this a <em>code completion</em>! <a href="https://www.macrumors.com/guide/powerbeats-4/">Learn More →</a></p>
<blockquote>2. The Mac mini was updated not once, but three times in 2020, offering lower-priced storage options back in March, a limited release Developer Transition Kit in June, followed by the much-anticipated M1 transition in November.</blockquote>
<p>Both of our completionists believed this to be possible, which was a good thing since it was a <em>code completion</em>! <a href="https://www.apple.com/newsroom/2020/03/new-macbook-air-has-more-to-love-and-is-now-just-999/">Learn More →</a> <a href="https://en.wikipedia.org/wiki/Developer_Transition_Kit">More →</a> <a href="https://www.apple.com/newsroom/2020/11/introducing-the-next-generation-of-mac/">More →</a></p>
<blockquote>3. Also updated twice in 2020, the March update of the MacBook Air did away with the rose gold color option, but replaced the keyboard, introducing TouchID without a TouchBar for the first time.</blockquote>
<p>Johnny doubted this one, which was the right move, since it was the <strong>compiler error</strong>! <a href="https://www.apple.com/newsroom/2020/03/new-macbook-air-has-more-to-love-and-is-now-just-999/">Learn More →</a></p>
<p>Which means…</p>
<blockquote>4. In true Mac Pro fashion, Apple kept its promise and released Apple Fitness+ before the end of 2020, completing Apple’s Apple One offering, announced back in September.</blockquote>
<p>You guess it! A <em>code completion</em>! <a href="https://www.apple.com/newsroom/2020/12/apple-fitness-plus-the-future-of-fitness-launches-december-14/">Learn More →</a></p>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Not Phở</a>. <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for “Not Pho” on the iOS and macOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2021/ep-20</guid><title>Episode 20: Don't Be Evil</title><description>We take a look at our Indie App Showcase, and discuss the ever important topic of ethics in software and tech!</description><link>https://codecompletion.io/episodes/2021/ep-20</link><pubDate>Mon, 1 Feb 2021 20:30:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 20! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>Indie App Spotlight, with two apps for you to check out:<ul><li><a href="https://apps.apple.com/us/app/id1496421647">Code Conf</a> by <a href="https://twitter.com/PawelMadejCK">Paweł Madej</a>, and</li><li><a href="https://apps.apple.com/gb/app/hour-blocks-day-planner/id1456275153">Hour Blocks</a> by <a href="https://twitter.com/j_t_saeed">James Saeed</a>.</li></ul></li></ul><ul><li>Ethics in Software and Tech.</li></ul><h2>⚠️ Compiler Error</h2><p>This week's theme: Uber Lawsuits!</p><ol><li>Lyft’s CEO sued Uber for allegedly and on multiple occasions sending escorts to his private home, as a supposed retaliation and intimidation tactic against Lyft’s then-expansion into New York City, which was settled for $2M.</li></ol><ol start="2"><li>An antitrust lawsuit was filed against Uber by a passenger claiming collusion with drivers to raise prices, which later got dramatic when Uber privately investigated said passenger using “fraudulent and arguably criminal conduct”.</li></ol><ol start="3"><li>A former Uber driver filed a lawsuit against Uber regarding its star rating system, which the plaintiff claims disproportionately leads to the firing of people who are not white or who speak with accents.</li></ol><ol start="4"><li>As recently as August, California's labor commissioner is once again suing Uber and Lyft, claiming the companies are stealing wages from drivers by "willfully misclassifying" them as contractors instead of employees.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Spencer gracefully went first, followed by Ben. Let's see how they did!</p>
<blockquote>1. Lyft’s CEO sued Uber for allegedly and on multiple occasions sending escorts to his private home, as a supposed retaliation and intimidation tactic against Lyft’s then-expansion into New York City, which was settled for $2M.</blockquote>
<p>Both of our completionists believed this to be possible, which is unfortunate because it was the <strong>compiler error</strong>! This is what happens when you believe in urban legends long enough to research them, only to discover there was no truth to them after all...</p>
<p>Which means…</p>
<blockquote>2. An antitrust lawsuit was filed against Uber by a passenger claiming collusion with drivers to raise prices, which later got dramatic when Uber privately investigated said passenger using “fraudulent and arguably criminal conduct”.</blockquote>
<p>Both Spencer ans Ben thought this was a little too crazy to be true, but it was a <em>code completion</em> after all! <a href="https://money.cnn.com/2016/08/11/technology/uber-lawsuits/">Learn More →</a></p>
<blockquote>3. A former Uber driver filed a lawsuit against Uber regarding its star rating system, which the plaintiff claims disproportionately leads to the firing of people who are not white or who speak with accents.</blockquote>
<p>This was also a <em>code completion</em>! <a href="https://www.npr.org/2020/10/26/927851281/uber-fires-drivers-based-on-racially-biased-star-rating-system-lawsuit-claims">Learn More →</a></p>
<blockquote>4. As recently as August, California's labor commissioner is once again suing Uber and Lyft, claiming the companies are stealing wages from drivers by "willfully misclassifying" them as contractors instead of employees.</blockquote>
<p>You guessed it! A <em>code completion</em>! <a href="https://www.businessinsider.com/uber-lyft-sued-again-in-california-over-driver-classification-2020-8">Learn More →</a></p>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-19</guid><title>Episode 19: SAD!</title><description>We introduce Indie App Showcase, discuss GitHub's new features, and open source projects, followed by a Compiler Error all about Thunderbolt!</description><link>https://codecompletion.io/episodes/2020/ep-19</link><pubDate>Sat, 19 Dec 2020 19:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 19! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li><a href="https://apps.apple.com/us/app/opus-one-daily-planner/id941852977">Opus One</a> by <a href="https://twitter.com/joseines75">Jose Cantu</a> in our new Indie App Spotlight.</li><li><a href="https://github.blog/2020-12-08-new-from-universe-2020-dark-mode-github-sponsors-for-companies-and-more/">New features</a> coming to GitHub: Dark Mode, Corporate sponsorships, auto-merging pull requests, and Discussions.</li><li>Running an Open Source repo.</li></ul><h2>⚠️ Compiler Error</h2><p>This week's theme: Thunderbolt!</p><ol><li>USB4 consolidates various USB transfer modes introduced over the years by basing itself on the Thunderbolt 3 protocol, though host-support for tunneling existing Thunderbolt devices over a USB4 port is optional.</li></ol><ol start="2"><li>Much like Thunderbolt 3, demonstration versions of Light Peak used a modified USB port, being run from a prototype Mac Pro logic board, transmitting data over a 30-meter optical-fiber cable.</li></ol><ol start="3"><li>Thunderbolt 1, 2, and 3 can support up to 6 daisy chained devices, however devices that can make more than one downstream Thunderbolt port available will require a Thunderbolt 4 compatible computer.</li></ol><ol start="4"><li>The copper variation of Light Peak was co-developed by Apple and Intel, with Apple trademarking the term Thunderbolt, though the trademark was later transferred to Intel.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Fernando refused to go first, so Ben took the lead, followed by Fernando and Spencer. Let's see how they did!</p>
<blockquote>4. The copper variation of Light Peak was co-developed by Apple and Intel, with Apple trademarking the term Thunderbolt, though the trademark was later transferred to Intel.</blockquote>
<p>None of our completionists fell for this one which was a <em>code completion</em>! <a href="http://www.appleinsider.com/articles/11/05/20/thunderbolt_trademark_rights_will_be_transferred_from_apple_to_intel.html">Learn More →</a></p>
<blockquote>2. Much like Thunderbolt 3, demonstration versions of Light Peak used a modified USB port, being run from a prototype Mac Pro logic board, transmitting data over a 30-meter optical-fiber cable.</blockquote>
<p>All our completionists were right to determine that this was also a <em>code completion</em>! <a href="https://en.wikipedia.org/wiki/Thunderbolt_(interface)#Introduction">Learn More →</a></p>
<blockquote>1. USB4 consolidates various USB transfer modes introduced over the years by basing itself on the Thunderbolt 3 protocol, though host-support for tunneling existing Thunderbolt devices over a USB4 port is optional.</blockquote>
<p>Fernando charted his own path, believing this one to cause the error, but it was a <em>code completion</em>! <a href="https://en.wikipedia.org/wiki/USB4">Learn More →</a></p>
<p>Which leaves…</p>
<blockquote>3. Thunderbolt 1, 2, and 3 can support up to 6 daisy chained devices, however devices that can make more than one downstream Thunderbolt port available will require a Thunderbolt 4 compatible computer.</blockquote>
<p>…which Ben and Spencer both were suspect of, because it is the <strong>compiler error</strong>! Thunderbolt 3 technically supported hubs all along, but it wasn't until now that they became available! <a href="https://eshop.macsales.com/shop/owc-thunderbolt-hub">Learn More →</a></p>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a> on the Mac App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-18</guid><title>Episode 18: Host Spotlight: Johnny — Always be Learning</title><description>We are spotlight our very own host, Johnny Hicks, and learn how he got into development!</description><link>https://codecompletion.io/episodes/2020/ep-18</link><pubDate>Wed, 9 Dec 2020 01:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 18! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>“How did you get into development?”</li><li>“Did you have any tech fascination before you started programming?”</li><li>“What was it like going from a bootcamp to your internship?”</li><li>“Were you able to get mentorship when you started as a junior?”</li><li>“What advice would you give when you need to ask questions or get help from your senior developers?”</li><li>“What are your current interests as a developer?”</li><li>“What were your thoughts seeing a WWDC session for the first time?”</li><li>“Are there any facets of your everyday life that have changed since you became a developer?”</li><li>“Assuming you had an unlimited budget and time, what would you dive into next?”</li><li>“How did you transition from Junior to Mid-level developer to instructor, etc?”</li><li>“Any final advice?”</li></ul><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Huuungry</a>. <a href="https://apps.apple.com/app/apple-store/id1448552588?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for Huuungry on the iOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-17</guid><title>Episode 17: It would be nicer if things were nicer</title><description>We discuss Spencer's MacBook Air setup woes, the new 15% App Store rate, and which frameworks you should use when diving into Mac development!</description><link>https://codecompletion.io/episodes/2020/ep-17</link><pubDate>Mon, 30 Nov 2020 22:30:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 17! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>Spencer's MacBook Air setup woes.</li><li>The App Store's new 15% commission rate for small businesses.</li><li>Differences between AppKit, UIKit, and the various flavors of SwiftUI when starting a new Mac app.</li></ul><h2>⚠️ Compiler Error</h2><p>This week's theme: Esoteric Objective-C “standard library” features!</p><ol><li>Tagged pointers encode their entire object into the non-addressing bits of a pointer, ultimately allowing faster allocations for specific hard-coded classes known by the runtime.</li></ol><ol start="2"><li>NSZone’s primary purpose was to allow objects to be allocated within the same memory page, so swap would be fast, and those objects could be free’d in one go.</li></ol><ol start="3"><li>NSProxy is a non-NSObject base class that allows for message dispatch to be easily redirected to another object, but does not have an initializer implemented for subclasses to fall back on.</li></ol><ol start="4"><li><strong>NSAtom is a special class that is ultimately the boolean-opposite to nil: any message you send it will always return an </strong>NSAtom, which is very intentionally equal to 1.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Fernando went first, followed by Spencer. Let's see how they did!</p>
<blockquote>1. Tagged pointers encode their entire object into the non-addressing bits of a pointer, ultimately allowing faster allocations for specific hard-coded classes known by the runtime.</blockquote>
<p>Both of our completionists thought this was true, but it was unfortunately the <strong>compiler error</strong>! Turns out the entire addressing bit-space is used for the payload, and any class can request a tag at runtime! <a href="https://www.mikeash.com/pyblog/friday-qa-2012-07-27-lets-build-tagged-pointers.html">Learn More →</a></p>
<blockquote>2. NSZone’s primary purpose was to allow objects to be allocated within the same memory page, so swap would be fast, and those objects could be free’d in one go.</blockquote>
<p>Spencer fell for this one, which was actually a <em>code completion</em>! <a href="http://cocoadev.github.io/NSZone/">Learn More →</a></p>
<blockquote>3. NSProxy is a non-NSObject base class that allows for message dispatch to be easily redirected to another object, but does not have an initializer implemented for subclasses to fall back on.</blockquote>
<p>Both of our completionists thought this was a code completion… because it was a <em>code completion</em>! <a href="https://www.mikeash.com/pyblog/friday-qa-2013-10-25-nsobject-the-class-and-the-protocol.html">Learn More →</a></p>
<p>Which leaves…</p>
<blockquote>4. __NSAtom is a special class that is ultimately the boolean-opposite to nil: any message you send it will always return an __NSAtom, which is very intentionally equal to 1.</blockquote>
<p>…which Fernando was unable to continue his streak with, because it was also a <em>code completion</em>! <a href="https://brian-webster.tumblr.com/post/102637339374/the-mystery-of-the-crashing-nspredicate">Learn More →</a></p>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a>! Search for <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-16</guid><title>Episode 16: It's mini in the non-trademarkable kind of way</title><description>We discuss Apple's recent mini products, Big Sur's release, and Fernando's new project!</description><link>https://codecompletion.io/episodes/2020/ep-16</link><pubDate>Wed, 25 Nov 2020 19:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 16! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>More thoughts on the iPhone 12 mini, Mac mini, and HomePod mini.</li><li>Big Sur's release, and the launch issues that came about.</li><li>Fernando's new project, supplemental dev skills, and interview standardization.</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>What etymology lead to the random number generator of choice on Apple platforms being named <code>arc4random()</code>?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
</code><code><span class="splashkeyword">import</span> Darwin
<span class="splashkeyword">public func</span> arc4random() -> <span class="splashtype">UInt32</span>
<span class="splashkeyword">public func</span> arc4random_buf(<span class="splashkeyword">_</span> buffer: <span class="splashtype">UnsafeMutableRawPointer</span>!, <span class="splashkeyword">_</span> numberOfBytes: <span class="splashtype">Int</span>)
<span class="splashkeyword">public func</span> arc4random_uniform(<span class="splashkeyword">_</span> upperBound: <span class="splashtype">UInt32</span>) -> <span class="splashtype">UInt32</span>
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>We all know and love Swift, which owes its inspiration from Objective-C, which owes <em>its</em> inspiration from Smalltalk!</p><ol><li>Unlike many languages, Smalltalk has no if statement, let alone other control structures. Control flow is instead implemented as methods sent to objects.</li></ol><ol start="2"><li>Like Objective-C, Smalltalk makes use of argument labels on each of a methods arguments, but does not wrap every method call in square brackets.</li></ol><ol start="3"><li>Only six "keywords" are reserved in Smalltalk: true, false, nil, self, super, and thisContext, which are called pseudo-variables in the language.</li></ol><ol start="4"><li>Like many languages in the 80s, Smalltalk uses the dot character to access properties, the semicolon to delineate statements, and curly brackets to denote blocks.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Ben went first, followed by Fernando. Let's see how they did!</p>
<blockquote>2. Like Objective-C, Smalltalk makes use of argument labels on each of a methods arguments, but does not wrap every method call in square brackets.</blockquote>
<p>Both of our completionists thought this was true, and it is indeed a <em>code completion</em>! <a href="https://en.wikipedia.org/wiki/Smalltalk#Messages">Learn More →</a></p>
<blockquote>3. Only six "keywords" are reserved in Smalltalk: true, false, nil, self, super, and thisContext, which are called pseudo-variables in the language.</blockquote>
<p>They both thought this was also factual, and it is also a <em>code completion</em>! <a href="https://en.wikipedia.org/wiki/Smalltalk#Syntax">Learn More →</a></p>
<blockquote>1. Unlike many languages, Smalltalk has no if statement, let alone other control structures. Control flow is instead implemented as methods sent to objects.</blockquote>
<p>Ben didn't think Smalltalk was weird enough, but it turns out it is, because was a <em>code completion</em>! <a href="https://en.wikipedia.org/wiki/Smalltalk#Control_structures">Learn More →</a></p>
<p>Which leaves…</p>
<blockquote>4. Like many languages in the 80s, Smalltalk uses the dot character to access properties, the semicolon to delineate statements, and curly brackets to denote blocks.</blockquote>
<p>…which Fernando was rightfully skeptical of, because this was the <strong>compiler error</strong>! Smalltalk uses the dot character to selineate statements, the semicolon to cascate method calls, and square brackets to denote blocks! <a href="https://en.wikipedia.org/wiki/Smalltalk#Expressions">Learn More →</a></p>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://www.jonnybcodes.com">JohnnyB</a>'s Bon Voyage eCommerce App course. Visit <a href="http://bon-voyage.app/course">bon-voyage.app/course</a> and be sure to follow Bon Voyage's instructor <a href="https://twitter.com/jonnybcodes">@jonnybcodes</a> on Twitter to learn more and stay up to date with all his courses!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-15</guid><title>Episode 15: Mini mini M1ni</title><description>We discuss Apple's recent announcements, including the iPhones 12, what we really want form a mini, and the new M1 chip!</description><link>https://codecompletion.io/episodes/2020/ep-15</link><pubDate>Mon, 16 Nov 2020 23:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 15! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>The iPhones, especially the desires around a perfect iPhone mini.</li><li>The M1 processor.</li></ul><h2>🚧 #CompleteTheCode</h2><p><em>Last</em> week's <em>#CompleteTheCode</em>:</p><blockquote>What key API allows for Swift Arrays and Dictionaries to implement Copy-on-Write (CoW)?</blockquote><pre><code class="splashlineNumbers">1
2
3
</code><code><span class="splashkeyword">let</span> firstArray = [<span class="splashnumber">0</span>, <span class="splashnumber">1</span>, <span class="splashnumber">2</span>]
<span class="splashkeyword">var</span> secondArray = firstArray <span class="splashcomment">// The underlying storage is still shared here</span>
secondArray.<span class="splashcall">append</span>(<span class="splashnumber">3</span>) <span class="splashcomment">// The underlying storage is copied first, then updated</span>
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><p>This week's theme: Languages inspired by Objective-C!</p><ol><li>Hoping to improve Javascript, Objective-J was invented as a way of bringing Objective-C’s class and message sending syntax and more over to web development, but without the *’s.</li></ol><ol start="2"><li>Objective-C++ is a variant of Objective-C that adds the same extensions to C++ as it does to C, effectively duplicating the implementations of classes, exception handling, and closures.</li></ol><ol start="3"><li>Objective-C# is another variant of Objective-C started in 2009 after the success of the iPhone hoping to bring dynamic dispatch to C#, but was not actively maintained.</li></ol><ol start="4"><li>Inspired by an off-hand remark, Objective-Rust is a toy language recently developed that adds some Objective-C syntax to Rust, for better interoperability between the two languages.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Johnny went first, followed by Spencer. Let's see how they did!</p>
<blockquote>2. Objective-C++ is a variant of Objective-C that adds the same extensions to C++ as it does to C, effectively duplicating the implementations of classes, exception handling, and closures.</blockquote>
<p>Both of our completionists thought this was true, and it is indeed a <em>code completion</em>! <a href="https://en.wikipedia.org/wiki/Objective-C#Objective-C++">Learn More →</a></p>
<blockquote>4. Inspired by an off-hand remark, Objective-Rust is a toy language recently developed that adds some Objective-C syntax to Rust, for better interoperability between the two languages.</blockquote>
<p>They both thought this was also factual, and it is also a <em>code completion</em>! <a href="https://belkadan.com/blog/2020/08/Objective-Rust/">Learn More →</a></p>
<blockquote>1. Hoping to improve Javascript, Objective-J was invented as a way of bringing Objective-C’s class and message sending syntax and more over to web development, but without the *’s.</blockquote>
<p>Spencer wasn't so sure about this one, but unlike last week, this was still a <em>code completion</em>! <a href="https://www.cappuccino.dev/learn/objective-j.html">Learn More →</a></p>
<p>Which leaves…</p>
<blockquote>3. Objective-C# is another variant of Objective-C started in 2009 after the success of the iPhone hoping to bring dynamic dispatch to C#, but was not actively maintained.</blockquote>
<p>…which Johnny was right to choose because this was the <strong>compiler error</strong>! As far as we know, C# already has many of the features that would have been desirable from Objective-C, so no one has made a serious attempt at Objective-C#… yet… <a href="https://en.wikipedia.org/wiki/C_Sharp_(programming_language)">Learn More →</a></p>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/us/app/mystiko/id1148340942?pt=14724&ct=CodeCompletion1&mt=8">Mystiko</a>. <a href="https://apps.apple.com/us/app/mystiko/id1148340942?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for Mystiko on the iMessage App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-14</guid><title>Episode 14: We Broke The First Rule of Dev Club</title><description>We predict the announcements to this week's One More Thing event, then take a deep dive into interviewing like a pro!</description><link>https://codecompletion.io/episodes/2020/ep-14</link><pubDate>Wed, 11 Nov 2020 19:11:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 14! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>What Apple could announce at the One More Time event.</li><li>How to nail an interview like a pro.</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>What key API allows for Swift Arrays and Dictionaries to implement Copy-on-Write (CoW)?</blockquote><pre><code class="splashlineNumbers">1
2
3
</code><code><span class="splashkeyword">let</span> firstArray = [<span class="splashnumber">0</span>, <span class="splashnumber">1</span>, <span class="splashnumber">2</span>]
<span class="splashkeyword">var</span> secondArray = firstArray <span class="splashcomment">// The underlying storage is still shared here</span>
secondArray.<span class="splashcall">append</span>(<span class="splashnumber">3</span>) <span class="splashcomment">// The underlying storage is copied first, then updated</span>
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><ol><li>Neuralsort makes use of a convolutional neural network to sort at O(2n) speeds on average, though the worst case can take quadratic time.</li></ol><ol start="2"><li>Spaghetti Sort is capable of sorting its contents at O(n) speeds even in the worst of cases, but requires a quadratic amount of memory in the process.</li></ol><ol start="3"><li>Bogosort uses the power of random shuffling to achieve a computational complexity of O(n) in the best of cases, but is unfortunately not stable in the process.</li></ol><ol start="4"><li>Named after Tim, Timsort is used in Swift 5 to perform sorting needs in Arrays, which is especially tuned to reversing the order of an already sorted collection.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Ben went first, followed by Spencer. Let's see how they did!</p>
<blockquote>2. Spaghetti Sort is capable of sorting its contents at O(n) speeds even in the worst of cases, but requires a quadratic amount of memory in the process.</blockquote>
<p>Both of our completionists thought this was true, and it is indeed a <em>code completion</em>! <a href="https://en.wikipedia.org/wiki/Spaghetti_sort">Learn More →</a></p>
<blockquote>3. Bogosort uses the power of random shuffling to achieve a computational complexity of O(n) in the best of cases, but is unfortunately not stable in the process.</blockquote>
<p>They both thought this was also factual, and it is also a <em>code completion</em>! <a href="https://en.wikipedia.org/wiki/Bogosort">Learn More →</a></p>
<blockquote>1. Neuralsort makes use of a convolutional neural network to sort at O(2n) speeds on average, though the worst case can take quadratic time.</blockquote>
<p>Spencer wasn't so sure about this one, which was the right hunch to have since it was the <strong>compiler error</strong>! Neuralsort was completely made up, though right up there with a fictional Blockchain sort, it feels like it's just <em>waiting</em> to be invented.</p>
<p>Which leaves…</p>
<blockquote>4. Named after Tim, Timsort is used in Swift 5 to perform sorting needs in Arrays, which is especially tuned to reversing the order of an already sorted collection.</blockquote>
<p>…which Ben thought for sure was too fishy to be true, but it was a <em>code completion</em> after all! <a href="https://en.wikipedia.org/wiki/Timsort#cite_note-8">Learn More →</a></p>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-13</guid><title>Episode 13: Host Spotlight: Dimitri — Happy to Sell Only Two Copies</title><description>We are spotlight our very own host, Dimitri Bouniol, and learn how he got into development!</description><link>https://codecompletion.io/episodes/2020/ep-13</link><pubDate>Tue, 3 Nov 2020 18:30:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 13! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>How Dimitri got into development.</li><li>Dimitri's current interests and areas to explore.</li><li>Fernando asks: “You can swap one feature from Swift and Obj-C. Which feature from Obj-C goes to Swift and which does Swift give to Obj-C? Explain in iambic pentameter.”</li><li>Spencer asks: “If you could have time to work on an old side-project/hobby project what would it be and why?”</li></ul><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by Fernando and his new book: <a href="https://gumroad.com/l/QutHw">From Junior to Senior: Practical iOS Style Guide</a>. Go to <a href="https://twitter.com/fromjrtosr">https://twitter.com/fromjrtosr</a> today to learn more!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-12</guid><title>Episode 12: The First Rule of Dev Club…</title><description>We are joined by special guest James McDougall and discuss how he got into development, and how to get your foot in the door as a Junior Developer!</description><link>https://codecompletion.io/episodes/2020/ep-12</link><pubDate>Mon, 26 Oct 2020 23:40:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 12! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code! This time, we are joined by special guest, Dan Morse! Be sure to follow them on Twitter at <a href="https://twitter.com/JamesWMcDougall">@JamesWMcDougall</a>.</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>James's path from audio engineer to app developer.</li><li>How to get an interview when you don't have experience.</li><li>Fudging your resumes, but not lying to the hiring manager.</li></ul><h2>🚧 #CompleteTheCode</h2><p><em>Last</em> week's <em>#CompleteTheCode</em>:</p><blockquote>What sort of crash could easily occur with the following code?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</code><code><span class="splashkeyword">class</span> Person: <span class="splashtype">CustomStringConvertible</span> {
<span class="splashkeyword">var</span> name: <span class="splashtype">String</span> = <span class="splashstring">""</span>
<span class="splashkeyword">unowned var</span> twin: <span class="splashtype">Person</span>?
<span class="splashkeyword">private init</span>() { }
<span class="splashkeyword">static func</span> makeTwins() -> (<span class="splashtype">Person</span>, <span class="splashtype">Person</span>) {
<span class="splashkeyword">let</span> (a, b) = (<span class="splashtype">Person</span>(), <span class="splashtype">Person</span>())
a.<span class="splashproperty">twin</span> = b; b.<span class="splashproperty">twin</span> = a
<span class="splashkeyword">return</span> (a, b)
}
<span class="splashkeyword">var</span> description: <span class="splashtype">String</span> { <span class="splashstring">"Twin:</span> \(twin?.<span class="splashproperty">name</span> ?? <span class="splashstring">""</span>)<span class="splashstring">"</span> }
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><ol><li>The UTF-32 view provides access to each character as a 4-byte UInt32, representing the complete range of all 4 billion unicode code points, but in their original, possibly decomposed, forms.</li></ol><ol start="2"><li>The UTF-8 view optimizes for memory at a disadvantage to manipulation speed, since each unicode character may be represented by one or more bytes, making length calculations costly, but necessary for many C APIs.</li></ol><ol start="3"><li>Easily accessibly by treating a string like a collection, the default view represents normalized characters as they would be displayed on screen, even if they were originally decomposed.</li></ol><ol start="4"><li>The UTF-16 view is optimal when interacting with unicode libraries such as Objective-C’s NSString since it vends UInt16 code-points, as is standard in many programing models.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>As our special guest, James went first, followed by Fernando. Let's see how they did!</p>
<blockquote>2. The UTF-8 view optimizes for memory at a disadvantage to manipulation speed, since each unicode character may be represented by one or more bytes, making length calculations costly, but necessary for many C APIs.</blockquote>
<p>Both of our completionists thought this was true, and it is indeed a <em>code completion</em>! <a href="https://developer.apple.com/documentation/swift/string#2905656">Learn More →</a></p>
<blockquote>1. The UTF-32 view provides access to each character as a 4-byte UInt32, representing the complete range of all 4 billion unicode code points, but in their original, possibly decomposed, forms.</blockquote>
<p>James was tempted by this one, but ultimately chose number 3, and Fernando, a contrarian, ignored this wisdom, which is unfortunate because it was the <strong>compiler error</strong>! Although there is a Unicode Scalar View, there is no native utf32 view that vends plain UInt32s… <a href="https://developer.apple.com/documentation/swift/string#2905651">Learn More →</a></p>
<blockquote>3. Easily accessibly by treating a string like a collection, the default view represents normalized characters as they would be displayed on screen, even if they were originally decomposed.</blockquote>
<p>James ultimately though this one was being sneaky, but it was a <em>code completion</em> afterall! <a href="https://developer.apple.com/documentation/swift/string#2905650">Learn More →</a></p>
<p>Which leaves…</p>
<blockquote>4. The UTF-16 view is optimal when interacting with unicode libraries such as Objective-C’s NSString since it vends UInt16 code-points, as is standard in many programing models..</blockquote>
<p>…which Fernando should have known but picked anyway, as it was also a <em>code completion</em>. <a href="https://developer.apple.com/documentation/swift/string#2905653">Learn More →</a></p>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Not Phở</a>. <a href="https://apps.apple.com/app/apple-store/id1525104124?pt=14724&ct=CodeCompletion1&mt=8">Click here</a> or search for “Not Pho” on the iOS and macOS App Store today to give it a try.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-11</guid><title>Episode 11: Fernando's Going to Eat His Hat</title><description>We discuss last week's Hi, Speed event, including the new HomePod mini, iPhone 12, and 5G!</description><link>https://codecompletion.io/episodes/2020/ep-11</link><pubDate>Mon, 19 Oct 2020 19:30:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 11! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>If 5G is as useful a feature as Apple made it out to be.<ul><li><a href="https://www.youtube.com/watch?v=_CTUs_2hq6Y">5G: Explained by MKBHD</a>.</li><li>The new HomePod mini.</li><li>The new iPhone 12.</li><li>Which device we'll all be getting.</li></ul></li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>What sort of crash could easily occur with the following code?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</code><code><span class="splashkeyword">class</span> Person: <span class="splashtype">CustomStringConvertible</span> {
<span class="splashkeyword">var</span> name: <span class="splashtype">String</span> = <span class="splashstring">""</span>
<span class="splashkeyword">unowned var</span> twin: <span class="splashtype">Person</span>?
<span class="splashkeyword">private init</span>() { }
<span class="splashkeyword">static func</span> makeTwins() -> (<span class="splashtype">Person</span>, <span class="splashtype">Person</span>) {
<span class="splashkeyword">let</span> (a, b) = (<span class="splashtype">Person</span>(), <span class="splashtype">Person</span>())
a.<span class="splashproperty">twin</span> = b; b.<span class="splashproperty">twin</span> = a
<span class="splashkeyword">return</span> (a, b)
}
<span class="splashkeyword">var</span> description: <span class="splashtype">String</span> { <span class="splashstring">"Twin:</span> \(twin?.<span class="splashproperty">name</span> ?? <span class="splashstring">""</span>)<span class="splashstring">"</span> }
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><ol><li>Just introduced this month, swift-algorithms is a new package that makes complex sequence and collection algorithm implementations available which wouldn’t otherwise fit in with the standard library.</li></ol><ol start="2"><li>A foundational library to many server-side swift initiatives, swift-nio exposes high level building blocks for interacting with non-blocking IO, such as files, streams, and datagrams.</li></ol><ol start="3"><li>Built on top of swift-nio, swift-metrics is a package primarily intended for web analytics that makes it easy to collect data from your server application in a privacy conscious way.</li></ol><ol start="4"><li>Re-implementing much of the functionality URLSession provides, async-http-client is a high performance HTTP client for Swift actively maintained by the Swift Server Work Group.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Fernando went first, followed by Ben. Let's see how they did!</p>
<blockquote>1. By using extended delimiters for string literals, all special characters including the backslash will be represented as normal characters.</blockquote>
<p>Both of our completionists thought this was true, and it is indeed a <em>code completion</em>! <a href="https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID417">Learn More →</a> <a href="https://developer.apple.com/app-store/kids-apps/">More →</a></p>
<blockquote>4. Re-implementing much of the functionality URLSession provides, async-http-client is a high performance HTTP client for Swift actively maintained by the Swift Server Work Group.</blockquote>
<p>They both thought this was also factual, and it is indeed a <em>code completion</em>! <a href="https://developer.apple.com/documentation/swift/expressiblebynilliteral">Learn More →</a></p>
<blockquote>2. A foundational library to many server-side swift initiatives, swift-nio exposes high level building blocks for interacting with non-blocking IO, such as files, streams, and datagrams.</blockquote>
<p>Fernando had doubts whether Swift NIO was actually considered a high-level library, and Ben followed his lead, which is unfortunate because it was still a <em>code completion</em>! <a href="https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID416">Learn More →</a></p>
<p>Which leaves…</p>
<blockquote>3. Built on top of swift-nio, swift-metrics is a package primarily intended for web analytics that makes it easy to collect data from your server application in a privacy conscious way.</blockquote>
<p>…which everyone incorrectly thought was another code completion, but it was the <strong>compiler error</strong>! Not only is swift-metrics not built on Swift NIO, it is also not meant for web analytics, and is instead there to see if your application is performing. <a href="https://developer.apple.com/documentation/swift/expressiblebydictionaryliteral">Learn More →</a></p>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1525104124?mt=12">Super Easy Timer</a> on the Mac App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-10</guid><title>Episode 10: I Don't Want to be the Negative Nancy…</title><description>We predict what will be announced during this week's Hi, Speed event!</description><link>https://codecompletion.io/episodes/2020/ep-10</link><pubDate>Mon, 12 Oct 2020 21:30:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 10! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>The “Hi, Speed” event.</li><li>New iPhone predictions.</li><li>The hypothetical HomePod mini.</li><li>Whether we all want AirTags or not.</li></ul><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a>! Search for <a href="https://apps.apple.com/app/apple-store/id622463230?pt=1765080&ct=CodeCompletion&mt=8">Pennant</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-9</guid><title>Episode 9: Just Enough Research</title><description>We discuss A14 performance leaks, Accessibility, and who to ask to test your apps.</description><link>https://codecompletion.io/episodes/2020/ep-9</link><pubDate>Mon, 5 Oct 2020 18:30:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 9! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code on this brand new show!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>New A14 performance leaks.</li><li>Integrating Accessibility in your apps.</li><li>Testing your apps with real users.</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>What are the changes you could make to the code below so that we can have a <code>ProcessingCoordinator.Error</code> nested Error type?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
6
7
8
9
10
</code><code><span class="splashkeyword">struct</span> ProcessingCoordinator {
<span class="splashcomment">// ...</span>
}
<span class="splashcomment">// We want this error type to be usable as ProcessingCoordinator.Error
// What changes would you make?</span>
<span class="splashkeyword">enum</span> <# <span class="splashtype">My ProcessingCoordinator Error Type</span> #>: <span class="splashtype">Error</span> {
<span class="splashkeyword">case</span> notFound
<span class="splashcomment">// ...</span>
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><ol><li>By using extended delimiters for string literals, all special characters including the backslash will be represented as normal characters.</li></ol><ol start="2"><li>Not limited to optionals, any type can conform to <code>ExpressibleByNilLiteral</code> to have a special initializer called if <code>nil</code> is used along with that type.</li></ol><ol start="3"><li>Like integer literals, floating point literals can be expressed in binary, octal, decimal, or hexadecimal forms.</li></ol><ol start="4"><li>Although Dictionaries prohibit it, <code>ExpressibleByDictionaryLiteral</code> allows for multiple entries with the same key.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>Eager to continue a winning streak, Ben went first, followed by Spencer. Let's see how they did!</p>
<blockquote>1. By using extended delimiters for string literals, all special characters including the backslash will be represented as normal characters.</blockquote>
<p>Both of our completionists thought this was true, and it is indeed a <em>code completion</em>! <a href="https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID417">Learn More →</a></p>
<blockquote>2. Not limited to optionals, any type can conform to <code>ExpressibleByNilLiteral</code> to have a special initializer called if <code>nil</code> is used along with that type.</blockquote>
<p>They both thought this was also factual, and it is indeed a <em>code completion</em>! <a href="https://developer.apple.com/documentation/swift/expressiblebynilliteral">Learn More →</a></p>
<blockquote>3. Like integer literals, floating point literals can be expressed in binary, octal, decimal, or hexadecimal forms.</blockquote>
<p>Although Ben initially had some doubts, both of our completionists thought this was true, which is unfortunate because it was the <strong>compiler error</strong>! Although you can define a hexadecimal or decimal floating point number, you cannot do so for binary and octal numbers. <a href="https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID416">Learn More →</a></p>
<p>Which leaves…</p>
<blockquote>4. Although Dictionaries prohibit it, <code>ExpressibleByDictionaryLiteral</code> allows for multiple entries with the same key.</blockquote>
<p>…which everyone incorrectly thought was the error, but it was a <em>code completion</em> after all! <a href="https://developer.apple.com/documentation/swift/expressiblebydictionaryliteral">Learn More →</a></p>
</div></details><h2>🎁 Sponsor</h2><p>This week's episode of Code Completion is brought to you by <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a>! Search for <a href="https://apps.apple.com/app/apple-store/id1533254320?pt=1765080&ct=CodeCompletion&mt=8">Sticky Widgets</a> on the iOS App Store today to give it a try!</p>]]></content:encoded></item><item><guid isPermaLink="true">https://codecompletion.io/episodes/2020/ep-8</guid><title>Episode 8: Is Two Wins a Streak?</title><description>We discuss how the App Store, app review, and marketing your app has changes over the years.</description><link>https://codecompletion.io/episodes/2020/ep-8</link><pubDate>Mon, 28 Sep 2020 17:00:00 +0000</pubDate><content:encoded><![CDATA[<p>Welcome to Code Completion, Episode 8! We are a group of iOS developers and educators hoping to share what we love most about development, Apple technology, and completing your code on this brand new show!</p><p>Follow us <a href="https://twitter.com/CodeCompletion">@CodeCompletion</a> on Twitter to hear about our upcoming livestreams, videos, and other content.</p><p>Be sure to also sign up to our monthly newsletter, where we will recap the topics we discussed, reveal the answers to <em>#CompleteTheCode</em>, and share even more things we learned in between episodes.</p><p>You are what makes this show possible, so please be sure to share this with your friends and family who are also interested in any part of the app development process.</p><h2>⭐️ This Week's Topics</h2><ul><li>What it’s like launching an app in 2020 compared to 2008.</li><li>How the process of app review has changed.</li><li>How developers are more on the hook than ever to provide their own marketing as App Store features don’t weigh as heavily as they did in the past.</li></ul><h2>🚧 #CompleteTheCode</h2><p>This week's <em>#CompleteTheCode</em>:</p><blockquote>What's the technical limitation that prevents line 3? Why is line 4 allowed?</blockquote><pre><code class="splashlineNumbers">1
2
3
4
5
</code><code><span class="splashkeyword">struct</span> Folder {
<span class="splashkeyword">var</span> name: <span class="splashtype">String</span>
<span class="splashkeyword">var</span> parent: <span class="splashtype">Folder</span>? <span class="splashcomment">// What technical limitation prevents this?</span>
<span class="splashkeyword">var</span> children: [<span class="splashtype">Folder</span>] <span class="splashcomment">// And why is this ok?</span>
}
</code></pre><p>Be sure to <a href="https://twitter.com/intent/tweet?text=%23CompleteTheCode%20cc%2F%20%40CodeCompletion&original_referer=https%3A%2F%2Fcodecompletion.io">tweet us</a> with hashtag <em><a href="https://twitter.com/hashtag/CompleteTheCode">#CompleteTheCode</a></em> if you know the answer!</p><h2>⚠️ Compiler Error</h2><ol><li>Early versions of iPhone OS were limited to a black home screen background, but iOS 3.2 added the capability to finally change it.</li></ol><ol start="2"><li>iOS 4 brought emoji support to the iPhone and iPad for the first time via a built-in keyboard.</li></ol><ol start="3"><li>Although available since the very beginning, iPhone OS 2 brought a scientific calculator to the base feature set when the device was in landscape.</li></ol><ol start="4"><li>Notification Center finally made its debut in iOS 5, allowing users to manage notifications.</li></ol><details><summary>Compilation Results</summary><div class="details">
<p>This time, Ben went first, followed by Spencer. Let's see how they did!</p>
<blockquote>3. Although available since the very beginning, iPhone OS 2 brought a scientific calculator to the base feature set when the device was in landscape.</blockquote>