<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[波報 | Pofat 的 Swift 中文電子報]]></title><description><![CDATA[Swift 與開發的大小事]]></description><link>https://pofat.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!XBQW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95ca4f9c-cedd-494f-add0-94ddaaf7c3a9_1280x1280.png</url><title>波報 | Pofat 的 Swift 中文電子報</title><link>https://pofat.substack.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 15 Jul 2026 15:59:09 GMT</lastBuildDate><atom:link href="https://pofat.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Pofat]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[pofat@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[pofat@substack.com]]></itunes:email><itunes:name><![CDATA[Pofat]]></itunes:name></itunes:owner><itunes:author><![CDATA[Pofat]]></itunes:author><googleplay:owner><![CDATA[pofat@substack.com]]></googleplay:owner><googleplay:email><![CDATA[pofat@substack.com]]></googleplay:email><googleplay:author><![CDATA[Pofat]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[波報 #75 - GBA 進入 Apple 生態圈]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2024/04/08 - 2024/04/14]]></description><link>https://pofat.substack.com/p/75</link><guid isPermaLink="false">https://pofat.substack.com/p/75</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Mon, 15 Apr 2024 03:23:32 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4144408d-9331-4ad4-aa22-6465b623fd12_1280x1280.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#26368;&#36817;&#25644;&#21040;&#26032;&#22478;&#24066;&#65292;&#21069;&#24190;&#20491;&#36913;&#26411;&#37117;&#22312;&#22352;&#39131;&#27231;&#21644;&#25506;&#32034;&#26032;&#29872;&#22659;&#65288;aka &#26377;&#29399;&#30340;&#22320;&#26041;&#65289;&#65292;&#22312;&#36889;&#20043;&#20013;&#21448;&#20877;&#27425;&#39636;&#24735;&#25644;&#23478;&#26159;&#32791;&#25613;&#24040;&#22823;&#24515;&#38728;&#33021;&#37327;&#30340;&#27963;&#21205;&#65292;&#22857;&#21240;&#33258;&#24049;&#20197;&#24460;&#36023;&#26481;&#35199;&#35201;&#19977;&#24605;&#12290;</p><p>&#21069;&#24190;&#36913;&#20063;&#27491;&#22909;&#27794;&#20160;&#40636;&#35201;&#32202;&#30340;&#20107;&#65292;&#36889;&#27171;&#30340;&#39080;&#24179;&#28010;&#38748;&#21487;&#33021;&#26371;&#25345;&#32396;&#21040; WWDC&#12290;&#25105;&#20170;&#24180;&#22909;&#36939;&#25277;&#20013; special event&#65292;&#23559;&#26159;&#25105;&#20154;&#29983;&#39318;&#27425;&#30340;&#23526;&#39636; WWDC&#65292;&#26399;&#24453;&#26377;&#22909;&#29609;&#30340;&#20107;&#30332;&#29983;&#65292;&#25327;&#25937;&#30130;&#36575;&#28961;&#21147;&#30340; Apple Vision Pro&#12290;</p><p>&#20498;&#26159; GBA &#19978;&#36913;&#21516;&#26178;&#30332;&#29983;&#20841;&#20214;&#22823;&#20107;&#65292;&#35731;&#23427;&#37325;&#26032;&#22238;&#21040;&#20154;&#20497;&#30340;&#30446;&#20809;&#20013;&#65292;&#35657;&#26126;&#20102;&#32769;&#20027;&#27231;&#19981;&#27515;&#21482;&#26371;&#37325;&#36820;&#27054;&#32768;&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/p/74">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://www.douggregor.net/posts/swift-for-cxx-practitioners-value-types/">&#32102; Cpp &#38283;&#30332;&#32773;&#30340; Swift &#25945;&#23416;</a></strong></h3><p>Swift language core group &#30340; <a href="https://mastodon.social/@dgregor79@sfba.social">Doug Gregor</a> &#23531;&#20102;&#19968;&#31995;&#21015;&#35731; Cpp &#38283;&#30332;&#32773;&#35469;&#35672; Swift &#30340;&#25991;&#31456;&#65292;&#20839;&#23481;&#38750;&#24120;&#35443;&#32048;&#19988;&#28145;&#20837;&#65292;&#21253;&#25324;&#35352;&#25014;&#39636;&#23433;&#20840;&#20197;&#21450;&#20841;&#37002;&#22312;&#26576;&#20123;&#38936;&#22495;&#21508;&#33258;&#30340;&#24605;&#36335;&#24046;&#30064;&#65292;&#25512;&#34214;&#35469;&#28858;&#33258;&#24049;&#24050;&#32147;&#24456;&#25026; Swfit &#30340;&#20154;&#38321;&#35712;&#65292;&#26371;&#26356;&#29702;&#35299;&#19968;&#20123;&#35373;&#35336;&#32972;&#24460;&#30340;&#24819;&#27861;&#12290;</p><p><a href="https://www.douggregor.net/">https://www.douggregor.net/</a></p><p></p><h3><strong>&#31070;&#31061;&#30340; &#128030; &#36984;&#21934;</strong></h3><p>&#19968;&#20491;&#23384;&#22312;&#24050;&#20037;&#20294;&#19981;&#24291;&#28858;&#20154;&#30693;&#30340;&#36229;&#26041;&#20415; debug &#25216;&#24039;&#26368;&#36817;&#21448;&#34987;&#29105;&#28872;&#35342;&#35542;&#65292;&#21482;&#35201;&#22312;&#21855;&#26178; <strong>macOS app</strong> &#26178;&#21152;&#19978; <code>-_NS_4445425547 YES</code>&#65292;&#25110;&#26159;&#26356;&#22909;&#35352;&#30340; <code>-NS&#128030; YES</code>&#65292;&#23601;&#26371;&#20986;&#29694;&#26032;&#30340;&#36984;&#21934;&#65292;&#20320;&#21487;&#20197;&#24555;&#36895;&#22320;&#26597;&#30475;&#23427;&#36617;&#20837;&#20102;&#21738;&#20123; framework &#21644;&#29872;&#22659;&#35722;&#25976;&#65288;&#25214; tmp &#20301;&#32622;&#24456;&#26041;&#20415;&#65289;&#12289;&#36996;&#26377;&#25214; Touch Bar &#65288;&#21487;&#35211;&#24180;&#20195;&#65289;&#20197;&#21450;&#30452;&#25509;&#26283;&#20572;&#31243;&#24335;&#65288;&#22914;&#26524;&#20320;&#26377;&#36899;&#32080; debugger&#65289;&#12290; <br></p><p>&#36889;&#20491;&#21855;&#21205;&#21407;&#29702;&#20854;&#23526;&#26159;&#21435;&#35712;&#21462; UserDefaults &#35041;&#30340;&#20540;&#65292;&#25152;&#20197;&#20320;&#20063;&#21487;&#20197;&#29992;</p><p> <code>defaults write -g _NS_4445425547 -bool true</code> </p><p>&#20358;&#35731;&#25152;&#26377; macOS app &#37117;&#20986;&#29694;&#36889;&#20491;&#36984;&#21934;&#12290;</p><p></p><p>&#26377;&#36259;&#30340;&#26159; <code>4445425547</code> &#36889;&#20018;&#25976;&#23383;&#22312; ASCII &#35041;&#27491;&#26159; DEBUG &#20116;&#20491;&#23383;&#27597;&#65307;&#25105;&#24478;&#25512;&#21451;&#20998;&#20139;&#30340;&#20919;&#30693;&#35672;&#24471;&#30693;&#65292;&#36889;&#20123; menu &#20854;&#23526;&#26159;&#30001; app &#25552;&#20379;&#65292;&#21482;&#26159;&#35731; AppKit &#25509;&#31649;&#65292;&#25152;&#20197;&#30070; app &#36681;&#24425;&#29699;&#26178;&#36889;&#20123;&#36984;&#21934;&#20063;&#26371;&#21205;&#24392;&#19981;&#24471;&#12290;</p><p><a href="https://x.com/unixzii/status/1777249992937447898">https://x.com/unixzii/status/1777249992937447898</a></p><h3><strong><a href="https://x.com/harlanhaskins/status/1778919822216048642">Swift on Game Boy Advance (GBA)</a></strong></h3><p>Apple &#24179;&#21488;&#29983;&#24907;&#22280;&#20839;&#26368;&#36817;&#27675;&#22285;&#22763;&#27683;&#20302;&#36855;&#65292;&#20294; Siwft &#22312;&#20854;&#23427;&#24179;&#21488;&#19978;&#21371;&#20805;&#28415;&#27963;&#21147;&#65292;&#19981;&#26039;&#26377;&#37239;&#28843;&#30340;&#26032;&#22039;&#35430;&#65292;&#32380;<a href="https://pofat.substack.com/p/74">&#21069;&#19968;&#26399;&#22312; Playdate &#19978;&#29992; Swift &#38283;&#30332;&#36938;&#25138;</a>&#24460;&#65292;&#20063;&#26377;&#20154;&#25104;&#21151;&#22320;&#22312; GBA &#23526;&#27231;&#19978;&#22519;&#34892; Swift &#30340;&#31243;&#24335;&#65292;&#32780;&#19988;&#30475;&#36215;&#20358; <a href="https://github.com/stuij/gba-llvm-devkit">GBA llvm devkit</a> &#24050;&#32147;&#34389;&#29702;&#22909;&#22823;&#22810;&#24037;&#20316;&#65292;Swift &#21482;&#35201;&#25552;&#20379; <code>_main</code> &#36914;&#20837;&#40670;&#21363;&#21487;&#12290;</p><p><a href="https://x.com/harlanhaskins/status/1778919822216048642">https://x.com/harlanhaskins/status/1778919822216048642</a></p><p></p><h3><strong><a href="https://apps.apple.com/gb/app/igba-gba-gbc-retro-emulator/id6482993626">GBA &#27169;&#25836;&#22120; iGBA &#25104;&#21151;&#19978;&#26550;&#65288;&#24190;&#20491;&#23567;&#26178;&#65289;</a></strong></h3><p>&#22312;&#27472;&#30431;&#25976;&#20301;&#24066;&#22580;&#27861;&#30340;&#35201;&#27714;&#19979;&#65292;Apple &#37323;&#20986;&#20102;&#26032;&#30340; App Store &#35215;&#21063;&#65292;&#20854;&#20013; 4.7 &#20801;&#35377;&#36938;&#25138;&#27169;&#25836;&#22120; app &#19978;&#26550;&#65292;&#36996;&#33021;&#22312; app &#20839;&#25552;&#20379;&#36938;&#25138;&#19979;&#36617;&#65292;&#30070;&#28982;&#21069;&#25552;&#26159;&#21512;&#27861;&#20839;&#23481;&#65292;&#30456;&#38364;&#36012;&#20219;&#33853;&#22312;&#38283;&#30332;&#32773;&#12290;</p><p>&#24456;&#24555;&#22320; App Store &#23601;&#20986;&#29694;&#20102;&#31532;&#19968;&#27454;&#27491;&#24335;&#19978;&#26550;&#30340;&#27169;&#25836;&#22120; - <a href="https://apps.apple.com/gb/app/igba-gba-gbc-retro-emulator/id6482993626">iGBA</a>&#65292;&#19981;&#36942;&#22312;&#36913;&#22577;&#30332;&#21002;&#26178;&#24050;&#32147;&#24478;&#26550;&#19978;&#28040;&#22833;&#65292;&#30446;&#21069;&#19981;&#30906;&#23450;&#19979;&#26550;&#21407;&#22240;&#28858;&#20309;&#12290;</p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#27794;&#24819;&#21040; 2023 &#24180; Obj-C &#25216;&#33021;&#20173;&#28982;&#24456;&#20540;&#37666;&#21602;&#65288;&#20013;&#20301;&#25976;&#34218;&#36039;&#28858;&#31532;&#19968;&#21517;&#65292;&#20358;&#28304; StackOverflow&#65289;</p><p><a href="https://x.com/steipete/status/1779132221024018830">https://x.com/steipete/status/1779132221024018830</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AMPo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ca23a2-8b05-411f-829e-07c472f7e7fd_830x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AMPo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ca23a2-8b05-411f-829e-07c472f7e7fd_830x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AMPo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ca23a2-8b05-411f-829e-07c472f7e7fd_830x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AMPo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ca23a2-8b05-411f-829e-07c472f7e7fd_830x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AMPo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ca23a2-8b05-411f-829e-07c472f7e7fd_830x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AMPo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ca23a2-8b05-411f-829e-07c472f7e7fd_830x2048.jpeg" width="830" height="2048" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2ca23a2-8b05-411f-829e-07c472f7e7fd_830x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2048,&quot;width&quot;:830,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#22294;&#29255;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#22294;&#29255;" title="&#22294;&#29255;" srcset="https://substackcdn.com/image/fetch/$s_!AMPo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ca23a2-8b05-411f-829e-07c472f7e7fd_830x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!AMPo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ca23a2-8b05-411f-829e-07c472f7e7fd_830x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!AMPo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ca23a2-8b05-411f-829e-07c472f7e7fd_830x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!AMPo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ca23a2-8b05-411f-829e-07c472f7e7fd_830x2048.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><strong>&#128466;&#65039; &#30772;&#36027;&#28165;&#21934;</strong></h2><p>&#26368;&#36817;&#38283;&#22987;&#28369;&#38634;&#65288;&#23565;&#65292;&#22312;&#36889;&#31278;&#22825;&#27683;&#19979;&#65281;&#65289;&#65292;&#36023;&#20102;&#38634;&#20855;&#65306;</p><ul><li><p>Capita Pathfinder Camber Snowboard&#65306;&#26377;&#25928;&#37628;&#37002;&#24456;&#38263;&#65292;&#21482;&#35201;&#30456;&#20449;&#26495;&#23376;&#65292;&#23427;&#30495;&#30340;&#26371;&#24171;&#39438;&#20056;&#32773;&#25214;&#36335;&#65292;&#23436;&#20840;&#19981;&#36000;&#20854;&#21517;&#65292;&#22312;&#26012;&#22369;&#19978;&#32102;&#20102;&#25105;&#24456;&#22810;&#20449;&#24515;&#12290;</p></li><li><p>ThirtyTwo TM-2 Double Boa Wide Snowboard Boot&#65306;&#23532;&#33139;&#20154;&#30340;&#36984;&#25799;&#19981;&#22810;&#65292;&#21512;&#33139;&#23601;&#35201;&#29645;&#24796;&#12290;&#23427;&#30340; heel support &#31995;&#32113;&#23565;&#25105;&#24456;&#23526;&#29992;&#65292;&#22240;&#28858;&#25105;&#23532;&#22312;&#21069;&#33139;&#25484;&#65292;&#21069;&#27573;&#21512;&#33139;&#24460;&#36275;&#36319;&#37096;&#26377;&#40670;&#39686;&#65292;&#32780;&#38795;&#23376;&#30340;&#35373;&#35336;&#26377;&#20491;&#21475;&#34955;&#21487;&#20197;&#22622;&#22666;&#29255;&#22635;&#20805;&#36889;&#27573;&#31354;&#38553;&#12290;</p></li></ul>]]></content:encoded></item><item><title><![CDATA[波報 #74 - 用 Swift 寫遊戲]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2024/03/11 - 2024/03/17]]></description><link>https://pofat.substack.com/p/74</link><guid isPermaLink="false">https://pofat.substack.com/p/74</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Mon, 18 Mar 2024 07:05:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fa64491c-cd43-457c-b22a-7a428e0fdbab_1200x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#22312; Apple &#33287;&#38283;&#30332;&#32773;&#38364;&#20418;&#20498;&#36864;&#24190;&#27493;&#30340;&#21516;&#26178;&#65292;Swift &#22312;&#38750;&#34315;&#26524;&#29983;&#24907;&#31995;&#20013;&#36328;&#20986;&#24040;&#22823;&#30340;&#19968;&#27493; - &#38283;&#30332;&#25484;&#27231;&#36938;&#25138;&#65281;</p><p>&#12298;<a href="https://pofat.substack.com/p/73">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://www.swift.org/blog/byte-sized-swift-tiny-games-playdate/">Byte-sized Swift: Building Tiny Games for the Playdate</a></strong></h3><p>&#22826;&#33288;&#22894;&#21862;&#65292;&#31455;&#28982;&#33021;&#29992; Swift &#22312;&#25484;&#27231;&#19978;&#38283;&#30332;&#36938;&#25138;&#65281;</p><p>Playdate &#26159;&#36938;&#25138;&#38283;&#30332;&#21830; <a href="https://store.steampowered.com/publisher/panic">Panic</a> &#22312; 2021 &#24180;&#25512;&#20986;&#30340;&#25079;&#33290;&#25484;&#27231;&#65292;&#29305;&#40670;&#20043;&#19968;&#26159;&#29992;&#12300;&#36681;&#21205;&#25163;&#26564;&#12301;&#20570;&#28858;&#25511;&#21046;&#26041;&#24335;&#12290;&#20182;&#20497;&#23478;&#26071;&#19979;&#26377;&#19981;&#23569;&#20778;&#31168;&#30340;&#23567;&#21697;&#36938;&#25138;&#65292;&#26368;&#26377;&#21517;&#30340;&#30070;&#23660; &#12300;Untitled Goose Game&#12301;&#12290;</p><p>Playdate &#25552;&#20379;C API &#38283;&#30332;&#36938;&#25138;&#65292;&#22823;&#22810;&#25976;&#36938;&#25138;&#30001; lua &#38283;&#30332;&#20197;&#30465;&#21435;&#21644; C &#25171;&#20132;&#36947;&#30340;&#32321;&#29795;&#31243;&#24207;&#65292;&#32780;&#34315;&#26524;&#24037;&#31243;&#24107; Rauhul Varma &#30475;&#21040; <a href="https://github.com/apple/swift-evolution/blob/main/visions/embedded-swift.md">Swift Embedded Language Mode</a> &#22312;&#36889;&#22602;&#30340;&#28507;&#21147;&#65292;&#20415;&#25630;&#20102;&#20841;&#20491; demo &#36938;&#25138;&#65292;&#20197;&#21450;&#23436;&#25972;&#30340;&#38283;&#30332;&#35373;&#23450;&#35498;&#26126;&#65292;&#35443;&#35211;<a href="https://github.com/apple/swift-playdate-examples">GitHub repo</a>&#12290;</p><p>&#21487;&#20197;&#22312;&#38283;&#30332;&#22818;&#24187;&#25033;&#29992;&#65288;aka &#36938;&#25138;&#65289;&#26178;&#20139;&#21463;&#20415;&#21033;&#30340;&#27867;&#22411;&#33287;enum &#31561;&#21151;&#33021;&#20006;&#23433;&#20840;&#22320;&#25805;&#20316;&#35352;&#25014;&#39636;&#65292;&#36889;&#26159; Swift &#22312;&#38750;&#34315;&#26524;&#29983;&#24907;&#31995;&#25033;&#29992;&#30340;&#19968;&#22823;&#27493;&#65281;&#65281;</p><p>&#23601;&#31639;&#20320;&#23565;&#36889;&#38936;&#22495;&#27794;&#33288;&#36259;&#65292;&#25991;&#35041;&#20063;&#26377;&#25506;&#35342;&#21040;&#24590;&#40636;&#29992; Swift &#22312;&#19981;&#24341;&#20837;&#25928;&#33021;&#25613;&#32791;&#30340;&#24773;&#27841;&#19979;&#25913;&#21892;&#21407;&#26412;&#30340; API&#65292;&#36889;&#20123;&#24605;&#24819;&#23565;&#19968;&#33324; Swift &#38283;&#30332;&#32773;&#20063;&#26377;&#24171;&#21161;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cHB3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94174a-ba78-443b-97c6-a38ab605ead8_1980x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cHB3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94174a-ba78-443b-97c6-a38ab605ead8_1980x1620.png 424w, https://substackcdn.com/image/fetch/$s_!cHB3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94174a-ba78-443b-97c6-a38ab605ead8_1980x1620.png 848w, https://substackcdn.com/image/fetch/$s_!cHB3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94174a-ba78-443b-97c6-a38ab605ead8_1980x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!cHB3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94174a-ba78-443b-97c6-a38ab605ead8_1980x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cHB3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94174a-ba78-443b-97c6-a38ab605ead8_1980x1620.png" width="1456" height="1191" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d94174a-ba78-443b-97c6-a38ab605ead8_1980x1620.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1191,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cHB3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94174a-ba78-443b-97c6-a38ab605ead8_1980x1620.png 424w, https://substackcdn.com/image/fetch/$s_!cHB3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94174a-ba78-443b-97c6-a38ab605ead8_1980x1620.png 848w, https://substackcdn.com/image/fetch/$s_!cHB3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94174a-ba78-443b-97c6-a38ab605ead8_1980x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!cHB3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d94174a-ba78-443b-97c6-a38ab605ead8_1980x1620.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#38918;&#36947;&#19968;&#25552;&#65292;&#27442;&#29992; Swift &#38283;&#30332;2D &#21644; 3D &#36938;&#25138;&#26377; <a href="https://github.com/migueldeicaza/SwiftGodot">SwiftGodot</a> &#36889;&#20491;&#36984;&#25799;&#65292;&#26377;&#33288;&#36259;&#30340;&#25512;&#34214;&#35264;&#30475;&#36889;&#24433;&#29255;&#65306;</p><div id="youtube2-tzt36EGKEZo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;tzt36EGKEZo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/tzt36EGKEZo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p></p><h3><strong><a href="https://developer.apple.com/news/">Web Distribution in EU</a></strong></h3><p>Apple &#28858;&#36981;&#23432; DMA &#65288;&#25976;&#20301;&#24066;&#22580;&#27861;&#26696;&#65289;&#20877;&#20844;&#20296;<a href="https://developer.apple.com/news/">&#26032; app &#30332;&#20296;&#26041;&#24335;</a>&#65292;<a href="https://developer.apple.com/support/web-distribution-eu/">&#36039;&#26684;&#31526;&#21512;&#30340;&#38283;&#30332;&#32773;</a>&#21487;&#20197;&#22312;&#33258;&#24049;&#30340;&#32178;&#31449;&#19978;&#30332;&#20296; app&#65292;&#21482;&#26159;&#35201;&#36879;&#36942;&#31245;&#24460;&#37323;&#20986;&#30340; API &#65288;&#25033;&#35442;&#22312; Apple Store Connect &#24213;&#19979;&#65289; &#12290;&#36039;&#26684;&#26041;&#38754;&#21063;&#33287;&#24190;&#36913;&#21069;&#20844;&#20296;&#25955;&#20296;<a href="https://developer.apple.com/support/alternative-app-marketplace-in-the-eu/">&#26367;&#20195; App Store &#30340;&#36039;&#26684;</a>&#30456;&#21516;&#65292;&#38283;&#30332;&#32773;&#24517;&#38920;&#26159; Apple Developer Program &#30340;&#20778;&#33391;&#25104;&#21729;&#20841;&#24180;&#20197;&#19978;&#65292;&#19988;&#22312;&#36942;&#21435;&#30340;&#19968;&#24180;&#20013;&#65292;&#22312; iOS &#24179;&#21488;&#27472;&#30431;&#21312;&#25793;&#26377;<strong>&#36229;&#36942;&#19968;&#30334;&#33836;&#27425;&#39318;&#27425;&#23433;&#35037;&#30340; app </strong>&#12290;</p><p>&#28982;&#32780;&#36229;&#36942;&#19968;&#30334;&#33836;&#27425;&#24460;&#30340;&#27599;&#39318;&#27425;&#19979;&#36617;&#38656;&#35201;&#32371;&#20132; &#8364;0.5 &#30340; Core Technology Fee&#65292;&#20063;&#23601;&#26159;&#19981;&#26371;&#26377;&#20813;&#36027;&#30332;&#20296;&#30340;&#26041;&#26696;&#65292;&#22909;&#20491; Apple&#12290;</p><p>&#21407;&#25991;&#22312;&#27492;&#65306; <a href="https://developer.apple.com/support/web-distribution-eu/">https://developer.apple.com/support/web-distribution-eu/</a></p><p></p><h3><strong><a href="https://github.com/Wooder/ios_17_required_reason_api_scanner">Scan for Possible Use of "iOS required reason API"</a></strong></h3><p><a href="https://developer.apple.com/documentation/bundleresources/privacy_manifest_files">Privacy manifest</a> &#24478;&#21435;&#24180; WWDC &#23601;&#23459;&#20296;&#20170;&#24180;&#26371;&#25104;&#28858; app &#36890;&#36942;&#23529;&#26680;&#30340;&#24517;&#35201;&#25991;&#20214;&#65292;&#20294;&#27515;&#32218;&#39493;&#21205;&#38283;&#30332;&#30340;&#38283;&#30332;&#32773;&#20497;&#25033;&#35442;&#26368;&#36817;&#25165;&#26371;&#38283;&#22987;&#21205;&#36215;&#20358;&#12290;&#22240;&#28858; 3&#26376;13&#26085;&#38283;&#22987;&#65292;&#22914;&#26524;&#19978;&#20659;&#25110;&#26356;&#26032;&#25033;&#29992;&#31243;&#24207;&#32780;&#26410;&#25552;&#20379;&#23565;&#25033;&#29305;&#23450;API&#30340;&#20351;&#29992;&#29702;&#30001;&#65292;&#23559;&#26371;&#38283;&#22987;&#25910;&#21040;&#35686;&#21578;&#37109;&#20214;&#12290;&#32780;&#24478;5&#26376;1&#26085;&#36215;&#65292;&#21063;&#38656;&#35201;&#20808;&#25552;&#20379;&#20351;&#29992;&#29305;&#23450;API&#30340;&#21512;&#27861;&#29702;&#30001;&#65292;&#25165;&#33021;&#19978;&#20659;&#26032;&#30340;&#25033;&#29992;&#20108;&#36914;&#20301;&#25991;&#20214;&#12290;</p><p>&#36889;&#35041;&#26377;&#20491;&#24456;&#26834;&#30340;<a href="https://github.com/Wooder/ios_17_required_reason_api_scanner">&#23567;&#24037;&#20855;</a>&#21487;&#20197;&#25475;&#30596;&#20320;&#30340;&#23560;&#26696;&#26159;&#21542;&#20351;&#29992;&#20102;&#38656;&#35201;&#20351;&#29992;&#29702;&#30001;&#30340; API&#65292;&#35041;&#38754;&#25552;&#20379;&#20102;&#25475;&#30596;&#25991;&#23383;&#30340;&#35486;&#27861;&#65292;&#20197;&#21450;&#25475;&#30596;&#20108;&#36914;&#20301;&#27284;&#26696;&#30340;&#35486;&#27861;&#65288;&#36879;&#36942; nm&#65289;&#12290;</p><p></p><h3><strong><a href="https://blogs.oracle.com/java/post/java-on-macos-14-4">Java user on Apple silicon should consider delaying macOS 14.4 Update</a></strong></h3><p>macOS 14.4 &#22312;&#27491;&#24335;&#29256;&#24341;&#20837;&#20102;&#26371;&#35731; Java &#25033;&#29992;&#38275;&#36864;&#30340; issue &#65292;&#24433;&#38911;&#31684;&#22285;&#24456;&#22823;&#65292;&#21407;&#26412; OS &#22312;&#23384;&#21462;&#34987;&#20445;&#35703;&#35352;&#25014;&#39636;&#20301;&#22336;&#26178;&#26371;&#36865;&#20986; SIGBUS &#25110; SIGSEGV&#65292;&#20294; 14.4 &#27491;&#24335;&#29256;&#25913;&#25104; SIGKILL&#65292;&#25152;&#20197;&#22519;&#34892;&#32210;&#27794;&#26377;&#27231;&#26371;&#20570;&#20219;&#20309;&#34389;&#29702;&#20415;&#30452;&#25509;&#32066;&#27490;&#12290;</p><p>Java &#20351;&#29992;&#32773;&#22312;&#36889;&#20491;&#21839;&#38988;&#20462;&#24489;&#21069;&#35531;&#19977;&#24605; macOS 14.4 &#30340;&#26356;&#26032;&#12290;</p><p><a href="https://blogs.oracle.com/java/post/java-on-macos-14-4">https://blogs.oracle.com/java/post/java-on-macos-14-4</a></p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#38928;&#35373;&#30340;&#21147;&#37327;&#65288;&#22294;&#28858; Brave &#28687;&#35261;&#22120;&#22312; EU &#38283;&#25918;&#26356;&#25913;&#38928;&#35373;&#28687;&#35261;&#22120;&#30340;&#23433;&#35037;&#25976;&#25104;&#38263;&#65289;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://x.com/brave/status/1767643225773215918?s=20" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2RTC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc0f402-6bdf-46f5-b34b-0e964d42cdc7_599x500.png 424w, https://substackcdn.com/image/fetch/$s_!2RTC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc0f402-6bdf-46f5-b34b-0e964d42cdc7_599x500.png 848w, https://substackcdn.com/image/fetch/$s_!2RTC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc0f402-6bdf-46f5-b34b-0e964d42cdc7_599x500.png 1272w, https://substackcdn.com/image/fetch/$s_!2RTC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc0f402-6bdf-46f5-b34b-0e964d42cdc7_599x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2RTC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc0f402-6bdf-46f5-b34b-0e964d42cdc7_599x500.png" width="599" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccc0f402-6bdf-46f5-b34b-0e964d42cdc7_599x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:599,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#22294;&#29255;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://x.com/brave/status/1767643225773215918?s=20&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#22294;&#29255;" title="&#22294;&#29255;" srcset="https://substackcdn.com/image/fetch/$s_!2RTC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc0f402-6bdf-46f5-b34b-0e964d42cdc7_599x500.png 424w, https://substackcdn.com/image/fetch/$s_!2RTC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc0f402-6bdf-46f5-b34b-0e964d42cdc7_599x500.png 848w, https://substackcdn.com/image/fetch/$s_!2RTC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc0f402-6bdf-46f5-b34b-0e964d42cdc7_599x500.png 1272w, https://substackcdn.com/image/fetch/$s_!2RTC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccc0f402-6bdf-46f5-b34b-0e964d42cdc7_599x500.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#36229;&#24819;&#36023;&#65281;&#65281;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://twitter.com/sackchief/status/1768026910070632468" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fvcb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690ab32f-d338-4703-8865-9731d735fc0d_1808x1807.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fvcb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690ab32f-d338-4703-8865-9731d735fc0d_1808x1807.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fvcb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690ab32f-d338-4703-8865-9731d735fc0d_1808x1807.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fvcb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690ab32f-d338-4703-8865-9731d735fc0d_1808x1807.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fvcb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690ab32f-d338-4703-8865-9731d735fc0d_1808x1807.jpeg" width="1456" height="1455" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/690ab32f-d338-4703-8865-9731d735fc0d_1808x1807.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1455,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#22294;&#29255;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://twitter.com/sackchief/status/1768026910070632468&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#22294;&#29255;" title="&#22294;&#29255;" srcset="https://substackcdn.com/image/fetch/$s_!fvcb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690ab32f-d338-4703-8865-9731d735fc0d_1808x1807.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fvcb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690ab32f-d338-4703-8865-9731d735fc0d_1808x1807.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fvcb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690ab32f-d338-4703-8865-9731d735fc0d_1808x1807.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fvcb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690ab32f-d338-4703-8865-9731d735fc0d_1808x1807.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><strong>&#128466;&#65039; &#30772;&#36027;&#28165;&#21934;</strong></h2><p><a href="https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwjssdeynP2EAxWr-zgGHRYhCL4QFnoECCcQAQ&amp;url=https%3A%2F%2Fwww.ubisoft.com%2Fzh-tw%2Fgame%2Fprince-of-persia%2Fthe-lost-crown&amp;usg=AOvVaw3ALfT5AfQ9KUoTdjaZbMHS&amp;opi=89978449">&#27874;&#26031;&#29579;&#23376;&#65306;&#22833;&#33853;&#29579;&#20896;</a> - &#38614;&#28982;&#30059;&#38754;&#39636;&#39511;&#19978;&#36996;&#26159;&#22312; PS5 &#26368;&#26834;&#65292;&#19981;&#36942;&#39006;&#37504;&#27827;&#24801;&#39764;&#22478;&#36938;&#25138;&#23601;&#26159;&#35201;&#22312; Switch &#19978;&#29609;&#21834;&#65281; &#30446;&#21069;&#36938;&#29609;&#21313;&#23567;&#26178;&#65292;&#21205;&#20316;&#39636;&#39511;&#24456;&#22909;&#65292;&#25136;&#39717;&#39006;&#20284;&#38587;&#29408;&#65292;&#20808;&#29087;&#24713;&#25973;&#20154;&#20986;&#25307;&#20877;&#25340;&#26684;&#27284;&#30340;&#25104;&#23601;&#24863;&#38935;&#20196;&#20154;&#28415;&#36275;&#65288;&#38598;&#27683;&#24456;&#24555;&#65292;&#25645;&#37197;&#35703;&#36523;&#31526;&#26377;&#20854;&#23427; buff&#65289;&#65292;&#20173;&#26377;&#20123;&#22914;&#20659;&#36865;&#40670;&#22826;&#23569;&#30340;&#23567;&#32570;&#40670;&#65292;&#25972;&#39636;&#26247;&#19981;&#25513;&#29788;&#65292;&#29245;&#24555;&#65281;</p>]]></content:encoded></item><item><title><![CDATA[波報 #73 - Apple 的 EU 感冒]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2024/03/04 - 2024/03/10]]></description><link>https://pofat.substack.com/p/73</link><guid isPermaLink="false">https://pofat.substack.com/p/73</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Mon, 11 Mar 2024 09:00:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6L2n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#19978;&#36913;&#25105;&#36208;&#21040;&#21738;&#38632;&#23601;&#19979;&#21040;&#21738;&#65292;&#25105;&#30495;&#30340;&#26159;&#38632;&#31070;&#21558;&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/p/72">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://www.apple.com/newsroom/2024/03/the-app-store-spotify-and-europes-thriving-digital-music-market/">Apple&#65306;&#27472;&#30431;&#21741;&#21908;</a></strong></h3><p>Apple &#19978;&#36913;&#22312;&#27472;&#30431;&#21312;&#25472;&#36215;&#20841;&#38499;&#19981;&#23567;&#30340;&#39080;&#27874;&#65292;&#22914;&#21516;&#27599;&#24180; iPhone &#30332;&#34920;&#65292;&#26524;&#31881;&#26524;&#40657;&#20497;&#20986;&#31840;&#21508;&#25793;&#20854;&#38499;&#29151;&#65292;&#36523;&#28858;&#34315;&#26524;&#29983;&#24907;&#31995;&#38283;&#30332;&#30340;&#38283;&#30332;&#32773;&#65292;&#25105;&#23565;&#34315;&#26524;&#30340;&#28317;&#36890;&#24907;&#24230;&#24863;&#21040;&#21453;&#24863;&#65292;&#30050;&#31455;&#23567;&#31038;&#30044;&#36305;&#21435;&#20570; indie &#23601;&#26159;&#19981;&#24819;&#20877;&#22900;&#20102;&#65292;&#35912;&#26009; Apple &#20173;&#25226;&#38283;&#30332;&#32773;&#30070;&#36786;&#22900;&#12290;</p><p>&#19978;&#36913; EU &#23565;&#26044; Apple &#38283;&#32624;&#36817; 20 &#20740;&#32654;&#20803;&#30340;&#21453;&#22751;&#26039;&#32624;&#27454;&#65292;&#21407;&#22240;&#26159;&#23565;&#38899;&#27138;&#20018;&#27969;&#26381;&#21209;&#21830;&#28651;&#29992; App Store &#35215;&#21063;&#65288;&#22914;&#31105;&#27490;&#23566;&#36092; IPA &#22806;&#30340;&#20184;&#27454;&#26041;&#24335;&#65289;&#65292;&#35009;&#27770;&#19968;&#20986; Apple &#36805;&#36895;&#22320;&#22238;&#25033;&#20102;&#19968;&#31687;<a href="https://www.apple.com/newsroom/2024/03/the-app-store-spotify-and-europes-thriving-digital-music-market/">&#26032;&#32862;&#31295;</a>&#65292;&#35380;&#35498;&#33879; Apple &#26159;&#22914;&#20309;&#22320;&#28858; Spotify &#30340;&#25104;&#21151;&#20570;&#20986;&#20102;&#22810;&#23569;&#36002;&#29563;&#32780; Spotify &#20998;&#25991;&#26410;&#20184;&#12290;&#25105;&#30340;&#31532;&#19968;&#24863;&#21463;&#26159; App Store &#38936;&#23566;&#23652;&#35442;&#25563;&#20102;&#65292;&#36889;&#27171;&#30340;&#24907;&#24230;&#24439;&#24447;&#23565;&#38283;&#30332;&#32773;&#34920;&#36948;&#65306;&#12300;&#19978;&#26550; app &#23601;&#26159;&#27424; Apple &#20154;&#24773;&#65292;&#12301;&#12290;</p><p>&#21478;&#19968;&#20214;&#20107;&#23601;&#26159; Apple &#33287; Epic &#26410;&#23436;&#30340;&#25136;&#29229;&#65292;Apple &#20808;&#32066;&#27490; Epic &#30340;&#38283;&#30332;&#32773;&#24115;&#34399;&#65292;&#20854;&#20013;&#19968;&#20491;&#31455;&#26159; Tim Sweeney &#25209;&#35413; Apple &#30340;<a href="https://x.com/TimSweeneyEpic/status/1762243725533532587?s=20">&#25512;&#25991;</a>&#65292;48&#23567;&#26178;&#24460;&#21448;&#25215;&#35582;&#26371;&#24489;&#27963;&#35442;&#24115;&#34399;&#65292;&#22240;&#28858; Epic &#34920;&#31034;&#26371;&#29031;&#35215;&#30697;&#20358;&#65292;Epic Game Store app &#20043;&#36335;&#30340;&#38556;&#31001;&#24050;&#34987;&#20877;&#27425;&#28165;&#38500;&#12290;&#28331;&#39336;&#25552;&#37266;&#65292;EU &#30340;&#20351;&#29992;&#32773;&#22914;&#26524;&#38626;&#38283; EU&#65292;&#19968;&#27573;&#26178;&#38291;&#24460;&#65288;&#26368;&#22810; 30 &#22825;&#65289;&#23559;&#28961;&#27861;&#20877;&#24478;&#38750; App Store &#30340;&#31649;&#36947;&#29554;&#24471;&#26356;&#26032;&#65292;&#35443;&#35211; <a href="https://support.apple.com/en-gb/118110">EU &#26367;&#20195;&#24066;&#22580;&#35215;&#21063;</a>&#12290;</p><p></p><h3><strong><a href="https://www.swift.org/blog/swift-5.10-released/">Swift 5.10 &#27491;&#24335;&#30332;&#20296;</a></strong></h3><p>&#38614;&#33879; Xcode 15.3 &#65292;Swift 5.10 &#20063;&#19968;&#20341;&#27491;&#24335;&#25512;&#20986;&#65292;&#20854;&#20013;&#26368;&#38364;&#37749;&#30340;&#26356;&#26032;&#26159;&#23436;&#21892;&#20102; full data isolation &#30340;&#27298;&#26597;&#65292;&#20063;&#25552;&#20379;&#20102; opt-out &#23436;&#20840;&#27298;&#26597;&#30340;&#38364;&#37749;&#23383;&#65292;&#35731;&#22823;&#23478;&#22312; Swift 6 &#21040;&#20358;&#20197;&#21069;&#21487;&#20197;&#20808;&#20570;&#20123;&#36681;&#31227;&#65292;&#20998;&#25955;&#30171;&#33510;&#12290;</p><p>&#36889;&#20063;&#26159; Swift 5 &#30340;&#26368;&#32066;&#29256;&#26412;&#65292;&#25509;&#19979;&#20358;&#23601;&#26371;&#26159; Swift 6 &#30340;&#19990;&#20195;&#20102;&#12290;</p><p><a href="https://www.swift.org/blog/swift-5.10-released/">https://www.swift.org/blog/swift-5.10-released/</a></p><p></p><h3><strong><a href="https://forums.swift.org/t/our-journey-with-swift-thus-far-some-notes-and-reflections/70510/1">A journey with Swift on Linux</a></strong></h3><p>&#19968;&#20491;&#22296;&#38538;&#36984;&#25799;&#20197; Swift &#37325;&#23531;&#20182;&#20497;&#30340; server side &#31243;&#24335;&#65288;&#36000;&#36012;&#36879;&#36942; IPC &#25509;&#21463;&#38656;&#27714;&#30340;&#31243;&#24335;&#65292;&#20006;&#38750;&#25105;&#20497;&#19968;&#33324;&#35469;&#30693;&#30340; HTTP server&#65289;&#65292;&#21478;&#19968;&#32068; Swift &#22312;&#38750; Apple &#24179;&#21488;&#19978;&#30340;&#38283;&#36335;&#20808;&#37586;&#65292;&#20182;&#20497;&#30340;&#32147;&#39511;&#20998;&#20139;&#38750;&#24120;&#35443;&#32048;&#65292;&#22522;&#26412;&#19978;&#23601;&#26159; Swift &#35486;&#35328;&#29694;&#20170;&#30340;&#25972;&#39636;&#21839;&#38988;&#21152;&#19978;&#38750; Apple &#24179;&#21488;&#30340;&#25903;&#25588;&#24230;&#21839;&#38988;&#12290;</p><p>Swift &#35486;&#35328;&#26412;&#36523;&#30340;&#29694;&#20195;&#21151;&#33021;&#23531;&#36215;&#20358;&#12300;&#22823;&#22810;&#12301;&#24456;&#20139;&#21463;&#65292;&#31777;&#28500;&#30340;&#35486;&#27861;&#21644;&#26041;&#20415;&#30340;&#25844;&#23637;&#20197;&#21450;&#22196;&#23494;&#30340;&#23433;&#20840;&#24615;&#65292;&#21487;&#26159;&#20598;&#29246;&#26371;&#25758;&#21040;&#19981;&#26126;&#30340;&#25928;&#33021;&#21839;&#38988;&#65292;&#27794;&#36935;&#21040;&#39080;&#24179;&#28010;&#38748;&#65292;&#25758;&#19978;&#20102;&#20415;&#26159;&#39514;&#28120;&#39405;&#28010;&#65292;&#28982;&#24460;&#37679;&#35492;&#30340;&#35386;&#26039;&#36039;&#35338;&#20063;&#19981;&#22816;&#28165;&#26970;&#65292; Swift &#22296;&#38538;&#25509;&#19979;&#20358;&#30340;&#39318;&#35201;&#20219;&#21209;&#25033;&#35442;&#26159;&#25913;&#21892;&#36889;&#20123;&#30171;&#33510;&#30340;&#40657;&#31665;&#39636;&#39511;&#12290;</p><p><a href="https://forums.swift.org/t/our-journey-with-swift-thus-far-some-notes-and-reflections/70510/1">https://forums.swift.org/t/our-journey-with-swift-thus-far-some-notes-and-reflections/70510/1</a></p><p></p><h3><strong><a href="https://speakinginswift.substack.com/p/swift-tooling-windows-edition">Swift Tooling: Windows Edition</a></strong></h3><p>&#20570;&#20986; Arc &#28687;&#35261;&#22120;&#30340; <a href="https://thebrowser.company/">The Browser Company</a> &#24456;&#26089;&#23601; all in Swift&#65292;&#22312;&#38750; Apple &#24179;&#21488;&#19978;&#20570;&#38283;&#36335;&#20808;&#37586;&#65292;&#20182;&#20497;&#25972;&#29702;&#35201;&#22312; Windows &#29992; Swift &#38283;&#30332;&#25152;&#38656;&#35201;&#30340;&#24037;&#20855;&#32068;&#65292;&#24478;&#23531;&#30908;&#12289;&#32232;&#35695;&#12289;&#28204;&#35430;&#21040; debug &#30342;&#26377;&#21253;&#25324;&#65292;&#28858;&#30526;&#29983;&#20497;&#28187;&#23569;&#21315;&#37324;&#20900;&#26505;&#36335;&#12290;</p><p>&#32780; Swift &#22312; Windows &#19978;&#38283;&#30332;&#29986;&#21697;&#21040;&#24213;&#21487;&#19981;&#21487;&#34892;&#65292;&#25991;&#31456;&#38283;&#38957;&#23601;&#32102;&#20986;&#20102;&#32080;&#35542;&#65306;</p><blockquote><p>Swift on Windows is production ready, today</p></blockquote><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:142081368,&quot;url&quot;:&quot;https://speakinginswift.substack.com/p/swift-tooling-windows-edition&quot;,&quot;publication_id&quot;:1964255,&quot;publication_name&quot;:&quot;Speaking in Swift by The Browser Company&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32407ebd-f53e-4172-aa92-d2ea9f6fadee_1024x1024.png&quot;,&quot;title&quot;:&quot;Swift Tooling: Windows Edition&quot;,&quot;truncated_body_text&quot;:&quot;Swift on Windows is production ready, today. We&#8217;ve talked before about how we run Swift code on Windows, but we haven&#8217;t talked about how we write Swift code on Windows. Windows is already a mature development environment for authoring Swift code, and it&#8217;s only getting better. He&#8230;&quot;,&quot;date&quot;:&quot;2024-03-07T15:51:33.620Z&quot;,&quot;like_count&quot;:14,&quot;comment_count&quot;:1,&quot;bylines&quot;:[{&quot;id&quot;:22529234,&quot;name&quot;:&quot;The Browser Company&quot;,&quot;handle&quot;:&quot;browsercompany&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/6678cf9f-ae16-48fb-82d0-12d213c09703_100x100.png&quot;,&quot;bio&quot;:&quot;We're building Arc - a better way to use the internet.\n\nGet Arc on arc.net.&quot;,&quot;profile_set_up_at&quot;:&quot;2021-05-21T16:53:48.883Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:196830,&quot;user_id&quot;:22529234,&quot;publication_id&quot;:239564,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:239564,&quot;name&quot;:&quot;Keeping Tabs by The Browser Company&quot;,&quot;subdomain&quot;:&quot;browsercompany&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;We&#8217;re building a better way to use the internet.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ae30454e-806f-4812-9869-f46e399e2730_1024x1024.png&quot;,&quot;author_id&quot;:22529234,&quot;theme_var_background_pop&quot;:&quot;#0C50FF&quot;,&quot;created_at&quot;:&quot;2020-12-15T17:54:13.062Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;The Browser Company&quot;,&quot;copyright&quot;:&quot;The Browser Company&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}},{&quot;id&quot;:1956269,&quot;user_id&quot;:22529234,&quot;publication_id&quot;:1964255,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:1964255,&quot;name&quot;:&quot;Speaking in Swift by The Browser Company&quot;,&quot;subdomain&quot;:&quot;speakinginswift&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Sharing our technical learnings as we build Arc on Windows - in Swift. &quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32407ebd-f53e-4172-aa92-d2ea9f6fadee_1024x1024.png&quot;,&quot;author_id&quot;:22529234,&quot;theme_var_background_pop&quot;:&quot;#25BD65&quot;,&quot;created_at&quot;:&quot;2023-09-19T21:09:34.862Z&quot;,&quot;rss_website_url&quot;:null,&quot;email_from_name&quot;:&quot;The Browser Company&quot;,&quot;copyright&quot;:&quot;The Browser Company&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://speakinginswift.substack.com/p/swift-tooling-windows-edition?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!orrI!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32407ebd-f53e-4172-aa92-d2ea9f6fadee_1024x1024.png" loading="lazy"><span class="embedded-post-publication-name">Speaking in Swift by The Browser Company</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Swift Tooling: Windows Edition</div></div><div class="embedded-post-body">Swift on Windows is production ready, today. We&#8217;ve talked before about how we run Swift code on Windows, but we haven&#8217;t talked about how we write Swift code on Windows. Windows is already a mature development environment for authoring Swift code, and it&#8217;s only getting better. He&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 14 likes &#183; 1 comment &#183; The Browser Company</div></a></div><p></p><h3><strong><a href="https://www.swift.org/blog/pack-iteration/">Swift Parameter Packs &#23448;&#26041;&#25945;&#23416;</a></strong></h3><p>Variadic generic &#26159; Swift 6.0 &#35041;&#30340;&#37325;&#22823;&#26032;&#21151;&#33021;&#65292;&#23448;&#26041;&#29992;&#30340;&#21517;&#35422;&#26159; Parameter Packs&#65292;&#36889;&#26159;&#19968;&#20491;&#22823;&#23478;&#21628;&#21898;&#20197;&#20037;&#30340;&#21151;&#33021;&#65292;&#19981;&#36942;&#35373;&#35336;&#20986;&#20358;&#30340; API &#38935;&#28858;&#35079;&#38620;&#65292;&#25152;&#20197;&#23448;&#26041;&#20063;&#25552;&#26089;&#25512;&#20986;&#30456;&#38364;&#25945;&#23416;&#65292;&#24314;&#35696;&#22823;&#23478;&#26089;&#40670;&#38283;&#22987;&#30740;&#31350;&#24590;&#40636;&#19978;&#25163;&#12290;</p><p><a href="https://www.swift.org/blog/pack-iteration/">https://www.swift.org/blog/pack-iteration/</a></p><p></p><h3><strong><a href="https://www.polpiella.dev/how-to-generate-swift-interfaces-from-pkl-files-with-spm-plugins">Pkl as CodeGen</a></strong></h3><p>&#21069;&#38499;&#23376; Apple &#30332;&#34920;&#20102;&#39006;&#22411;&#23433;&#20840;&#30340; configuration &#31243;&#24335;&#35486;&#35328; <a href="https://github.com/apple/pkl">Pkl</a>&#65292;&#20854;&#20063;&#21487;&#20197;&#29992;&#20358;&#29983;&#25104; Swift &#31243;&#24335;&#30908;&#65292;&#24456;&#36969;&#21512;&#20570;&#28858; codegen &#30340;&#24037;&#20855;&#65292;&#21033;&#29992; SPM command plugin &#20358;&#25171;&#21253;&#29983;&#30908;&#26178;&#35201;&#19979;&#30340;&#25351;&#20196;&#21487;&#20197;&#20351;&#20854;&#26356;&#23481;&#26131;&#20351;&#29992;&#65292;&#35443;&#35211;<a href="https://www.polpiella.dev/how-to-generate-swift-interfaces-from-pkl-files-with-spm-plugins">&#25945;&#23416;&#25991;</a>&#12290;</p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/se-0425-128-bit-integer-types/70456">[SE-0425] 128-bit Integer Types</a></strong></h3><p><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0425-int128.md#future-directions">SE-0425</a>&#26159;&#20491;&#21934;&#32020;&#30340;&#25552;&#26696;&#65292;&#23601;&#26159;&#22312;&#25972;&#25976;&#23478;&#26063;&#20013;&#26032;&#22686; 128-bit &#23532;&#30340;&#25972;&#25976;&#65292;&#38614;&#28982;&#26159;&#20491;&#23567;&#30526;&#38656;&#27714;&#65292;&#38500;&#20102; Swift &#22806;&#22823;&#22810;&#25976;&#30340;&#31243;&#24335;&#35486;&#35328;&#37117;&#26377;&#25903;&#25588;&#65292;&#27794;&#36947;&#29702;&#19981;&#36319;&#19978;&#12290;&#20854;&#20171;&#38754;&#23436;&#20840;&#30001;&#23427;&#25152;&#32380;&#25215;&#30340; protocols &#27193;&#25152;&#27770;&#23450;&#65292;&#22914;&#26524;&#20320;&#19981;&#28165;&#26970;&#36889;&#20123; protocols &#24185;&#22043;&#29992;&#30340;&#65292;<a href="https://github.com/apple/swift-evolution/blob/main/proposals/0104-improved-integers.md">SE-0104</a> &#26377;&#24456;&#22909;&#30340;&#22294;&#31034;&#35498;&#26126;&#25972;&#25976;&#30340; protocol &#32080;&#27083;&#27193;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6L2n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6L2n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png 424w, https://substackcdn.com/image/fetch/$s_!6L2n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png 848w, https://substackcdn.com/image/fetch/$s_!6L2n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png 1272w, https://substackcdn.com/image/fetch/$s_!6L2n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6L2n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png" width="1456" height="855" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:855,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6L2n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png 424w, https://substackcdn.com/image/fetch/$s_!6L2n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png 848w, https://substackcdn.com/image/fetch/$s_!6L2n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png 1272w, https://substackcdn.com/image/fetch/$s_!6L2n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c88ba72-83c4-4a4d-b1a7-61b3cde79e88_1604x942.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#23526;&#20570; 128-bit &#65288;&#21363; 16&#20491;&#20301;&#20803;&#23532;&#24230;&#65289;&#30340;&#25972;&#25976;&#26377;&#20841;&#31278;&#26041;&#24335;&#65292;&#19968;&#20358;&#26159;&#21033;&#29992; C23 &#27161;&#28310;&#24341;&#20837;&#30340; <code>_BitInt(N)</code> (N&#65309;128) &#65292;&#21478;&#19968;&#20491;&#21063;&#26159;&#38750;&#27491;&#24335;&#20294;&#24291;&#27867;&#22320;&#34987;&#20351;&#29992;&#30340; <code>__int128_t</code> &#33287; <code>__uint128_t</code>&#12290;&#30001;&#26044; clang &#35041;&#23526;&#20570;&#30340; <code>_BitInt(N)</code> &#22312; x86 &#25110; arm64 &#23565;&#40778;&#30340;&#20301;&#20803;&#25976;&#37117;&#26159; 8 &#65288;&#29702;&#24819;&#19978;&#25033;&#35442;&#26159; 16&#65289;&#65292;&#19988;&#20854; ABI &#30340;&#26410;&#20358;&#26041;&#21521;&#20173;&#19981;&#26126;&#30906;&#65292;&#20351;&#29992;&#24050;&#26222;&#36941;&#20351;&#29992;&#30340; <code>__int128_t</code> &#26159;&#26356;&#23526;&#38555;&#30340;&#23526;&#20316;&#26041;&#21521;&#65292;&#22240;&#27492; <code>Int128</code> &#35041;&#30340;&#20540;&#20415;&#30452;&#25509;&#20351;&#29992; <code>BuiltIn.Int128</code> &#36889;&#22411;&#21029;&#65288;&#23565;&#25033; <code>__int128_t</code>&#65289;&#12290;&#20351;&#29992; <code>_BitInt(N)</code> &#29702;&#35542;&#19978;&#33021;&#30452;&#25509;&#26032;&#22686;&#19968;&#22266;&#23450;&#20219;&#24847;&#23532;&#24230;&#30340;&#27867;&#22411;&#25972;&#25976;&#65292;&#21487;&#24796;&#36889;&#26377;&#24453;&#24213;&#23652; ABI &#30340;&#26410;&#20358;&#26041;&#21521;&#30906;&#31435;&#12290;</p><p>&#21478;&#22806;&#26377;&#20841;&#20214;&#38283;&#30332;&#32773;&#38656;&#30041;&#24847;&#30340;&#20107;&#65292;&#19968;&#26159; <code>Codable</code> &#30340;&#23526;&#20570;&#65292;&#22240;&#22823;&#22810;&#29694;&#23384; encoder/decoder &#20006;&#19981;&#25903;&#25588; 128-bit &#25972;&#25976;&#65292;&#30446;&#21069;&#25505;&#29992;&#19968;&#23565; 64-bit &#25972;&#25976;&#20358;&#36914;&#34892; encoding &#25110; decoding&#65307;&#21478;&#22806;&#21063;&#26159;&#19981;&#25903;&#25588; NSNumber &#30340;&#27211;&#25509;&#65292;&#20294;&#36889;&#26159;&#25972;&#25976;&#39006;&#22411;&#30340;&#39318;&#20491;&#12300;&#29305;&#20363;&#12301;&#65292;&#26410;&#20358; Swift &#26371;&#20877;&#20840;&#38754;&#27298;&#35222;&#26356;&#19968;&#33268;&#24615;&#30340;&#38617;&#37002;&#38364;&#20418;&#12290;</p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#21482;&#26159;&#24819;&#20998;&#20139; Old man yells at cloud &#65292;&#22909;&#22909;&#31505;&#65288;&#25913;&#33258; The Simpsons S13E13&#65289;</p><p><a href="https://x.com/OOCCouchGags/status/1764592313156706388?s=20">https://x.com/OOCCouchGags/status/1764592313156706388?s=20</a></p>]]></content:encoded></item><item><title><![CDATA[波報 #72 - Y2K 危機尚未解除]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2024/02/26 - 2024/03/03]]></description><link>https://pofat.substack.com/p/72</link><guid isPermaLink="false">https://pofat.substack.com/p/72</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Mon, 04 Mar 2024 10:00:30 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/26c51d0e-d016-4711-ae63-70e869e0986c_1024x960.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#19978;&#26399;&#25552;&#36942;&#20102;&#19977;&#26376;&#24213;&#30340; visionOS &#30740;&#35342;&#26371; <a href="https://letsvisionos24.swiftgg.team/en/">Let&#8217;s visionOS</a> &#65292;&#36996;&#27794;&#27770;&#23450;&#21205;&#36523;&#30340;&#35712;&#32773;&#20497;&#19981;&#22952;&#30475;&#30475; Chao Code &#30340; <a href="https://twitter.com/janechao_dev">Jane</a> &#37636;&#30340;<a href="https://youtu.be/xPBPaGkveI0">&#20171;&#32057;&#24433;&#29255;</a>&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/p/71">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong>&#26377;&#20123;&#24037;&#31243;&#24107;&#30340; Y2K &#36996;&#27794;&#36942;&#21435;&#21834;</strong></h3><p>&#25105;&#36889;&#19968;&#20195;&#30340;&#24037;&#31243;&#24107;&#25033;&#35442;&#37117;&#23565; Y2K &#21361;&#27231;&#32819;&#29087;&#33021;&#35443;&#65288;&#27794;&#32893;&#36942;&#30340;&#23601;&#26159;&#24180;&#36629;&#20154;&#21834;&#65289;&#65292;&#36889;&#26159;&#20491;&#31243;&#24335;&#20013;&#30340;&#26085;&#26399;&#34389;&#29702;&#21839;&#38988;&#65292;&#22312; 90 &#24180;&#20195;&#26178;&#24456;&#22810;&#37117;&#21482;&#29992;&#35199;&#20803;&#24460;&#20841;&#20301;&#20358;&#34920;&#31034;&#24180;&#20221;&#65292;&#22240;&#27492;&#30070; 2000 &#24180;&#20358;&#33256;&#26178;&#65292;&#28961;&#27861;&#21312;&#20998;&#26159; 2000 &#24180;&#36996;&#26159; 1900 &#24180;&#65292;&#36914;&#32780;&#21487;&#33021;&#24341;&#30332;&#36039;&#35338;&#35373;&#20633;&#30340;&#26411;&#26085;&#12290;&#30070;&#26178;&#30340;&#23067;&#27138;&#22280;&#20063;&#27794;&#26377;&#25918;&#36942;&#36889;&#20491;&#27231;&#26371;&#65292;&#24478;&#36039;&#35338;&#21040;&#29694;&#23526;&#30340;&#26411;&#26085;&#37117;&#26377;&#30456;&#25033;&#30340;&#38651;&#24433;&#25512;&#20986;&#65292;&#20006;&#22312; 1999 &#24180;&#24213;&#25512;&#20986;&#65292;&#20998;&#21029;&#26159;&#21490;&#24681;&#24247;&#32013;&#33802;&#20027;&#28436;&#30340;&#12298;&#23559;&#35336;&#23601;&#35336;&#12299;&#12289;&#33287;&#38463;&#35582;&#30340;&#12298;&#39764;&#39740;&#26411;&#26085;&#12299;&#65292;&#24180;&#24188;&#30340;&#25105;&#30070;&#26178;&#35469;&#30495;&#22320;&#25079;&#30097;&#33258;&#24049;&#26159;&#21542;&#25744;&#24471;&#21040; 2000 &#24180;&#12290;</p><p>&#38614;&#28982;&#26368;&#24460;&#22312;&#25919;&#24220;&#33287;&#36039;&#35338;&#30028;&#30340;&#21162;&#21147;&#19979;&#24179;&#23433;&#22320;&#24230;&#36942; 2000 &#24180;&#65292;&#20294;&#25105;&#20497;&#20173;&#28982;&#27794;&#26377;&#24478; Y2K &#21361;&#27231;&#20013;&#35299;&#38500;&#21834;&#65292;&#19978;&#36913;&#22235; 2/29 &#38500;&#20102;&#12298;FF VII - Rebrith&#12299;&#30332;&#34892;&#33287;&#22823;&#35895;&#35731;&#19990;&#30028;&#21315;&#33836;&#31881;&#32114;&#24515;&#30862;&#22806;&#65292;&#24456;&#22810;&#36039;&#35338;&#31995;&#32113;&#20063;&#40664;&#40664;&#22320;&#30070;&#27231;&#20102;&#12290;</p><p>&#32016;&#35199;&#34349;&#30340;&#33258;&#21161;&#21152;&#27833;&#31449;&#28961;&#27861;&#25509;&#21463;&#20184;&#27454;&#65292;&#22240;&#28858;&#31243;&#24335;&#28961;&#27861;&#34389;&#29702; 2/29</p><p><a href="https://arstechnica.com/gadgets/2024/02/leap-year-glitch-broke-self-pay-pumps-across-new-zealand-for-over-10-hours/">https://arstechnica.com/gadgets/2024/02/leap-year-glitch-broke-self-pay-pumps-across-new-zealand-for-over-10-hours/</a></p><p>&#24052;&#40654;&#30340;&#36335;&#29128;&#22312; 2/29 &#37027;&#22825;&#30340;&#21320;&#22812;&#30452;&#25509;&#29060;&#29128;&#65288;&#29289;&#29702;&#65289;</p><p><a href="https://euro.dayfr.com/sports/1822986.html">https://euro.dayfr.com/sports/1822986.html</a></p><p>&#26356;&#21476;&#32769;&#30340;&#26696;&#20363;&#26159;&#26085;&#26412;&#37096;&#20998;&#33290;&#25163;&#27231;&#21482;&#25903;&#25588;&#21040; 2019 &#24180;&#30340;&#26085;&#26310;&#65292;&#21040; 2020 &#24180;&#30452;&#25509;&#30070;&#27231;</p><p><a href="https://twitter.com/zzzsuzuyasu/status/1212029604069691393">https://twitter.com/zzzsuzuyasu/status/1212029604069691393</a></p><p>&#36889;&#35041;&#26377; 2/29 &#37027;&#22825;&#30340;&#33258;&#29190;&#28165;&#21934;&#65292;&#26377;&#33288;&#36259;&#30340;&#21487;&#20197;&#21435;&#31505;&#19968;&#19979;</p><p><a href="https://codeofmatt.com/list-of-2024-leap-day-bugs/">https://codeofmatt.com/list-of-2024-leap-day-bugs/</a></p><p>&#25105;&#20491;&#20154;&#26159;&#35469;&#28858;&#37117; 2024 &#24180;&#20102;&#65292;&#19981;&#35201;&#20877;&#33258;&#24185; time library&#65292;&#29992;&#27161;&#28310;&#31243;&#24335;&#24235;&#30340;&#22909;&#21966;&#65311;</p><p>&#21487;&#20197;&#32771;&#24942;&#30340;&#31532;&#19977;&#26041;&#20043;&#19968;&#26159;&#22312; 2/29 &#30070;&#22825;&#23459;&#20296; 1.0 &#29256;&#27491;&#24335;&#30332;&#20296;&#30340; <a href="https://github.com/davedelong/time">Time</a>&#65292;&#30001;&#20855;&#26377;&#35920;&#23500;&#26178;&#38291;&#32147;&#39511;&#30340; Dave Delong &#32147;&#36942;&#22235;&#24180;&#25171;&#30952;&#65288;&#22312;&#22235;&#24180;&#21069;&#30340; 2/29 &#20142;&#30456;&#65289;&#32780;&#25104;&#65306;<br><a href="https://forums.swift.org/t/announcing-time-1-0-0-type-safe-calendar-calculations/70366">https://forums.swift.org/t/announcing-time-1-0-0-type-safe-calendar-calculations/70366</a></p><p></p><h3><strong><a href="https://www.massicotte.org/intro-to-isolation">An Introduction to Isolation in Swift</a></strong></h3><p>Swift 6 &#26368;&#37325;&#35201;&#30340;&#37324;&#31243;&#30865;&#23601;&#26159; Swift Concurrency &#30340;&#23436;&#20633;&#65292;&#19981;&#36942;&#20854;&#29992;&#27861;&#21644;&#35215;&#31684;&#24050;&#30332;&#23637;&#21040;&#12300;&#28961;&#27861;&#19968;&#30475;&#23601;&#25026;&#12301;&#30340;&#22320;&#27493;&#65292;&#23588;&#20854;&#26159; isolation &#36889;&#20491;&#27010;&#24565;&#65292;&#36889;&#31687;<a href="https://www.massicotte.org/intro-to-isolation">&#25991;&#31456;</a>&#26159;&#25105;&#26368;&#36817;&#30475;&#36942;&#35299;&#37323;&#26368;&#28165;&#26970;&#30340;&#65292;&#21516;&#26178;&#20063;&#25351;&#20986;&#20102; SwiftUI &#23450;&#32681; isolation &#26041;&#24335;&#65288;&#22312; <code>var body</code> &#19978;&#32780;&#19981;&#22312; <code>View</code> protocol &#19978;&#65289;&#30340;&#28507;&#22312;&#21839;&#38988;&#12290;</p><p>&#21478;&#19968;&#20491; isolation &#30340;&#28151;&#20098;&#21839;&#38988;&#26159; <code>DispatchQueue.main.async</code> &#24460;&#25509;&#30340; closure &#26371;&#33258;&#21205;&#34987;&#21152;&#19978; <code>@MainActor</code>&#65292;&#25152;&#20197;&#20320;&#21487;&#20197;&#22312;&#35041;&#38754;&#28961;&#30171;&#21628;&#21483;&#20854;&#23427;&#30001; <code>@MainActor</code> &#38548;&#38626;&#30340;&#26041;&#27861;&#65292;&#19981;&#36942;&#36889;&#23526;&#26159;&#30001; compiler &#26377;&#40670;&#36942;&#26044;&#31777;&#21934;&#31895;&#26292;&#30340; syntax check &#23436;&#25104;&#65292;&#22914;&#26524;&#20320;&#29992;&#20102; <code>typealias</code> &#25110;&#23450;&#32681;&#21516;&#21517;&#30340; <code>DispatchQueue.main.async</code> &#65292;&#20320;&#23559;&#19981;&#26371;&#29554;&#24471;&#36889;&#20491;&#29305;&#24615;&#65292;&#38614;&#28982;&#19981;&#24120;&#35211;&#20294;&#36935;&#21040;&#20102;&#20320;&#21487;&#33021;&#26371;&#22312;&#36889;&#38577;&#26214;&#36855;&#23470;&#35041;&#36681;&#19981;&#20986;&#21435;&#65292;&#35443;&#35211; Ole &#30340;&#25991;&#31456;&#65306; <a href="https://oleb.net/2024/dispatchqueue-mainactor/">https://oleb.net/2024/dispatchqueue-mainactor/</a></p><p></p><h3><strong><a href="https://www.emergetools.com/blog/posts/how-to-use-variadic-view?s=1">&#22914;&#20309;&#22312; SwiftUI &#20013;&#21462;&#24471; Child View - VariadicView</a></strong></h3><p>SwiftUI &#34920;&#36948;&#24335;&#30340;&#35486;&#27861;&#38614;&#28982;&#23531;&#20358;&#29245;&#24555;&#30452;&#35264;&#65288;&#30452;&#21040;&#23526;&#27231;&#19978;&#25850;&#20102;&#20320;&#19968;&#36947;&#65289;&#65292;&#21371;&#20063;&#22686;&#21152;&#20102;&#19981;&#23569;&#38480;&#21046;&#21644;&#40657;&#31665;&#12290;SwiftUI &#30340; API &#22522;&#26412;&#19978;&#33853;&#23526;&#20102; local reasoning &#30340;&#21407;&#21063;&#65292;&#23601;&#22312;&#30070;&#21069; scope &#35373;&#23450;&#65292;&#26044;&#26159;&#20046;&#20320;&#24190;&#20046;&#19981;&#21487;&#33021;&#30001;&#27491;&#24335;&#31649;&#36947;&#21462;&#24471; child view &#26412;&#36523;&#65292;&#20063;&#23601;&#26159;&#22312; iOS 16 &#25552;&#20379; <a href="https://developer.apple.com/documentation/swiftui/layout">Layout</a> &#21069;&#20320;&#28961;&#27861;&#23526;&#20570; HStack &#25110; VStack&#65292;&#23601;&#31639;&#36879;&#36942; Layout &#20063;&#28961;&#27861;&#21462;&#24471;&#36889;&#20123; View &#30340;&#20839;&#21547;&#36039;&#35338;&#65292;&#21482;&#33021;&#21462;&#24471;&#20854;&#22823;&#23567;&#20301;&#32622;&#65292;&#20006;&#27770;&#23450;&#24590;&#40636;&#25850;&#25918;&#23427;&#20497;&#12290;&#23526;&#20570; Group &#36889;&#27171;&#33021;&#32676;&#32068; view &#20294;&#21448;&#19981;&#26159;&#22914; Stack &#25226; children view &#34701;&#21512;&#25104;&#19968;&#20491; view &#30340;&#23481;&#22120;&#26159;&#20570;&#19981;&#21040;&#30340;&#12290;</p><p>SwiftUI &#20013;&#26377;&#20491; <code>_VariadicView</code> &#65292;&#30452;&#25509;&#34987; HStack &#25152;&#20351;&#29992;&#30340;&#24213;&#23652;&#20803;&#20214;&#65292;&#32780;&#19988;&#26371;&#36879;&#36942; @inlineable &#35731;&#38283;&#30332;&#32773;&#20497;&#30475;&#21040;&#65292;&#25152;&#20197;&#26159;&#19981;&#22826;&#23481;&#26131;&#34987;&#25300;&#25481;&#30340;&#12300;&#30456;&#23565;&#23433;&#20840;&#12301;private API&#65292;&#21892;&#29992;&#36889;&#20491;&#20803;&#20214;&#20320;&#21487;&#20197;&#20570;&#20986;&#26356;&#22810;&#20803;&#30340;&#23481;&#22120;&#20803;&#20214;&#65292;&#19981;&#21482;&#26159;&#25913;&#35722;&#22823;&#23567; layout &#36996;&#21487;&#20197;&#37341;&#23565;&#19981;&#21516;&#30340;&#20803;&#20214;&#22871;&#19978;&#23660;&#24615;&#65292;&#27604;&#22914;&#31532;&#19968;&#20491; child view &#21152;&#32005;&#26694;&#12289;&#31532;&#20108;&#20491;&#21152;&#34253;&#26694;&#65292;&#35443;&#35211; Moving Parts &#30340;<a href="https://movingparts.io/variadic-views-in-swiftui">&#25945;&#23416;&#25991;</a>&#65307;&#32780;&#21478;&#19968;&#20491;&#23526;&#29992;&#30340;&#26041;&#27861;&#26159;&#12300;&#21462;&#24471; child view&#12301;&#65292;Emerge Tools &#21033;&#29992;&#36889;&#20491;&#29305;&#24615;&#23436;&#25104;&#20102;&#22522;&#26044; preview &#30340; SwiftUI snapshot test - <a href="https://github.com/EmergeTools/SnapshotPreviews-iOS">SnapshotPreview</a>&#12290;</p><p><a href="https://www.emergetools.com/blog/posts/how-to-use-variadic-view?s=1">https://www.emergetools.com/blog/posts/how-to-use-variadic-view?s=1</a></p><p>&#36879;&#36942; <code>_VariadicView</code> &#30340;&#23478;&#26063;&#25104;&#21729;&#20497;&#21487;&#20197;&#21462;&#24471; view tree &#30340;&#32080;&#27083;&#33287;&#25104;&#21729;&#65292;&#36889;&#40670;&#38750;&#24120;&#23526;&#29992;&#65292;&#20063;&#35377;&#33021;&#20570;&#20986;&#39006;&#20284; <a href="https://github.com/facebook/chisel">chisel</a> &#36889;&#27171;&#26041;&#20415;&#30452;&#25509;&#20462;&#25913; UIKit &#23660;&#24615;&#30340;&#24037;&#20855;&#12290;</p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/pitch-speed-up-protocol-conformance-checks-on-first-launch-using-bloom-filters/70225">[Pitch] Speed up protocol conformance checks on first launch using bloom filters</a></strong></h3><p><code>swift_conformsToProtocol</code> &#26159; app &#21855;&#21205;&#26178;&#26368;&#33457;&#26178;&#38291;&#30340;&#24037;&#20316;&#20043;&#19968;&#65288;&#22914;&#26524;&#20320;&#26377; Swift protocol&#65289;&#65292;&#22240;&#28858; Swift runtime &#26371;&#32218;&#24615;&#25628;&#32034;&#25152;&#26377; confromance &#65292;&#22312;&#38656;&#35201;&#24314;&#31435; metadata &#26178;&#12290;iOS 16 &#25226;&#36889;&#20491;&#32080;&#26524;&#22312; dyld &#30340; closure &#38928;&#22519;&#34892;&#20006;&#25918;&#20837; cache &#35041;&#65292;&#20294; app &#26356;&#26032;&#24460;&#20351;&#29992;&#32773;&#20173;&#28982;&#26377;&#27231;&#26371;&#39636;&#39511;&#21040;&#36889;&#20491;&#32233;&#24930;&#30340;&#21855;&#21205;&#36942;&#31243;&#12290;</p><p>&#26377;&#20154;&#20415;&#25552;&#20986;&#20102;&#20351;&#29992; bloom filter (&#19968;&#31278;&#24555;&#36895;&#27298;&#26597;&#26576;&#20803;&#32032;&#26159;&#21542;&#23660;&#26044;&#26576;&#38598;&#21512;&#30340;&#36039;&#26009;&#32080;&#27083;&#65289;&#20358;&#21152;&#36895;&#36889;&#20491;&#27969;&#31243;&#65292;&#19981;&#36942;&#36889;&#29309;&#25199;&#21040; linker &#38656;&#35201;&#28858;&#20043;&#35519;&#25972;&#65292;&#20197;&#21450;&#21487;&#33021;&#23565;&#26576;&#20123;&#24773;&#24418;&#24171;&#21161;&#19981;&#22823;&#65288;&#22914;&#19968;&#20491; protocol &#26377;&#22823;&#37327; conformance&#65289;&#12290;</p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#23436;&#32654;&#35498;&#26126; async &#30340;&#26579;&#33394;&#21147;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://fosstodon.org/@ihor/111997341040315672" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nWPe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d214a35-4831-459a-92bf-6677c3d0db1c_500x653.png 424w, https://substackcdn.com/image/fetch/$s_!nWPe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d214a35-4831-459a-92bf-6677c3d0db1c_500x653.png 848w, https://substackcdn.com/image/fetch/$s_!nWPe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d214a35-4831-459a-92bf-6677c3d0db1c_500x653.png 1272w, https://substackcdn.com/image/fetch/$s_!nWPe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d214a35-4831-459a-92bf-6677c3d0db1c_500x653.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nWPe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d214a35-4831-459a-92bf-6677c3d0db1c_500x653.png" width="500" height="653" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d214a35-4831-459a-92bf-6677c3d0db1c_500x653.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:653,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://fosstodon.org/@ihor/111997341040315672&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nWPe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d214a35-4831-459a-92bf-6677c3d0db1c_500x653.png 424w, https://substackcdn.com/image/fetch/$s_!nWPe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d214a35-4831-459a-92bf-6677c3d0db1c_500x653.png 848w, https://substackcdn.com/image/fetch/$s_!nWPe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d214a35-4831-459a-92bf-6677c3d0db1c_500x653.png 1272w, https://substackcdn.com/image/fetch/$s_!nWPe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d214a35-4831-459a-92bf-6677c3d0db1c_500x653.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#38283;&#30332;&#21830;&#23565; Apple Arcade &#19981;&#30906;&#23450;&#24615;&#30340;&#26410;&#20358;&#24863;&#21040;&#24962;&#24515;&#24545;&#24545;&#65292;Netflix &#26159;&#26368;&#22823;&#30340;&#23565;&#25163;&#20043;&#19968;&#65292;&#30070;&#28982; Apple &#20986;&#20102;&#21517;&#22320;&#38627;&#25630;&#20063;&#27491;&#22312;&#21152;&#36895;&#24801;&#21270;&#20182;&#20497;&#33287;&#38283;&#30332;&#32773;&#30340;&#38364;&#20418;&#65306;</p><p><a href="https://mobilegamer.biz/inside-apple-arcade-axed-games-declining-payouts-disillusioned-studios-and-an-uncertain-future/">https://mobilegamer.biz/inside-apple-arcade-axed-games-declining-payouts-disillusioned-studios-and-an-uncertain-future/</a></p>]]></content:encoded></item><item><title><![CDATA[波報 #71 - Let’s visionOS ]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2024/02/19 - 2024/02/25]]></description><link>https://pofat.substack.com/p/71</link><guid isPermaLink="false">https://pofat.substack.com/p/71</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Mon, 26 Feb 2024 00:16:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/85e36fb7-0491-4077-a117-573f391cfda1_1024x960.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#26368;&#36817;&#36973;&#36935;&#25644;&#23478;&#21644;&#31805;&#35657;&#38617;&#37325;&#25171;&#25802;&#65292;&#19981;&#36942;&#24184;&#22909;&#37117;&#21578;&#19968;&#27573;&#33853;&#65292;&#36913;&#22577;&#24489;&#27963;&#65281;</p><p>&#12298;<a href="https://pofat.substack.com/p/70">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://letsvisionos24.swiftgg.team/cn/">&#19990;&#30028;&#39318;&#22580; visionOS &#30427;&#26371;&#65306; Let&#8217;s visionOS</a></strong></h3><p>&#23578;&#22312;&#35264;&#26395;&#25110;&#19981;&#30693;&#22914;&#20309;&#20999;&#20837; visionOS &#36889;&#20491;&#26032;&#24179;&#21488;&#30340; Apple &#38283;&#30332;&#32773;&#65292;&#19981;&#29992;&#20182;&#24819;&#65292;&#25463;&#24465;&#23601;&#26159;&#22312; 3 &#26376; 30 &#26085;&#33267; 31 &#26085;&#21069;&#24448;&#21271;&#20140;&#21443;&#21152;&#19990;&#30028;&#39318;&#22580; visionOS &#23560;&#38272;&#30740;&#35342;&#26371; - <a href="https://letsvisionos24.swiftgg.team/cn/">Let&#8217;s visionOS</a>&#65292;&#19981;&#20677;&#21487;&#20197;&#29554;&#24471;&#35377;&#22810;&#20808;&#39493;&#30340;&#20659;&#25215;&#65292;&#20063;&#33021;&#39340;&#19978;&#21152;&#20837;&#25104;&#38263;&#20013;&#30340;&#31038;&#32676;&#65292;&#30050;&#31455;&#25299;&#33618;&#26178;&#26399;&#26368;&#22909;&#36996;&#26159;&#32068;&#22296;&#25171;&#24618;&#23384;&#27963;&#29575;&#39640;&#20123;&#12290;</p><p>&#20027;&#36774;&#20154;<a href="https://twitter.com/SketchK_47">&#24605;&#29734;</a>&#22312; Vision Pro &#20844;&#20296;&#24460;&#24456;&#24555;&#23601;&#38283;&#22987;&#32068;&#22296;&#21295;&#25972;&#21508;&#26041;&#36039;&#28304;&#20197;&#21450;&#38283;&#21109;&#31038;&#32676;&#20379;&#22823;&#23478;&#20132;&#27969;&#36039;&#35338;&#65292;<a href="https://xreality.zone/en/">XRealityZone</a> &#38651;&#23376;&#22577;&#21644;&#29992;&#20358;&#20132;&#27969;&#39636;&#39511; visionOS app &#30340; <a href="https://github.com/XRealityZone/Let-us-xrOS">Let&#8217;s xrOS</a>&#65292;&#30740;&#35342;&#26371;&#21069;&#20854;&#23526;&#24050;&#32147;&#21295;&#32858;&#19981;&#23569;&#30340;&#36039;&#28304;&#21644;&#32879;&#32080;&#65292;&#20063;&#25165;&#26377;&#33775;&#40599;&#30340;&#35611;&#32773;&#38499;&#23481;&#65292;&#20854;&#20013;&#21488;&#28771;&#30340;&#35611;&#32773;&#30001; <a href="https://www.youtube.com/@chaocode">ChaoCode</a> &#30340; <a href="https://twitter.com/janechao_dev">Jane</a> &#25812;&#20219;&#28436;&#35611;&#22025;&#36051; &#12290;&#38500;&#27492;&#20043;&#22806;&#65292;&#22823;&#26371;&#36996;&#28310;&#20633;&#20102;&#38750;&#24120;&#35443;&#30433;&#30340;<a href="https://xreality-zone.feishu.cn/wiki/R19JwhvwoiE8Dlkc9K1cuu4bnjd">&#21443;&#26371;&#25351;&#21335;</a>&#65292;&#24478;&#20303;&#23487;&#20132;&#36890;&#21040;&#21507;&#21917;&#29609;&#27138;&#37117;&#26377;&#25351;&#21335;&#65292;&#26368;&#35201;&#32202;&#30340;&#32654;&#39135;&#25351;&#21335;&#30475;&#36215;&#20358;&#24456;&#21426;&#23475;&#21834;&#65281;</p><p>&#35201;&#24478;&#21488;&#28771;&#20986;&#30332;&#30340;&#26379;&#21451;&#65292;&#19981;&#29992;&#25812;&#24515;&#20063;&#19981;&#35442;&#33853;&#21934;&#65292;&#36889;&#27425;<a href="https://x.com/ethanhuang13/status/1761692162281050356?s=20">13 &#26377;&#38283;&#22296;</a>&#65292;&#27489;&#36814;&#21644;&#20182;&#32879;&#32097;&#65292;&#25110;&#30452;&#25509;&#22312; <a href="https://discord.gg/KGdXZqXgFY">weak self Discord</a> &#35041;&#30332;&#32882;&#25214;&#22296;&#12290;</p><p></p><h3><strong><a href="https://forums.swift.org/t/swift-6-0-release-process/70220">Swift 6 Is Finally Coming</a></strong></h3><p>&#22312; Swift &#21319;&#19978; 5.0 &#30340;&#20116;&#24180;&#24460;&#12289; <a href="https://forums.swift.org/t/on-the-road-to-swift-6/32862">On the road to Swift 6</a> &#30332;&#20296;&#30340;&#22235;&#24180;&#24460;&#65292;Swift &#32066;&#26044;&#35201;&#27491;&#24335;&#22320;&#36814;&#25509; 6.0 &#30340;&#21040;&#20358;&#65292;&#19977;&#26376;&#21313;&#20116;&#34399;&#26371;&#26159;&#27491;&#24335;&#30340; 6.0 branch cut&#65292;5.10 &#26371;&#26159;&#26368;&#24460;&#19968;&#29256;&#30340; Swift 5&#12290;</p><p>&#28982;&#32780;&#22823;&#23478;&#25812;&#24515; Swift 6 &#30340;&#21319;&#32026;&#21487;&#33021;&#26371;&#20687; 2 &#21040; 3 &#37027;&#27171;&#24118;&#20358;&#24040;&#22823;&#30340;&#30171;&#33510;&#65292;&#20294;&#23526;&#38555;&#24773;&#27841;&#35201;&#22909;&#19968;&#20123;&#65292;Swfit 6 &#30340;&#35486;&#22411;&#27169;&#22411;&#26159; opt-in&#65292;&#20320;&#20173;&#28982;&#21487;&#20197;&#22312; Swift 6 compiler &#19978;&#20351;&#29992; Swift 5 &#27169;&#24335;&#12290;&#30070;&#28982;&#36996;&#26159;&#24314;&#35696;&#22823;&#23478;&#20999;&#22909;&#27169;&#32068;&#20877;&#36880;&#27493;&#23436;&#21892;&#65292;&#19968;&#23567;&#37096;&#20998;&#19968;&#23567;&#37096;&#20998;&#22320;&#21319;&#32026;&#12290;</p><p></p><h3><strong><a href="https://www.swiftuifieldguide.com/">The SwiftUI Field Guide</a></strong></h3><p>&#25105;&#21083;&#25509;&#35320; SwiftUI &#36935;&#21040;&#26368;&#39640;&#30340;&#38272;&#27323;&#26159;&#24314;&#31435; layout &#30340;&#24515;&#26234;&#27169;&#22411;&#65292;<a href="https://www.swiftuifieldguide.com/">The SwiftUI Field Guide</a> &#21063;&#21487;&#20197;&#30452;&#25509;&#21332;&#21161;&#20320;&#36328;&#36234;&#36889;&#20491;&#38272;&#27323;&#65292;&#23427;&#31934;&#32654;&#30340;&#20114;&#21205;&#32178;&#38913;&#33021;&#35731;&#20320;&#24555;&#36895;&#29702;&#35299;&#20854;&#25928;&#25033;&#65292;tree view &#21063;&#24555;&#36895;&#22320;&#35731;&#20320;&#29702;&#35299; SwiftUI &#20013;&#19968;&#20491; view &#30340;&#27193;&#29376;&#32080;&#27083;&#65292;&#20197;&#21450;&#27599;&#20491;&#31680;&#40670;&#22914;&#20309;&#24433;&#38911;&#35722;&#21270;&#65292;&#25105;&#21487;&#20197;&#20445;&#35657;&#29609;&#23436;&#36889;&#20123;&#26481;&#35199;&#24460;&#20320;&#26371;&#22312; SwiftUI &#19978;&#23569;&#36208;&#35377;&#22810;&#20900;&#26505;&#36335;&#12290;<br></p><h3><strong><a href="https://security.apple.com/blog/imessage-pq3/">iMessage with PQ3: The new state of the art in quantum-secure messaging at scale</a></strong></h3><p>iMessage &#20854;&#23526;&#26159;&#26368;&#26089;&#25552;&#20379;&#31471;&#23565;&#31471;&#21152;&#23494;&#30340;&#36890;&#35338;&#36575;&#39636;&#65292;&#21482;&#26159;&#23427;&#26089;&#26399;&#30340;&#21152;&#23494;&#26041;&#24335;&#37117;&#19981;&#26159;&#22826;&#22533;&#24375;&#65292;&#19968;&#30452;&#21040; 2019 &#24180;&#25165;&#36319;&#19978;&#21152;&#23494;&#25216;&#34899;&#65288;ECC&#65289;&#65292;&#32780;&#29694;&#22312; iMessage &#21063;&#36229;&#33521;&#36245;&#32654;&#65288;&#35498;&#21861;&#21602;&#65311;&#26412;&#20358;&#23601;&#32654;&#22283;&#36575;&#39636;&#65289;&#65292;&#30452;&#25509;&#30332;&#23637;&#20197;&#37327;&#23376;&#23494;&#30908;&#23416;&#65288;PQC&#65289;&#28858;&#22522;&#30990;&#30340;&#21332;&#23450; PQ3&#65292; &#38614;&#28982;&#29694;&#20170;&#21830;&#29992;&#30340;&#21152;&#23494;&#27169;&#24335;&#23565;&#37327;&#23376;&#38651;&#33126;&#20358;&#35498;&#38750;&#24120;&#33030;&#24369;&#65292;&#20294;&#33021;&#36948;&#21040;&#21363;&#26178;&#30772;&#35299;&#31561;&#32026;&#30340;&#37327;&#23376;&#38651;&#33126;&#23578;&#19981;&#23384;&#22312;&#12290;&#34315;&#26524;&#20351;&#29992;&#30340; PQ3 &#19981;&#21482;&#33021;&#21152;&#23494;&#21021;&#22987;&#24314;&#31435;&#30340;&#37329;&#38000;&#65292;&#36996;&#33021;&#25345;&#32380;&#26356;&#26032;&#20197;&#20445;&#35703;&#24460;&#32396;&#30340;&#35338;&#24687;&#20132;&#25563;&#65292;&#22914;&#27492;&#19968;&#20358;&#65292;&#21363;&#20351;&#21021;&#22987;&#24314;&#31435;&#30340;&#37329;&#38000;&#34987;&#30772;&#22750;&#65292;&#20173;&#33021;&#20445;&#25345;&#23433;&#20840;&#24615;&#65292;&#36889;&#38917;&#26032;&#21319;&#32026;&#26371;&#22312; iOS 17.4&#12289;iPadOS 17.4&#12289;macOS 14.4 &#21644; watchOS 10.4 &#25512;&#20986;&#12290;</p><p>&#20063;&#35377;&#20320;&#26371;&#35258;&#24471;&#36889;&#26159;&#21542;&#29992;&#29275;&#20992;&#27578;&#38622;&#65292;&#20294; Apple &#23565;&#23433;&#20840;&#30340;&#24907;&#24230;&#20284;&#20046;&#19968;&#30452;&#26159;&#36208;&#26997;&#31471;&#65292;&#28982;&#32780;<a href="https://becca.ooo/blog/so-you-want-to-ship-a-command-line-tool-for-macos/">&#36942;&#24230;&#35079;&#38620;&#32780;&#24118;&#20358;&#28431;&#27934;&#21839;&#38988;&#30340;&#32147;&#39511;</a>&#20063;&#23384;&#22312;&#36942;&#12290;&#24184;&#22909;&#36889;&#21151;&#33021;&#33287;&#38283;&#30332;&#32773;&#38364;&#20418;&#19981;&#22823;&#65292;&#19981;&#28982;&#20381;&#25818; Apple &#24448;&#24120;&#25552;&#20379;&#37679;&#35492;&#36039;&#35338;&#30340;&#32147;&#39511;&#65292;&#38283;&#30332;&#32773;&#21487;&#33021;&#35201;&#31561;&#21040;&#19979;&#19968;&#27425; WWDC &#25165;&#33021;&#25214;&#20986;&#21839;&#38988;&#25152;&#22312;&#12290;</p><p></p><h3><strong><a href="https://swiftonserver.com/">Using SwiftNIO</a></strong></h3><p><a href="https://github.com/apple/swift-nio?tab=readme-ov-file">SwiftNIO</a> &#26159;&#36328;&#24179;&#21488;&#30340;&#38750;&#21516;&#27493;&#12289;&#20107;&#20214;&#39493;&#21205;&#32178;&#36335;&#25033;&#29992; framework&#65292;&#20294;&#23427;&#26159;&#27604; <a href="https://github.com/Alamofire/Alamofire">Alamofire</a> &#26356;&#20302;&#19968;&#23652;&#30340;&#26694;&#26550;&#65292;&#20027;&#35201;&#34389;&#29702;&#35338;&#24687;&#20107;&#20214;&#20197;&#21450;&#25903;&#25345;&#21508;&#24335;&#32178;&#36335;&#36890;&#35338;&#21332;&#23450;&#65292;<a href="https://github.com/vapor/vapor">Vapor</a>&#30340;&#37096;&#20998;&#26680;&#24515;&#21363;&#26159;&#22522;&#26044;&#23427;&#20358;&#24314;&#31435;&#12290;</p><p>Swift on server &#30340; <a href="https://swiftonserver.com/">blog</a> &#26377;&#19968;&#31995;&#21015;&#38364;&#26044;&#22914;&#20309;&#29992; SwiftNIO &#24314;&#31435; server &#33287; client &#30340;&#25945;&#23416;&#25991;&#65292;&#23565;&#26044; iOS &#38283;&#30332;&#32773;&#24819;&#20102;&#35299;&#20309;&#35586; non-blocking &#21644; event loop&#65292; &#36889;&#20063;&#26159;&#24456;&#22909;&#30340;&#20837;&#38272;&#23416;&#32722;&#36039;&#26009;&#12290;</p><p></p><h3><strong><a href="https://www.swift.org/blog/mlx-swift/">On-device ML research with MLX and Swift</a></strong></h3><p><a href="https://github.com/ml-explore/mlx">MLX</a> &#26159;&#23560;&#38272;&#29992;&#20358;&#22312; Apple silicon &#19978;&#20570; Machine Learning &#30740;&#31350;&#30340;&#26694;&#26550;&#65288;&#27880;&#24847;&#20027;&#35201;&#28858;&#30740;&#31350;&#29992;&#65292;&#20006;&#38750;&#29992;&#20358;&#20296;&#32626;&#30495;&#23526;&#29986;&#21697;&#29992;&#30340; model&#65289;&#65292;<a href="https://github.com/ml-explore/mlx-swift/">MLX Swift</a>&#21063;&#21033;&#29992; Swift &#39640;&#38542;&#35486;&#35328;&#30340;&#21508;&#31278;&#29305;&#24615;&#35731;&#38283;&#30332;&#26356;&#23481;&#26131;&#65292;&#36889;&#35731;&#30740;&#31350;&#21729;&#20497;&#33021;&#20197;&#26356;&#20302;&#30340;&#38272;&#27323;&#36914;&#34892; on-device ML &#30740;&#31350;&#12290;</p><p></p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>Apple Vision Pro &#33287; Quest 3 &#30340;&#25163;&#21218;&#36861;&#36452;&#27604;&#36611;&#65292;&#26377;&#36259;&#30340;&#26159; AVP &#38614;&#28982;&#24433;&#20687;&#24310;&#36978;&#20302;&#24456;&#22810;&#65292;&#19988;&#26377; 90Hz+ &#30340;&#26356;&#26032;&#29575;&#65292;&#20294;&#25163;&#21218;&#36861;&#36452;&#21482;&#26377; 30 Hz&#65292;&#25152;&#20197;&#24863;&#35258;&#19978;&#26371;&#24310;&#36978;&#26356;&#22810;&#12290;</p><p><a href="https://x.com/DennysKuhnert/status/1759995618695447020?s=20">https://x.com/DennysKuhnert/status/1759995618695447020?s=20</a></p><p>Follow &#28165;&#21934;&#37117;&#35201;&#32068;&#25104; PS &#25163;&#25226;&#24825;</p><p><a href="https://x.com/jacobmparis/status/1759264032349888799?s=20">https://x.com/jacobmparis/status/1759264032349888799?s=20</a></p><p> Google &#29986;&#21697;&#21517;&#31281;&#30340; iteration&#65306;Allo &#8594; Duo &#8594; Google Chat &#8594; Google Meet(original) &#8594; Google Meet &#8594; &#128545;</p><p><a href="https://x.com/MarcosBL/status/1761094858205229430?s=20">https://x.com/MarcosBL/status/1761094858205229430?s=20</a></p>]]></content:encoded></item><item><title><![CDATA[波報 #70 - 這寶可夢手上有槍啊]]></title><description><![CDATA[2024/01/15 - 2024/02/21]]></description><link>https://pofat.substack.com/p/70</link><guid isPermaLink="false">https://pofat.substack.com/p/70</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Mon, 22 Jan 2024 00:35:32 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/76549064-364f-4073-b69d-bc8e4d5d692e_1152x896.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#22823;&#23478;&#26032;&#24180;&#24555;&#27138;&#12290;</p><h3><strong>&#38651;&#24433;&#38498;&#33287; App &#38283;&#30332;&#30340;&#32854;&#26479; - Apple</strong></h3><p>&#36889;&#24190;&#24180;&#20018;&#27969;&#30332;&#23637;&#33287;&#30123;&#24773;&#22846;&#25802;&#19979;&#65292;&#38651;&#24433;&#26989;&#19981;&#24489;&#30070;&#24180;&#39080;&#20809;&#65292;&#25152;&#35586;&#30340;&#38651;&#24433;&#38498;&#20729;&#20540;&#20063;&#36880;&#26085;&#33806;&#32302;&#65292;&#32780; Apple &#30340;<a href="https://www.bloomberg.com/news/articles/2023-03-23/apple-to-splash-1-billion-a-year-on-films-to-break-into-cinemas?leadSource=uverify%20wall">&#26032;&#24433;&#35222;&#31574;&#30053;</a>&#28961;&#30097;&#26159;&#32769;&#27966;&#23566;&#28436;&#20497;&#65288;aka &#25138;&#38498;&#22291;&#26700;&#27494;&#22763;&#65289;&#30340;&#25937;&#19990;&#32854;&#26479;&#65292;&#21435;&#24180;&#38647;&#21033;&#21490;&#32771;&#29305;&#30340;&#12298;&#25343;&#30772;&#23833;&#12299;&#33287;&#39340;&#19969;&#21490;&#26607;&#35199;&#26031;&#30340;&#12298;&#33457;&#26376;&#27578;&#25163;&#12299;&#30342;&#26159; Apple &#25237;&#36039;&#30340;&#22823;&#20316;&#12290;&#24046;&#19981;&#22810;&#21516;&#26178;&#38283;&#22987;&#33806;&#32302;&#30340;&#36996;&#26377; native mobile app &#38283;&#30332;&#24066;&#22580;&#65292;&#36523;&#28858;&#25171;&#24037;&#20180;&#30340;&#38283;&#30332;&#32773;&#25033;&#35442;&#37117;&#26377;&#20123;&#24863;&#35320;&#65292;&#22240;&#27492;&#19978;&#36913;&#38283;&#22987;&#38928;&#36092;&#30340; Apple Vision Pro &#20063;&#26159;&#19981;&#23569;&#38283;&#30332;&#32773;&#30340;&#26399;&#30460;&#65292;&#26395;&#23427;&#33021;&#35731; app &#38283;&#30332;&#20877;&#27425;&#20553;&#22823;&#65292;&#19981;&#36942;&#23186;&#39636;&#21021;&#35413;&#28204;&#21644; Apple &#25955;&#23556;&#29376;&#30340;&#24773;&#22659;&#35373;&#23450;&#65288;&#20197;&#21450;&#23427;&#30340;&#23450;&#20729;&#65289;&#65292;&#25105;&#24314;&#35696;&#21487;&#20197;&#20808;&#35641;&#24910;&#22320;&#31649;&#29702;&#26399;&#26395;&#20540;&#12290;&#65288;&#25105;&#23565;&#26044;&#32085;&#22823;&#22810;&#25976;&#35430;&#25140;&#32773;&#30340;<a href="https://www.theverge.com/24040075/apple-vision-pro-hands-on-virtual-reality">&#32819;&#26421;&#37117;&#34987;&#22739;&#29211;</a>&#24863;&#21040;&#24962;&#24515;)</p><h3><strong>&#27770;&#24515;&#33287;&#35946;&#36077;</strong></h3><p>1 &#26376; 19 &#34399;&#30332;&#34892;&#30340;<s>&#23542;&#21487;&#22818;&#20043;&#24687;</s> <a href="https://store.steampowered.com/app/1623730/Palworld/">Palworld</a> &#19977;&#22825;&#20839;&#23601;&#36067;&#20986;&#36229;&#36942;&#22235;&#30334;&#33836;&#20221;&#65292;&#19968;&#21475;&#27683;&#21109;&#19979;&#21516;&#26178;&#30334;&#33836;&#20154;&#36938;&#29609;&#30340;&#32000;&#37636;&#65292;&#36229;&#36234; Cyberpunk 2077 &#33287;&#27861;&#29872;&#65292;&#21487;&#35586; 2024 &#24180;&#30340;&#38283;&#23616;&#22823;&#20316;&#12290;&#27491;&#24335;&#30332;&#21806;&#19977;&#22825;&#21069;&#36938;&#25138;&#38283;&#30332;&#21830; Pocketpair &#30340; CEO &#34920;&#31034;&#36938;&#25138;&#33021;&#35477;&#29983;&#26377;&#36084;&#22855;&#36447;&#65292;&#32780;&#20182;&#36984;&#20102;&#24190;&#20491;&#26368;&#38364;&#37749;&#30340;&#20358;&#20998;&#20139;&#65288;<a href="https://note.com/pocketpair/n/n54f674cccc40">&#21407;&#25991;&#26085;&#25991;</a>&#65292;&#24314;&#35696; ChatGPT)&#65306;&#25791;&#21040;&#30340;&#20415;&#21033;&#21830;&#24215;&#24037;&#35712;&#29983;&#12289;&#21021;&#27425;&#38754;&#35430;&#27794;&#36942;&#30340;&#24037;&#31243;&#24107;&#12289;&#23542;&#21487;&#22818;&#25163;&#19978;&#26377;&#27085;&#31455;&#28982;&#26371;&#36889;&#40636;&#22909;&#29609;&#65281;&#65311;</p><p>&#30070;&#28982;&#27794;&#26377;&#19968;&#38283;&#22987;&#30340;&#27770;&#24515;&#33287;&#35946;&#36077;&#65292;&#36889;&#20123;&#22855;&#36447;&#20063;&#19981;&#26371;&#30332;&#29983;&#12290;&#25105;&#30456;&#20449;&#26377;&#26356;&#22810;&#21516;&#27171;&#27770;&#24515;&#33287;&#22533;&#25345;&#21371;&#27515;&#22312;&#27801;&#28760;&#19978;&#30340;&#25925;&#20107;&#27794;&#20986;&#20358;&#30332;&#25991;&#65292;&#19981;&#36942;&#27491;&#26159;&#36889;&#20123;&#32000;&#37636;&#25104;&#21151;&#30340;&#25991;&#23383;&#19968;&#20877;&#22320;&#25552;&#37266;&#25105;&#20497;&#12300;&#23526;&#29694;&#22818;&#24819;&#30340;&#32654;&#22909;&#12301;&#65292;&#28858;&#36889;&#20123;&#22280;&#23376;&#27880;&#20837;&#26356;&#22810;&#21205;&#21147;&#21644;&#35731;&#26356;&#22810;&#20154;&#25458;&#36215;&#34966;&#23376;&#25171;&#36896;&#22818;&#24819;&#12290;</p><p>&#30070;&#28982;&#25105;&#20063;&#31069;&#31119;&#20182;&#20497;&#19981;&#26371;&#34987;&#20219;&#22825;&#22530;&#27861;&#21209;&#37941;&#25331;&#25171;&#20498;&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/p/69">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://axleos.com/simulating-slices-of-ios-apps/">&#33258;&#35069; iOS &#27169;&#25836;&#22120;</a></strong></h3><p>&#26377;&#20301;&#32769;&#20804;&#22312;&#36913;&#26411;&#33287;&#21654;&#21857;&#26178;&#38291;&#20013;&#22303;&#28846;&#20102; iOS &#27169;&#25836;&#22120;&#65292;&#38614;&#28982;&#23526;&#20316;&#32048;&#31680;&#27794;&#20844;&#38283;&#65292;&#20294;&#30332;&#34920;&#20102;&#36939;&#20316;&#21407;&#29702;&#30340;&#27010;&#24565;&#65292;&#20854;&#20013;&#25105;&#35258;&#24471;&#26368;&#26377;&#20729;&#20540;&#30340;&#26159;&#23427;&#24314; Debugger &#30340;&#36942;&#31243;&#65292;&#28858;&#20102;&#30906;&#35469;&#36939;&#34892;&#30340;&#27491;&#30906;&#24615;&#65292;&#20182;&#29992; lldb &#32000;&#37636;&#23526;&#27231;&#19978;&#36939;&#34892;&#30340; register &#33287; memory &#29376;&#24907;&#20358;&#21644;&#33258;&#24185;&#27169;&#25836;&#22120;&#35041;&#30340;&#27604;&#36611;&#12290;&#36889;&#20123;&#32000;&#37636;&#29702;&#24819;&#19978;&#24456;&#36969;&#21512;&#29992;&#20358;&#37325;&#29694; bug&#65292;&#22240;&#28858;&#25152;&#26377;&#30340;&#27231;&#26800;&#36939;&#34892;&#29376;&#24907;&#37117;&#21487;&#20197;&#34987;&#20445;&#23384;&#65292;&#32000;&#37636;&#19968;&#27425;&#23601;&#33021;&#37325;&#29694;&#28961;&#38480;&#27425;&#65292;Mozilla &#30340; <a href="https://rr-project.org/">rr</a> &#23601;&#26159;&#36889;&#21407;&#29702;&#65292;&#21482;&#21487;&#24796;&#30495;&#30340;&#35201;&#22312; iOS &#19978;&#25033;&#29992;&#25033;&#35442;&#36996;&#26159;&#20491;&#22818;&#12290;</p><p><a href="https://twitter.com/phillipten/status/1746961140830044615">https://twitter.com/phillipten/status/1746961140830044615</a></p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/se-0417-task-executor-preference/68958/6">[SE-0417] Task Executor Preference (Reviewing)</a></strong></h3><p>Swift Concurrency &#30340;&#20219;&#21209; &#65288;task&#65289;&#22519;&#34892;&#22411;&#24907;&#20998;&#28858; isolated &#20197;&#21450; nonisolated&#65292;&#21069;&#32773;&#20208;&#36084;&#29289;&#20214;&#23652;&#32026;&#30340;&#20803;&#20214; &#65288;&#21363;<code>actor</code>&#65289;&#20358;&#23433;&#25490;&#22519;&#34892;&#65288;&#38548;&#38626;&#65289;&#65292;&#24460;&#32773;&#21063;&#22312; global concurrent thread pool &#19978;&#22519;&#34892;&#12290; &#21069;&#38499;&#23376;&#30340; <a href="https://github.com/apple/swift-evolution/blob/main/proposals/0392-custom-actor-executors.md">SE-0392</a> &#20801;&#35377; actor &#38548;&#38626;&#22519;&#34892;&#24037;&#20316;&#26178;&#36305;&#22312;&#33258;&#23450;&#32681;&#30340; <code>SerialExecutor</code> &#19978;&#65292;&#23565;&#26044;&#25928;&#33021;&#35201;&#27714;&#26997;&#39640;&#30340;&#23560;&#26696;&#35041;&#38750;&#24120;&#23526;&#29992;&#65292;&#20687;&#36991;&#20813; thread hops &#20197;&#26368;&#22823;&#21270;&#35531;&#27714;&#34389;&#29702;&#37327;&#23601;&#26159;&#19968;&#20491;&#24120;&#35211;&#30340;&#20363;&#23376;&#12290;</p><p>&#19981;&#32147; actor &#38548;&#38626;&#30340;&#20219;&#21209;&#36996;&#27794;&#26377;&#36889;&#27171;&#30340;&#24392;&#24615;&#65292;&#38614;&#28982;&#30452;&#25509;&#22312; global concurrent thread pool &#19978;&#22519;&#34892;&#26159; Swift Concurrency &#30340;&#35373;&#35336;&#21021;&#34935; &#65288;&#35443;&#35211; Swift 5.7 &#30340; <a href="https://github.com/apple/swift-evolution/blob/main/proposals/0338-clarify-execution-non-actor-async.md">SE-0338</a>)&#65292;&#20197;&#20813; <code>MainActor</code> &#34987;&#20308;&#29992;&#65292;&#23565; app &#38283;&#30332;&#20358;&#35498;&#35486;&#32681;&#20063;&#28165;&#26970;&#12290;&#19981;&#36942;&#23565; Swift &#38754;&#21521;&#25152;&#26377;&#39006;&#22411;&#25033;&#29992;&#30340;&#30332;&#23637;&#26041;&#21521;&#20358;&#35498;&#65292;&#36889;&#39023;&#28982;&#26159;&#20491;&#21839;&#38988;&#12290;&#25563;&#35328;&#20043;&#65292; mobile app &#38283;&#30332;&#32773;&#21487;&#33021;&#29992;&#19981;&#21040;&#36889;&#21151;&#33021;&#65292;&#23601;&#20139;&#21463;&#21407;&#29983;&#30340;&#31777;&#21934;&#38928;&#35373;&#20540;&#21543;&#12290;</p><p>&#36889;&#20491;&#25552;&#26696;&#24341;&#20837;&#19968;&#20491;&#26032;&#30340;&#25511;&#21046;&#23652;&#20358;&#12300;&#35373;&#23450;&#12301;&#20219;&#21209;&#22519;&#34892;&#30340;&#20301;&#32622;&#65292;&#31281;&#28858; task executor preference&#65292;&#36889;&#20491;&#35373;&#23450;&#26371;&#36319;&#33879;&#20219;&#21209;&#20197;&#21450;&#20659;&#25773;&#33267;&#20854;&#34893;&#29983;&#30340;&#23376;&#20219;&#21209;&#65288;&#22914; TaskGroups&#65289; &#65292;&#20854;&#24433;&#38911;&#30340; API &#26377;&#65306;</p><ol><li><p><code>withTaskExecutorPreference</code> : &#20854;&#31684;&#22285;&#20839;&#30340;&#20219;&#21209;&#65288;<code>async let</code>&#65289;&#37117;&#26371;&#36969;&#29992;&#24118;&#20837;&#30340;&#35373;&#23450;</p></li><li><p><code>TaskGroup</code> &#30340; <code>addTask</code>&#65306; &#27599;&#26032;&#22686;&#19968;&#20491; task &#37117;&#33021;&#25351;&#23450;&#35373;&#23450;</p></li><li><p><code>Task</code> &#30340;&#21021;&#22987;&#21270;&#33287; <code>detached</code></p></li></ol><p>&#36889;&#35041;&#30340;&#35373;&#23450;&#24471;&#36879;&#36942;&#26032;&#30340; protocol <code>TaskExecutor</code>&#65292;&#20063;&#26377;&#26032;&#30340;&#20840;&#22495;&#35722;&#25976; <code>globalConcurrentExecutor</code> &#35731;&#20320;&#25226;&#22519;&#34892;&#20301;&#32622;&#35373;&#21040;&#38928;&#35373;&#30340; global concurrent thread pool &#19978;&#12290;</p><pre><code><code>public protocol TaskExecutor: Executor {
  func enqueue(_ job: consuming ExecutorJob)

  func asUnownedTaskExecutor() -&gt; UnownedTaskExecutor
}</code></code></pre><p>&#21516;&#26178;&#23427;&#20063;&#33021;&#25913;&#23531;&#30001; actor &#38548;&#38626;&#20219;&#21209;&#30340;&#22519;&#34892;&#20301;&#32622;&#65292;&#22914;&#26524;&#22312; actor &#20013;&#38548;&#38626;&#30340;&#20219;&#21209;&#26377;&#34987;&#21152;&#19978; executor preference&#65292;&#21063;&#20197; preference &#28858;&#20027;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UW_i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4993a9a-bd75-4059-b34a-e95924258483_1874x1036.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UW_i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4993a9a-bd75-4059-b34a-e95924258483_1874x1036.png 424w, https://substackcdn.com/image/fetch/$s_!UW_i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4993a9a-bd75-4059-b34a-e95924258483_1874x1036.png 848w, https://substackcdn.com/image/fetch/$s_!UW_i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4993a9a-bd75-4059-b34a-e95924258483_1874x1036.png 1272w, https://substackcdn.com/image/fetch/$s_!UW_i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4993a9a-bd75-4059-b34a-e95924258483_1874x1036.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UW_i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4993a9a-bd75-4059-b34a-e95924258483_1874x1036.png" width="1456" height="805" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4993a9a-bd75-4059-b34a-e95924258483_1874x1036.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:805,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:125497,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UW_i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4993a9a-bd75-4059-b34a-e95924258483_1874x1036.png 424w, https://substackcdn.com/image/fetch/$s_!UW_i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4993a9a-bd75-4059-b34a-e95924258483_1874x1036.png 848w, https://substackcdn.com/image/fetch/$s_!UW_i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4993a9a-bd75-4059-b34a-e95924258483_1874x1036.png 1272w, https://substackcdn.com/image/fetch/$s_!UW_i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4993a9a-bd75-4059-b34a-e95924258483_1874x1036.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>&#21478;&#19968;&#20491;&#21487;&#33021;&#30340;&#25033;&#29992;&#26041;&#24335;&#26159;&#25226;&#20219;&#21209;&#22519;&#34892;&#20301;&#32622;&#30452;&#25509;&#35373;&#28858;&#26576;&#19968;&#20491; actor&#19978;&#30340; executor&#65292;&#20294;&#36889;&#20491;&#25552;&#26696;&#20006;&#19981;&#20801;&#35377;&#36889;&#27171;&#20570;&#65292;&#29694;&#26377;&#21478;&#20491;<a href="https://github.com/apple/swift-evolution/pull/2174">&#25913;&#21892; closure &#38548;&#38626;&#30340;&#25552;&#26696;</a>&#25506;&#35342;&#20854;&#21487;&#33021;&#24615;&#12290;</p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#24494;&#36575;&#28858; Xbox Series S/X &#26032;&#22686;&#20102; Cyberpunk 2077 &#20027;&#38988;&#21205;&#24907;&#26700;&#24067;&#65281;</p><p><a href="https://x.com/tomwarren/status/1748718485662753269?s=20">https://x.com/tomwarren/status/1748718485662753269</a></p><p>&#26399;&#24453; Vision Pro EyeSight &#38283;&#25918; API &#30340;&#37027;&#22825;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://x.com/zats/status/1747941903683711174?s=20" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-61r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e3d26e-4795-479f-ad22-9d37c76342c6_300x168.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-61r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e3d26e-4795-479f-ad22-9d37c76342c6_300x168.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-61r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e3d26e-4795-479f-ad22-9d37c76342c6_300x168.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-61r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e3d26e-4795-479f-ad22-9d37c76342c6_300x168.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-61r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e3d26e-4795-479f-ad22-9d37c76342c6_300x168.jpeg" width="300" height="168" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13e3d26e-4795-479f-ad22-9d37c76342c6_300x168.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:168,&quot;width&quot;:300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#22294;&#29255;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://x.com/zats/status/1747941903683711174?s=20&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#22294;&#29255;" title="&#22294;&#29255;" srcset="https://substackcdn.com/image/fetch/$s_!-61r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e3d26e-4795-479f-ad22-9d37c76342c6_300x168.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-61r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e3d26e-4795-479f-ad22-9d37c76342c6_300x168.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-61r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e3d26e-4795-479f-ad22-9d37c76342c6_300x168.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-61r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13e3d26e-4795-479f-ad22-9d37c76342c6_300x168.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><h2><strong>&#128466;&#65039; &#30772;&#36027;&#28165;&#21934;</strong></h2><p><a href="https://store.steampowered.com/app/1859580/Full_Void/">Full Void</a> : &#20687;&#32032;&#39080;&#30340; 2D &#35299;&#35598;&#36938;&#25138;&#65292;&#39636;&#24369;&#29256;&#32004;&#32752;&#24247;&#32013;&#65288;&#25481;&#21040;&#19979;&#27700;&#36947;&#27700;&#35041;&#23601;&#26371;&#27515;&#65289;&#23565;&#25239;&#22825;&#32178;&#30340;&#26411;&#26085;&#25925;&#20107;&#65292;&#27675;&#22285;&#29151;&#36896;&#19981;&#37679;&#65281;</p>]]></content:encoded></item><item><title><![CDATA[波報 #69 - 沒有不帥的原子吐息]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/12/11 - 2023/12/17]]></description><link>https://pofat.substack.com/p/69</link><guid isPermaLink="false">https://pofat.substack.com/p/69</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Sun, 17 Dec 2023 23:00:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XBQW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95ca4f9c-cedd-494f-add0-94ddaaf7c3a9_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#36889;&#36913;&#30475;&#20102;&#12298;&#21733;&#21513;&#25289; MINUS ONE&#12299;&#65292;&#26085;&#26412;&#20154;&#25293;&#36215;&#20358;&#23601;&#26159;&#21644;&#32654;&#22283;&#20154;&#19981;&#21516;&#65292;&#33287;&#20854;&#20808;&#31561;&#20491;&#19968;&#23567;&#26178;&#20197;&#19978;&#30340;&#37610;&#38515;&#20877;&#38706;&#38754;&#21564;&#21483;&#65292;&#38283;&#22580;&#19981;&#21040;&#20116;&#20998;&#37912;&#23601;&#35731;&#21733;&#20332;&#20986;&#20358;&#24594;&#21564;&#65292;&#36889;&#25165;&#26159;&#25105;&#20497;&#35201;&#30340;&#21733;&#21513;&#25289;&#12290;&#25925;&#20107;&#25551;&#36848;&#19968;&#20491;&#25136;&#22580;&#36867;&#20853;&#38617;&#37325;&#32085;&#26395;&#30340;&#22823;&#29872;&#22659;&#19979;&#25214;&#21040;&#20182;&#30495;&#27491;&#30340;&#25136;&#22580;&#65292;&#20027;&#36600;&#38614;&#28982;&#32769;&#22871;&#65292;&#20294;&#27675;&#22285;&#29151;&#36896;&#24471;&#24456;&#26834;&#65292;&#22823;&#24618;&#29560;&#30340;&#39749;&#21147;&#27704;&#36960;&#37027;&#40636;&#26834;&#65292;&#36889;&#37096;&#22312;&#25105;&#24515;&#20013;&#21644;&#24245;&#37326;&#30340;&#12298;&#27491;&#23447;&#21733;&#21513;&#25289;&#12299;&#20006;&#21015;&#31532;&#19968;&#12290;</p><p>&#19979;&#36913;&#32854;&#35477;&#31680;&#36913;&#26411;&#25105;&#35201;&#21435;&#29609;&#32781;&#65292;&#25925;&#20241;&#21002;&#19968;&#26399;&#65292;&#20808;&#31069;&#22823;&#23478;&#32854;&#35477;&#24555;&#27138;&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/p/68">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://github.com/apple/swift/releases/tag/swift-5.9.2-RELEASE">Swift 5.9.2 Released</a></strong></h3><p>&#20170;&#24180;&#26368;&#24460;&#30340;&#30332;&#29256;&#65292;Swift 5.9.2 &#22686;&#21152;&#20102; <a href="https://github.com/apple/swift-evolution/blob/main/proposals/0407-member-macro-conformances.md">SE-0407</a> &#21487;&#20197;&#21516;&#26178;&#25552;&#20379;&#22810;&#20491; protocol &#26044; macro &#30340;&#23459;&#21578;&#65292;&#20415;&#33021;&#21516;&#26178;&#23526;&#20316;&#22810;&#20491; protocol&#12290;</p><h3><strong><a href="https://developer.apple.com/news/?id=6e9odqgu">Apple &#23559;&#25512;&#20986;&#26781;&#20214;&#23450;&#20729;</a></strong></h3><p>&#26781;&#20214;&#23450;&#20729;&#65288;contigent pricing&#65289;&#20320;&#21487;&#20197;&#32102;&#24050;&#35330;&#38321; A &#30340;&#29992;&#25142;&#20197;&#20778;&#24800;&#20729;&#35330;&#38321; B&#65292;AB &#21487;&#20197;&#23660;&#26044;&#19981;&#21516;&#30340;&#38283;&#30332;&#32773;&#65292;&#19968;&#26376;&#26371;&#26377;&#26356;&#22810;&#32048;&#31680;&#37323;&#20986;&#12290;</p><h3><strong><a href="https://www.jessesquires.com/blog/2023/12/16/macbook-notch-and-menu-bar-fixes/">&#22914;&#20309;&#25937;&#22238;&#34987; Mac &#21507;&#25481;&#30340;&#28687;&#28023;</a></strong></h3><p>&#22914;&#26524; Macbook &#30340;&#28687;&#28023;&#21507;&#25481;&#22294;&#31034;&#36889;&#20214;&#20107;&#24120;&#22256;&#25854;&#20320;&#65292;&#36889;&#35041;&#26377;&#31687;<a href="https://www.jessesquires.com/blog/2023/12/16/macbook-notch-and-menu-bar-fixes/">&#38477;&#34880;&#22739;&#33391;&#26041;</a>&#12290;</p><p>&#20320;&#21487;&#20197;&#36879;&#36942;&#31532;&#19968;&#26041;&#30340;&#35373;&#23450;&#21435;&#35519;&#25972;&#20301;&#32622;&#20197;&#35731;&#37325;&#35201;&#30340;&#22294;&#31034;&#36960;&#38626;&#28687;&#28023;&#65292;&#25110;&#30452;&#25509;&#20351;&#29992;&#31532;&#19977;&#26041;&#30340;&#35299;&#27861;&#12290;</p><p>&#25105;&#20491;&#20154;&#20351;&#29992; Bartender&#65292;&#20294;&#22240;&#28858;&#23427;&#20351;&#29992;&#34722;&#24149;&#37636;&#24433;&#30340;&#21151;&#33021;&#20358;&#30906;&#20445;&#22294;&#31034;&#20301;&#32622;&#65292;&#25152;&#20197;&#26371;&#19981;&#26178;&#22320;&#30475;&#21040;&#25351;&#31034;&#29128;&#65292;&#23565;&#27492;&#25935;&#24863;&#30340;&#35531;&#30041;&#24847;&#12290;</p><p><a href="https://www.jessesquires.com/blog/2023/12/16/macbook-notch-and-menu-bar-fixes/">https://www.jessesquires.com/blog/2023/12/16/macbook-notch-and-menu-bar-fixes/</a></p><h3><strong><a href="https://github.com/hyperjeff/Physical">&#36889;&#23601;&#26159;&#29289;&#29702;</a></strong></h3><p>&#26368;&#36817;&#30332;&#29694;&#19968;&#20491;&#38750;&#24120;&#24615;&#24863;&#30340; repo&#65292;&#20778;&#38597;&#21448; Swifty &#30340;&#35486;&#27861;&#12289;composable&#12289;&#20197;&#21450;&#21547;&#26377;&#28415;&#28415;&#30340;&#29289;&#29702;&#23416;&#8943;&#8943;&#21934;&#20301;&#65281;</p><p><a href="https://github.com/hyperjeff/Physical">Physical</a> &#20351;&#29992;&#19978;&#30456;&#21934;&#30452;&#35258;&#65292;&#33287;&#26360;&#23531;&#32722;&#24931;&#19968;&#33268;&#65288;&#20687;&#26159; <code>12.kilometers</code>&#65289;&#65292;&#21487;&#20197;&#30452;&#25509;&#20351;&#29992;&#19981;&#21516;&#21934;&#20301;&#20114;&#30456;&#27604;&#36611;&#36939;&#31639;&#65292;&#20877;&#36681;&#25563;&#21934;&#20301;&#65292;&#30475;&#19968;&#19979;&#31684;&#20363;&#23601;&#33021;&#24863;&#21463;&#23427;&#30340;&#20778;&#32654;&#65292;&#38614;&#28982;&#25105;&#30446;&#21069;&#25033;&#35442;&#26159;&#29992;&#19981;&#21040;&#65292;&#19981;&#36942;&#30475;&#33879;&#20063;&#26159;&#36062;&#24515;&#24709;&#30446;&#12290;</p><pre><code><code>2.kelvin &#8594; .celsius            // -271.2.celsius
25.celsius &#8594; .fahrenheit       // 77 &#176;F

2 * 100.kelvin                 // 200 K
2 * 100.celsius                // Not a Thing

500.kelvin ^ 4                 // 6.25e10 K&#8308; 
500.fahrenheit ^ 4             // Not a Thing

30.fahrenheit &lt; 30.celsius     // true</code></code></pre><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/swift-openapi-generator-1-0-0-released/68964">Swift OpenAPI Generator 1.0.0 &#37323;&#20986;</a></strong></h3><p>&#24478;&#20170;&#24180;&#20116;&#26376;&#38283;&#28304;&#65292;&#32147;&#36942;&#21322;&#24180;&#30340;&#21162;&#21147;&#25210;&#36948;&#20102;&#27491;&#24335;&#29256;&#65292;&#21516;&#26178;&#20063;&#26356;&#26032;&#20102;<a href="https://swiftpackageindex.com/apple/swift-openapi-generator/1.1.0/documentation/swift-openapi-generator">&#25991;&#20214;</a>&#21644; <a href="https://swiftpackageindex.com/apple/swift-openapi-generator/1.1.0/tutorials/swift-openapi-generator">tutorial</a>&#65292;&#22914;&#26524;&#24050;&#32147;&#22312;&#20351;&#29992; alpha &#30340;&#26379;&#21451;&#65292;&#35201;&#27880;&#24847;&#22312;&#21319;&#32026;&#24460;&#38928;&#35373;&#30340; access modifier &#24478; <code>public/package</code> &#25913;&#25104; <code>internal</code>&#12290;</p><h3><strong><a href="https://forums.swift.org/t/embedded-swift-running-on-the-raspberry-pi-pico/69001">Embedded Swift on Raspberry Pi Pico</a></strong></h3><p>&#21916;&#27489;&#23526;&#20316;&#30340;&#26379;&#21451;&#32854;&#35477;&#31680;&#65288;&#38614;&#28982;&#21488;&#28771;&#27794;&#20551;&#26085;&#65289;&#19981;&#24833;&#27794;&#26481;&#35199;&#29609;&#20102;&#65292;<a href="https://www.raspberrypi.com/products/raspberry-pi-pico/">Pico</a> &#26159; Raspberry Pi &#20986;&#30340;&#19968;&#27454;&#24494;&#22411;&#25511;&#21046;&#22120;&#65292;&#26377;&#20154;&#25104;&#21151;&#22320;<a href="https://forums.swift.org/t/embedded-swift-running-on-the-raspberry-pi-pico/69001">&#23559; Embeded Swift &#20296;&#32626;&#21040;&#19978;&#38754;</a>&#65292;&#20877;&#25645;&#37197; <a href="https://github.com/apple/swift-mmio">Swift-MMIO</a> &#20358;&#30452;&#25509;&#25511;&#21046;&#26283;&#23384;&#22120;&#65292;&#38283;&#30332;&#30340;&#33298;&#26381;&#24230;&#25033;&#35442;&#26371;&#25552;&#26119;&#21040;&#24456;&#39640;&#30340;&#23652;&#27425;&#65292;&#19981;&#29992;&#20877;&#20351;&#29992;&#30456;&#23565;&#29033;&#38620;&#30340; C &#25110;&#27794;&#26377;&#22411;&#21029;&#23433;&#20840;&#30340; Micro Python&#65292;&#36889;&#35041;&#26377;<a href="https://chaos.social/@ole/111581017688628987">demo </a>&#12290;</p><p><a href="https://forums.swift.org/t/embedded-swift-running-on-the-raspberry-pi-pico/69001">https://forums.swift.org/t/embedded-swift-running-on-the-raspberry-pi-pico/69001</a></p><h3><strong><a href="https://forums.swift.org/t/regarding-swift-type-inference-compile-time-performance/49748">A Perf Issue to Type Inference</a></strong></h3><p>&#22312;&#20351;&#29992; Swift &#26178;&#24314;&#31435;&#19968;&#20491;&#26032;&#29289;&#26377;&#35377;&#22810;&#23531;&#27861;&#65292;&#22914;&#26524;&#20320;&#35469;&#28858;&#25351;&#26126;&#20102;&#22411;&#21029; compiler &#23601;&#26371;&#26377;&#26356;&#22909;&#30340;&#25928;&#29575;&#65292;&#20877;&#24819;&#24819;&#12290;&#20808;&#20358;&#20491;&#29468;&#35598;&#65292;&#19979;&#38754;&#22235;&#31278;&#23459;&#21578;&#27861;&#65292;&#20320;&#35469;&#28858;&#21738;&#19968;&#31278;&#23531;&#27861;&#26371;&#35731; compiler &#33457;&#26368;&#20037;&#30340;&#26178;&#38291;&#65288;&#31572;&#26696;&#22312;&#19979;&#38754;&#20808;&#21029;&#24448;&#19979;&#28369;&#65289;&#65311;</p><pre><code><code>let a = "hello, world!" 
let b = String("hello, world!") 
let c: String = .init("hello, world!") 
let d: String = "hello, world!" </code></code></pre><p>&#32080;&#26524;&#21487;&#33021;&#26371;&#20986;&#20046;&#20320;&#30340;&#24847;&#26009;&#65292;&#36889;&#26159;&#22240;&#28858;&#22312;&#26597;&#35426;&#26041;&#27861;&#25104;&#21729;&#26178;&#33457;&#20102;&#19981;&#23569;&#26178;&#38291;&#65288;&#23588;&#20854;&#26159; overloading &#30340;&#24773;&#27841;&#65289;&#65292;&#26377;&#33288;&#36259;&#21487;&#20197;&#22312;&#36889;&#35041;&#30475;<a href="https://forums.swift.org/t/regarding-swift-type-inference-compile-time-performance/49748/55">&#35443;&#32048;&#25506;&#35342;</a>&#65292;&#25105;&#30340;&#32080;&#35542;&#26159;&#22823;&#22810;&#31777;&#21934;&#24773;&#27841;&#19981;&#29992;&#22810;&#20570;&#20160;&#40636;&#35731; compiler &#33258;&#24049;&#25512;&#26039;&#23601;&#34892;&#65292;&#20351;&#29992;&#35079;&#38620;&#30340;&#24773;&#27841;&#20063;&#26159;&#22312;&#35722;&#25976;&#24460;&#26041;&#25351;&#26126;&#22411;&#21029;&#23601;&#33021;&#25033;&#20184;&#22823;&#22810;&#24773;&#27841;&#65292;&#19981;&#36942; Swift &#25972;&#39636;&#30340;&#32232;&#35695;&#25928;&#29575;&#25345;&#32396;&#22312;&#35722;&#24930;&#65292;&#38627;&#24618; M &#31995;&#21015;&#26230;&#29255;&#35201;&#37027;&#40636;&#29992;&#21147;&#25104;&#38263;&#65292;&#35731;&#22823;&#23478;&#25563;&#38651;&#33126;&#23601;&#26159;&#26368;&#22909;&#30340;&#25928;&#33021;&#21839;&#38988;&#35299;&#27861;&#12290;</p><p>&#23565;&#20102;&#65292;&#31572;&#26696;&#26159; C&#12290;</p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>Data leak</p><p><a href="https://mstdn.fr/@fatuus/111578025750623670">https://mstdn.fr/@fatuus/111578025750623670</a></p>]]></content:encoded></item><item><title><![CDATA[波報 #68 - DOOM 30歲]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/12/4 - 2023/12/10]]></description><link>https://pofat.substack.com/p/68</link><guid isPermaLink="false">https://pofat.substack.com/p/68</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Mon, 11 Dec 2023 00:00:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XBQW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95ca4f9c-cedd-494f-add0-94ddaaf7c3a9_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#22312;&#26412;&#26399;&#30332;&#21002;&#21069;&#19968;&#22825;&#26159; DOOM &#30332;&#34892;&#19977;&#21313;&#36913;&#24180;&#30340;&#26085;&#23376;&#65292;&#20841;&#20491;&#26680;&#24515;&#35069;&#20316;&#20154; John Romero &#33287; John Carmack &#65288;&#38617;&#37292;&#65289;&#19968;&#36215;&#25630;&#20102;&#20491;<a href="https://www.youtube.com/watch?v=QvAkaJsvAXs">&#30452;&#25773;</a>&#22823;&#32842;&#37027;&#20123;&#32147;&#20856;&#30340; FPS &#20316;&#21697;&#65292;&#25512;&#34214;&#32102;&#24819;&#27785;&#28024;&#25079;&#33290;&#24773;&#25079;&#30340;&#20154;&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/p/67">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://github.com/apple/swift-async-algorithms/releases/tag/1.0.0">Swift Async Algorithm 1.0</a></strong></h3><p>&#22522;&#26044; <code>AsyncSequence</code> &#65292;&#20197;&#26178;&#38291;&#28858; index &#30340;&#28436;&#31639;&#27861;&#24235;&#32066;&#26044; API &#31337;&#23450;&#65292;&#37323;&#20986; 1.0 &#27491;&#24335;&#29256;&#12290;</p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0415-function-body-macros.md">[SE-0415] Function Body Macros (Reviewing)</a></strong></h3><p>Swift Macros &#22312;&#25844;&#20805;&#31243;&#24335;&#30908;&#19978;&#24050;&#33021;&#20570;&#19981;&#23569;&#20107;&#65292;&#22686;&#21152;&#23459;&#21578;&#12289;&#36939;&#31639;&#24335;&#31561;&#65292;&#20294;&#26159;&#21371;&#28961;&#27861;&#30452;&#25509;&#23526;&#20570;&#25110;&#25844;&#20805;&#20989;&#25976;&#30340;&#31243;&#24335;&#30908;&#65292;SE-0415 &#24819;&#35201;&#35731;&#38283;&#30332;&#32773;&#21487;&#20197;&#30452;&#25509;&#29992; Macros &#23450;&#32681;&#25972;&#20491;&#20989;&#25976;&#30340;&#23526;&#20570;&#20839;&#23481;&#65288;<code>@attached(boyd) macro</code>&#65289;&#25110;&#26159;&#22312;&#20989;&#25976;&#35041;&#22686;&#21152;&#31243;&#24335;&#30908;&#65288;<code>@attached(preamble)</code>&#65289;&#65292;&#36889;&#20491;&#25552;&#26696;&#30475;&#36215;&#20358;&#38750;&#24120;&#24375;&#22823;&#65292;&#21487;&#26159;&#25105;&#35258;&#24471;&#30446;&#21069;&#30340;&#20839;&#23481;&#20006;&#19981;&#26159;&#24456;&#22909;&#29992;&#12290;</p><p>&#21069;&#32773;&#27604;&#36611;&#23481;&#26131;&#29702;&#35299;&#65292;&#30452;&#25509;&#25226;&#20989;&#25976;&#20839;&#23481;&#23450;&#32681;&#22312; Macros &#35041;&#65292;&#21482;&#35201;&#22871;&#29992;&#20989;&#25976;&#30340;&#23459;&#21578;&#23601;&#23436;&#20107;&#65292;&#20294;&#25105;&#23526;&#22312;&#24819;&#19981;&#20986; overloadin &#20043;&#22806;&#26371;&#38656;&#35201;&#37325;&#35206;&#25776;&#23531;&#39640;&#24230;&#30456;&#20284;&#20839;&#23481;&#20989;&#25976;&#30340;&#22580;&#21512;&#65292;&#27841;&#19988;&#36889;&#31278; macro &#19981;&#33021;&#30090;&#21152;&#12290;&#22312; variadic generic &#20043;&#21069;&#25105;&#20497;&#24471;<a href="https://developer.apple.com/documentation/combine/publisher/merge(with:_:_:_:_:_:_:)">&#25163;&#23531;&#22810;&#20491;&#27867;&#22411;&#30340; overloading</a>&#65292;&#20294;&#26377;&#20102; type packs &#24460;&#19981;&#20877;&#38656;&#35201;&#36889;&#40636;&#20570;&#65292;&#19988;&#28858;&#20102;&#32232;&#35695;&#30340;&#25928;&#33021;&#65292;&#30446;&#21069;&#25552;&#26696;&#30340;&#20839;&#23481;&#26159;&#22312;&#25776;&#23531; macro &#20839;&#23481;&#26178;&#19981;&#20570;&#22411;&#21029;&#27298;&#26597;&#65292;&#21482;&#22312;&#25033;&#29992;&#26178;&#27298;&#26597;&#65292;&#36889;&#26371;&#21914;&#36215;&#22823;&#23478;&#30333;&#26495;&#38988;&#30340; PTSD &#21543;&#12290;</p><p>&#33267;&#26044;&#24460;&#32773;&#65292;&#25844;&#20805;&#30340;&#26041;&#24335;&#26159;&#22312;&#29694;&#26377;&#30340;&#20989;&#25976;&#20839;&#23481;&#21069;&#24460;&#25554;&#20837;&#31243;&#24335;&#30908;&#65292;&#22196;&#26684;&#20358;&#35498;&#21482;&#26377;&#22312;&#21069;&#31471;&#25554;&#20837;&#32780;&#24050;&#65292;&#12300;&#24460;&#12301;&#30340;&#31243;&#24335;&#30908;&#26159;&#38752;&#22312; Macros &#35041;&#25554;&#20837; defer &#20358;&#36948;&#25104;&#65292;&#21487;&#20197;&#30090;&#21152; macro &#20197;&#32068;&#21512;&#19981;&#21516;&#30340;&#25844;&#20805;&#12290;</p><pre><code><code>@Logged
func g(a: Int, b: Int) -&gt; Int {
  return a + b
}

// expands into 

func g(a: Int, b: Int) -&gt; Int {
  log("Entering g(a: \(a), b: \(b))")
  defer {
    log("Exiting g")
  }
  return a + b
}</code></code></pre><p>&#20045;&#30475;&#36889;&#24456;&#36969;&#21512;&#29992;&#26044;&#25928;&#33021;&#36861;&#36452;&#65288;&#35201;&#25554;&#20837;&#30435;&#35222;&#21312;&#38291;&#30340;&#38283;&#22987;/&#32080;&#26463; &#65289;&#12289;log &#31561;&#65292;&#20294; <code>defer</code> &#28961;&#27861;&#21462;&#24471;&#26368;&#32066;&#36820;&#22238;&#20540;&#65292;&#20063;&#28961;&#27861;&#30693;&#36947;&#26159;&#21542;&#26159;&#34987; throw&#65292;&#29992;&#36884;&#20854;&#23526;&#26377;&#38750;&#24120;&#22810;&#38480;&#21046;&#65292;&#24471;&#36681;&#22238; <code>body</code> &#65292;&#20294; <code>body</code> &#28961;&#27861;&#30090;&#21152;&#12290;</p><p>&#29702;&#24819;&#24773;&#27841;&#26159;&#26377; <code>@Logged</code> <code>@Instrumented</code> &#65292;&#33021;&#22816;&#34389;&#29702; happy &#33287; unhappy path &#65288;&#27604;&#22914; throw&#65289;&#20877;&#30090;&#21152;&#21040;&#24863;&#33288;&#36259;&#30340;&#20989;&#25976;&#19978;&#65292;&#19981;&#36942;&#30446;&#21069;&#20284;&#20046;&#28961;&#35299;&#12290;</p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#24478;&#19979;&#38754;&#30340; <a href="https://forums.swift.org/t/distribute-xcframework-with-mixed-implementation-only-and-exported-dependencies/57863/5">bug &#22238;&#22577;&#26696;&#20363;</a>&#20013;&#65292;&#25105;&#20497;&#30475;&#21040;&#31038;&#30044;&#30340;&#26368;&#20339;&#29983;&#23384;&#21407;&#21063;&#65306;&#29699;&#19981;&#35201;&#22312;&#25163;&#19978;&#65292;&#26368;&#22909;&#20659;&#21040;&#40657;&#27934;&#35041;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://x.com/krzyzanowskim/status/1733189269143822569?s=20" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SvhF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe50ae9fe-ddca-4d8f-8bd7-e48f9c208faf_1514x194.png 424w, https://substackcdn.com/image/fetch/$s_!SvhF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe50ae9fe-ddca-4d8f-8bd7-e48f9c208faf_1514x194.png 848w, https://substackcdn.com/image/fetch/$s_!SvhF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe50ae9fe-ddca-4d8f-8bd7-e48f9c208faf_1514x194.png 1272w, https://substackcdn.com/image/fetch/$s_!SvhF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe50ae9fe-ddca-4d8f-8bd7-e48f9c208faf_1514x194.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SvhF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe50ae9fe-ddca-4d8f-8bd7-e48f9c208faf_1514x194.png" width="1456" height="187" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e50ae9fe-ddca-4d8f-8bd7-e48f9c208faf_1514x194.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:187,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://x.com/krzyzanowskim/status/1733189269143822569?s=20&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SvhF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe50ae9fe-ddca-4d8f-8bd7-e48f9c208faf_1514x194.png 424w, https://substackcdn.com/image/fetch/$s_!SvhF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe50ae9fe-ddca-4d8f-8bd7-e48f9c208faf_1514x194.png 848w, https://substackcdn.com/image/fetch/$s_!SvhF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe50ae9fe-ddca-4d8f-8bd7-e48f9c208faf_1514x194.png 1272w, https://substackcdn.com/image/fetch/$s_!SvhF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe50ae9fe-ddca-4d8f-8bd7-e48f9c208faf_1514x194.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[波報 #67 - Advent Calendar]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/11/27 - 2023/12/3]]></description><link>https://pofat.substack.com/p/67</link><guid isPermaLink="false">https://pofat.substack.com/p/67</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Mon, 04 Dec 2023 00:01:22 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/74d51896-d97d-4eb9-b258-7e7e9097ebbf_1179x1172.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#25105;&#24456;&#21916;&#27489; 12 &#26376;&#65292;&#22240;&#28858;&#26412;&#20154;&#32982;&#23376;&#24597;&#29105;&#21916;&#27489;&#20919;&#22825;&#27683;&#65292;&#20986;&#38272;&#19981;&#26371;&#27969;&#27735;&#12290;&#29694;&#22312;&#23621;&#20303;&#30340;&#22283;&#23478;&#35222; 12 &#22914;&#25136;&#22580;&#65292;&#20339;&#31680;&#36092;&#29289;&#28526;&#38750;&#24120;&#21487;&#24597;&#65292;&#20063;&#22240;&#27492;&#34903;&#36947;&#33287;&#22478;&#24066;&#22312;&#20837;&#22812;&#24460;&#26684;&#22806;&#32654;&#40599;&#65292;&#19981;&#36023;&#26481;&#35199;&#21482;&#36891;&#34903;&#30340;&#35441;&#38750;&#24120;&#20139;&#21463;&#65292;&#23601;&#36899;&#21435;&#32854;&#35477;&#27193;&#19979;&#28316;&#20912;&#25684;&#23617;&#32929;&#20063;&#38935;&#26377;&#35433;&#24847;&#12290;</p><p>&#21435;&#24180; 12 &#26376;&#25105;&#22312;&#20844;&#36335;&#26053;&#34892;&#65292;&#36335;&#19978;&#36935;&#21040;&#23567;&#38634;&#65292;&#21488;&#28771;&#22303;&#21253;&#23376;&#30340;&#25105;&#29609;&#24471;&#38750;&#24120;&#38283;&#24515;&#65292;&#21644;&#22823;&#23478;&#20998;&#20139;&#19968;&#24373;&#38634;&#26223;&#65292;&#31069;&#22823;&#23478; 12 &#26376;&#24841;&#24555;&#65292;&#24819;&#36023;&#26481;&#35199;&#19981;&#24833;&#27794;&#34249;&#21475;&#30340;&#23395;&#31680;&#26368;&#26834;&#20102;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9R0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc2cd093-e6a2-4b6e-b588-00ed5ed57963.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9R0d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc2cd093-e6a2-4b6e-b588-00ed5ed57963.heic 424w, https://substackcdn.com/image/fetch/$s_!9R0d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc2cd093-e6a2-4b6e-b588-00ed5ed57963.heic 848w, https://substackcdn.com/image/fetch/$s_!9R0d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc2cd093-e6a2-4b6e-b588-00ed5ed57963.heic 1272w, https://substackcdn.com/image/fetch/$s_!9R0d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc2cd093-e6a2-4b6e-b588-00ed5ed57963.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9R0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc2cd093-e6a2-4b6e-b588-00ed5ed57963.heic" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc2cd093-e6a2-4b6e-b588-00ed5ed57963.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2248713,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9R0d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc2cd093-e6a2-4b6e-b588-00ed5ed57963.heic 424w, https://substackcdn.com/image/fetch/$s_!9R0d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc2cd093-e6a2-4b6e-b588-00ed5ed57963.heic 848w, https://substackcdn.com/image/fetch/$s_!9R0d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc2cd093-e6a2-4b6e-b588-00ed5ed57963.heic 1272w, https://substackcdn.com/image/fetch/$s_!9R0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc2cd093-e6a2-4b6e-b588-00ed5ed57963.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#12298;<a href="https://pofat.substack.com/p/66">&#30475;&#21069;&#19968;&#26399; </a>| <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://www.apple.com/newsroom/2023/11/a-disability-advocate-preserves-his-voice-with-iphone/">&#22833;&#21435;&#30340;&#32882;&#38899;</a></strong></h3><p>Apple &#28858;&#36814;&#25509;&#22283;&#38555;&#36523;&#24515;&#38556;&#31001;&#32773;&#26085;&#65288;12&#26376;3&#34399;&#65289;&#65292;&#25512;&#20986;&#20102; iPhone &#28961;&#38556;&#31001;&#20351;&#29992;&#21151;&#33021;&#30340;&#24863;&#20154;&#24418;&#35937;&#24433;&#29255;&#65292;&#20027;&#35201;&#20171;&#32057; iOS 17 &#30340;&#12300;&#20491;&#20154;&#32882;&#38899;&#12301;&#21151;&#33021;&#12290;&#38754;&#23565;&#22833;&#35486;&#39080;&#38570;&#30340;&#20351;&#29992;&#32773;&#21487;&#20197;&#29992;&#36889;&#21151;&#33021;&#27704;&#36960;&#20445;&#23384;&#33258;&#24050;&#30340;&#32882;&#38899;&#65292;&#22914;&#20170;&#30475;&#20358;&#20006;&#19981;&#26159;&#20160;&#40636;&#26032;&#31310;&#30340;&#25216;&#34899;&#65292;&#20294;&#20197;&#25216;&#34899;&#22686;&#28155;&#29983;&#30340;&#32654;&#22909;&#36996;&#26159; Apple &#21426;&#23475;&#65292;&#32317;&#33021;&#22312;&#25216;&#34899;&#33287;&#20154;&#25991;&#30340;&#20132;&#21449;&#19978;&#24118;&#20358;&#24863;&#21205;&#12290;</p><p>&#19981;&#36942;&#35201;&#37636; 150 &#27573;&#35422;&#36996;&#26159;&#28415;&#32047;&#30340;&#65288;&#30446;&#21069;&#21482;&#25216;&#25588;&#33521;&#35486;&#65289;&#12290;</p><p><a href="https://www.apple.com/uk/newsroom/2023/11/a-disability-advocate-preserves-his-voice-with-iphone/">https://www.apple.com/uk/newsroom/2023/11/a-disability-advocate-preserves-his-voice-with-iphone/</a></p><p></p><h3><strong><a href="https://movingparts.io/pow">Pow &#38283;&#28304;</a></strong></h3><p>&#22914;&#26524;&#20320;&#26377;&#22312;&#25512;&#29305;&#19978;&#36861;&#36452; Robb B&#246;hnke &#25226;&#29609;&#21508;&#31278;<a href="https://x.com/DLX/status/1569666476533055490?s=20">&#37239;&#28843; SwiftUI &#36681;&#22580;&#29305;&#25928;</a>&#65292;&#25033;&#35442;&#19981;&#26371;&#37679;&#36942; Moving Part &#25512;&#20986;&#30340;&#22871;&#20214; Pow&#65292;&#21407;&#26412;&#26159;&#25910;&#36027;&#36575;&#39636;&#20294;&#22312;&#21644; Emerge Tools &#21512;&#20316;&#19979;&#24050;&#32147;<a href="https://x.com/emergetools/status/1729894343907975544?s=20">&#38283;&#28304;&#27492;&#23560;&#26696;</a>&#65292;&#36889;&#26159; SwiftUI &#30340; <a href="https://github.com/HeroTransitions/Hero">Hero</a> &#65292;SwiftUI &#38283;&#30332;&#32773;&#21315;&#33836;&#21029;&#37679;&#36942;&#21834;&#65281;</p><p><a href="https://movingparts.io/pow">&#35498;&#26126;&#32178;&#38913;</a>&#21487;&#20197;&#30452;&#25509;&#30475;&#25928;&#26524;&#65292;&#21407;&#22987;&#30908;<a href="https://github.com/EmergeTools/Pow">&#30001;&#27492;&#36914;</a>&#12290;</p><p></p><h3><strong><a href="https://www.youtube.com/watch?v=Wv_xeqIurGo&amp;t=1s">The Art of A Balanced Life</a></strong></h3><p><a href="https://github.com/krzysztofzablocki/Sourcery">Sourcery</a> &#33287; <a href="https://www.merowing.info/swifty-stack/">Swifty Stack</a> &#30340;&#20316;&#32773; Krzysztof Zab&#322;ocki &#22312;&#33521;&#22283; Swift Leeds &#32102;&#20102;&#22580;&#21029;&#30340;<a href="https://www.youtube.com/watch?v=Wv_xeqIurGo">&#38281;&#24149;&#28436;&#35611;</a>&#65292;&#28961;&#38364;&#20046;&#36575;&#39636;&#24037;&#31243;&#65292;&#32780;&#26159;&#38364;&#26044;&#20154;&#29983;&#30340;&#25216;&#34899;&#20998;&#20139;&#12290;&#36889;&#24433;&#29255;&#32102;&#20102;&#26368;&#36817;&#24537;&#24471;&#20841;&#38957;&#29138;&#30340;&#25105;&#19981;&#23569;&#25552;&#37266;&#65292;&#37325;&#26032;&#27298;&#35222;&#20102;&#20778;&#20808;&#38918;&#24207;&#65292;&#25512;&#34214;&#32102;&#26377;&#12300;&#19981;&#30693;&#36947;&#33258;&#24049;&#21040;&#24213;&#22312;&#24537;&#20160;&#40636;&#12301;&#36889;&#27171;&#36855;&#24785;&#30340;&#20154;&#12290;</p><p>&#21516;&#26178; Swift Leed 2023 &#30340;&#28436;&#35611;&#24433;&#29255;&#20063;&#24049;&#20840;&#37096;&#37323;&#20986;&#65292;&#37117;&#21487;&#20197;&#20197;&#22312;&#36889;&#20491;<a href="https://www.youtube.com/playlist?list=PL-wmxEeX64YRN8dTs88K6jot_NKmemMLb">&#25773;&#25918;&#21015;&#34920;</a>&#25214;&#21040;&#65292;SwiftUI &#30456;&#38364;&#20839;&#23481;&#25105;&#20491;&#20154;&#25512;&#34214; <a href="https://www.youtube.com/watch?v=WDRrsEAXvrE">SwiftUI Performance for Demanding Apps</a>&#65292;&#38364;&#26044; SwiftUI &#36939;&#20316;&#30340;&#26041;&#24335;&#20197;&#21450;&#23565;&#25928;&#33021;&#26377;&#24171;&#21161;&#30340; SwiftUI &#20351;&#29992;&#23039;&#21218;&#12290;</p><p></p><h3><strong><a href="https://github.com/XRealityZone/Let-us-xrOS">Let&#8217;s xrOS</a></strong></h3><p>&#30001;&#26044; Vision Pro &#23578;&#26410;&#30332;&#20296;&#65292;&#30446;&#21069;&#35201;&#39636;&#39511;&#20854;&#23427;&#38283;&#30332;&#32773;&#30340;&#40670;&#23376;&#21482;&#33021;&#19979;&#36617;&#21407;&#22987;&#30908;&#20877;&#33258;&#24049;&#32232;&#35695;&#65292;Let&#8217;s xrOS &#26159;&#38283;&#30332;&#20358;&#35299;&#27770;&#36889;&#21839;&#38988;&#30340; app &#65292;&#20320;&#21487;&#20197;&#22312;&#19978;&#38754;&#30332;&#20296;&#20320;&#30340; visionOS app &#65292;&#20063;&#21487;&#20197;&#30452;&#25509;&#39636;&#39511;&#31038;&#32676;&#30340;&#21109;&#24847;&#12290;</p><p><a href="https://github.com/XRealityZone/Let-us-xrOS">https://github.com/XRealityZone/Let-us-xrOS</a></p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/advent-of-code-2023/68749">Advent of Code 2023</a></strong></h3><p>12&#26376;&#26159;&#27472;&#32654;&#22283;&#23478;&#30340;&#37325;&#35201;&#31680;&#26085;&#65292;&#20182;&#20497;&#26377;&#20491;&#32722;&#20439;&#26159;&#25499;&#19978;&#32822;&#35477;&#20498;&#25976;&#26085;&#26310;&#65292;&#36889;&#22312;&#29694;&#20195;&#33258;&#28982;&#20063;&#28436;&#35722;&#25104;&#28608;&#28872;&#30340;&#36092;&#29289;&#25136;&#65292;&#19968;&#33324;&#22823;&#30526;&#30340; Advent Calendar &#26159;&#27599;&#22825;&#25139;&#19968;&#38982;&#31958;&#26524;&#20986;&#20358;&#21507;&#25110;&#32773;&#26159;&#19968;&#24373;&#32654;&#22941;&#20778;&#24800;&#21048;&#65292;&#36575;&#39636;&#24037;&#31243;&#24107;&#20497;&#21063;&#26377;&#35299;&#38988;&#25361;&#25136; <a href="https://adventofcode.com/">Adevent of Code</a> &#21487;&#20197;&#29609;&#65292;&#25105;&#24314;&#35696;&#27599;&#35299;&#19968;&#38988;&#23601;&#36023;&#19968;&#20491;&#26481;&#35199;&#29330;&#36062;&#33258;&#24049;&#65288;&#19981;&#30693;&#36947;&#36889;&#26159;&#20160;&#40636;&#30340;&#21487;&#35211;&#21566;&#21451; 13 <a href="https://13h.tw/">&#32178;&#35468;&#20171;&#32057;</a>&#65289;&#65292;&#20170;&#24180; Swift &#31038;&#32676;&#26377;&#20154;&#25552;&#20379; Swift &#30340;&#27169;&#26495;&#65292;&#21487;&#20197;&#29992; Xcode &#25110; CLI&#65292;&#20063;&#21487;&#20197;&#21152;&#20837; @SwiftLang &#30340;&#25490;&#34892;&#27036;&#20114;&#30456;&#33296;&#21237;&#12290;</p><p><a href="https://forums.swift.org/t/advent-of-code-2023/68749">https://forums.swift.org/t/advent-of-code-2023/68749</a></p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#21448;&#21040;&#20102;&#24180;&#24230;&#22238;&#39243;&#26178;&#38291;&#65292;&#20320;&#30340; Xcode crash &#24190;&#27425;&#20102;&#21602;</p><p><a href="https://mastodon.social/@simonbs/111510444808942009">https://mastodon.social/@simonbs/111510444808942009</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8rvd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef94633c-f7e2-4751-9d3e-a56ce654c616_1179x1889.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8rvd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef94633c-f7e2-4751-9d3e-a56ce654c616_1179x1889.png 424w, https://substackcdn.com/image/fetch/$s_!8rvd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef94633c-f7e2-4751-9d3e-a56ce654c616_1179x1889.png 848w, https://substackcdn.com/image/fetch/$s_!8rvd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef94633c-f7e2-4751-9d3e-a56ce654c616_1179x1889.png 1272w, https://substackcdn.com/image/fetch/$s_!8rvd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef94633c-f7e2-4751-9d3e-a56ce654c616_1179x1889.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8rvd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef94633c-f7e2-4751-9d3e-a56ce654c616_1179x1889.png" width="1179" height="1889" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef94633c-f7e2-4751-9d3e-a56ce654c616_1179x1889.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1889,&quot;width&quot;:1179,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8rvd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef94633c-f7e2-4751-9d3e-a56ce654c616_1179x1889.png 424w, https://substackcdn.com/image/fetch/$s_!8rvd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef94633c-f7e2-4751-9d3e-a56ce654c616_1179x1889.png 848w, https://substackcdn.com/image/fetch/$s_!8rvd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef94633c-f7e2-4751-9d3e-a56ce654c616_1179x1889.png 1272w, https://substackcdn.com/image/fetch/$s_!8rvd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef94633c-f7e2-4751-9d3e-a56ce654c616_1179x1889.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[波報 #66 - 25年後的軟體更新長怎樣]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/11/20 - 2023/11/26]]></description><link>https://pofat.substack.com/p/66</link><guid isPermaLink="false">https://pofat.substack.com/p/66</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Sun, 26 Nov 2023 21:59:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f9e97-91a4-440e-b45a-086ec8e6f043_416x554.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><h3><strong>&#36328;&#36234;&#22235;&#20998;&#20043;&#19968;&#19990;&#32000;&#30340;&#26356;&#26032;</strong></h3><p>&#23565;&#26044;&#38651;&#23376;&#36938;&#25138;&#29609;&#23478;&#32780;&#35328;&#65292;&#32085;&#23565;&#19981;&#38476;&#29983;&#30340;&#26159;&#26368;&#32147;&#20856;&#30340;FPS&#23556;&#25802;&#36938;&#25138;&#20043;&#19968;&#65292;&#12298;Half-Life&#12299;&#65288;&#25136;&#24900;&#26178;&#31354;&#65289;&#65292;&#22312;11&#26376;19&#26085;&#24950;&#31069;&#20854;&#30332;&#34892;25&#36913;&#24180;&#12290;&#28858;&#20102;&#24950;&#31069;&#36889;&#20491;&#37324;&#31243;&#30865;&#65292;&#36938;&#25138;&#38283;&#30332;&#22296;&#38538;&#37323;&#20986;&#20102;&#19968;&#20491;&#36229;&#35920;&#23500;&#30340;&#26356;&#26032;&#65292;&#20006;&#25552;&#20379;&#20102;&#35442;&#31995;&#21015;&#30340;&#31532;&#19968;&#20195;&#36938;&#25138;&#20813;&#36027;&#65288;&#20677;&#38480;&#26044;11/21&#65292;&#38614;&#28982;&#27492;&#26399;&#24050;&#36942;&#65292;&#20294;&#29694;&#22312;&#20173;&#26377;&#31179;&#29305;&#20778;&#24800;&#65289;&#12290;&#36889;&#27425;&#26356;&#26032;&#21487;&#35586;&#35488;&#24847;&#28415;&#28415;&#65292;&#19981;&#20677;&#21253;&#25324;&#20102;&#19968;&#33324;&#24615;&#30340;&#21839;&#38988;&#20462;&#27491;&#65292;&#36996;&#26032;&#22686;&#20102;&#22320;&#22294;&#12289;&#27169;&#22411;&#21644;&#20171;&#38754;&#12290;&#22312;&#25105;&#30475;&#20358;&#65292;&#20854;&#20013;&#26368;&#37325;&#35201;&#30340;&#26159;&#23565;&#36889;&#27454;&#24050;&#32147;&#25512;&#20986;25&#24180;&#30340;&#32147;&#20856;&#20316;&#21697;&#36914;&#34892;&#20102;&#20840;&#38754;&#30340;&#29694;&#20195;&#21270;&#25903;&#25588;&#65292;&#21253;&#25324;&#30495;&#27491;&#30340;&#23532;&#34722;&#24149;&#25903;&#25588;&#20197;&#21450;&#36890;&#36942;&#27491;&#24335;&#39511;&#35657;&#30340; Steam Deck &#25903;&#25588;&#12290;&#26377;&#38364;&#23436;&#25972;&#30340;&#26356;&#26032;&#20171;&#32057;&#65292;&#21487;&#21443;&#38321;&#28858;&#27490;&#35069;&#20570;&#30340;<a href="https://ref.gamer.com.tw/redir.php?url=https%3A%2F%2Fwww.half-life.com%2Fhalflife25%2F">&#23560;&#38272;&#32178;&#38913;</a>&#12290;&#25105;&#20063;&#24375;&#28872;&#25512;&#34214;&#35264;&#30475;&#19968;&#21516;&#37323;&#20986;&#30340;<a href="https://www.youtube.com/watch?v=TbZ3HzvFEto">&#32000;&#37636;&#30701;&#29255;</a>&#12290;&#20196;&#20154;&#39514;&#35357;&#65292;&#19968;&#27454;&#36938;&#25138;&#22312;&#30332;&#34892;25&#24180;&#24460;&#65292;&#21363;&#20351;&#22312;&#25972;&#20491;&#36575;&#30828;&#39636;&#38283;&#30332;&#21644;&#20296;&#32626;&#29872;&#22659;&#37117;&#32147;&#27511;&#20102;&#22825;&#32763;&#22320;&#35206;&#30340;&#35722;&#38761;&#65292;&#20173;&#28982;&#33021;&#22816;&#25512;&#20986;&#22914;&#27492;&#24040;&#24133;&#30340;&#26356;&#26032;&#12290;&#35731;&#25105;&#20497;&#33021;&#22312;&#29694;&#20195;&#38651;&#23376;&#36938;&#25138;&#35373;&#20633;&#20013;&#24863;&#21463;&#32769;&#27966;&#32147;&#20856;&#30340;&#39749;&#21147;&#65292;&#23526;&#23660;&#19968;&#31278;&#28010;&#28459;&#12290;</p><p>&#31350;&#31455;&#26159;&#24590;&#40636;&#20491;&#28010;&#28459;&#27861;&#21602;&#65311;&#25105;&#25130;&#21462;&#20102;&#20854;&#20013;&#19968;&#27573;&#65292;&#30456;&#20449;&#22823;&#23478;&#19968;&#35712;&#21363;&#25026;&#65306;</p><div class="pullquote"><p>&#12300;&#19981;&#38656;&#35201;&#21478;&#22806;&#36092;&#36023;&#38899;&#25928;&#21345;&#12301;</p></div><p>&#23567;&#25552;&#37266;&#65306;&#30475;&#25026;&#30340;&#20320;&#65292;&#24180;&#32000;&#24050;&#32147;&#26292;&#38706;&#20102; &#129394;</p><p></p><h3><strong>&#24341;&#25806;&#25937;&#36938;&#25138;</strong></h3><p>&#36913;&#26411;&#37636; weak self podcast <a href="https://weakself.dev/episodes/107">&#31532; 107 &#38598;&#26178;</a> &#21644; 13 &#32842;&#21040; Capcom &#30340; RE Engine &#26159;&#20491;&#38750;&#24120;&#25104;&#21151;&#30340;&#36938;&#25138;&#24341;&#25806;&#65292;&#24478;&#29609;&#23478;&#23652;&#38754;&#32780;&#35328;&#65292;&#20854;&#22312;&#19981;&#21516;&#24179;&#21488;&#30340;&#26368;&#20339;&#21270;&#30456;&#30070;&#29702;&#24819;&#65292;&#21508;&#24179;&#21488;&#30340;&#25928;&#33021;&#37117;&#24456;&#19981;&#37679;&#65292;&#22312;&#20027;&#27231;&#22280;&#20013;&#30446;&#21069;&#30828;&#39636;&#33021;&#21147;&#26368;&#20302;&#19979;&#30340; Switch &#20063;&#32371;&#20986;&#20102; Monster Hunter Rise &#36889;&#27171;&#20778;&#31168;&#30340;&#26368;&#20339;&#21270;&#32080;&#26524;&#65288;&#32178;&#21451;&#35413;&#20729;&#35498;&#36899;&#35712;&#21462;&#37117;&#24555;&#21040;&#19981;&#20687; Switch&#65289;&#65307; &#24478;&#38283;&#30332;&#32773;&#38754;&#32780;&#35328;&#65292;&#20854;&#33021;&#24555;&#36895;&#36845;&#20195;&#30340;&#38283;&#30332;&#26041;&#24335;&#22823;&#24133;&#22320;&#25552;&#21319;&#38283;&#30332;&#25928;&#29575;&#65292;&#20445;&#35657;&#20102;&#31337;&#23450;&#30340;&#20316;&#21697;&#30332;&#34892;&#65288;&#30475;&#30475;&#37027;&#19968;&#24180;&#19968;&#27454;&#30340; Resdient Evil &#31995;&#21015;&#65289;&#65292;&#20170;&#24180;&#20063;&#36879;&#36942;&#25903;&#25588; Metal &#31227;&#26893;&#21040; Apple Silicon &#19978;&#65292;&#35498;&#21040;&#36889;&#36523;&#28858;&#36575;&#39636;&#24037;&#31243;&#24107;&#25033;&#35442;&#33021;&#39636;&#26371;&#36889;&#26159;&#22810;&#40636;&#20625;&#20986;&#30340;&#22823;&#22411;&#36575;&#39636;&#20102;&#21543;&#65292;&#22914;&#26524; TGA &#26377; Best Game Engine &#25105;&#19968;&#23450;&#25237;&#32102; RE Engine&#12290; &#20854;&#25509;&#29677;&#20154;&#20063;&#22312;&#38283;&#30332;&#20013;&#65292;&#20195;&#34399;&#28858; REX Engine&#12290;&#26377;&#33288;&#36259;&#30340;&#20154;&#21487;&#20197;&#30475;&#19968;&#20491;&#26376;&#21069; Capcom Open Conference &#30340; session&#65306; <a href="https://www.youtube.com/watch?v=ibv9319dIQA">RE Engine &#30340;&#36942;&#21435;&#33287;&#26410;&#20358;</a>&#12290;&#26159;&#35498; RE Engine &#20173;&#28982;&#25505;&#29992; Garbage Collection &#20197;&#21450;&#29992; C# &#28858;&#20027;&#35201;&#38283;&#30332;&#35486;&#35328;&#65292;&#26377;&#37969;&#26044;&#20182;&#20497;&#33287; Apple &#36889;&#19968;&#24180;&#20358;&#30340;&#21512;&#20316;&#38364;&#20418;&#33287; Godot Engine &#26368;&#36817;&#25505;&#29992; Swift &#20316;&#28858;&#38283;&#30332;&#35486;&#35328;&#30340;<a href="https://www.youtube.com/watch?v=tzt36EGKEZo">&#32147;&#39511;</a>&#65292;&#26377;&#27794;&#26377;&#21487;&#33021; REX Engine &#20063;&#26377;&#27231;&#26371;&#32771;&#24942;&#25505;&#29992; Swift &#21602;&#65311;&#22914;&#26524;&#26159;&#36889;&#27171;&#65292;Capcom &#35531;&#25910;&#19979;&#25105;&#30340;&#23653;&#27511;&lt;(<em>_ _</em>)&gt;</p><p>&#21516;&#26178;&#24050;&#21215;&#24471;&#22235;&#20740;&#32654;&#20803;&#12289;&#38283;&#30332; 11 &#24180;&#20173;&#28961;&#30906;&#23450;&#19978;&#24066;&#26178;&#38291;&#65292;&#22810;&#27425;&#34987;&#31281;&#28858;&#36938;&#25138;&#21490;&#19978;&#26368;&#22823;&#35408;&#39449;&#26696;&#30340;&#26143;&#38555;&#20844;&#27665;&#65288;Star Engine&#65289;&#26368;&#36817;&#20844;&#20296;&#20102;&#23427;&#20497;&#30340;&#36938;&#25138;&#24341;&#25806; Star Engine <a href="https://www.youtube.com/watch?v=nWm_OhIKms8">demo &#24433;&#29255;</a>&#65292;&#25928;&#26524;&#24456;&#39514;&#20154;&#65292;&#21487;&#20197;&#24863;&#21463;&#21040;&#20182;&#20497;&#24819;&#35201;&#29992;&#36889;&#20491;&#24433;&#29255;&#25289;&#22238;&#29609;&#23478;&#30340;&#26399;&#24453;&#33287;&#20449;&#24515;&#65292;&#21487;&#24796;&#36938;&#25138;&#19981;&#26159;&#21482;&#26377;&#30059;&#38754;&#21644;&#20114;&#21205;&#32780;&#24050;&#21834;&#65281;&#25630;&#36889;&#40636;&#20037;&#37117;&#27794;&#26377;&#20491;&#24433;&#65292;&#31649;&#29702;&#23652;&#30340;&#33021;&#21147;&#38750;&#24120;&#20196;&#20154;&#25812;&#24515;&#65292;&#36889;&#27454;&#24049;&#32147;&#26159;&#22949;&#22949;&#30340;&#26377;&#29983;&#20043;&#24180;&#31995;&#21015;&#12290;</p><p>&#35498;&#21040;&#36889;&#23601;&#24819;&#21040;&#26368;&#36817;&#26377;&#22283;&#22806;&#29609;&#23478;&#24597;&#29609;&#19981;&#21040;GTA 6 &#32780;<a href="https://www.reddit.com/r/GTA6/comments/1829qgf/gta_6_anticipation_has_got_me_to_quit_smoking/">&#38283;&#22987;&#25106;&#33784;</a>&#65292;&#24341;&#36215;&#19968;&#27874;&#25106;&#33784;&#29105;&#28526;&#65292;&#21508;&#20301;&#29609;&#23478;&#20497;&#28858;&#20102;&#29609;&#36938;&#25138;&#35201;&#20445;&#25345;&#36523;&#39636;&#20581;&#24247;&#21834;&#65281;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K3sy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f0e26e-62b8-47d2-8dcf-e829728568f8_1314x640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K3sy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f0e26e-62b8-47d2-8dcf-e829728568f8_1314x640.png 424w, https://substackcdn.com/image/fetch/$s_!K3sy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f0e26e-62b8-47d2-8dcf-e829728568f8_1314x640.png 848w, https://substackcdn.com/image/fetch/$s_!K3sy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f0e26e-62b8-47d2-8dcf-e829728568f8_1314x640.png 1272w, https://substackcdn.com/image/fetch/$s_!K3sy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f0e26e-62b8-47d2-8dcf-e829728568f8_1314x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K3sy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f0e26e-62b8-47d2-8dcf-e829728568f8_1314x640.png" width="1314" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35f0e26e-62b8-47d2-8dcf-e829728568f8_1314x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:1314,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!K3sy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f0e26e-62b8-47d2-8dcf-e829728568f8_1314x640.png 424w, https://substackcdn.com/image/fetch/$s_!K3sy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f0e26e-62b8-47d2-8dcf-e829728568f8_1314x640.png 848w, https://substackcdn.com/image/fetch/$s_!K3sy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f0e26e-62b8-47d2-8dcf-e829728568f8_1314x640.png 1272w, https://substackcdn.com/image/fetch/$s_!K3sy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35f0e26e-62b8-47d2-8dcf-e829728568f8_1314x640.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#12298;<a href="https://pofat.substack.com/p/65">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/se-0413-typed-throws/68507">[SE-0413] Typed Throws (Reviewing)</a></strong></h3><p>Huge!</p><p>&#19981;&#21482;&#26159; proposal &#26412;&#36523;&#30340;&#38263;&#24230;&#65292;&#36889;&#20491;&#21151;&#33021;&#30340;&#37325;&#35201;&#24615;&#21516;&#26178;&#20063;&#38750;&#24120;&#24040;&#22823;&#12290;&#30456;&#20449;&#22823;&#23478;&#37117;&#30693;&#36947; Swift &#26377; try catch&#65292;&#20294;&#22312;&#35373;&#35336; api &#30340;&#37679;&#35492;&#34389;&#29702;&#26178;&#25243;&#20986; Error &#21487;&#33021;&#19981;&#26371;&#26159;&#22823;&#23478;&#20778;&#20808;&#24819;&#35201;&#25505;&#29992;&#30340;&#35299;&#27861;&#65292;&#20027;&#22240;&#23601;&#26159; catch API &#32102;&#20320;&#30340;&#26159; <code>any Error</code> &#36889;&#27171;&#30340;&#19968;&#20491;&#36890;&#29992;&#22411;&#21029;&#65292;&#23565;&#26044;&#24375;&#35519;&#22411;&#21029;&#23433;&#20840;&#30340; Swift &#36889;&#20491;&#35373;&#35336;&#39023;&#24471;&#20104;&#30462;&#65292;&#22240;&#28858;&#20320;&#21482;&#33021;&#22312; runtime cast &#25214;&#20986;&#30495;&#27491;&#30340; Error &#22411;&#21029;&#65292;&#26356;&#28961;&#27861;&#31406;&#33289;&#34389;&#29702;&#25152;&#26377;&#21487;&#33021;&#30340;&#37679;&#35492;&#65292;&#32305;&#20351;&#20320;&#25793;&#26377;&#20840;&#37096;&#37679;&#35492;&#31278;&#39006;&#30340;&#30693;&#35672;&#12290;&#21478;&#22806;&#19968;&#20491;&#32570;&#40670;&#26159; existential container &#65288;<code>any Error</code>&#65289;&#26371;&#22686;&#21152; binary size&#65292;heap allocation &#20197;&#21450; performance overhead&#65292;&#22240;&#28858;&#35201;&#22810;&#24314;&#19968;&#20491; container &#65292;&#23565;&#26044;&#36039;&#28304;&#26377;&#38480;&#30340;&#29872;&#22659;&#19981;&#21033;&#65292;&#19988;&#37679;&#35492;&#34389;&#29702;&#22312;&#36889;&#31278;&#29872;&#22659;&#36890;&#24120;&#24456;&#24517;&#35201;&#12290;</p><p>&#36889;&#20491;&#25552;&#26696;&#23559;&#21063;&#26159;&#35731;&#20320;&#25351;&#23450;&#25243;&#20986;&#30340;&#37679;&#35492;&#22411;&#21029;&#65292;&#22312; catch &#36889;&#20491;&#26041;&#27861;&#26178;&#20320;&#20063;&#26371;&#21462;&#24471;&#35442;&#37679;&#35492;&#22411;&#21029;&#32780;&#19981;&#26159; <code>any Error</code>&#65292;&#38500;&#38750;&#20320;&#30340; <code>do</code> &#35041;&#38754;&#25243;&#20986;&#20841;&#31278;&#19981;&#21516;&#39006;&#22411;&#30340;&#37679;&#35492;&#65292;&#27492;&#26178; catch &#35041;&#25343;&#21040;&#30340;&#26371;&#26159; <code>any Error</code>&#12290;</p><pre><code><code>func callCat() throws(CatError) -&gt; Cat {
  if Int.random(in: 0..&lt;24) &lt; 20 {
    throw .sleeps
  }
  // ...
}</code></code></pre><p>&#30070;&#28982;&#20320;&#20063;&#21487;&#20197; <code>throws(any Error)</code>&#65292;&#31561;&#21516;&#26044; <code>throws</code>&#65307;&#25110;&#32773; <code>throws(Never)</code> &#65292;&#23601;&#26159;&#19968;&#33324;&#30340; non-throwing&#12290;</p><p>&#26368;&#24460;&#25105;&#20497;&#21487;&#20197;&#19981;&#29992;&#20877;&#20351;&#29992; rethrow</p><p><code>func map&lt;U&gt;(body: (Element) throws -&gt; U) rethrows -&gt; [U]</code></p><p>&#21487;&#20197;&#25913;&#25104;</p><p><code>func map&lt;U, E: Error&gt;(body: (Element) throws(E) -&gt; U) throws(E) -&gt; [U]</code></p><p>&#36889;&#35041;&#26368;&#37325;&#35201;&#30340;&#38364;&#37749;&#19981;&#26159;&#37679;&#35492;&#22411;&#21029;&#20855;&#39636;&#21270;&#65292;&#32780;&#26159;&#12300;&#23565;&#31243;&#24335;&#22519;&#34892;&#20839;&#23481;&#30340;&#32004;&#26463;&#21453;&#26144;&#22312;&#20989;&#25976;&#31805;&#21517;&#19978;&#12301;&#12290;&#24460;&#32773;&#20013;&#21807;&#19968;&#19999;&#20986; Error &#30340;&#26041;&#24335;&#21482;&#33021;&#38752;&#22519;&#34892; <code>body</code>&#65292;&#30050;&#31455; <code>Error</code> &#36889;&#20491; protocol &#27794;&#26377;&#23450;&#32681; initializer &#12290;&#22914;&#27492;&#19968;&#20358; compiler &#20415;&#19981;&#38656;&#35201;&#21435;&#30906;&#35469;&#20320;&#23531;&#30340;&#31243;&#24335;&#20839;&#23481;&#65288;&#25226;&#36012;&#20219;&#19999;&#32102;&#38283;&#30332;&#32773;&#21862;&#65289;&#20063;&#33021;&#30906;&#20445;&#36889;&#35041;&#30340;&#37679;&#35492;&#20659;&#36958;&#26159;&#27491;&#30906;&#30340;&#12290;</p><p>Chris Lattner &#20063;<a href="https://forums.swift.org/t/se-0413-typed-throws/68507/39">&#22823;&#21147;&#35738;&#36062;&#36889;&#20491;&#25552;&#26696;</a>&#12290;</p><h3><strong><a href="https://github.com/apple/swift-mmio/tree/main">Swift MMIO</a></strong></h3><p><a href="http://github.com/apple/swift-mmio">swift-mmio</a> &#26159;&#20491;&#26041;&#20415;&#30452;&#23384;&#21462;&#35352;&#25014;&#39636;&#65292;&#19988;&#20173;&#28982;&#20445;&#26377; type safety &#29305;&#24615;&#30340;&#22871;&#20214;&#65292;&#20027;&#35201;&#29992;&#26044; Embedded Swift &#36889;&#31278;&#24120;&#38656;&#35201;&#25805;&#20316;&#26283;&#23384;&#22120;&#30340;&#22580;&#21512;&#12290;&#36889;&#20491;&#22871;&#20214;&#35731;&#25105;&#39636;&#26371;&#21040; Swift &#33267;&#20170;&#30340;&#30332;&#23637;&#30340;&#30906;&#24118;&#20358;&#19981;&#23569;&#21487;&#33021;&#24615;&#65292;&#33021;&#22312;&#20302;&#38542;&#25805;&#20316;&#30340;&#22580;&#21512;&#20013;&#21033;&#29992;&#29694;&#20195;&#35486;&#35328;&#30340;&#39640;&#38542;&#29305;&#24615;&#65292;&#33287; C &#21644; C++ &#30340;&#27211;&#25509;&#24050;&#32147;&#25104;&#29087;&#65288;C&#22522;&#26412;&#19978;&#26159;&#30452;&#25509;&#25805;&#20316;&#65289;&#65292;&#30070;&#28982;&#21407;&#29983; API &#20006;&#28961; type safety&#65292;&#24471;&#36879;&#36942;&#35486;&#35328;&#26412;&#36523;&#30340;&#21151;&#33021;&#36948;&#25104;&#36889;&#30446;&#30340;&#65292;&#20877;&#21152;&#19978; Swift macro &#20358;&#31777;&#21270;&#21628;&#21483;&#26041;&#30340;&#25805;&#20316;&#65292;&#36889;&#22602;&#26410;&#20358;&#21487;&#26399;&#21834;&#12290;</p><p><a href="https://forums.swift.org/t/introducing-swift-mmio/68525">https://forums.swift.org/t/introducing-swift-mmio/68525</a></p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#24819;&#24819;&#36938;&#25138;&#24037;&#31243;&#24107;&#36996;&#35201;&#26356;&#26032; 25 &#24180;&#21069;&#20986;&#29256;&#30340;&#36575;&#39636;&#38935;&#24920;&#65292;&#30495;&#30340;&#26159;&#38752;&#24859;&#22312;&#25903;&#25744;&#21834;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://mastodon.gamedev.place/@eks/111465499812220450" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mcm9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f9e97-91a4-440e-b45a-086ec8e6f043_416x554.png 424w, https://substackcdn.com/image/fetch/$s_!mcm9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f9e97-91a4-440e-b45a-086ec8e6f043_416x554.png 848w, https://substackcdn.com/image/fetch/$s_!mcm9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f9e97-91a4-440e-b45a-086ec8e6f043_416x554.png 1272w, https://substackcdn.com/image/fetch/$s_!mcm9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f9e97-91a4-440e-b45a-086ec8e6f043_416x554.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mcm9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f9e97-91a4-440e-b45a-086ec8e6f043_416x554.png" width="416" height="554" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/329f9e97-91a4-440e-b45a-086ec8e6f043_416x554.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:554,&quot;width&quot;:416,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://mastodon.gamedev.place/@eks/111465499812220450&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!mcm9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f9e97-91a4-440e-b45a-086ec8e6f043_416x554.png 424w, https://substackcdn.com/image/fetch/$s_!mcm9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f9e97-91a4-440e-b45a-086ec8e6f043_416x554.png 848w, https://substackcdn.com/image/fetch/$s_!mcm9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f9e97-91a4-440e-b45a-086ec8e6f043_416x554.png 1272w, https://substackcdn.com/image/fetch/$s_!mcm9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f9e97-91a4-440e-b45a-086ec8e6f043_416x554.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://mastodon.gamedev.place/@eks/111465499812220450">https://mastodon.gamedev.place/@eks/111465499812220450</a></p><p></p><p>&#19981;&#35201;&#37679;&#36942;&#20037;&#36949;&#30340; weak self &#26032;&#38598;&#25976;&#65292;&#28415;&#28415;&#30340;&#36938;&#25138;&#21644;&#21240;&#25943;</p><p><a href="https://www.youtube.com/watch?v=TbZ3HzvFEto">https://weakself.dev/episodes/107</a></p><p></p><div><hr></div><h2><strong>&#128466;&#65039; &#30772;&#36027;&#28165;&#21934;</strong></h2><p>&#28858;&#20102;&#20844;&#38283;&#36879;&#26126;&#36106;&#21161;&#36027;&#21435;&#21521;&#65292;&#22312;&#36889;&#21644;&#22823;&#23478;&#22577;&#21578;&#20351;&#29992;&#32048;&#38917;&#12290;&#36225;&#33879;&#31179;&#29305;&#30495;&#30340;&#26159;&#22823;&#36023;&#29305;&#36023;&#65306;</p><ul><li><p><a href="https://store.steampowered.com/app/1796220/Laika_Aged_Through_Blood/">Laika: Aged Through Blood</a> &#65293;&#32654;&#34899;&#20778;&#31168;&#12289;&#37197;&#27138;&#20625;&#20986;&#65292;&#29609;&#27861;&#26032;&#31310;&#65288;&#20294;&#26159;&#26371;&#25163;&#24537;&#33139;&#20098;&#65289;&#30340;&#26411;&#19990;&#24290;&#22303;&#39080;&#20316;&#21697;&#65292;&#24375;&#21147;&#25512;&#34214;&#12290;</p></li><li><p><a href="https://store.steampowered.com/app/1065310/Evil_West/">Evil West</a> &#65293;&#35413;&#20729;&#20013;&#31561;&#65292;&#20294;&#25343;&#33879;&#27085;&#21040;&#34389;&#20098;&#36703;&#30340;&#21560;&#34880;&#39740;&#29557;&#20154;&#33021;&#37679;&#36942;&#21966;&#65311;&#36889;&#20491;&#20027;&#38988;&#26159;&#25105;&#30340;&#33756;</p></li><li><p><a href="https://store.steampowered.com/app/1201270/A_Space_for_the_Unbound/">A Space for the Unbound</a> &#65293;Steam &#19978;&#22909;&#35413;&#22914;&#28526;&#65292;&#38750;&#24120;&#39514;&#20154;&#65292;&#20358;&#33258;&#21360;&#23612;&#22296;&#38538;&#30340;&#20316;&#21697;&#65292;&#22580;&#26223;&#33287;&#21488;&#28771;&#39080;&#26684;&#30456;&#36817;&#12290;&#35430;&#29609;&#26178;&#33021;&#25720;&#35987;&#25105;&#23601;&#27770;&#23450;&#35201;&#36023;&#20102;&#65288;&#65311;&#65281;&#65289;&#65292;&#22909;&#35413;&#19968;&#33268;&#22320;&#31281;&#35738;&#20854;&#25944;&#20107;&#38750;&#24120;&#31934;&#24425;&#65292;&#25105;&#24456;&#26399;&#24453;&#12290;&#32769;&#23526;&#35498;&#36023;&#36889;&#36938;&#25138;&#26178;&#25105;&#24456;&#24863;&#35613; Steam Deck &#22823;&#22823;&#22320;&#25171;&#38283;&#20102;&#25105;&#30340;&#36938;&#25138;&#35222;&#37326;&#65292;&#27794;&#26377;&#36889;&#20027;&#27231;&#25105;&#23601;&#27794;&#27231;&#26371;&#36328;&#36275;&#36889;&#39006;&#22411;&#65288;&#25110;&#35215;&#27169;&#65289;&#30340;&#36938;&#25138;&#12290;</p></li><li><p><a href="https://store.steampowered.com/app/1623940/Bramble_The_Mountain_King/">Bramble: The Mountain King</a> &#65293;&#24656;&#24598;&#29983;&#23384;&#65291;&#21271;&#27472;&#65291;&#36229;&#32026;&#22909;&#35413; &#65309; &#28961;&#27861;&#37679;&#36942;&#12290;</p></li></ul>]]></content:encoded></item><item><title><![CDATA[波報 #65 - 午餐配什麼？iOS 開發啊]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/11/6 - 2023/11/12]]></description><link>https://pofat.substack.com/p/65</link><guid isPermaLink="false">https://pofat.substack.com/p/65</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Mon, 13 Nov 2023 01:00:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!v606!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>I. &#26368;&#36817;&#22312;&#24605;&#32771; side project &#26178;&#35258;&#24471;&#37027;&#40636;&#24859;&#25171;&#36938;&#25138;&#65292;&#21448;&#22312;&#23531; Swift &#36913;&#22577;&#30340;&#25105;&#25033;&#35442;&#35430;&#33879;&#29992; Swift &#20358;&#20570;&#19968;&#27454;&#36938;&#25138;&#65292;&#27794;&#24819;&#21040;&#23601;&#30475;&#21040;&#20102;&#36938;&#25138;&#24341;&#25806;&#20351;&#29992; Swift &#20358;&#20570;&#28858;&#38283;&#30332;&#35486;&#35328;&#30340;&#35338;&#24687;&#65281;&#22522;&#26044;&#25105;&#26412;&#20154;&#26159;&#20491;&#34892;&#21205;&#19978;&#30340;&#20367;&#20754;&#65292;&#25152;&#20197;&#25105;&#25171;&#31639;&#22810;&#29609;&#24190;&#27454;&#36938;&#25138;&#25910;&#38598;&#38728;&#24863;&#24460;&#20877;&#30475;&#35201;&#24590;&#40636;&#38283;&#22987;&#36914;&#34892; &#127770;</p><p>II. Steam Deck OLED &#21319;&#32026;&#36229;&#26377;&#24863;&#65292;&#26368;&#20196;&#20154;&#35436;&#30149;&#30340;&#25955;&#29105;&#20063;&#26377;&#25913;&#21892;&#65292;&#22909;&#24515;&#21205;&#65281;</p><p>&#12298;<a href="https://pofat.substack.com/p/64">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://x.com/ethanhuang13/status/1720259001387221147?s=20">&#127916;iOS &#38283;&#30332;&#37197;&#39151;&#21507;</a></strong></h3><p>13 &#30340;&#26032;&#21697;&#20316;&#21697;&#20197;&#21450;&#26032;&#30340;&#36523;&#20998;&#65306;YouTuber <s>&#22240;&#28858;&#22826;&#20037;&#27794;&#37636;&#38899;&#20102;</s></p><blockquote><p>&#26377;&#26178;&#20505;&#25105;&#20497;&#32570;&#23569;&#30340;&#19981;&#26159;&#26356;&#22909;&#30340;&#23416;&#32722;&#32032;&#26448;&#65292;&#32780;&#26159;&#21205;&#27231;&#12290;&#31680;&#30446;&#30340;&#30446;&#27161;&#26159;&#36629;&#39686;&#35264;&#30475;&#65288;&#37197;&#39151;&#21507;&#22909;&#28040;&#21270;&#65289;&#30340;&#36942;&#31243;&#20013;&#65292;&#20063;&#35377;&#35731;&#20320;&#23565;&#26576;&#20123;&#20027;&#38988;&#29986;&#29983;&#33288;&#36259;&#65374;</p></blockquote><p><a href="https://x.com/ethanhuang13/status/1720259001387221147?s=20">https://x.com/ethanhuang13/status/1720259001387221147?s=20</a></p><p></p><h3><strong><a href="https://www.swift.org/blog/swift-5.9-backtraces/">On-Crash Backtraces in Swift</a></strong></h3><p>Apple &#22823;&#22823;&#22320;&#25913;&#36914;&#20102; crash &#30340; log&#65292;&#21407;&#26412;&#22312;&#38750; iOS &#24179;&#21488;&#19978; crash &#26178;&#24456;&#22823;&#27231;&#29575;&#20320;&#21482;&#26371;&#30475;&#26576;&#20491; child process &#25499;&#20102;&#30340;&#28961;&#29992;&#35338;&#24687;&#65292;&#29694;&#22312;&#26371;&#27491;&#20986;&#29694; call stacks&#65292;&#36996;&#25903;&#25588; structured concurrency&#65292;&#21487;&#20197;&#27491;&#30906;&#22320;&#25214;&#20986; call path/stack&#65307;&#26368;&#24375;&#22823;&#30340;&#21151;&#33021;&#36996;&#26159;&#23427;&#26371;&#20572;&#30041;&#19968;&#27573;&#26178;&#38291;&#65292;&#35731;&#20320;&#21360;&#20986;call stack&#12289;register &#20839;&#23481;&#31561;&#36039;&#35338;&#65292;&#29978;&#33267; attach debugger&#12290;&#19981;&#36942;&#26368;&#20027;&#35201;&#21463;&#24800;&#30340;&#26371;&#26159; Linux &#24179;&#21488;&#65292;&#22240;&#28858;&#22312; Apple &#24179;&#21488;&#21487;&#20197;&#21462;&#24471; crash report &#65292;&#20294; Linux &#20006;&#28961;&#27492;&#20839;&#24314;&#21151;&#33021;&#12290;</p><p></p><h3><strong><a href="https://github.com/EmergeTools/SnapshotPreviews-iOS">Snapshot SwiftUI Previews</a></strong></h3><p>&#25105;&#26368;&#21916;&#27489;&#30340;&#20844;&#21496; EmergeTools &#21448;&#26377;&#37239;&#28843;&#26032;&#20316;&#21697; &#65293; <a href="https://github.com/EmergeTools/SnapshotPreviews-iOS">SnapshotPreviews</a>&#12290;&#36889;&#20491;&#24037;&#20855;&#26371;&#33258;&#21205;&#24171;&#20320;&#25130;&#22294;&#21644;&#27604;&#23565;&#20197;&#22312; CI &#38542;&#27573;&#25429;&#25417;&#21839;&#38988;&#65292;&#32780;&#19988;&#20320;&#19981;&#38656;&#35201;&#23531;&#20219;&#20309;&#28204;&#35430;&#30340;&#31243;&#24335;&#30908;&#65292;&#21482;&#35201;&#20320;&#26377; Preview&#12290;EmergeTools &#20849;&#21516;&#21109;&#36774;&#20154;&#20043;&#19968;<a href="https://x.com/sond813/status/1723767324593750041?s=20">&#20998;&#20139;&#23526;&#29694;&#30340;&#23494;&#35363;</a>&#65292;&#39318;&#20808; Apple &#26377;&#20123; framework &#26371;&#26377;&#19981;&#20844;&#38283;&#30340;&#20844;&#38283; symbol&#65292;&#21363; linker &#30475;&#24471;&#21040; symbol (tbd &#27284;&#26696;&#35041;&#26377;&#65289;&#20294; compiler &#30475;&#19981;&#21040;&#65288;swiftinterface &#35041;&#27794;&#26377;&#23459;&#21578;&#65289;&#65292;&#36879;&#36942;&#21069;&#32773;&#25214;&#21040; Preview &#30340; getter &#65292;&#20877;&#25226;&#35442;&#26041;&#27861;&#21152;&#20837; swiftinterface &#23601;&#33021;&#20351;&#29992;&#35442; private API&#65292;&#30070;&#28982;&#36889;&#21482;&#33021;&#22312;&#33258;&#24050;&#38283;&#30332;&#26178;&#20351;&#29992;&#12290;</p><p></p><h3><strong><a href="https://media.ccc.de/v/godotcon2023-57866-swift-godot-fixing-the-multi-million-dollar-mistake#t=2891">SwiftGodot : Fixing the Multi-million dollar mistake</a></strong></h3><p><a href="https://github.com/godotengine/godot">Godot</a> &#26159;&#20491;&#38283;&#28304;&#30340; 2D/3D &#36938;&#25138;&#24341;&#25806;&#65292;Xamarin &#65288;&#29992; C# &#38283;&#30332;&#36328;&#24179;&#21488; mobile app &#30340;&#36575;&#39636;&#65289;&#30340;&#21109;&#36774;&#20154;Miguel de Icaza &#21463; Swift &#30340;&#23433;&#20840;&#24615;&#21644;&#35352;&#25014;&#39636;&#31649;&#29702;&#27169;&#24335;&#21560;&#24341;&#65292;&#20197;&#21450;&#33021;&#21644; C/Cpp interop &#30340;&#33021;&#21147;&#65292;&#20415;&#36879;&#36942; Extension &#20358;&#35731; Swift &#25104;&#28858;&#20854;&#38283;&#30332;&#35486;&#35328;&#20043;&#19968;&#65292;&#32780;&#19988;&#22312; macOS &#19978;&#36996;&#33021;&#29992; Xcode &#20358; debug&#65292;&#19968;&#20860;&#20108;&#39015;&#12290;&#20182;&#22312; godotcon 2023 &#20013;&#30340;<a href="https://media.ccc.de/v/godotcon2023-57866-swift-godot-fixing-the-multi-million-dollar-mistake#t=107">&#28436;&#35611;</a>&#20171;&#32057; Swift &#29983;&#24907;&#31995;&#24118;&#20358;&#30340;&#22909;&#34389;&#65292;&#20197;&#21450; Optional &#21644;&#35352;&#25014;&#39636;&#31649;&#29702;&#12289;&#23433;&#20840;&#27298;&#26597;&#31561;&#21151;&#33021;&#22914;&#20309;&#24171;&#21161;&#36938;&#25138;&#38283;&#30332;&#12290;&#25105;&#20063;&#26159;&#30475;&#20102;&#24433;&#29255;&#25165;&#30693;&#36947; Swift &#26377; runtime &#30340;&#21152;&#27861; overflow &#27298;&#26597;&#65292;&#36996;&#26377;&#12300;&#31649;&#23427;&#30340;&#25105;&#23601;&#35201;&#21152;&#12301;&#30340;&#21152;&#27861;&#21487;&#20197;&#28961;&#35222;&#27298;&#26597;&#30452;&#21152;&#65288;<code>&amp;+</code>) &#65292;&#30475;&#23436;&#29105;&#34880;&#37117;&#26119;&#28331;&#20102;&#65281;</p><p></p><h3><strong><a href="https://mastodon.design/@hidde/111358108780823799">Better way to printChanges()</a></strong></h3><p>&#24120;&#29992; <code>Self._printChanges()</code> &#20358; debug SwiftUI &#30340;&#26379;&#21451;&#20497;&#65292;Xcode 15.1 &#38283;&#22987;&#26377;&#26356;&#26834;&#30340;&#24037;&#20855;&#20102; &#65293; <code>Self._logChanges()</code> &#65292;&#23427;&#20351;&#29992; OSLogger &#32780;&#19981;&#26159; print&#65292;&#25645;&#37197; Xcode 15 &#36914;&#21270;&#30340; debugger console &#26371;&#35731;&#20320;&#30340; debug &#39636;&#39511;&#20877;&#19978;&#19968;&#23652;&#27155; &#12290;</p><p><a href="https://mastodon.design/@hidde/111358108780823799">https://mastodon.design/@hidde/111358108780823799</a></p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/progress-toward-the-swift-6-language-mode/68315">Progress toward the Swift 6 language mode</a></strong></h3><p>Swift 6 &#24050;&#23436;&#25104;&#35377;&#22810;&#24180;&#21021;<a href="https://forums.swift.org/t/design-priorities-for-the-swift-6-language-mode/62408">&#25552;&#26696;</a>&#30340;&#37324;&#31243;&#30865;&#65292;&#32305;&#20351;&#20173;&#26377;&#38917;&#30446;&#36996;&#22312;&#26089;&#21069;&#30740;&#31350;&#65292;&#35486;&#35328;&#25484;&#33333;&#23567;&#32068;&#27770;&#23450; Swift 6 &#30332;&#20296;&#21069;&#30340;&#26368;&#24460;&#38364;&#21345;&#26159;&#33021;&#22816;&#38928;&#35373;&#21855;&#21205; data-race safety&#65292;&#20063;&#23601;&#26159;&#35201;&#30906;&#20445; data-race safety &#33021;&#22312; compile &#38542;&#27573;&#34987;&#30906;&#20445;&#65292;runtime &#27298;&#26597;&#20063;&#33021;&#22816;&#23436;&#20840;&#25429;&#25417; compile &#38542;&#27573;&#28961;&#27861;&#30906;&#35469;&#30340;&#37096;&#20998;&#65307;&#20197;&#21450;&#27491;&#30906;&#28961;&#35492;&#30340;&#37679;&#35492;&#35386;&#26039;&#12290;Swift 5.10 &#24050;&#21253;&#25324;&#19981;&#23569;&#30456;&#38364;&#30340;&#25913;&#36914;&#65292;<a href="https://pofat.substack.com/p/64">&#21069;&#19968;&#26399;&#27874;&#22577;</a>&#25552;&#21040;&#30340; Region based isolation &#20063;&#23559;&#26371;&#26159;&#25552;&#26119;&#23433;&#20840;&#24615;&#30340;&#19968;&#22823;&#37325;&#35201;&#25913;&#36914;&#12290;</p><p>&#35486;&#35328;&#26032;&#21151;&#33021;&#20063;&#26377;&#19981;&#23569;&#65292;&#27599;&#20491;&#37117;&#26377;&#21508;&#33258;&#30340; flag &#29544;&#31435;&#38283;&#21855;&#20197;&#35731;&#38283;&#30332;&#32773;&#36880;&#27493;&#25644;&#36983;&#65292;&#27604;&#36611;&#35201;&#30041;&#24847;&#30340;&#26159; <code>@UIApplicationMain</code> &#23559;&#26371;&#34987; deprecate&#65292;&#20197;&#21450;&#35342;&#35542;&#35377;&#20037;&#30340; <code>any</code> &#24375;&#21046;&#20351;&#29992;&#22312; Swift 6 <strong>&#19981;&#26371;&#38928;&#35373;&#38283;&#21855;</strong>&#65292;&#21363;&#26410;&#20358;&#20351;&#29992; existential container &#30340;&#26041;&#24335;&#20173;&#28982;&#26159;</p><p><code>let a: SomeProtocol</code> </p><p>&#32780;&#19981;&#26159;&#24375;&#21046;</p><p><code>let a: any SomeProtocol</code></p><p></p><h3><strong><a href="https://forums.swift.org/t/brainf-in-the-swift-type-system/68301">BrainF*** in the Swift type system</a></strong></h3><p>&#36889;&#20491;&#22909;&#30219;&#22909;&#21916;&#27489;&#65292;&#29992; Swift &#30340; type system &#65288;&#20027;&#35201;&#26159;&#27867;&#22411;&#65289;&#20358;&#23526;&#20570; <a href="https://en.wikipedia.org/wiki/Brainfuck">Brainf***</a> &#65292; &#20854;&#20013; VM &#30340;&#23526;&#20570;&#24456;&#26377;&#36259;&#65292;&#35731;&#25105;&#23565;&#36889;&#20491;&#23436;&#20840;&#38476;&#29983;&#30340;&#21517;&#35422;&#26377;&#20102;&#19968;&#40670;&#22522;&#26412;&#27010;&#24565;&#65292;&#20294;&#22914;&#26524;&#20320;&#24819;&#35201;&#30495;&#30340;&#36305;&#36215;&#20358;&#30340;&#35441;&#38656;&#35201;&#21152; flag &#26356;&#25913; compiler &#36229;&#26178;&#30340;&#38272;&#27323;&#65288;&#35443;&#35211;&#20839;&#25991;&#65289;&#65292;&#22240;&#28858;&#20320;&#30475;&#30475;&#19968;&#20491; A &#30340;&#34920;&#36948;&#38263;&#36889;&#27171;&#65306;</p><pre><code><code>typealias A = Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Succ&lt;Zero&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</code></code></pre><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#39640;&#32239;&#24230;&#22320;&#21312;&#21741;&#21834;&#65288;&#25105;&#20303;&#30340;&#22478;&#24066;&#24050;&#26159; 4PM &#129401;&#65289;</p><p><a href="https://friendica.myportal.social/display/e65e1095-1265-481c-1fa9-21a864371194">https://friendica.myportal.social/display/e65e1095-1265-481c-1fa9-21a864371194</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v606!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v606!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg 424w, https://substackcdn.com/image/fetch/$s_!v606!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg 848w, https://substackcdn.com/image/fetch/$s_!v606!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!v606!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v606!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg" width="526" height="701" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:701,&quot;width&quot;:526,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!v606!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg 424w, https://substackcdn.com/image/fetch/$s_!v606!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg 848w, https://substackcdn.com/image/fetch/$s_!v606!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!v606!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b22bcbd-3337-455e-9416-b0a661c58597_526x701.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#34584;&#34523;&#20154;2 &#21487;&#20197;&#25720;&#29399;&#65292;&#22909;&#36023;&#20102;</p><p><a href="https://x.com/CanYouPetTheDog/status/1721950649825542543?s=20">https://x.com/CanYouPetTheDog/status/1721950649825542543?s=20</a></p><p></p><p>Best visionOS application:</p><p><a href="https://x.com/JamesSwiney/status/1721136324953174092?s=20">https://x.com/JamesSwiney/status/1721136324953174092?s=20</a></p>]]></content:encoded></item><item><title><![CDATA[波報 #64 - 這樣太危險]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/10/23 - 2023/10/29]]></description><link>https://pofat.substack.com/p/64</link><guid isPermaLink="false">https://pofat.substack.com/p/64</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Sun, 29 Oct 2023 23:00:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5o-n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#20854;&#19968;&#65306;&#26412;&#36913;&#36913;&#22577;&#26377;&#21490;&#20197;&#20358;&#26368;&#38263;&#65292;&#37117;&#22285;&#32350;&#33879;&#21361;&#38570;&#65306;&#26377; Apple &#21361;&#38570;&#30340; API&#65292;&#20197;&#21450;&#22914;&#20309;&#38450;&#27490;&#21361;&#38570;&#30340;&#25514;&#26045;&#65292;&#32317;&#20849;&#20841;&#21315;&#22810;&#23383;&#65292;&#22823;&#23478;&#26377;&#33288;&#36259;&#23601;&#24930;&#24930;&#30475;&#12290;</p><p>&#20854;&#20108;&#65306;&#20197;&#24448;&#32317;&#26159;&#35498;&#35531;&#29992;&#36106;&#21161;&#25903;&#25345;&#25105;&#32380;&#32396;&#23531;&#20316;&#65292;&#20294;&#33258;&#24049;&#22909;&#20687;&#20063;&#19981;&#26159;&#30495;&#30340;&#36889;&#40636;&#35469;&#28858;&#65292;&#36889;&#36913;&#27927;&#28577;&#26178;&#23565;&#26044;&#36106;&#21161;&#23531;&#20316;&#36889;&#20214;&#20107;&#31361;&#28982;&#26377;&#19981;&#21516;&#30340;&#24819;&#27861; - &#20998;&#20139;&#24555;&#27138;&#25165;&#26159;&#26368;&#37325;&#35201;&#30340;&#12290;&#22914;&#26524;&#20320;&#22312;&#35712;&#27874;&#22577;&#26178;&#24863;&#21040;&#24555;&#27138;&#65292;&#25110;&#26159;&#20687;&#12300;&#21407;&#20358;&#22914;&#27492;&#21834;&#12301;&#12289;&#12300;&#36889;&#30495;&#26159;&#20491;&#22909;&#25925;&#20107;&#21602;&#12301;&#20043;&#39006;&#30340;&#27491;&#21521;&#24773;&#32210;&#65292;&#28982;&#24460;&#20063;&#24819;&#22238;&#39243;&#36889;&#27171;&#30340;&#27491;&#21521;&#24773;&#32210;&#65288;&#32102;&#25105;&#65289;&#65292;&#23601;&#36106;&#21161;&#25105;&#21543;&#65281;&#22240;&#28858;&#25105;&#26371;&#25226;&#20840;&#37096;&#30340;&#36106;&#21161;&#37117;&#25343;&#21435;&#36023;&#36938;&#25138;&#65292;&#20320;&#30340;&#36106;&#21161;&#37117;&#26371;&#25104;&#28858;&#25105;&#30340;&#24555;&#27138;&#65281;</p><p>&#24819;&#22238;&#39243;&#22909;&#24515;&#24773;&#32102;&#25105;&#30340;&#35712;&#32773;&#65292;&#27489;&#36814;<a href="https://www.patreon.com/pofat">&#36106;&#21161;&#25105;</a>&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/p/63">&#30475;&#21069;&#19968;&#26399; </a>| <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://security.apple.com/blog/imessage-contact-key-verification/">Advancing iMessage security: iMessage Contact Key Verification</a></strong></h3><p>Apple &#22312; iOS 17.2&#12289;macOS 14.2 &#21644; watchOS 10.2 &#30340;&#38283;&#30332;&#32773;&#38928;&#35261;&#29256;&#20013;&#25552;&#20379;&#20102; iMessage &#32879;&#32097;&#20154;&#30340;&#23494;&#38000;&#39511;&#35657;&#21151;&#33021;&#65292;&#30906;&#20445;&#20182;&#20497;&#26159;&#21644;&#24819;&#35201;&#30340;&#23565;&#26041;&#30332;&#36865;&#28040;&#24687;&#12290;Apple security research blog &#20063;&#21516;&#27493;&#30332;&#20296;&#20102;&#20854;&#20445;&#35657;&#23433;&#20840;&#24615;&#30340;&#26041;&#24335;&#33287;&#20854;&#38754;&#33256;&#30340;&#25361;&#25136;&#12290;</p><p><a href="https://security.apple.com/blog/imessage-contact-key-verification/">https://security.apple.com/blog/imessage-contact-key-verification/</a></p><p></p><h3><strong><a href="https://developer.apple.com/forums/thread/737967?answerId=767599022#767599022">SwiftUI Sheets Leak in iOS 17</a></strong></h3><p><code>sheet</code> &#21644; <code>fullScreenCover</code> &#22312; iOS 17 &#26377; memory leak&#65292;&#22312;&#20462;&#24489;&#21069;&#30340;&#35299;&#26041;&#26159;&#65306; &#20808;&#29992; UIKit &#21543;&#12290;</p><p><a href="https://developer.apple.com/forums/thread/737967?answerId=767599022#767599022">https://developer.apple.com/forums/thread/737967?answerId=767599022#767599022</a></p><p></p><h3><strong><a href="https://pepicrft.me/blog/2023/10/28/open-source-sustainability">Tuist &#30340;&#25925;&#20107;</a></strong></h3><p>&#32769;&#23526;&#35498;&#25105;&#29694;&#22312;&#25165;&#35469;&#35672;&#36889;&#20491;&#29992;&#20358;&#25913;&#21892; Xcode &#22312;&#22823;&#22411;&#23560;&#26696;&#38283;&#30332;&#39636;&#39511;&#30340;&#24037;&#20855;&#65292;&#19978;&#36913;&#27874;&#22577;&#35611;&#21040; Xcode &#19981;&#33391;&#26044;&#25033;&#20184;&#22823;&#22411;&#23560;&#26696;&#65292;&#25152;&#20197; Spotify &#25644;&#36983;&#21040; Buck &#30340;&#25925;&#20107;&#65288;&#20063;&#26377;&#25512;&#21451;&#20998;&#20139;&#20182;&#20497;<a href="https://x.com/qingchengli/status/1716333119337533813?s=20">&#36870;&#21521;&#25644;&#22238;&#21435;&#32020; Xcode &#30340;&#32147;&#39511;</a>&#65289;&#65292;&#33021;&#29992; Xcode &#30070;&#28982;&#26368;&#22909;&#65292;&#25152;&#20197;&#25105;&#27138;&#35211;&#27492;&#39006;&#23560;&#26696;&#32380;&#32396;&#25104;&#38263;&#65292;&#20294;&#38283;&#28304;&#24037;&#20855;&#24590;&#40636;&#25345;&#32396;&#24615;&#22320;&#29554;&#21033;&#20173;&#28982;&#26159;&#20491;&#24040;&#22823;&#30340;&#25361;&#25136;&#12290;</p><p>&#21516;&#26178;&#26412;&#36913;&#20063;&#26377;&#21478;&#20154;&#38283;&#24515;&#30340;&#28040;&#24687;&#65292;&#34987; Google &#19999;&#26820;&#30340; fastlane &#32066;&#26044;&#38918;&#21033;&#36681;&#31227;&#21040; MNF &#20043;&#19979;&#65306; <a href="https://github.com/MobileNativeFoundation/discussions/discussions/194">https://github.com/MobileNativeFoundation/discussions/discussions/194</a></p><p></p><p><a href="https://pepicrft.me/blog/2023/10/28/open-source-sustainability">https://pepicrft.me/blog/2023/10/28/open-source-sustainability</a></p><h3><strong><a href="https://swiftpackageindex.com/apple/swift-testing/main/documentation/testing/migratingfromxctest">&#25644;&#36983;&#33267; swift-testing</a></strong></h3><p>&#22914;&#26524;&#20320;&#24819;&#22039;&#35430;&#29992;&#26032;&#30340; swift-testing &#20358;&#26367;&#20195; XCTest &#65292;&#23448;&#26041;&#25644;&#36983;&#25991;&#20214;&#26377;&#24456;&#23436;&#25972;&#30340;&#35498;&#26126;&#65292;&#36996;&#26377;&#34920;&#26684;&#21015;&#20986; XCTest &#19979;&#30340;&#26041;&#27861;&#22914;&#20309;&#23565;&#25033;&#21040; swift-testing &#19979;&#30340; macro&#12290;<br></p><p>&#20294;&#25105;&#35201;&#20877;&#25552;&#37266;&#19968;&#19979;&#65292;Swift macros &#38656;&#35201;&#20381;&#36084; SwiftSyntax &#65292;&#32780; SwiftSyntax &#30340;&#20381;&#36084;&#34389;&#29702;&#19981;&#22914;&#19968;&#33324;&#26694;&#26550;&#65292;&#38656;&#23567;&#24515;&#34389;&#29702;&#65292;&#24819;&#30693;&#36947;&#22914;&#20309;&#23433;&#20840;&#34389;&#29702;&#30340;&#35531;&#35211; pointfree &#30340;<a href="https://www.pointfree.co/blog/posts/116-being-a-good-citizen-in-the-land-of-swiftsyntax">&#22909;&#25991;</a>&#12290;</p><p></p><p><a href="https://x.com/polpielladev/status/1717859039512555986?s=20">https://x.com/polpielladev/status/1717859039512555986?s=20</a></p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/backdeployed-is-operating-as-an-override-instead-of-only-for-use-in-unsupported-platforms-versions/68071">&#20063;&#35377;&#20320;&#19981;&#35442;&#20351;&#29992; @backDeploy</a></strong></h3><p><code>@backDeploy</code> &#26371; override &#25903;&#25588; OS &#30340;&#21407;&#22987;&#23526;&#20316;&#65288;&#38750; back &#30340;&#37096;&#20998;&#65289;&#65292;&#32769;&#23526;&#35498;&#36889;&#20491;&#30475;&#20358;&#24190;&#20046;&#26159;&#23560;&#28858; Apple &#31532;&#19968;&#26041;&#38283;&#30332;&#30340;&#21151;&#33021;&#65292;&#21152;&#19978;&#25991;&#20214;&#35498;&#26126;&#23481;&#26131;&#35731;&#22823;&#23478;&#26377;&#19981;&#27491;&#30906;&#30340;&#35469;&#30693;&#65292;&#38500;&#38750;&#20320;&#26159;&#30495;&#27491;&#26371;&#38656;&#35201;&#36889;&#21151;&#33021;&#30340;&#20154;&#65288;&#22914; SDK &#38283;&#30332;&#32773;&#65289;&#65292;&#19981;&#28982;&#35531;&#23567;&#24515;&#20351;&#29992;&#12290;&#30070;&#28982;&#26368;&#29702;&#24819;&#31574;&#30053;&#26159;&#28858;&#36889;&#20491;&#27161;&#35352;&#21152;&#19978;&#37679;&#35492;&#20351;&#29992;&#30340;&#35686;&#21578;&#65292;&#22914;&#19981;&#29992;&#26044; library evoluation &#26178;&#65292;&#25110; Apple &#33267;&#23569;&#32102;&#20104;&#26356;&#28165;&#26970;&#30340;&#35498;&#26126;&#12290;</p><p><a href="https://forums.swift.org/t/backdeployed-is-operating-as-an-override-instead-of-only-for-use-in-unsupported-platforms-versions/68071">https://forums.swift.org/t/backdeployed-is-operating-as-an-override-instead-of-only-for-use-in-unsupported-platforms-versions/68071</a></p><p></p><h3><strong><a href="https://forums.swift.org/t/pitch-region-based-isolation/67888">[Pitch] Region Based Isolation</a></strong></h3><p>Swift Concurrency &#23526;&#29694;&#36039;&#26009;&#23433;&#20840;&#30340;&#38364;&#37749;&#27010;&#24565;&#23601;&#26159;&#12300;&#25552;&#20379;&#33021;&#22816;&#38548;&#38626;&#21516;&#27493;&#31243;&#24335;&#29376;&#24907;&#30340;&#27231;&#21046;&#20197;&#28040;&#38500;&#36039;&#26009;&#31478;&#29229;&#65288;data races&#65289;&#12301;&#65292;&#36889;&#38548;&#38626;&#30340;&#21934;&#20301;&#21363; actor&#65292; <a href="https://github.com/gottesmm/swift-evolution/blob/region-based-isolation/proposals/proposals/0302-concurrent-value-and-concurrent-closures.md">SE-0302</a>&#35215;&#31684;&#20102;&#20677;&#36981;&#24490; <code>Sendable</code> &#30340;&#29289;&#20214;&#21487;&#20197;&#36328;&#38626;&#38548;&#38626;&#37002;&#30028;&#20659;&#36958;&#65288;&#24478;&#22806;&#30028;&#20659;&#20837; actor &#65289;&#65292;&#24478;&#35486;&#35328;&#23652;&#38754;&#38450;&#27490;&#31478;&#29229;&#12290;&#21482;&#26159;&#36889;&#20491;&#35215;&#31684;&#36942;&#24230;&#20445;&#23432;&#20102;&#20123;&#65292;&#24456;&#22810;&#29992;&#20363;&#23601;&#31639;&#19981;&#36981;&#23432;&#20063;&#33021;&#23433;&#20840;&#20351;&#29992;&#12290;&#27604;&#22914;&#29289;&#20214;&#34987;&#20659;&#20837; actor &#24460;&#23601;&#19981;&#20877;&#20351;&#29992;&#65292;&#33258;&#28982;&#19981;&#23384;&#22312;&#31478;&#29229;&#30340;&#27231;&#26371;&#12290;</p><p>&#28858;&#20102;&#25918;&#23532;&#36889;&#20123;&#35215;&#21063;&#65292;<a href="https://github.com/gottesmm/swift-evolution/blob/region-based-isolation/proposals/nnnn-region-based-isolation.md">&#27492;&#25552;&#26696;</a>&#25552;&#20986;&#20102;&#19968;&#22871;&#23450;&#32681;&#20197;&#32232;&#35695;&#22120;&#33021;&#22816;&#25512;&#26039;&#26159;&#21542;&#23384;&#22312;&#36039;&#26009;&#31478;&#29229;&#65288;&#20197;&#22196;&#35641;&#30340;&#26041;&#24335;&#35657;&#26126;&#65289;&#65292;&#32232;&#35695;&#22120;&#28961;&#27861;&#25512;&#23566;&#26178;&#21063;&#26371;&#36664;&#20986;&#35386;&#26039;&#12290;&#36889;&#35041;&#38500;&#20102;&#21487;&#33021;&#26371;&#26377;&#30340;&#26032;&#27161;&#35352; <code>@returnsIsolated</code> &#22806;&#19981;&#23384;&#22312; Swift &#20351;&#29992;&#32773;&#32905;&#30524;&#21487;&#35211;&#30340;&#21151;&#33021;&#65292;&#26159;&#20491;&#35731;&#32232;&#35695;&#22120;&#35722;&#32880;&#26126;&#30340;&#25552;&#26696;&#65292;&#20197;&#24460;&#23601;&#25918;&#24515;&#20659;&#38750; <code>Sendable</code> &#29289;&#20214;&#36914; <code>actor</code>&#25110; <code>Task</code> &#65292;&#25110;&#32773;&#29992;&#20358; init actor &#65288;<a href="https://github.com/gottesmm/swift-evolution/blob/region-based-isolation/proposals/0327-actor-initializers.md">SE-0327</a> &#35215;&#23450;&#21482;&#26377; designated initializer &#21487;&#20197;&#25509;&#21463;&#38750; <code>Sendable</code> &#21443;&#25976;&#65289;&#65292;&#21097;&#19979;&#20132;&#32102;&#32232;&#35695;&#22120;&#21435;&#27298;&#26597;&#21363;&#21487;&#65288;&#129310;&#65289;&#12290;</p><p></p><blockquote><p>&#22914;&#26524;&#21482;&#24819;&#30693;&#36947;&#36889;&#20491;&#25552;&#26696;&#23565; Swift &#20351;&#29992;&#32773;&#30340;&#24433;&#38911;&#35712;&#21040;&#36889;&#35041;&#23601;&#21487;&#20197;&#20102;&#65292;&#20197;&#19979;&#20839;&#23481;&#26159;&#25105;&#23565;&#26044;&#20854;&#25512;&#26039;&#26041;&#27861;&#30340;&#29702;&#35299;&#65292;&#19981;&#30693;&#36947;&#20063;&#19981;&#24433;&#38911;&#20351;&#29992;&#12290;</p></blockquote><h4><strong>&#35373;&#35336;&#35498;&#26126;</strong></h4><p>&#28858;&#20102;&#20570;&#20986;&#21028;&#26039;&#65292;&#32232;&#35695;&#22120;&#38656;&#35201;&#29702;&#35299;&#30340;&#26680;&#24515;&#27010;&#24565;&#26159;&#12300;&#20659;&#20837;&#21516;&#27493;&#22519;&#34892;&#31243;&#24335;&#40670;&#20839;&#36039;&#26009;&#26159;&#21542;&#26377;&#20854;&#23427;&#23384;&#21462;&#36335;&#24465;&#12301;&#65292;&#22240;&#27492;&#25552;&#20986;&#20102;&#12300;&#38548;&#38626;&#38598;&#21512;&#12301;&#65288;isoliation region&#65292;&#22240;&#28858;&#36996;&#26377;&#21478;&#19968;&#20491;&#21517;&#35422; domain &#20063;&#26159;&#21312;&#22495;&#30340;&#27010;&#24565;&#65292;&#36889;&#35041;&#25105;&#29992;&#24847;&#35695;&#65289;&#30340;&#27010;&#24565;&#65292;&#21516;&#19968;&#20491;&#38548;&#38626;&#38598;&#21512;&#20839;&#30340;&#36039;&#26009;&#20195;&#34920;&#23384;&#22312;&#33879;&#30456;&#38364;&#32879;&#30340;&#23384;&#21462;&#36335;&#24465;&#65292;&#33509;&#34987;&#20659;&#20837;&#21516;&#27493;&#22519;&#34892;&#23601;&#26371;&#26377;&#30332;&#29983;&#36039;&#26009;&#31478;&#29229;&#30340;&#21487;&#33021;&#65292;&#21482;&#26377;&#21516;&#26178;&#20659;&#36664;&#23436;&#20840;&#19981;&#21516;&#38548;&#38626;&#38598;&#21512;&#30340;&#38750; <code>Sendable</code> &#36039;&#26009;&#25165;&#26159;&#23433;&#20840;&#30340;&#65292;&#20351;&#29992;&#32773;&#19981;&#29992;&#29305;&#22320;&#27161;&#19978; <code>@Sendable</code>&#65292;&#27604;&#22914;&#65306;</p><pre><code><code>// &#25226; a&#12289;b &#20659;&#20837;&#21516; actor instance &#26159;&#23433;&#20840;&#30340;&#65292;&#22240;&#28858;&#21508;&#22312;&#19981;&#21516;&#30340;&#38548;&#38626;&#38598;&#21512;
let a = NonSendable()
let b = NonSendable()

await SomeActor.shared.doSomething(a)
await SomeActor.shared.doSomething(b)</code></code></pre><p>&#38548;&#38626;&#38598;&#21512;&#26159;&#38750; <code>Sendable</code> &#20540;&#30340;&#38598;&#21512;&#65292;&#21487;&#20197;&#21463; actor instance&#65292;task&#65292;global actor &#36889;&#20123;&#38548;&#38626;&#38936;&#22495;&#65288;isolation domain&#65289;&#30340;&#20445;&#35703;&#65292;&#25110;&#26159;&#23436;&#20840;&#33287;&#36889;&#24190;&#20491;&#38936;&#22495;&#28961;&#38364;&#65292;&#31561;&#24453;&#20659;&#36958;&#12290;&#38568;&#33879;&#31243;&#24335;&#30340;&#22519;&#34892;&#65292;&#33509;&#19981;&#21516;&#38598;&#21512;&#20839;&#30340;&#20540;&#21487;&#24444;&#27492;&#35370;&#21839;&#65288;&#25110;&#34987;&#21462;&#21029;&#21517;&#65289;&#65292;&#36889;&#20123;&#38598;&#21512;&#23601;&#26371;&#20114;&#30456;&#21512;&#20341;&#65292;&#35722;&#25104;&#26356;&#22823;&#30340;&#38598;&#21512;&#12290;</p><p>&#24448;&#19979;&#35342;&#35542;&#20043;&#21069;&#35201;&#20808;&#20171;&#32057;&#34920;&#31034;&#36889;&#20123;&#27010;&#24565;&#30340;&#31526;&#34399;&#65292;&#22240;&#28858;&#23427;&#20497;&#22312; Swift &#20006;&#28961;&#23565;&#25033;&#23526;&#39636;&#65306;</p><p><code>[{(x, y), #SomeDomain}, (z), (w, t)]</code></p><p>&#36889;&#35041;&#34920;&#31034;&#19977;&#20491;&#38548;&#38626;&#38598;&#21512;&#65292;(x, y)&#65292;(z) &#33287; (w, t)&#65292;&#20854;&#20013; (x, y) &#34987;&#26576;&#20491;&#38548;&#38626;&#38936;&#22495;&#65288;actora instance&#65292;global actor &#25110; task&#65289;&#20445;&#35703;&#65292;&#19981;&#33021;&#20877;&#34987;&#20659;&#20837;&#20854;&#23427;&#38548;&#38626;&#38936;&#22495;&#20351;&#29992;&#65292;&#20854;&#23427;&#20841;&#20491;&#38598;&#21512;&#21063;&#27794;&#21644;&#20219;&#20309;&#38936;&#22495;&#26377;&#38364;&#32879;&#65292;&#20877;&#27839;&#29992;&#19978;&#20363;&#35498;&#26126;&#65306;</p><pre><code><code>await SomeActor.shared.doSomething(w) 
await SomeActor.shared.doSomething(t) // &#19981;&#23433;&#20840;&#65292;&#22240;&#28858; w t &#21516;&#38598;&#21512;&#65292;&#38500;&#38750;&#36889;&#35041;&#25913;&#20659;&#20837; z </code></code></pre><p></p><h4><strong>&#21512;&#20341;&#38598;&#21512;&#30340;&#35215;&#21063;</strong></h4><p>&#28858;&#20540;&#21462;&#21029;&#21517;&#25110;&#22686;&#21152;&#35370;&#21839;&#36335;&#24465;&#37117;&#26371;&#23559;&#38548;&#38626;&#38598;&#21512;&#21512;&#20341;&#65292;&#36889;&#35041;&#30340;&#25805;&#20316;&#21487;&#20197;&#30001;&#30001;&#36070;&#20540;&#25110;&#35519;&#29992;&#20989;&#25976;&#23526;&#29694;&#65292;&#20854;&#23526;&#23384;&#21462;&#23660;&#24615;&#20063;&#21482;&#26159;&#35519;&#29992;&#20989;&#25976;&#30340;&#35486;&#27861;&#31958;&#65292;&#19979;&#38754;&#33289;&#24190;&#20491;&#20363;</p><pre><code><code>func assignValueToField() {
  let x = NonSendableStruct()
  // Regions: [(x)]
  let y = NonSendable()
  // Regions: [(x), (y)]
  x.field = y
  // Regions: [(x, y)]
}

func transfer(x: NonSendable, y: NonSendable) {
  // Regions: [(x, y)]
  let z = NonSendable()
  // Regions: [(x, y), z]
  f(x, z)
  // Regions: [(x, y, z)]
}

// &#22914;&#26524;&#20540;&#34987; closure capture &#24460;&#20877;&#36070;&#20540;&#65292;&#21063;&#26032;&#33290;&#30340;&#38598;&#21512;&#21512;&#20341;&#65292;&#21453;&#20043;&#33290;&#30340;&#38598;&#21512;&#26371;&#34987;&#36986;&#24536;
func mutableBindingAssignmentClosure() {
  var x = NonSendable()
  // Regions: [(x)]
  let closure = { useInOut(&amp;x) }
  // Regions: [(x, closure)]
  let y = NonSendable()
  // Regions: [(x, closure), y]
  x = y
  // Regions: [(x, closure, y)]
}</code></code></pre><p>&#26368;&#24460;&#21512;&#20341;&#20063;&#26371;&#21463;&#21040; if-else &#31561;&#25511;&#21046;&#27969;&#30340;&#24433;&#38911;&#65292;&#21482;&#35201;&#20219;&#19968;&#20998;&#25903;&#26377;&#21512;&#20341;&#38598;&#21512;&#30340;&#37007;&#36655;&#65292;&#36889;&#20491;&#25511;&#21046;&#27969;&#35486;&#21477;&#24460;&#23601;&#26371;&#21512;&#20341;&#38598;&#21512;&#65292;&#25505;&#21462;&#12300;&#21482;&#35201;&#26377;&#21487;&#33021;&#23601;&#30070;&#26371;&#30332;&#29983;&#12301;&#30340;&#20445;&#23432;&#31574;&#30053;&#65292;&#26356;&#22810;&#32048;&#31680;&#21487;&#20197;&#30475;<a href="https://github.com/gottesmm/swift-evolution/blob/region-based-isolation/proposals/nnnn-region-based-isolation.md#appendix">&#38468;&#37636;</a>&#12290;</p><p>&#35215;&#21063;&#19968;&#20491;&#38548;&#38626;&#38598;&#21512;&#19968;&#20491;&#26178;&#38291;&#20839;&#21482;&#33021;&#20659;&#20837;&#19968;&#20491;&#38548;&#38626;&#22495;&#20351;&#29992;&#65288;&#34987;&#20854;&#20445;&#35703;&#65289;&#65292;&#24046;&#21029;&#26159; task &#22519;&#34892;&#23436;&#24460;&#36899;&#32080;&#26371;&#26039;&#38283;&#65292;&#20043;&#24460;&#21487;&#20197;&#20877;&#20659;&#32102;&#20854;&#23427;&#38548;&#38626;&#22495;&#65292;&#32780;&#20659;&#20837; actor &#30340;&#21063;&#26371;&#27704;&#36960;&#32129;&#23450;&#65292;&#28961;&#27861;&#20877;&#20659;&#32102;&#20854;&#23427;&#20154;&#12290;</p><p></p><h4><strong>&#36328;&#37002;&#30028;&#20659;&#36958;&#19981;&#26371;&#20659;&#36958;&#25152;&#26377;&#27402;</strong></h4><p>&#23565; ownership &#29087;&#24713;&#30340;&#26379;&#21451;&#30475;&#21040;&#36889;&#21487;&#33021;&#26371;&#26377;&#36949;&#21644;&#24863;&#65292;&#25226;&#20540;&#20659;&#36664;&#36914;&#38548;&#38626;&#22495;&#24460;&#20219;&#20309;&#35370;&#21839;&#37117;&#26159;&#38750;&#27861;&#30340;&#65288;&#38500;&#38750;&#26039;&#38283;&#32879;&#32080;&#65289;&#65292;&#21487;&#26159;&#35519;&#29992;&#26041;&#20173;&#25793;&#26377;&#35442;&#20540;&#65292;&#21363;&#35519;&#29992;&#26041;&#33021;&#27770;&#23450;&#23427;&#28961;&#27402;&#35370;&#21839;&#30340;&#30340;&#29983;&#21629;&#36913;&#26399;&#65288;&#36889;&#35041;&#31281;&#20570;&#24369;&#20659;&#36664;&#65289;&#65292;&#20309;&#19981;&#19968;&#20341;&#36681;&#31227;&#25152;&#26377;&#27402;&#65288;&#24375;&#20659;&#36664;&#65289;&#65311;</p><p>&#33509;&#35201;&#38928;&#35373;&#24375;&#20659;&#36664;&#26371;&#26377;&#24190;&#20491;&#21839;&#38988;&#65306;</p><ul><li><p>ABI &#19981;&#30456;&#23481;</p></li><li><p>&#36889;&#20491;&#25805;&#20316;&#27704;&#36960;&#26371;&#26377;&#12300;&#31532;&#20108;&#20491;&#23384;&#21462;&#12301;&#22240;&#28858;&#31532;&#19968;&#20491;&#22312;&#20659;&#36958;&#25976;&#25818;&#65292;&#31532;&#20108;&#20491;&#26159;&#20659;&#36958;&#25152;&#26377;&#27402;&#65292;&#25152;&#20197;&#21487;&#33021;&#36996;&#26371;&#38989;&#22806;&#22320;&#35519;&#29992; deinit&#65292;&#26356;&#21487;&#33021;&#24341;&#20837;&#38928;&#26399;&#22806;&#30340;&#21103;&#20316;&#29992;</p></li><li><p>&#36681;&#25563;&#38656;&#35201;&#30340; ARC &#25805;&#20316;&#26371;&#38477;&#20302;&#25928;&#33021;&#65292;&#38500;&#38750; inline&#65292;&#20294;&#36889;&#31278;&#35299;&#27861;&#38656;&#35201;&#24456;&#31309;&#26997;&#30340; inline&#65292;&#21448;&#26371;&#36896;&#25104; binary size &#30340;&#22686;&#21152;&#12290;</p></li></ul><p>&#22240;&#27492;&#24375;&#20659;&#36664;&#19981;&#26371;&#26159;&#38928;&#35373;&#34892;&#28858;&#65292;&#20294;&#25552;&#26696;&#32771;&#24942;&#26410;&#20358;&#33021;&#36879;&#36942; <code>transferring</code> &#30340;&#27161;&#35352;&#20358;&#21855;&#29992;&#36889;&#34892;&#28858;&#65292;</p><p></p><p></p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#25033;&#27888;&#21202;&#32114;&#26032;&#23560;&#36655;&#30332;&#34892;&#65292;Apple &#30340; engineer manager &#25913;&#32232;&#27888;&#21202;&#32114;&#32769;&#27468;&#20358;&#32000;&#24565; Swift 2 -&gt; 3 &#37325;&#22823;&#36983;&#31227;&#30340;&#26178;&#20809;&#65292;&#32147;&#27511;&#36942;&#30340;&#25033;&#35442;&#24515;&#26377;&#25114;&#25114;&#28937;</p><p><a href="https://mas.to/@ayanonagon/111307920275309847">https://mas.to/@ayanonagon/111307920275309847</a></p><p>&#26412;&#36913;&#37329;&#21477;</p><p><a href="https://toot.cat/@zkat/111280524206276380">https://toot.cat/@zkat/111280524206276380</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5o-n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5o-n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png 424w, https://substackcdn.com/image/fetch/$s_!5o-n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png 848w, https://substackcdn.com/image/fetch/$s_!5o-n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png 1272w, https://substackcdn.com/image/fetch/$s_!5o-n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5o-n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png" width="933" height="410" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:410,&quot;width&quot;:933,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5o-n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png 424w, https://substackcdn.com/image/fetch/$s_!5o-n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png 848w, https://substackcdn.com/image/fetch/$s_!5o-n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png 1272w, https://substackcdn.com/image/fetch/$s_!5o-n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1f273f5-1ecb-4811-a779-1dcc969840b0_933x410.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[波報 #63 - 名符其實的「超級瑪利歐兄弟 驚奇」]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/10/16 - 2023/10/22]]></description><link>https://pofat.substack.com/p/63</link><guid isPermaLink="false">https://pofat.substack.com/p/63</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Sun, 22 Oct 2023 22:00:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#21205;&#31558;&#36889;&#26399;&#27874;&#22577;&#26178;&#26377;&#40670;&#25578;&#32080;&#65292;&#32147;&#27511;&#19968;&#36913;&#30340;&#20986;&#24046;&#24460;&#21448;&#36969;&#36898;&#32769;&#20219;&#26032;&#20316;&#12300;&#36229;&#32026;&#29802;&#21033;&#27472;&#20804;&#24351; &#39514;&#22855;&#12301;&#30332;&#21806;&#12290;&#25265;&#33879;&#22909;&#22855;&#30340;&#24515;&#24773;&#25171;&#38283;&#65292;&#30446;&#21069;&#23436;&#20840;&#27794;&#26377;&#38515;&#33290;&#32769;&#22871;&#30340;&#24863;&#21463;&#65292;&#39514;&#21916;&#20063;&#19981;&#23569;&#65292;&#24456;&#38627;&#24819;&#20687;&#22914;&#20309;&#22312;&#23559;&#26377; 40&#24180;&#27511;&#21490;&#30340; 2D &#25458;&#36600;&#24335;&#29802;&#33673;&#27472;&#20013;&#25630;&#20986;&#36889;&#40636;&#22810;&#26032;&#33457;&#25307;&#65292;&#36899;&#24478;&#19981;&#29609;&#20027;&#27231;&#36938;&#25138;&#30340; strong wife &#37117;&#36339;&#19979;&#20358;&#38506;&#25105;&#29609;&#20102;&#31532;&#19968;&#22823;&#38364;&#65292;&#21487;&#35211;&#20854;&#21560;&#24341;&#21147;&#65292;&#23565;&#26044;&#32769;&#20219;&#30340;&#21109;&#24847;&#36664;&#20986;&#65292;&#25105;&#21482;&#26377;&#26159;&#20329;&#26381;&#20877;&#20329;&#26381;&#12290;</p><p>&#36938;&#25138;&#30332;&#21806;&#21069;&#22805;&#20182;&#20497;&#20063;&#37323;&#20986;&#20102;<a href="https://www.nintendo.co.jp/interview/aqmxa/index.html">&#38283;&#30332;&#32773;&#35370;&#35527;</a>&#65288;&#20840;&#26085;&#25991;&#65292;&#25105;&#28961;&#27861;&#38321;&#35712;&#37027;&#40636;&#35079;&#38620;&#30340;&#21407;&#25991;&#21482;&#33021;&#29992;&#32763;&#35695;&#36575;&#39636;&#21888;&#65289;&#65292;&#20570;&#28858;&#19968;&#20491;&#38283;&#30332;&#21830;&#22914;&#20309;&#25345;&#32396;&#22320;&#22312;&#22823;&#23478;&#29087;&#24713;&#21040;&#19981;&#34892;&#30340;&#38936;&#22495;&#20877;&#29983;&#20986;&#26032;&#40670;&#23376;&#65292;&#20197;&#21450;&#21109;&#24847;&#30340;&#31649;&#29702;&#65292;&#38750;&#24120;&#20540;&#24471;&#19968;&#35712;&#65292;ptt &#20063;&#26377;&#20154;<a href="https://www.ptt.cc/bbs/NSwitch/M.1697559678.A.52A.html">&#31777;&#21934;&#25688;&#37636;&#21644;&#32763;&#35695;&#20102;&#19968;&#20123;&#37325;&#40670;</a>&#12290;&#20854;&#20013;&#26368;&#22909;&#31505;&#30340;&#33707;&#36942;&#26044;&#28858;&#20102;&#22238;&#25033;&#29609;&#23478;&#20497;&#23565;&#25758;&#21040;&#26647;&#23542;&#23542;&#20596;&#38754;&#26371;&#21463;&#20663;&#30340;&#30097;&#21839;&#65292;&#20182;&#20497;&#22312;&#36889;&#19968;&#20195;&#28858;&#26647;&#23542;&#23542;&#20570;&#20986;&#20102;&#21676;&#20154;&#30340;&#21205;&#20316;&#129315; &#65288;&#34987;&#21676;&#20663;&#30340;&#65289;&#12290;</p><p>&#19981;&#36942;&#29609;&#20102;&#20841;&#20491;&#23567;&#26178;&#24460;&#25105;&#36996;&#26159;&#22238;&#20358;&#23531;&#27874;&#22577;&#65292;&#24863;&#21205;&#30340;&#35712;&#32773;&#35531;<a href="https://www.patreon.com/pofat">&#36106;&#21161;&#25903;&#25345;&#25105;</a><s>&#36023;&#26356;&#22810;&#36938;&#25138;</s>&#32380;&#32396;&#23531;&#20316;&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/p/62">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://engineering.atspotify.com/2023/10/switching-build-systems-seamlessly/">&#22823;&#22411; app &#22914;&#20309;&#28961;&#32299;&#20999;&#25563;&#27083;&#24314;&#31995;&#32113;</a></strong></h3><p>Xcode &#28961;&#27861;&#25033;&#20184;&#22823;&#22411; app &#30340;&#38283;&#30332;&#19968;&#30452;&#26159;&#21508;&#22823;&#20844;&#21496;&#30340;&#30171;&#40670;&#65292;&#20294;&#23565;&#26044;&#26377;&#25976;&#30334;&#20301;&#38283;&#30332;&#32773;&#20849;&#21516;&#38283;&#30332;&#65292;&#20006;&#26381;&#21209;&#19978;&#30334;&#33836;&#29992;&#25142;&#30340; app &#35201;&#36681;&#31227;&#21040;&#21029;&#30340;&#26041;&#27861;&#20358;&#38283;&#30332;&#12289;&#27083;&#24314;&#65288;Build&#65289;&#21448;&#35527;&#20309;&#23481;&#26131;&#65292;Spotify &#20998;&#20139;&#20102;&#20182;&#20497;&#24478; Xcode &#36681;&#21040; Bazel &#30340;&#32147;&#39511;&#65292;&#26368;&#32066;&#25226;&#26178;&#38291;&#24478;&#36229;&#36942; 45 &#20998;&#37912;&#32302;&#28187;&#21040;&#19981;&#21040; 10 &#20998;&#37912;&#65288;&#20173;&#28982;&#20351;&#29992; Xcode &#30070; IDE&#65289;&#12290;</p><p>&#33509;&#20320;&#22909;&#22855;&#20182;&#20497;&#24590;&#40636;&#29992;&#21029;&#30340;&#31995;&#32113;&#24314;&#32622;&#20006;&#20351;&#29992; Xcode &#30070; IDE&#65292;&#20182;&#20497;&#20027;&#35201;&#20351;&#29992; <a href="https://github.com/MobileNativeFoundation/rules_xcodeproj">rules</a><em><a href="https://github.com/MobileNativeFoundation/rules_xcodeproj">xcodeproj</a></em> &#36889;&#20491;&#24037;&#20855;&#29983;&#25104; Xcode project &#27284;&#65292;&#20854;&#21151;&#33021;&#20043;&#19968;&#26159;&#24171;&#21161;&#20320;&#32858;&#28966;&#23560;&#26696;&#65292;&#25226;&#27794;&#32858;&#28966;&#30340; module &#32232;&#25104;&#19968;&#20491; library &#20877; link &#36914;&#20358;&#65292;&#20197;&#35731;&#20320;&#26377;&#25928;&#22320;&#20351;&#29992; Xcode &#38283;&#30332;&#26377;&#38480;&#30340;&#31243;&#24335;&#30908;&#33258;&#30001;&#31354;&#38291;&#65288;&#32858;&#28966;&#30340;&#37096;&#20998;&#65289;&#12290;</p><p>&#21407;&#25991;&#65306;<a href="https://engineering.atspotify.com/2023/10/switching-build-systems-seamlessly/">https://engineering.atspotify.com/2023/10/switching-build-systems-seamlessly/</a></p><p></p><h3><strong><a href="https://paulstamatiou.com/stocketa/">Stocketa&#65306;&#32147;&#27511;&#36942;&#30340;&#19981;&#26371;&#22833;&#21435;</a></strong></h3><p><a href="https://paulstamatiou.com/stocketa/">https://paulstamatiou.com/stocketa/</a></p><p>&#36889;&#26159;&#19968;&#20491;&#35373;&#35336;&#24107;&#28858;&#20102;&#23416;&#32722; iOS &#38283;&#22987;&#38283;&#30332; app &#30340;&#25925;&#20107;&#12290;&#32147;&#27511;&#20841;&#24180;&#30340;&#26178;&#38291;&#65292;&#28961;&#25976;&#30340;&#35373;&#35336;&#28145;&#20837;&#25506;&#35342;&#65292;&#26368;&#24460;&#22240;&#19968;&#20123;&#32771;&#37327;&#32780;&#20572;&#27490;&#38283;&#30332;&#65288;&#29190;&#38647;&#65306;&#27491;&#30906;&#36039;&#26009;&#20358;&#28304;&#25104;&#26412;&#39640;&#26114;&#65289;&#65292;&#20063;&#26410;&#20844;&#38283;&#19978;&#26550;&#65292;&#19981;&#36942;&#36889;&#20491;&#23560;&#26696;&#35041;&#30340;&#32147;&#39511;&#25104;&#20102;&#20182;&#19979;&#19968;&#20491;&#26032;&#21109;&#30340;&#39178;&#20998; - <a href="https://www.rewind.ai/">Rewind.ai</a>&#12290;</p><p>&#25105;&#35201;&#22823;&#21147;&#31281;&#35738;&#36889;&#31687;&#25991;&#31456;&#30340;&#21576;&#29694;&#25163;&#27861;&#65292;&#19981;&#24871;&#26159;&#35373;&#35336;&#24107;&#29986;&#20986;&#20358;&#30340;&#20839;&#23481;&#65292;&#38500;&#20102;&#25991;&#20013;&#28145;&#20837;&#25506;&#35342;&#21508;&#31278;&#35373;&#35336;&#32972;&#24460;&#30340;&#24819;&#27861;&#65292;&#32178;&#38913;&#19978;&#36996;&#33021;&#21363;&#26178;&#38928;&#35261;&#37027;&#20123;&#21151;&#33021;&#30340;&#27171;&#35980;&#65292;&#36889;&#21644;&#12298;<a href="https://pofat.substack.com/p/54">&#27874;&#22577; #54 - &#35731;&#24605;&#24819;&#20855;&#29694;&#21270;</a>&#12299;&#35041;&#25506;&#35342;&#30340;&#35373;&#35336;&#21407;&#21063;&#30456;&#20114;&#21628;&#25033;&#65292;&#24605;&#24819;&#21040;&#25104;&#21697;&#30340;&#27171;&#35980;&#19968;&#21475;&#27683;&#23637;&#29694;&#22312;&#30524;&#21069;&#65292;&#35712;&#20358;&#26684;&#22806;&#28415;&#36275;&#12290;</p><p><em>&#20182;&#29694;&#22312;&#30340;&#29986;&#21697; Rewind.ai &#26159;&#36879;&#36942;&#24433;&#38899;&#25130;&#21462;&#65292;&#35352;&#37636;&#38651;&#33126;&#19978;&#25152;&#26377;&#30332;&#29983;&#36942;&#30340;&#30059;&#38754;&#33287;&#35498;&#36942;&#30340;&#35441;&#65292;&#20351;&#29992;&#32773;&#21487;&#20197;&#36629;&#39686;&#22320;&#38364;&#37749;&#23383;&#25628;&#23563;&#22238;&#21040;&#30070;&#19979;&#30340;&#26178;&#38291;&#40670;&#21644;&#20839;&#23481;&#65292;&#20877;&#20063;&#19981;&#24597;&#19981;&#23567;&#24515;&#38364;&#20102;&#37325;&#35201;&#30340;&#28687;&#35261;&#38913;&#38754;&#25110;&#26159;&#24536;&#35352;&#38283;&#26371;&#32080;&#35542;&#12290;</em></p><p></p><div><hr></div><h2><strong>&#127775; &#20854;&#23427;</strong></h2><h3><strong><a href="https://takeonrules.com/2023/10/15/copilot-and-the-art-of-distraction/">Copilot &#33287;&#20998;&#24515;&#30340;&#34269;&#34899;</a></strong></h3><p>&#20316;&#32773;&#35469;&#28858;&#29992; copilot &#36628;&#21161;&#26178;&#24120;&#26371;&#22312;&#19981;&#31934;&#28310;&#25552;&#31034;&#26178;&#34389;&#29702;&#26356;&#22810;&#30340;&#19978;&#19979;&#25991;&#65292;&#20197;&#33267;&#26044;&#28961;&#27861;&#23560;&#24515;&#24605;&#32771;&#65292;&#36889;&#25105;&#20491;&#20154;&#26377;&#20123;&#35377;&#21516;&#24863;&#65292;&#25105;&#20173;&#28982;&#35469;&#28858; LLM &#26368;&#26377;&#29992;&#30340;&#26178;&#21051;&#22312;&#26044;&#34389;&#29702;&#20320;&#24050;&#28145;&#30693;&#30340;&#20107;&#29289;&#65292;&#21482;&#26159;&#26377;&#20123;&#32048;&#31680;&#38656;&#35201;&#25552;&#37266;&#65292;&#19981;&#28982;&#24456;&#22810;&#26178;&#20505;&#20182;&#32102;&#20320;&#30340;&#26481;&#35199;&#21487;&#33021;&#35731;&#20320;&#35201;&#24819;&#26356;&#22810;&#20107;&#24773;&#65292;&#25110;&#24847;&#22806;&#22320;&#23601;&#25509;&#21463;&#20102;&#21487;&#33021;&#26377;&#21839;&#38988;&#30340;&#35299;&#31572;&#12290;</p><p><a href="https://takeonrules.com/2023/10/15/copilot-and-the-art-of-distraction/">https://takeonrules.com/2023/10/15/copilot-and-the-art-of-distraction/</a></p><p></p><h3><strong><a href="https://www.inverse.com/gaming/dead-space-retrospective-anniversary-survival-horror-genre">&#37325;&#26032;&#23450;&#32681;&#24656;&#25084;&#27785;&#28024;&#24863;&#30340;&#27515;&#20129;&#31354;&#38291;</a></strong></h3><p>&#29983;&#23384;&#24656;&#24598;&#36938;&#25138;&#22823;&#32004;&#22312; 2000 &#24180;&#38283;&#22987;&#31449;&#31337;&#33139;&#27493;&#65292;&#28982;&#32780;&#30495;&#27491;&#23559;&#24656;&#25084;&#24863;&#24118;&#21040;&#20840;&#26032;&#39640;&#24230;&#65292;&#20006;&#30495;&#27491;&#22320;&#37325;&#26032;&#23450;&#32681;&#27785;&#28024;&#24863;&#30340;&#38750;&#12300;&#27515;&#20129;&#31354;&#38291;&#12301;&#65288;Dead Space&#65289;&#33707;&#23660;&#12290;&#36938;&#25138;&#31354;&#38291;&#24863;&#21644;&#24618;&#29289;&#20986;&#29694;&#22411;&#24907;&#30340;&#35373;&#35336;&#65288;&#36890;&#39080;&#21475;&#65289;&#65292;&#28040;&#21462;&#26371;&#33067;&#38626;&#36938;&#25138;&#29694;&#23526;&#30340; HUD &#21450;&#26283;&#20572;&#36914;&#20837;&#29289;&#21697;/&#36984;&#21934;&#31995;&#32113;&#65292;&#30001;&#19968;&#20491;&#20840;&#24687;&#25237;&#24433;&#20195;&#26367;&#65292;&#38750;&#20659;&#32113;&#30340;&#27578;&#24618;&#29289;&#26041;&#24335;&#65292;&#19988;&#21644;&#20027;&#35282;&#24037;&#31243;&#24107;&#30340;&#32887;&#26989;&#32080;&#21512;&#31561;&#32048;&#31680;&#65292;&#35731;&#29609;&#23478;&#26356;&#33021;&#34701;&#20837;&#36938;&#25138;&#37007;&#36655;&#30340;&#30495;&#23526;&#24863;&#65292;&#24515;&#29702;&#35469;&#30693;&#20063;&#26371;&#36215;&#20849;&#40180;&#65292;&#35731;&#20320;&#22312;&#36938;&#25138;&#32080;&#26463;&#24460;&#35731;&#20320;&#20173;&#34701;&#20837;&#22312;&#20027;&#35282;&#22833;&#25511;&#30340;&#31934;&#31070;&#29376;&#24907;&#20013;&#65292;&#36889;&#40670;&#21487;&#33021;&#26044;&#12300;&#27785;&#40664;&#20043;&#19992;&#12301;&#36889;&#20491;&#24040;&#20154;&#20043;&#32937;&#19978;&#65292;&#20854;&#26368;&#32147;&#20856;&#30340;&#26159;&#35731;&#20320;&#29609;&#24460;&#22312;&#29983;&#27963;&#20013;&#30475;&#21040;&#22823;&#37327;&#37941;&#37885;&#23601;&#26371;&#32879;&#24819;&#21040;&#12300;&#26159;&#19981;&#26159;&#35041;&#19990;&#30028;&#35201;&#38283;&#22987;&#20405;&#34645;&#12301;&#12290;&#25105;&#19968;&#30452;&#35469;&#28858;&#36938;&#25138;&#36939;&#29992;&#24314;&#31435;&#26032;&#30340;&#24515;&#29702;&#35469;&#30693;&#65292;&#20006;&#28507;&#31227;&#40664;&#21270;&#20320;&#30340;&#25163;&#27861;&#26159;&#12300;&#27785;&#28024;&#24863;&#12301;&#39640;&#20302;&#33287;&#21542;&#30340;&#38364;&#37749;&#20043;&#19968;&#65292;&#25105;&#21516;&#26178;&#20063;&#35469;&#28858;&#36889;&#20491;&#35264;&#40670;&#33021;&#36939;&#29992;&#22312;&#38283;&#30332;&#29986;&#21697;&#19978;&#12290;</p><p>&#21109;&#26989;&#22280;&#26377;&#19968;&#21477;&#35441;&#65288;&#32147;&#39511;&#35527;&#38750;&#30495;&#29702;&#65292;&#33258;&#24049;&#23567;&#24515;&#21462;&#29992;&#65289;-&#12300;&#19981;&#36067;&#24037;&#20855;&#36067;&#27969;&#31243;&#12301;&#12290;&#36889;&#20063;&#26159;&#30456;&#20284;&#30340;&#26680;&#24515;&#24605;&#24819;&#65292;&#19981;&#23569;&#31558;&#35352;&#24037;&#20855;&#20063;&#26159;&#22312;&#33853;&#23526;&#36889;&#21477;&#35441;&#12290;</p><p><a href="https://www.inverse.com/gaming/dead-space-retrospective-anniversary-survival-horror-genre">https://www.inverse.com/gaming/dead-space-retrospective-anniversary-survival-horror-genre</a></p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#33457;&#20102;&#25976;&#33836;&#20803;&#21443;&#21152;&#22283;&#38555;&#30740;&#35342;&#26371;&#65292;&#21482;&#28858;&#20102;&#21462;&#24471;&#36028;&#32025;&#25918;&#22312;&#31558;&#38651;&#19978;&#21966;&#65311;&#29694;&#22312;&#20320;&#26377;&#26356;&#23526;&#24800;&#30340;&#36984;&#25799;&#65292;&#21508;&#31278;&#36028;&#32025;&#20841;&#30334;&#22602;&#20840;&#25976;&#25171;&#21253;</p><p><a href="https://mastodon.social/@icanzilb/111240874116148075">https://mastodon.social/@icanzilb/111240874116148075</a><br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LvnR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd49f32-1146-4f19-98fc-27779a1f8082_984x972.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LvnR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd49f32-1146-4f19-98fc-27779a1f8082_984x972.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LvnR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd49f32-1146-4f19-98fc-27779a1f8082_984x972.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LvnR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd49f32-1146-4f19-98fc-27779a1f8082_984x972.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LvnR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd49f32-1146-4f19-98fc-27779a1f8082_984x972.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LvnR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd49f32-1146-4f19-98fc-27779a1f8082_984x972.jpeg" width="984" height="972" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cd49f32-1146-4f19-98fc-27779a1f8082_984x972.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:972,&quot;width&quot;:984,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LvnR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd49f32-1146-4f19-98fc-27779a1f8082_984x972.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LvnR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd49f32-1146-4f19-98fc-27779a1f8082_984x972.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LvnR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd49f32-1146-4f19-98fc-27779a1f8082_984x972.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LvnR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd49f32-1146-4f19-98fc-27779a1f8082_984x972.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#20320;&#26159;&#22312;&#23478;&#35222;&#35338;&#36996;&#22312;&#36774;&#20844;&#23460;&#35222;&#35338;&#65311;</p><p><a href="https://mastodon.social/@nixCraft/111205420961828592">https://mastodon.social/@nixCraft/111205420961828592</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TPZe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TPZe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TPZe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TPZe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TPZe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TPZe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg" width="531" height="433" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:531,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;It is a cartoon of three different types of workers: remote, hybrid, and office. The image is titled \&quot;Types of Workers\&quot; and was created by Irina Blok. \n\nAll three works are at sitting at a desk in their home, home office, or office and in-front of a computer screen and doing video conferring meetings.\n\n\nThe cartoon is humorous, but it also reflects the reality of the modern workplace. Many people now work remotely or in a hybrid arrangement, and the traditional office worker is becoming less common. &quot;,&quot;title&quot;:&quot;It is a cartoon of three different types of workers: remote, hybrid, and office. The image is titled \&quot;Types of Workers\&quot; and was created by Irina Blok. \n\nAll three works are at sitting at a desk in their home, home office, or office and in-front of a computer screen and doing video conferring meetings.\n\n\nThe cartoon is humorous, but it also reflects the reality of the modern workplace. Many people now work remotely or in a hybrid arrangement, and the traditional office worker is becoming less common. &quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="It is a cartoon of three different types of workers: remote, hybrid, and office. The image is titled &quot;Types of Workers&quot; and was created by Irina Blok. 

All three works are at sitting at a desk in their home, home office, or office and in-front of a computer screen and doing video conferring meetings.


The cartoon is humorous, but it also reflects the reality of the modern workplace. Many people now work remotely or in a hybrid arrangement, and the traditional office worker is becoming less common. " title="It is a cartoon of three different types of workers: remote, hybrid, and office. The image is titled &quot;Types of Workers&quot; and was created by Irina Blok. 

All three works are at sitting at a desk in their home, home office, or office and in-front of a computer screen and doing video conferring meetings.


The cartoon is humorous, but it also reflects the reality of the modern workplace. Many people now work remotely or in a hybrid arrangement, and the traditional office worker is becoming less common. " srcset="https://substackcdn.com/image/fetch/$s_!TPZe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TPZe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TPZe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TPZe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0580f7-70f2-46ea-86ee-3543d0fb4762_531x433.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#26410;&#35469;&#35657;/&#25480;&#27402;&#31680;&#40670;&#19978;&#30340;&#36890;&#35338;&#34987;&#20599;&#22622;&#26481;&#35199;&#20063;&#26159;&#21487;&#20197;&#38928;&#26399;&#30340;&#65306;</p><p><a href="https://mastodon.social/@kennwhite/111248876578572402">https://mastodon.social/@kennwhite/111248876578572402</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LAJ-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e58729-7936-4095-bc49-23a9b4267e28_1160x1784.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LAJ-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e58729-7936-4095-bc49-23a9b4267e28_1160x1784.png 424w, https://substackcdn.com/image/fetch/$s_!LAJ-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e58729-7936-4095-bc49-23a9b4267e28_1160x1784.png 848w, https://substackcdn.com/image/fetch/$s_!LAJ-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e58729-7936-4095-bc49-23a9b4267e28_1160x1784.png 1272w, https://substackcdn.com/image/fetch/$s_!LAJ-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e58729-7936-4095-bc49-23a9b4267e28_1160x1784.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LAJ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e58729-7936-4095-bc49-23a9b4267e28_1160x1784.png" width="1160" height="1784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9e58729-7936-4095-bc49-23a9b4267e28_1160x1784.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1784,&quot;width&quot;:1160,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2546072,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LAJ-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e58729-7936-4095-bc49-23a9b4267e28_1160x1784.png 424w, https://substackcdn.com/image/fetch/$s_!LAJ-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e58729-7936-4095-bc49-23a9b4267e28_1160x1784.png 848w, https://substackcdn.com/image/fetch/$s_!LAJ-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e58729-7936-4095-bc49-23a9b4267e28_1160x1784.png 1272w, https://substackcdn.com/image/fetch/$s_!LAJ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9e58729-7936-4095-bc49-23a9b4267e28_1160x1784.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br></p><p>&#21407;&#20358; App Store &#23529;&#26597;&#20154;&#21729;&#21487;&#20197;&#36036;&#36034;&#30340;&#21966;&#65288;&#24605;</p><p><a href="https://www.macrumors.com/2023/10/18/app-store-employees-fired-china/">https://www.macrumors.com/2023/10/18/app-store-employees-fired-china/</a></p>]]></content:encoded></item><item><title><![CDATA[波報 #62 - 秋天是突然間就來臨]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/10/9 - 2023/10/15]]></description><link>https://pofat.substack.com/p/62</link><guid isPermaLink="false">https://pofat.substack.com/p/62</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Sun, 15 Oct 2023 23:00:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6a5618-8001-4011-acca-d0479cc54e7d_800x468.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#22914;&#38988;&#65292;&#22823;&#23478;&#23567;&#24515;&#21029;&#24863;&#20882;&#20102;&#65292;&#19978;&#36913;&#25105;&#25165;&#34987;&#27969;&#24863;&#35186;&#25802;&#20498;&#22320;&#19981;&#36215;&#12290;</p><p>&#25105;&#26412;&#20358;&#26159;&#20491;&#19981;&#22826;&#26371;&#24863;&#20882;&#30340;&#20154;&#65292;&#20294;&#25644;&#21040;&#29694;&#23621;&#22478;&#24066;&#24460;&#35722;&#24471;&#23481;&#26131;&#29983;&#30149;&#65292;&#19968;&#23450;&#26159;&#24037;&#20316;&#25913;&#35722;&#20102;&#25105;&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/p/61">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://www.swift.org/blog/swift-everywhere-windows-interop/">Swift Everywhere: Using Interoperability to Build on Windows</a></strong></h3><p>&#36879;&#36942;&#24050;&#25104;&#29087;&#19981;&#23569;&#30340; C++  &#33287; C &#30340; Interoperability&#65292;Swift &#22914;&#20170;&#20063;&#33021;&#21644; Windows &#26082;&#26377;&#30340; API &#21644;&#36890;&#35338;&#27169;&#24335;&#26377;&#33391;&#22909;&#30340;&#20114;&#21205;&#65292;Arc &#28687;&#35261;&#22120;&#22312; Windows &#19978;&#23601;&#26159;&#36984;&#25799;&#29992; Swift &#38283;&#30332;&#65292;&#30456;&#20449;&#26159;&#26781;&#20805;&#28415;&#33610;&#26840;&#20043;&#36335;&#65292;&#20294;&#21516;&#26178;&#20063;&#25512;&#36914;&#20102; Swift &#22312; Windows &#19978;&#30340;&#26356;&#22810;&#21487;&#33021;&#12290;&#25105;&#35258;&#24471; Swfit &#20855;&#20633;&#35377;&#22810;&#19981;&#37679;&#30340;&#35486;&#35328;&#29305;&#24615;&#20358;&#38283;&#23637;&#26032;&#36947;&#36335;&#65292;&#27604;&#22914;&#36889;&#31278;&#38283;&#30332;&#29376;&#27841;&#19979;&#20805;&#28415;&#30340;&#21508;&#39006;&#27169;&#29256;&#31243;&#24335;&#30908;&#65292;Swift macros &#20415;&#33021;&#22312;&#27492;&#22823;&#23637;&#36523;&#25163;&#12290;</p><p>&#22914;&#26524;&#23565; C++ &#21644; Swift &#20854;&#23427;&#39006;&#22411;&#20114;&#21205;&#38364;&#20418;&#26377;&#33288;&#36259;&#30340;&#65292;&#22914;&#20170;&#36879;&#36942;&#24050;&#25104;&#29087;&#19981;&#23569;&#30340; C &#21644; Swift &#20854;&#23427;&#39006;&#22411;&#20114;&#21205;&#38364;&#20418;&#26377;&#33288;&#36259;&#30340;&#65292;&#36889;&#35041;&#36996;&#26377;&#21478;&#19968;&#20491;<a href="https://www.youtube.com/watch?v=ZQc9-seU-5k&amp;t=480s">&#24433;&#29255; - &#8220;Swift as C++ Successor in FoundationDB&#8221;</a>&#65292;&#20998;&#20139;&#29992;&#28858;&#20309;&#35201;&#20197;&#21450;&#22914;&#20309;&#20351;&#29992; Swift &#26367;&#20195; C++&#12290;</p><h3><strong><a href="https://fatbobman.substack.com/">Fatbobman's Swift Weekly</a></strong></h3><p>&#24800;&#25105;&#33391;&#22810;&#30340;&#19996;&#22369;&#32920;&#23376;&#23559;&#24179;&#26178;&#38321;&#35712;&#25512;&#34214;&#30340;&#26448;&#26009;&#21560;&#25910;&#28921;&#35519;&#24460;&#65292;&#25512;&#20986;&#26032;&#30340;&#38651;&#23376;&#22577; <a href="https://fatbobman.substack.com/">Fatbobman's Swift Weekly</a> &#65292;&#36996;&#26159;&#38617;&#35486;&#29256;&#26412;&#65292;&#31532;&#19968;&#26399;&#30340;&#20839;&#23481;&#27599;&#31687;&#25105;&#37117;&#35712;&#23436;&#20102;&#65292;&#30342;&#26159;&#30456;&#30070;&#21560;&#24341;&#20154;&#30340;&#36984;&#25991;&#12290;</p><p>&#26412;&#26399;&#25105;&#26368;&#21916;&#27489;&#30340;&#19968;&#31687;&#26159; - <a href="https://xreality.zone/zh/posts/what-is-spatial-video-on-iphone-15-pro-and-apple-vision-pro">&#12300; iPhone 15 Pro / Apple Vision Pro &#19978;&#30340;&#31354;&#38388;&#35270;&#39057;&#65292;&#21040;&#24213;&#26159;&#20160;&#20040;&#65311;&#12301;</a> &#65292;&#26032;&#30340;&#23186;&#39636;&#26684;&#24335;&#20173;&#28982;&#33021;&#22816;&#30456;&#23481;&#20840; Apple &#35373;&#20633;&#65292; Apple &#22312;&#22810;&#23186;&#39636;&#26684;&#24335;&#25903;&#25588;&#20296;&#23616;&#30340;&#36960;&#35211;&#33287;&#19979;&#30340;&#21151;&#22827;&#65292;&#33879;&#23526;&#20196;&#20154;&#20329;&#26381;&#12290;&#32317;&#20043;&#65292;&#36889;&#20491;&#36913;&#22577;&#20094;&#36008;&#37327;&#20805;&#36275;&#65292;&#27874;&#22577;&#30340;&#35712;&#32773;&#19981;&#35201;&#37679;&#36942;&#12290;</p><p></p><h3><strong>Xcode 15.1 &#20462;&#24489; Unit Test &#24615;&#33021;&#21839;&#38988;</strong></h3><p><a href="https://developer.apple.com/documentation/xcode-release-notes/xcode-15_1-release-notes">Release note</a> &#30456;&#20449; 13&#22577;&#26371;&#28310;&#20633;&#32102;&#22823;&#23478;&#65292;&#25105;&#21482;&#24819;&#40670;&#20986;&#20854;&#20013;&#37325;&#35201;&#30340;&#19968;&#40670;&#65292;Xcode 15.1 &#20462;&#24489;&#20102; 15.0 <a href="https://x.com/NachoSoto/status/1710399076926369838?s=20">&#24341;&#20837;&#30340;&#22196;&#37325; unit test &#24615;&#33021;&#21839;&#38988;</a>&#12290;</p><p></p><h3><strong><a href="https://x.com/_saagarjha/status/1711839435774668987?s=20">MacCast</a></strong></h3><p>&#36889;&#20491;&#36996;&#22312;&#26089;&#26399;&#30340;&#23560;&#26696;&#21487;&#20197;&#25226; macOS &#19978;&#30340;&#35222;&#31383;&#25237;&#21040; visionOS &#20013;&#65292;&#19988;&#21487;&#20197;&#31227;&#21205;&#12289;&#35519;&#25972;&#20301;&#32622;&#22823;&#23567;&#21644;&#35282;&#24230;&#65292;&#27578;&#25163;&#32026;&#25033;&#29992;&#21834;&#65281;&#65281;</p><p>Demo &#25928;&#26524;&#21487;&#20197;&#30475;<a href="https://x.com/_saagarjha/status/1697782216930312378?s=20">&#36889;&#21063;&#25512;&#25991;</a>&#12290;</p><p>Repo: <a href="https://github.com/saagarjha/MacCast">https://github.com/saagarjha/MacCast</a></p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/macro-adoption-concerns-around-swiftsyntax/66588/84">Macro Adoption Concerns around SwiftSyntax</a></strong></h3><p>&#21516;&#26178;&#20351;&#29992; SwiftSyntax &#21644; Macros &#30340;&#38283;&#30332;&#32773;&#65288;&#29992;&#31532;&#19977;&#26041;&#22871;&#20214;&#20063;&#26159;&#65289;&#35201;&#23567;&#24515;&#20102;&#65292;&#20320;&#24456;&#21487;&#33021;&#26371;&#36935;&#21040; SwfitSyntax &#29256;&#26412;&#34909;&#31361;&#30340;&#21839;&#38988;&#65292;&#32780;&#19988;&#30446;&#21069;&#38500;&#20102;&#20114;&#30456;&#21332;&#35519;&#22806;&#27794;&#26377;&#22826;&#22909;&#30340;&#35299;&#27861;&#12290;&#36889;&#20027;&#22240;&#26159; SwiftSyntax &#20006;&#19981;&#26159;&#35486;&#24847;&#21270;&#29256;&#26412;&#30340;&#20449;&#22857;&#32773;&#65292;&#23427;&#24555;&#36895;&#22320;&#36914;&#21270;&#20013;&#19988;&#19981;&#20572;&#22320;&#24118;&#20358; breaking change&#65292;&#19988;&#21508;&#20491;&#22871;&#20214;&#37117;&#21487;&#20197;&#30452;&#25509;&#36629;&#26131;&#22320;&#20381;&#36084;&#26044;&#23427;&#65292;Swift OpenAPI generator &#26368;&#36817;&#23601;&#36935;&#21040;&#36889;&#20491;<a href="https://github.com/apple/swift-openapi-generator/issues/329">&#29376;&#27841;</a>&#12290;&#36889;&#20491;&#21839;&#38988;&#26410;&#20358;&#21487;&#33021;&#26371;&#35722;&#24471;&#26356;&#22196;&#37325;&#65292;&#22240;&#28858;&#37325;&#35201;&#21151;&#33021;&#34987;&#32129;&#23450;&#22312;&#24190;&#20491;&#29305;&#23450;&#29256;&#26412;&#26178;&#65292;&#22823;&#23478;&#23601;&#26356;&#23481;&#26131;&#22312;&#29256;&#26412;&#36984;&#25799;&#19978;&#30332;&#29983;&#34909;&#31361;&#65292;&#35498;&#21040;&#24213;&#36996;&#26159;&#26377;&#36084; Apple &#26356;&#31995;&#32113;&#21270;&#30340;&#35299;&#26041;&#12290;&#35443;&#32048;&#35342;&#35542;&#21487;&#20197;&#30475;&#65306;<br><a href="https://forums.swift.org/t/macro-adoption-concerns-around-swiftsyntax/66588/65">https://forums.swift.org/t/macro-adoption-concerns-around-swiftsyntax/66588/65</a></p><p></p><h3><strong><a href="https://forums.swift.org/t/se-0409-access-level-modifiers-on-import-declarations/67290/1">[SE-0409]: Access-level modifiers on import declarations (Accepted)</a></strong></h3><p><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0409-access-level-on-imports.md">SE-0409</a> &#28858; import &#24118;&#20358;&#20102; access level&#65306;public, package, internal, fileprivate, &#21644; private &#20849;&#20116;&#20491;&#23652;&#32026;&#65292;&#27491;&#22914;&#25105;&#20497;&#19968;&#33324;&#20351;&#29992;&#22312;&#29289;&#20214;&#21644;&#20989;&#25976;&#19978;&#30340;&#30456;&#21516;&#65292;&#25152;&#20197;&#24515;&#26234;&#27169;&#22411;&#30452;&#25509;&#27839;&#29992;&#21363;&#21487;&#65292;&#27604;&#22914;&#35498;&#20320;&#19981;&#33021;&#25226; <code>pirvate import</code> &#21462;&#24471;&#30340;&#22411;&#21029;&#26292;&#38706;&#22312; <code>public</code> &#30340;&#26041;&#27861;&#19978;&#12290;&#25105;&#20491;&#20154;&#23565;&#36889;&#20491;&#25552;&#26696;&#24863;&#21040;&#38750;&#24120;&#38283;&#24515;&#65292;&#22240;&#28858;&#36889;&#26159;&#22823;&#23478;&#31169;&#29992;&#24050;&#20037;&#30340; <code>@_implementationOnly</code> &#30340;&#27491;&#24335;&#12289;&#19988;&#26356;&#23436;&#25972;&#30340;&#26367;&#20195;&#26041;&#26696;&#12290;</p><p>&#29694;&#22312;&#38928;&#35373;&#30340;&#20351;&#29992;&#24773;&#27841;&#26159;&#25226;&#24341;&#20837;&#30340; depenednecy &#37117;&#30070;&#20316;&#26159; public&#65292;&#32305;&#20351;&#20320;&#26292;&#38706;&#30340;&#25152;&#26377; API &#37117;&#27794;&#26377;&#29992;&#21040;&#36889;&#20491;&#24341;&#20837;&#30340; dependency&#65288;&#20677;&#20839;&#37096;&#20351;&#29992;&#65289;&#65292;&#36889;&#27171;&#24118;&#20358;&#30340;&#21839;&#38988;&#26159;&#25302;&#24930;&#32232;&#35695;&#36895;&#24230;&#65288;&#22240;&#28858;&#20320;&#24341;&#36914;&#30340; dependency &#26371;&#21253;&#21547;&#20854;&#25152;&#26377;&#23376; dependency&#65289;&#65292;&#20197;&#21450;&#26356;&#22823;&#30340; binary size&#65288;&#38706;&#20986;&#26356;&#22810;&#31526;&#34399;&#65289;&#12290;&#35299;&#27861;&#21063;&#26159;&#25226;&#20677;&#20839;&#37096;&#20351;&#29992;&#30340; import &#20896;&#19978; <code>@_implementationOnly</code>&#65292;&#19981;&#36942;&#20351;&#29992;&#24213;&#32218;&#38283;&#38957;&#30340; api &#32317;&#26159;&#19981;&#22826;&#33298;&#26381;&#65292;&#36889;&#20491;&#25552;&#26696;&#28858;&#27492;&#22256;&#22659;&#24118;&#20358;&#26329;&#20809;&#12290;</p><p>&#20540;&#24471;&#30041;&#24847;&#30340;&#26159; Swift 5 &#38928;&#35373;&#30340; level &#26159; public&#65292;&#32780; Swift 6 &#21063;&#26159; internal&#12290;</p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#24819;&#24517;&#24494;&#36575;&#24050;&#32147;&#23653;&#27511;&#25509;&#21040;&#25163;&#36575;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://x.com/real_kai42/status/1711648536029512182?s=20" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O9sD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3968c80-d4ef-43f7-8407-f8a2b5591408_1228x551.jpeg 424w, https://substackcdn.com/image/fetch/$s_!O9sD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3968c80-d4ef-43f7-8407-f8a2b5591408_1228x551.jpeg 848w, https://substackcdn.com/image/fetch/$s_!O9sD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3968c80-d4ef-43f7-8407-f8a2b5591408_1228x551.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!O9sD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3968c80-d4ef-43f7-8407-f8a2b5591408_1228x551.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O9sD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3968c80-d4ef-43f7-8407-f8a2b5591408_1228x551.jpeg" width="1228" height="551" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f3968c80-d4ef-43f7-8407-f8a2b5591408_1228x551.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:551,&quot;width&quot;:1228,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#22294;&#29255;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://x.com/real_kai42/status/1711648536029512182?s=20&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#22294;&#29255;" title="&#22294;&#29255;" srcset="https://substackcdn.com/image/fetch/$s_!O9sD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3968c80-d4ef-43f7-8407-f8a2b5591408_1228x551.jpeg 424w, https://substackcdn.com/image/fetch/$s_!O9sD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3968c80-d4ef-43f7-8407-f8a2b5591408_1228x551.jpeg 848w, https://substackcdn.com/image/fetch/$s_!O9sD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3968c80-d4ef-43f7-8407-f8a2b5591408_1228x551.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!O9sD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3968c80-d4ef-43f7-8407-f8a2b5591408_1228x551.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>&#23531;&#20102; Swift macros &#20320;&#20063;&#26159; compiler &#24037;&#31243;&#24107;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://x.com/ios_memes/status/1711344010764411060?s=20" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rys5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6a5618-8001-4011-acca-d0479cc54e7d_800x468.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rys5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6a5618-8001-4011-acca-d0479cc54e7d_800x468.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rys5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6a5618-8001-4011-acca-d0479cc54e7d_800x468.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rys5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6a5618-8001-4011-acca-d0479cc54e7d_800x468.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rys5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6a5618-8001-4011-acca-d0479cc54e7d_800x468.jpeg" width="800" height="468" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd6a5618-8001-4011-acca-d0479cc54e7d_800x468.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:468,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#22294;&#29255;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://x.com/ios_memes/status/1711344010764411060?s=20&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#22294;&#29255;" title="&#22294;&#29255;" srcset="https://substackcdn.com/image/fetch/$s_!rys5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6a5618-8001-4011-acca-d0479cc54e7d_800x468.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rys5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6a5618-8001-4011-acca-d0479cc54e7d_800x468.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rys5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6a5618-8001-4011-acca-d0479cc54e7d_800x468.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rys5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd6a5618-8001-4011-acca-d0479cc54e7d_800x468.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#29694;&#22312;&#25165;&#30693;&#36947;&#21407;&#20358; Nintendo &#24115;&#34399;&#24050;&#32147;&#27491;&#24335;<a href="https://en-americas-support.nintendo.com/app/answers/detail/a_id/62531/~/how-to-manage-passkey-authentication-for-a-nintendo-account">&#25903;&#25588; Passkey</a>&#65292;&#36889;&#25033;&#35442;&#26159;&#25105;&#31532;&#19968;&#20491;&#38971;&#32321;&#20351;&#29992;&#30340; Passkey</p><p><a href="https://9to5mac.com/2023/09/21/nintendo-adds-passkey-support/">https://9to5mac.com/2023/09/21/nintendo-adds-passkey-support/</a></p>]]></content:encoded></item><item><title><![CDATA[波報 #61 - ⌘]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/9/25 - 2023/10/1]]></description><link>https://pofat.substack.com/p/61</link><guid isPermaLink="false">https://pofat.substack.com/p/61</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Sun, 01 Oct 2023 22:00:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VQnR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#25105;&#24456;&#21916;&#27489;&#31526;&#34399;&#21644;&#20854;&#32972;&#24460;&#30340;&#25925;&#20107;&#65292;&#21069;&#38499;&#23376;&#22312;&#26031;&#22570;&#22320;&#32013;&#32173;&#20126;&#22320;&#21312;&#65288;&#21448;&#31281;&#20043;&#21271;&#27472;&#65289;&#26053;&#34892;&#26178;&#36335;&#19978;&#24120;&#26371;&#30475;&#35211; iOS &#24037;&#31243;&#24107;&#29087;&#21040;&#19981;&#33021;&#20877;&#29087;&#30340;&#12300;&#8984;&#12301;&#65292;&#24456;&#24555;&#22320;&#25105;&#23601;&#30332;&#29694;&#37027;&#20491;&#31526;&#34399;&#20195;&#34920;&#26223;&#40670;&#12290;&#26597;&#20102;&#19968;&#19979;&#25165;&#30693;&#36947;&#30070;&#26178;&#65288;1984&#65289;Steve Jobs &#35258;&#24471;&#22296;&#38538;&#29992; Apple logo &#20195;&#34920; command &#37749;&#26159;&#31278;&#28651;&#29992;&#65292;&#26044;&#26159;&#36523;&#36000;&#37325;&#26032;&#35373;&#35336;&#37325;&#20219;&#30340; Susan Kare &#24478;&#36039;&#26009;&#24235;&#20013;&#25366;&#20986;&#36889;&#20491;&#31526;&#34399;&#65292;&#24456;&#24555;&#22320;&#23601;&#21463;&#21040;&#22823;&#23478;&#38738;&#30558;&#20006;&#25104;&#21151;&#20986;&#36947;&#65292;&#24478;&#27492;&#35722;&#25104; Apple &#37749;&#30436;&#30340;&#29544;&#29305;&#35672;&#21029;&#31526;&#34399;&#12290;</p><p>&#25214;&#21040;&#30340;&#36039;&#26009;&#37117;&#27794;&#25552;&#21040; Susan &#23565;&#36889;&#31526;&#34399;&#21644;&#20854;&#20195;&#34920;&#30340;&#21151;&#33021;&#26159;&#21542;&#26377;&#20160;&#40636;&#24819;&#27861;&#65288;&#30475;&#36215;&#20358;&#23601;&#26159;&#21560;&#30555;&#32771;&#37327;&#65289;&#65292;&#19981;&#36942;&#38283;&#20102;&#24190;&#22825;&#36554;&#24460;&#25105;&#27880;&#24847;&#21040;&#65292;&#22312;&#36335;&#19978;&#30475;&#21040;&#36889;&#31526;&#34399;&#24460;&#23601;&#26371;&#34987;&#21855;&#21205;&#12300;&#20063;&#35377;&#21487;&#20197;&#21435;&#24185;&#22043;&#12301;&#30340;&#24565;&#38957;&#65292;&#32780;&#22312;&#37749;&#30436;&#19978; command &#37749;&#23601;&#26159;&#35201;&#29992;&#20358;&#24185;&#22043;&#30340;&#24517;&#20633;&#21855;&#21205;&#37749;&#65292;&#24819;&#24819;&#20063;&#26159;&#24456;&#26377;&#36259;&#30340;&#36899;&#32080;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VQnR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VQnR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png 424w, https://substackcdn.com/image/fetch/$s_!VQnR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png 848w, https://substackcdn.com/image/fetch/$s_!VQnR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png 1272w, https://substackcdn.com/image/fetch/$s_!VQnR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VQnR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png" width="550" height="754" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:754,&quot;width&quot;:550,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#22294;&#29255;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#22294;&#29255;" title="&#22294;&#29255;" srcset="https://substackcdn.com/image/fetch/$s_!VQnR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png 424w, https://substackcdn.com/image/fetch/$s_!VQnR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png 848w, https://substackcdn.com/image/fetch/$s_!VQnR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png 1272w, https://substackcdn.com/image/fetch/$s_!VQnR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94fd8622-f45e-45d4-9d68-89bf3374b866_550x754.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#65288;<a href="https://twitter.com/corey_gwin/status/1248700202388615168">&#22294;&#29255;&#20358;&#28304;</a>&#65289;</p><p>&#12298;<a href="https://pofat.substack.com/p/60">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://www.swift.org/blog/whats-new-swift-debugging-5.9/">Debugging Improvements in Swift 5.9</a></strong></h3><p>&#22312; Swift &#20351;&#29992; lldb debug &#30340;&#32147;&#39511;&#21482;&#33021;&#29992;&#30171;&#33510;&#19981;&#22570;&#24418;&#23481;&#65292;&#19968;&#20358;&#20809;&#26159;&#25802;&#20013; breakpoint &#24460;&#35201;&#21040;&#39023;&#31034;&#35722;&#25976;&#30340;&#26178;&#38291;&#23601;&#38750;&#24120;&#38263; (v)&#65292;&#20108;&#20358;&#36996;&#24120;&#24120;&#36617;&#20837;&#22833;&#25943;&#65292;&#24773;&#27841;&#26356;&#26371;&#38568;&#33879;&#23560;&#26696;&#35722;&#22823;&#32780;&#24801;&#21270;&#65292;&#19981;&#36942;&#26368;&#22823;&#30340;&#30171;&#33510;&#36996;&#26159;&#20358;&#33258;&#26044;&#21360;&#20986;&#35722;&#25976; <code>po</code> &#36889;&#31278;&#22522;&#26412;&#25805;&#20316;&#37117;&#24456;&#38627;&#29992;&#65292;&#32780;&#19988;&#22312; 5.9 &#20043;&#21069;&#23427;&#36996;&#26371;&#20445;&#23384;&#36664;&#20986;&#30340;&#32080;&#26524;&#65292;&#28858;&#27492;&#35442;&#35722;&#25976;&#33509;&#26159; reference type&#65292;retain count &#26371;&#22686;&#21152;&#65292;&#35264;&#23519;&#23427;&#30340;&#34892;&#28858;&#21453;&#32780;&#24433;&#38911;&#20102;&#20854;&#29983;&#21629;&#36913;&#26399;&#65292;&#22826;&#22353;&#20102;&#12290;</p><p>&#24184;&#22909; Swift 5.9 &#38283;&#22987;&#20102;&#19968;&#31995;&#21015;&#25913;&#21892;&#65292;&#39318;&#20808;&#25226; <code>po</code> &#21644; <code>p</code> &#36899;&#32080;&#21040;&#26032;&#30340; <a href="https://reviews.llvm.org/D138315">dwim-print</a> (Do What I Mean&#65292;&#32066;&#26044;) &#23526;&#20316;&#65292;&#26032;&#30340;&#26041;&#24335;&#21407;&#29702;&#36319;&#20013;&#26039;&#40670;&#25802;&#20013;&#24460; Xcode &#29992;&#20358;&#39023;&#31034;&#35722;&#25976;&#35264;&#23519;&#21312;&#35041;&#25976;&#25818;&#30340;&#21407;&#29702;&#30456;&#21516;&#65288;<code>v</code>)&#65292;&#23569;&#20102;&#32232;&#35695;&#21644;&#27880;&#20837;&#31243;&#24335;&#30908;&#30340;&#36942;&#31243;&#65292;&#32780;&#19988;&#19981;&#20877;&#20445;&#23384;&#36664;&#20986;&#32080;&#26524;&#12290;&#21478;&#19968;&#20491;&#24456;&#26834;&#30340;&#25913;&#36914;&#26159;&#30070;&#20320;&#30452;&#25509;&#21360;&#20986;&#29289;&#20214;&#20301;&#22336;&#26178;&#65288;&#27604;&#22914;&#65306;<code>po 0x0000aaaaabb</code>)&#65292;&#23427;&#26371;&#35712;&#21462; compiler &#22039;&#35430; unsafeBitCast &#30340;&#32080;&#26524;&#20006;&#21360;&#20986;&#29289;&#20214;&#39006;&#22411;&#65292;&#22312;&#20043;&#21069;&#20320;&#21482;&#26371;&#24471;&#21040;&#23384;&#22312;&#35442;&#20301;&#22336;&#30340;&#25976;&#25818;&#65292;&#23565;&#20154;&#39006;&#20358;&#35498;&#27794;&#26377;&#24847;&#32681;&#12290;</p><p>&#27492;&#22806;&#20063;&#25903;&#25588;&#20102;&#23565;&#27867;&#22411;&#35722;&#25976;&#30340; expression&#65292;&#22240;&#27492;&#21487;&#20197;&#22312; breakpoint &#26781;&#20214;&#20013;&#35373;&#23450;&#29305;&#23450;&#22411;&#21029;&#25165;&#20013;&#26039;&#26576;&#27867;&#22411;&#26041;&#27861;&#12289;Swift compiler &#20063;&#36664;&#20986;&#26356;&#22810;&#36039;&#35338;&#35731; debugger &#25351;&#20986;&#26356;&#27491;&#30906;&#30340;&#29376;&#27841;&#12290;</p><p>&#22914;&#26524;&#24819;&#20102;&#35299; <code>po</code> &#21644; <code>v</code> &#30340;&#24046;&#30064;&#65292;&#25110;&#26159;&#36996;&#26377;&#20160;&#40636;&#20854;&#23427;&#26368;&#20339;&#21270;&#26041;&#21521;&#65292;&#25105;&#25512;&#34214;&#38321;&#35712;&#21331;&#31435;&#36889;&#31687;<a href="https://dreampiggy.com/2022/05/07/Swift-%E8%B0%83%E8%AF%95%E6%80%A7%E8%83%BD%E7%9A%84%E4%BC%98%E5%8C%96%E6%96%B9%E6%A1%88/">Swift &#35843;&#35797;&#24615;&#33021;&#30340;&#20248;&#21270;&#26041;&#26696;</a>&#12290;</p><p>&#21407;&#25991;&#65306; <a href="https://www.swift.org/blog/whats-new-swift-debugging-5.9/">https://www.swift.org/blog/whats-new-swift-debugging-5.9/</a></p><p></p><h3><strong><a href="https://x.com/bzamayo/status/1707078581996904564?s=20">iOS 17 UK &#23560;&#23660;&#21151;&#33021; - &#30475;&#37504;&#34892;&#21345;&#39192;&#38989;</a></strong></h3><p>&#22810;&#34407;&#20102; UK Open Bank API&#65292;&#26377; UK &#37504;&#34892;&#32773;&#21487;&#22312; Apple Wallet &#35041;&#24555;&#36895;&#27298;&#35222;&#39192;&#38989;&#21644;&#20132;&#26131;&#32000;&#37636;&#65292;&#24478; iOS 17.1 &#38283;&#22987;&#25903;&#25588;&#65292;&#38627;&#24471;&#35211;&#21040;&#23560;&#23660;&#26576;&#20491;&#22283;&#23478;&#30340;&#21151;&#33021;&#12290;</p><p><a href="https://twitter.com/bzamayo/status/1707078581996904564">https://twitter.com/bzamayo/status/1707078581996904564</a></p><p></p><h3><strong><a href="https://x.com/praeclarum/status/1706725414465683583?s=20">Control Center Icon &#21916;&#27489;&#27794;&#20107;&#19968;&#30452; re-render</a></strong></h3><p>&#26377;&#20154;&#30332;&#29694; Control Center &#24456;&#31337;&#23450;&#22320;&#20308;&#29992; 1% CPU&#65292;&#30740;&#31350;&#24460;&#30332;&#29694;&#21407;&#20358;&#26159; SwiftUI &#25345;&#32396; re-render &#20854; UI&#65288;icon&#65289;&#65292;&#28961;&#35542;&#26159;&#21542;&#30475;&#24471;&#21040;&#65292;&#30495;&#35738;&#12290;&#19981;&#36942;&#25105;&#35258;&#24471;&#27604;&#36611;&#26377;&#26009;&#30340;&#26159;&#21407;&#25991;&#20316;&#32773;&#22238;&#35206;&#22823;&#23478;&#23565;&#26044;&#36889; 1% &#26159;&#21542;&#26371;&#25552;&#26119; 1% &#33021;&#32791;&#30340;&#30097;&#21839;&#65292; &#21407;&#25512;&#22914;&#19979;&#65306;</p><p><a href="https://x.com/praeclarum/status/1706725414465683583?s=20">https://x.com/praeclarum/status/1706725414465683583?s=20</a></p><div><hr></div><h2><strong>&#129322; &#36984;&#25512;&#33287;&#38290;&#32842;</strong></h2><p>iPhone 15 Pro &#20854;&#23526;&#26159;&#26032;&#27454;&#30340;&#36938;&#25138;&#20027;&#27231;&#65281;USB-C &#25509;&#21475;&#25903;&#25588; display port &#21487;&#30452;&#36664;&#20986;&#21040;&#34722;&#24149;&#65292;&#25105;&#28204;&#35430;&#36942;&#21487;&#34892;&#65292;&#32780;&#19988;&#25171; cloud gaming &#23601;&#19981;&#29992;&#25812;&#24515;&#20027;&#27231;&#30332;&#29105;&#20102;&#127770;</p><p><a href="https://twitter.com/VadimYuryev/status/1706574913962917991">https://twitter.com/VadimYuryev/status/1706574913962917991</a></p><p>&#19981;&#28982; Razer &#20063;&#26377;&#20986;&#36889;&#27454;&#36229;&#37239; RGB &#25163;&#27231;&#23560;&#29992;&#39080;&#25159;&#65292;&#36996;&#25903;&#25588; MagSafe</p><p><a href="https://www.razer.com/mobile-accessories/razer-phone-cooler-chroma/RC21-01790100-R3M1">https://www.razer.com/mobile-accessories/razer-phone-cooler-chroma/RC21-01790100-R3M1</a> (&#22294;&#29255;&#20358;&#33258;&#23448;&#32178;&#65289;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VT2a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10fa8e5-09c9-4ae5-b2d6-8e6841af3862_1500x1000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VT2a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10fa8e5-09c9-4ae5-b2d6-8e6841af3862_1500x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VT2a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10fa8e5-09c9-4ae5-b2d6-8e6841af3862_1500x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VT2a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10fa8e5-09c9-4ae5-b2d6-8e6841af3862_1500x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VT2a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10fa8e5-09c9-4ae5-b2d6-8e6841af3862_1500x1000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VT2a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10fa8e5-09c9-4ae5-b2d6-8e6841af3862_1500x1000.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a10fa8e5-09c9-4ae5-b2d6-8e6841af3862_1500x1000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VT2a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10fa8e5-09c9-4ae5-b2d6-8e6841af3862_1500x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VT2a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10fa8e5-09c9-4ae5-b2d6-8e6841af3862_1500x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VT2a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10fa8e5-09c9-4ae5-b2d6-8e6841af3862_1500x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VT2a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa10fa8e5-09c9-4ae5-b2d6-8e6841af3862_1500x1000.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[波報 #60 - 改變總是帶來抱怨]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/9/4 - 2023/9/10]]></description><link>https://pofat.substack.com/p/60</link><guid isPermaLink="false">https://pofat.substack.com/p/60</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Sun, 10 Sep 2023 22:37:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#36889;&#26399;&#20221;&#37327;&#29305;&#21029;&#39165;&#28415;&#65292;&#20027;&#35201;&#21407;&#22240;&#26159;&#25509;&#19979;&#20358;&#20841;&#36913;&#25105;&#23559;&#21069;&#24448;&#19968;&#20491;&#32178;&#32097;&#20449;&#34399;&#30130;&#24369;&#29978;&#33267;&#21487;&#33021;&#23436;&#20840;&#28961;&#32178;&#32097;&#30340;&#22320;&#26041;&#26053;&#34892;&#65292;&#22240;&#27492;&#25105;&#27770;&#23450;&#20241;&#21002;&#20841;&#36913;&#12290;&#36889;&#36913;&#23601;&#20808;&#39221;&#22823;&#23478;&#20491;&#31895;&#39165;&#65292;&#20197;&#35299;&#26410;&#20358;&#30456;&#24605;&#20043;&#33510;&#65288;&#65311;&#65289;&#12290;</p><p>&#30332;&#34920;&#26371;&#36817;&#20102;&#65292;&#31069;&#22823;&#23478;&#33655;&#21253;&#24179;&#23433;&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#128161; Hyrum&#8217;s Law</strong></h2><p>&#29694;&#22312;&#30340;&#24037;&#20316;&#20013;&#38656;&#35201;&#32173;&#35703;&#19968;&#20491; libarary&#65292;&#26368;&#36817;&#22312;&#35342;&#35542;&#24190;&#20491;&#22238;&#22577;&#21839;&#38988;&#26178;&#34987;&#21516;&#20107;&#20171;&#32057;&#20102;<a href="https://www.hyrumslaw.com/">Hyrum&#8217;s Law</a>&#65292;&#36889;&#35731;&#25105;&#24847;&#35672;&#21040;&#25105;&#29433;&#38552;&#30340;&#24605;&#32173;&#21487;&#33021;&#26371;&#23565;&#36575;&#39636;&#32173;&#35703;&#36896;&#25104;&#39080;&#38570;&#12290;</p><p>&#30070;&#25105;&#24863;&#21040;&#20182;&#20154;&#35492;&#26371;&#25110;&#37679;&#29992; API &#26178;&#25105;&#32317;&#24819;&#33879;&#35201;&#25913;&#35722;&#21628;&#21483;&#31471;&#30340;&#34892;&#28858;&#20877;&#20197;&#25991;&#20214;&#36628;&#20304;&#32004;&#26463;&#65292;&#19981;&#36942;&#36889;&#20006;&#19981;&#19968;&#23450;&#26377;&#21161;&#26044;&#21839;&#38988;&#30340;&#35299;&#27770;&#65292;&#19988;&#21487;&#33021;&#26371;&#35731;&#20854;&#26356;&#38627;&#29992;&#65288;&#36896;&#25104;&#26356;&#22810;&#28779;&#35201;&#25937;&#65289;&#12290;</p><blockquote><p>&#30070;&#36275;&#22816;&#22810;&#20154;&#20351;&#29992;&#20320;&#30340; API&#65292;&#20854;&#21407;&#26412;&#30340;&#21512;&#32004;&#26159;&#20160;&#40636;&#23559;&#19981;&#20877;&#37325;&#35201;&#65292;&#25152;&#26377;&#31995;&#32113;&#19978;&#21487;&#35264;&#23519;&#30340;&#34892;&#28858;&#37117;&#26371;&#35722;&#25104;&#26576;&#20123;&#20154;&#30340;&#20351;&#29992;&#20381;&#25818;&#12290;</p></blockquote><p>&#36889;&#20491;&#23450;&#24459;&#32972;&#24460;&#30340;&#24847;&#32681;&#26159;&#20160;&#40636;&#21602;&#65311; &#22914;&#26524;&#24819;&#35201;&#24310;&#38263;&#31995;&#32113;&#30340;&#20351;&#29992;&#22781;&#21629;&#21644;&#25552;&#26119;&#20351;&#29992;&#37327;&#65292;&#38283;&#30332;&#32773;&#24471;&#21028;&#26039;&#20986;&#20309;&#35586;&#26360;&#38754;&#21512;&#21516;&#30340;&#37002;&#30028;&#65292;&#20197;&#21450;&#31995;&#32113;&#26377;&#21738;&#20123;&#21487;&#35264;&#23519;&#30340;&#34892;&#28858;&#65292;&#20006;&#23559;&#20841;&#32773;&#37117;&#32013;&#20837;&#32771;&#24942;&#12290;&#22914;&#26524;&#25345;&#32396;&#24573;&#30053;&#21487;&#35264;&#23519;&#34892;&#28858;&#65292;&#21487;&#33021;&#26371;&#35731; API &#35722;&#24471;&#24456;&#38627;&#29992;&#12289;&#29978;&#33267;&#26820;&#29992;&#12290;&#27604;&#22914; API &#30340;&#21512;&#21516;&#36890;&#24120;&#19981;&#20445;&#35657;&#25928;&#33021;&#65292;&#20294;&#22914;&#26524;&#25928;&#33021;&#22826;&#24290;&#33258;&#28982;&#22823;&#23478;&#19981;&#26371;&#24819;&#29992;&#12290;</p><p>&#33289;&#20491;&#36817;&#26399;&#23526;&#20363;&#65292; JSONEncoder &#22312; iOS 17 Encode &#26178;&#65292;key &#30340;&#25490;&#24207;&#26371;&#26377;&#20598;&#30332;&#20098;&#24207;&#65288;&#35211; <a href="https://www.ethanhuang13.com/p/199">13 &#22577; #199</a>)&#65292;&#27492;&#20363;&#20013; key-value &#30340;&#38918;&#24207;&#28858;&#21487;&#35264;&#23519;&#34892;&#28858;&#65292;&#32780;&#26360;&#38754;&#21512;&#21516;&#65288;<a href="https://developer.apple.com/documentation/foundation/jsonencoder/2895034-encode">&#25991;&#20214;</a>&#65289; &#20006;&#28961;&#20445;&#35657;&#20854;&#28858;&#26377;&#24207;&#65292;&#20294;&#36889;&#24050;&#32147;&#25104;&#28858;&#37096;&#20998;&#38283;&#30332;&#32773;&#25152;&#20208;&#36084;&#30340;&#34892;&#28858;&#20043;&#19968;&#12290;</p><p></p><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://www.youtube.com/watch?v=MRY3UCUVv98">SwiftUI View &#29983;&#21629;&#20013;&#30340;&#19968;&#22825;</a></strong></h3><p><a href="https://objc.io/">objc.io</a> &#20316;&#32773;&#20043;&#19968; Chris Eidhof &#22312; <a href="https://www.swiftconf.to/">Swift TO</a> &#35299;&#35498; SwiftUI View &#24515;&#26234;&#27169;&#22411;&#30340;<a href="https://www.youtube.com/watch?v=MRY3UCUVv98">&#28436;&#35611;</a>&#65292;&#24478;&#31243;&#24335;&#30908;&#22914;&#20309;&#36681;&#35722;&#25104; view tree &#20197;&#21450; render tree&#65292;&#25972;&#20491; tree &#22914;&#20309;&#36914;&#34892; layout &#30340;&#36939;&#31639;&#65292;&#19981;&#29087;&#24713;&#36939;&#20316;&#21407;&#29702;&#30340;&#20540;&#24471;&#19968;&#30475;&#12290;</p><p>SwiftUI &#30340;&#39640;&#24230;&#25277;&#35937;&#19981;&#20195;&#34920;&#19981;&#38656;&#29702;&#35299;&#20854;&#36939;&#20316;&#21407;&#29702;&#65292;&#27491;&#22240;&#28858;&#25277;&#35937;&#38577;&#34255;&#20102;&#35377;&#22810;&#35079;&#38620;&#65292;&#33509;&#20351;&#29992;&#19978;&#33287;&#20854;&#35373;&#35336;&#21407;&#21063;&#34909;&#31361;&#65292;&#21063;&#26371;&#28961;&#27604;&#30171;&#33510;&#65288;&#27599;&#20491;&#29256;&#26412;&#37117; breaking change &#36996;&#19981;&#22816;&#33510;&#21966;&#65311;&#65289;</p><p>&#22914;&#26524;&#19981;&#21916;&#27489;&#30475;&#24433;&#29255;&#30340;&#35441;&#65292;Chris &#20063;&#24324;&#20102;&#19968;&#31687;&#22294;&#25991;&#20006;&#33538;&#30340;<a href="https://chris.eidhof.nl/presentations/day-in-the-life/">&#36880;&#23383;&#31295;</a>&#65292;&#25991;&#31456;&#27604;&#36611;&#23481;&#26131;&#21069;&#24460;&#23563;&#25214;&#20839;&#23481;&#12290;</p><p></p><h3><strong><a href="https://www.emergetools.com/blog/posts/symbolicating-swiftui-and-any-apple-framework">&#22914;&#20309; Symbolic SwiftUI Crash Log</a></strong></h3><p>&#25216;&#34899;&#22303;&#28846;&#29245;&#25991;&#21448;&#19968;&#31687;&#65292;&#22914;&#26524;&#20351;&#29992;&#38750; Apple &#23448;&#26041;&#30340;&#26041;&#25910;&#38598; crash log &#65288;Crashlytics &#31561;&#65289;&#65292;&#20320;&#26371;&#23565; SwiftUI &#30340; crash &#24863;&#21040;&#38957;&#30171;&#65292;&#22240;&#28858;&#36319;&#33879; OS &#37323;&#20986;&#30340; SwiftUI binary &#27794;&#26377; symbol name&#12290;</p><p><a href="https://www.emergetools.com/">Emerge Tools</a> &#20570;&#28858;&#25105;&#26368;&#24859;&#30340;&#20844;&#21496;&#20043;&#19968;&#21448;&#27794;&#20196;&#20154;&#22833;&#26395;&#65292;&#20182;&#20497;&#30332;&#34920;&#20102;&#19968;&#31687;&#23436;&#25972;&#30340;&#25945;&#23416;&#65292;&#20805;&#28415;&#33879;&#28611;&#28611;&#30340; DIY &#39080;&#65292;&#22240;&#28858; symbol &#26159;&#24478;&#23448;&#26041;&#31649;&#36947;&#19979;&#36617;&#30340; crash logs &#35041;&#25277;&#20986;&#20358;&#30340;&#65292;&#28982;&#24460; symbol address &#26159;&#25163;&#31639;&#20986;&#20358;&#30340;&#65288; ASLR&#65292;Apple &#22312; load app &#21040;&#35352;&#25014;&#39636;&#26178;&#26371;&#21205;&#24907;&#22320;&#36617;&#21040;&#19981;&#21516;&#20301;&#22336;&#65292;&#22240;&#28858;<a href="https://support.apple.com/en-gb/guide/security/sec15bfe098e/web">&#23433;&#20840;&#32771;&#37327;</a>&#65289; &#65292;&#36889;&#25216;&#24039;&#21487;&#20197;&#25033;&#29992;&#21040;&#21508;&#31278;&#19981;&#21516;&#30340; Apple framework&#65292;&#19981;&#38480;&#26044; SwiftUI&#12290;&#27492;&#22806;&#65292;&#20182;&#20497;&#20063;&#38928;&#21578;&#24050;&#25171;&#36896;&#19968;&#20491;&#24037;&#20855;&#20358;&#36628;&#21161;&#36889;&#24037;&#31243;&#65292;&#35531;&#26399;&#24453;&#19979;&#31687;&#25991;&#12290;</p><p>&#20840;&#25991;&#35211;<a href="https://www.emergetools.com/blog/posts/symbolicating-swiftui-and-any-apple-framework">&#27492;&#36899;&#32080;</a>&#12290;</p><p></p><h3><strong><a href="https://www.fatbobman.com/posts/memory-usage-optimization/">SwiftUI + Core Data &#20839;&#23384;&#20248;&#21270;&#20043;&#26053;</a></strong></h3><p><a href="https://twitter.com/fatbobman">&#32920;&#23376;</a>&#30340;&#25991;&#31456;&#35712;&#20358;&#32317;&#26159;&#36942;&#30318;&#65292;&#25105;&#22312;&#35041;&#38754;&#26368;&#22823;&#30340;&#25910;&#29554;&#26159;&#29702;&#35299;&#21407;&#20358; @State &#30340;&#37323;&#25918;&#19981;&#22816;&#31309;&#26997;&#65292;&#32068;&#21512;&#39006;&#22411;&#30340; UI &#35041;&#38754;&#32933;&#22823;&#30340;&#20803;&#20214;&#65288;&#25033;&#37117; image &#23621;&#22810;&#65289;&#25918; <code>@State</code> &#21069;&#35201;&#22810;&#32771;&#24942;&#65292;&#20197;&#21450;&#22914;&#20309;&#22312; <code>onDisappear</code> &#24460;&#28187;&#23569;&#30475;&#19981;&#35211; view &#25152;&#20308;&#29992;&#30340;&#35352;&#25014;&#39636;&#37327;&#12290;</p><p><a href="https://www.fatbobman.com/posts/memory-usage-optimization/">https://www.fatbobman.com/posts/memory-usage-optimization/</a></p><p></p><h3><strong><a href="https://procursus.social/@khanhduy032/111000823981300707">&#22312; iOS &#19978;&#35037; Swift Playgrounds</a></strong></h3><p>&#20813;&#36234;&#29508;&#25226; iPad &#19978;&#30340; Swift Playgrounds &#65292;&#21482;&#35201;&#35206;&#23531; Info.plist &#30340;&#35373;&#23450;&#21363;&#21487;&#12290;&#30070;&#22312;&#24605;&#32771; Swift &#21839;&#38988;&#19988;&#25163;&#19978;&#21482;&#26377; iPhone &#26178;&#25105;&#24120;&#29992; <a href="https://godbolt.org">https://godbolt.org</a>&#65292;&#20294;&#32178;&#38913;&#30050;&#31455;&#21463;&#38480;&#26044;&#32178;&#36335;&#12290;Playgrounds &#21063;&#33258;&#30001;&#36629;&#20415;&#35377;&#22810;&#65292;&#30050;&#31455;&#25105;&#20303;&#30340;&#22478;&#24066;&#25463;&#36939;&#35041;&#24190;&#20046;&#27794;&#32178;&#36335;&#12290;</p><p>&#35443;&#24773;&#65306; <a href="https://mastodon.social/@khanhduy032@procursus.social/111000824062074366">https://mastodon.social/@khanhduy032@procursus.social/111000824062074366</a></p><p></p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/foundation-workgroup-formed/67135">Fondation Workgroup</a></strong></h3><p>Swift &#23526;&#20570;&#29256;&#26412;&#30340;&#26032; <a href="https://github.com/apple/swift-foundation/">Foundation</a> &#30446;&#21069;&#24050;&#32147;&#36939;&#29992;&#22312;&#20170;&#24180;&#30340;&#26032;&#29256;&#20316;&#26989;&#31995;&#32113;&#20013; &#65288;&#23531;&#21040;&#36889;&#31361;&#28982;&#24819;&#21040;&#19978;&#36848;&#30340; iOS 17 JSONEncoder &#20098;&#24207;&#21487;&#33021;&#26159;&#22240;&#28858;&#25563;&#26032;&#23526;&#20316;&#65289;&#65292;&#28858;&#20102;&#22240;&#25033;&#39318;&#35201;&#30340;&#25928;&#33021;&#33287;&#25509;&#19979;&#20358;&#26356;&#22810;&#30340; porting &#24037;&#20316;&#65292;&#26032;&#30340; Foundation Workgroup &#25104;&#31435;&#12290;</p><p></p><h3><strong><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0408-pack-iteration.md">[SE-0408] Pack Iteration (Reviewing)</a></strong></h3><p>SE-0393 &#24118;&#20358;&#24375;&#22823;&#30340;&#21487;&#35722;&#22411;&#21029;&#21443;&#25976;&#21253;(type and value parameter pack&#65289;&#24460;&#26377;&#20491;&#26410;&#35299;&#30340;&#21839;&#38988;&#65292;&#22312;&#27867;&#22411;&#21443;&#25976;&#37325;&#35206;&#23637;&#38283;&#25104;&#23526;&#38555;&#22411;&#24907;&#30340;&#36942;&#31243;&#20013;&#65292;&#28961;&#27861;&#26089;&#36864;&#12290;&#30446;&#21069;&#21482;&#33021;&#29992; throw Error &#30340; workaround &#36948;&#25104;&#65306;</p><pre><code><code>struct NotEqual: Error {}

func == &lt;each Element: Equatable&gt;(lhs: (repeat each Element), rhs: (repeat each Element)) -&gt; Bool {
  // Local throwing function for operating over each element of a pack expansion.
  func isEqual&lt;T: Equatable&gt;(_ left: T, _ right: T) throws {
    if left == right {
      return
    }
    
    throw NotEqual()
  }

  // Do-catch statement for short-circuiting as soon as two tuple elements are not equal.
  do {
    repeat isEqual(each lhs, each rhs)
  } catch {
    return false
  }

  return true
}</code></code></pre><p>&#32780;&#36889;&#23565;&#29087;&#24713; <code>Sequence</code> &#30340; Swift &#38283;&#30332;&#32773;&#19968;&#40670;&#20063;&#19981;&#33258;&#28982;&#65292;&#25152;&#20197;&#27492;&#25552;&#26696;&#23601;&#26159;&#35731;&#38283;&#30332;&#32773;&#21487;&#20197; for-in &#21443;&#25976;&#32068;&#65292;&#19978;&#36848;&#21487;&#25913;&#23531;&#25104;&#65306;</p><pre><code><code>func == &lt;each Element: Equatable&gt;(lhs: (repeat each Element), rhs: (repeat each Element)) -&gt; Bool {

  for (left, right) in repeat (each lhs, each rhs) {
    guard left == right else { return false }
  }
  return true
}</code></code></pre><p>&#27604;&#22914;&#21628;&#21483;&#31471;&#32102;&#30340;&#21443;&#25976;&#21253;&#26159; &#65288;<code>Int</code> , <code>String</code>, <code>Bool</code>&#65289;&#65292;for-in &#26178;&#23601;&#26371;&#20381;&#24207;&#25343;&#21040; <code>Int</code>&#12289;<code>String</code>&#65292;<code>Bool</code>&#65292;&#32780;&#19988; for-in &#35041;&#30340; repeat &#26159; lazy &#36939;&#31639;&#65292;&#22914;&#26524;&#25552;&#26089; break &#24460;&#38754;&#30340;&#34920;&#24335;&#31034;&#20063;&#19981;&#26371;&#32380;&#32396;&#35299;&#26512;&#12290;</p><p><a href="https://forums.swift.org/t/review-se-0408-pack-iteration/67152">https://forums.swift.org/t/review-se-0408-pack-iteration/67152</a></p><p></p><h3><strong><a href="https://forums.swift.org/t/adding-a-packages-page-to-swift-org/67055">Swift.org &#22686;&#21152; Packages &#20998;&#39006;</a></strong></h3><p><a href="https://swiftpackageindex.com/">Swift Package Index</a> &#30340;&#20027;&#35201;&#32173;&#35703;&#32773; Dave &#33287; Sven &#27442;&#23559;&#36889;&#20123; Swift package &#36039;&#35338;&#25552;&#26119;&#28858;&#19968;&#31561;&#20844;&#27665;&#65292;&#20063;&#23601;&#26159;&#25104;&#28858; Swift.org &#39318;&#38913;&#20013;&#20998;&#39006;&#20043;&#19968;&#12290;&#35041;&#38754;&#30340;&#20839;&#23481;&#38928;&#26399;&#26371;&#26377;&#29105;&#38272;&#36984;&#25799;&#65292;Swift macros &#30340;&#29544;&#31435;&#23376;&#39006;&#65292;&#20197;&#21450;&#31038;&#32676;&#31934;&#36984;&#65292;&#31934;&#36984;&#28165;&#21934;&#26371;&#30001; Swift Website Workgroup &#20358;&#25361;&#36984;&#32173;&#35703;&#65292;&#36889;&#23565;&#26032;&#21152;&#20837; Swift &#30340;&#38283;&#30332;&#22280;&#30340;&#38283;&#30332;&#32773;&#28961;&#30097;&#26159;&#19968;&#21451;&#21892;&#20043;&#33289;&#65292;&#21916;&#27489;&#36889;&#24819;&#27861;&#30340;&#27489;&#36814;&#21435;<a href="https://forums.swift.org/t/adding-a-packages-page-to-swift-org/67055">&#35542;&#22727;&#21407;&#25991;</a>&#32882;&#25588;&#12290;</p><p>&#38928;&#35261;&#22914;&#19979;&#65292;<a href="https://spi-swift-org.netlify.app/packages/#featured-packages">&#20063;&#21487;&#25353;&#27492;&#36914;&#38928;&#35261;&#32178;&#38913;</a>&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e5Ra!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ca212d-1137-456f-a512-f72044f5ef43_2386x1932.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e5Ra!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ca212d-1137-456f-a512-f72044f5ef43_2386x1932.png 424w, https://substackcdn.com/image/fetch/$s_!e5Ra!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ca212d-1137-456f-a512-f72044f5ef43_2386x1932.png 848w, https://substackcdn.com/image/fetch/$s_!e5Ra!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ca212d-1137-456f-a512-f72044f5ef43_2386x1932.png 1272w, https://substackcdn.com/image/fetch/$s_!e5Ra!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ca212d-1137-456f-a512-f72044f5ef43_2386x1932.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e5Ra!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ca212d-1137-456f-a512-f72044f5ef43_2386x1932.png" width="1456" height="1179" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0ca212d-1137-456f-a512-f72044f5ef43_2386x1932.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1179,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:473669,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e5Ra!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ca212d-1137-456f-a512-f72044f5ef43_2386x1932.png 424w, https://substackcdn.com/image/fetch/$s_!e5Ra!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ca212d-1137-456f-a512-f72044f5ef43_2386x1932.png 848w, https://substackcdn.com/image/fetch/$s_!e5Ra!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ca212d-1137-456f-a512-f72044f5ef43_2386x1932.png 1272w, https://substackcdn.com/image/fetch/$s_!e5Ra!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ca212d-1137-456f-a512-f72044f5ef43_2386x1932.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br></p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#21628;&#25033;&#26412;&#26399;&#29305;&#21029;&#20839;&#23481; - Hyrum&#8217;s Law &#30340; <a href="https://xkcd.com/1172/">xkcd</a><br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VF2A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VF2A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png 424w, https://substackcdn.com/image/fetch/$s_!VF2A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png 848w, https://substackcdn.com/image/fetch/$s_!VF2A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png 1272w, https://substackcdn.com/image/fetch/$s_!VF2A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VF2A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png" width="555" height="772" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:772,&quot;width&quot;:555,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98888,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VF2A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png 424w, https://substackcdn.com/image/fetch/$s_!VF2A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png 848w, https://substackcdn.com/image/fetch/$s_!VF2A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png 1272w, https://substackcdn.com/image/fetch/$s_!VF2A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4b05e03-a657-4248-a5ba-a9dd0b6eee70_555x772.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>&#20219;&#20309;&#26356;&#26032;&#37117;&#26371;&#30772;&#22750;&#26576;&#20123;&#20154;&#30340;&#24037;&#20316;&#27969;&#31243;</p></blockquote><p></p><p>&#24456;&#28418;&#20142;&#30340; widget</p><p><a href="https://twitter.com/TideGuideApp/status/1700294042423022068?s=20">https://twitter.com/TideGuideApp/status/1700294042423022068?s=20</a></p><p>Apple Watch Ultra &#19978;&#29609;&#38647;&#31070;&#20043;&#37786;</p><p><a href="https://twitter.com/Livid/status/1699959523447021570?s=20">https://twitter.com/Livid/status/1699959523447021570?s=20</a></p>]]></content:encoded></item><item><title><![CDATA[波報 #59 - 久 bug 成 feature]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/8/28 - 2023/9/3]]></description><link>https://pofat.substack.com/p/59</link><guid isPermaLink="false">https://pofat.substack.com/p/59</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Sun, 03 Sep 2023 22:13:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>&#27874;&#22577; #59 - &#20037; bug &#25104; feature</strong></h1><p>Swift &#22823;&#23567;&#20107; 2023/8/28 - 2023/9/3</p><h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>iPhone 15 &#30340;&#37666;&#28310;&#20633;&#22909;&#20102;&#21966;&#65311;&#21482;&#21097;&#19981;&#21040;&#19968;&#20491;&#26376;&#21862;&#65281;</p><p>&#12298;<a href="https://pofat.substack.com/p/58">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://www.apple.com/tw/apple-events/">Apple &#31179;&#23395;&#30332;&#34920;&#26371;</a></strong></h3><p>&#21488;&#28771;&#26178;&#38291; 9/13 &#20940;&#26216;&#19968;&#40670;&#65292;&#36889;&#20491;&#20027;&#35222;&#35258;&#35731;&#25105;&#24819;&#21040;&#38651;&#24433;&#12300;&#27801;&#19992;&#12301;&#65292;&#26159;&#21542;&#36319;&#26032;&#30340; Apple Watch Ultra &#26377;&#38364;&#65311;</p><p><a href="https://www.apple.com/tw/apple-events/">https://www.apple.com/tw/apple-events/</a></p><p></p><h3><strong><a href="https://federated.saagarjha.com/objects/cc06baa1-3da7-40e2-8c9e-8d8e01a17483">NSString &#19981;&#21253;&#21547;&#31354;&#23383;&#20018;</a></strong></h3><p>&#26377;&#20491;&#33836;&#24180;&#32769;&#22353;&#26368;&#36817;&#21448;&#28014;&#19978;<a href="https://federated.saagarjha.com/objects/cc06baa1-3da7-40e2-8c9e-8d8e01a17483">&#35342;&#35542;&#20018;</a>&#65292;&#38263;&#30456;&#22914;&#19979;&#65306;<br><br><code>"asdf".contains("") // true</code></p><p><code>import Foundation</code></p><p><code>"asdf".contains("") // false</code></p><p></p><p>&#36889;&#20491;&#21839;&#38988;&#30340;&#26681;&#28304;&#22312;&#26044;&#30070;&#24341;&#20837; Foundation &#26178;&#65292;Swift String &#26371;&#33258;&#21205;&#36681;&#25563;&#28858; NSString&#65292;&#22240;&#27492;&#31532;&#20108;&#20491; <code>contains(_:)</code> &#35519;&#29992;&#30340;&#26159; <code>NSString</code> &#30340;&#26041;&#27861;&#65292;&#32780;&#31532;&#19968;&#20491;&#21063;&#26159;&#35519;&#29992; <code>Swift.String</code> &#30340;&#26041;&#27861;&#12290;&#28982;&#32780;&#65292;NSString &#30340;&#34892;&#28858;&#21371;&#19981;&#27491;&#30906;&#65292;&#36889;&#20491;&#21839;&#38988;&#22312;&#19971;&#24180;&#21069;&#30340;&#35542;&#22727;&#19978;&#24050;&#32147;&#26377;&#20102;&#30456;&#38364;&#30340;<a href="https://forums.swift.org/t/nsstring-contains-returns-false-for-empty-string-argument/3949">&#35342;&#35542;</a>&#12290;&#20439;&#35441;&#35498;&#24471;&#22909;&#65292;&#20037; bug &#25104; feature &#65292;&#38614;&#28982;&#36889;&#20491;&#27298;&#26597;&#25033;&#35442;&#19981;&#24120;&#29992;&#65292;&#20294;&#36996;&#35531;&#22823;&#23478;&#22810;&#23567;&#24515;&#12290;</p><p>&#65288;&#30475;&#21040; 7 years later &#36996;&#26159;&#26377;&#40670;&#38663;&#25022;&#65289;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CBSm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab48130e-263c-4770-ab57-a03b07bc91fb_1618x498.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CBSm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab48130e-263c-4770-ab57-a03b07bc91fb_1618x498.png 424w, https://substackcdn.com/image/fetch/$s_!CBSm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab48130e-263c-4770-ab57-a03b07bc91fb_1618x498.png 848w, https://substackcdn.com/image/fetch/$s_!CBSm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab48130e-263c-4770-ab57-a03b07bc91fb_1618x498.png 1272w, https://substackcdn.com/image/fetch/$s_!CBSm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab48130e-263c-4770-ab57-a03b07bc91fb_1618x498.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CBSm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab48130e-263c-4770-ab57-a03b07bc91fb_1618x498.png" width="1456" height="448" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab48130e-263c-4770-ab57-a03b07bc91fb_1618x498.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:448,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CBSm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab48130e-263c-4770-ab57-a03b07bc91fb_1618x498.png 424w, https://substackcdn.com/image/fetch/$s_!CBSm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab48130e-263c-4770-ab57-a03b07bc91fb_1618x498.png 848w, https://substackcdn.com/image/fetch/$s_!CBSm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab48130e-263c-4770-ab57-a03b07bc91fb_1618x498.png 1272w, https://substackcdn.com/image/fetch/$s_!CBSm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab48130e-263c-4770-ab57-a03b07bc91fb_1618x498.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong><a href="https://blog.1password.com/passkey-crates/">1Password &#38283;&#28304;&#25903;&#25588; passkey &#30340; library</a></strong></h3><p>1Password &#30446;&#21069;&#30340;beta &#29256;&#38283;&#22987;<a href="https://blog.1password.com/save-sign-in-passkeys-1password/">&#25903;&#25588; passkey &#30331;&#20837;&#32178;&#38913;</a>&#65292;&#20182;&#20497;&#20063;&#38283;&#28304;&#20102; <a href="https://crates.io/crates/passkey">passkey-rs</a> &#65288;Rust, of course&#128540;&#65289;&#35731;&#38283;&#30332;&#32773;&#20063;&#21487;&#20197;&#29992;&#20358;&#25903;&#25588; passkey&#65292;&#35443;&#24773;&#21443;&#38321;<a href="https://blog.1password.com/passkey-crates/">&#20171;&#32057;&#25991;</a>&#12290;</p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/embedded-swift/67057">Embedded Swift</a></strong></h3><p>&#23884;&#20837;&#24335;&#31995;&#32113;&#20173;&#28982;&#24456;&#27969;&#34892;&#65292;&#20294;&#23427;&#20063;&#33021; Swift &#21966;&#65311;</p><p>&#35201;&#22312;&#36039;&#28304;&#38750;&#24120;&#26377;&#38480;&#30340;&#29872;&#22659;&#19978;&#36939;&#34892;&#65292;Swift &#26368;&#22823;&#30340;&#25361;&#25136;&#23601;&#26159; binary size &#33287; memory usage&#65292;&#22312;&#31243;&#24335;&#26412;&#36523;&#37007;&#36655;&#22806;&#65292;&#38500;&#20102; runtime &#33287; standard library &#65292;&#26368;&#22823;&#30340; binary &#20308;&#29992;&#20358;&#28304;&#22823;&#22810;&#26159; metadata&#65292;&#20219;&#20309; runtime &#30456;&#38364;&#30340;&#21151;&#33021;&#37117;&#38656;&#35201;&#20208;&#36084;&#23427;&#65292;&#32173;&#35703;&#36889;&#20123;&#39006;&#22411;&#36039;&#35338;&#34920;&#26684;&#38750;&#24120;&#20308;&#31354;&#38291;&#65307; &#21478;&#19968;&#20491;&#25361;&#25136;&#21063;&#26159;&#38754;&#23565;&#31995;&#32113;&#26377;&#38480;&#30340; runtime dependencies&#12290;</p><p>&#36889;&#20123;&#29305;&#24615;&#33287;&#19968;&#33324;&#30340;&#25163;&#27231;&#21644;&#26700;&#38754;&#38283;&#30332;&#26377;&#24456;&#22823;&#30340;&#19981;&#21516;&#65292;&#22240;&#27492;&#38656;&#35201;&#24341;&#20837;&#19968;&#31278;&#26032;&#30340;&#32232;&#35695;&#27169;&#24335;&#20358;&#28415;&#36275;&#36889;&#20123;&#38656;&#27714;&#65292;&#36889;&#31278;&#32232;&#35695;&#27169;&#24335;&#30340;&#30446;&#27161;&#26159;&#65306;</p><ul><li><p>&#24375;&#21147;&#30246;&#36523;&#65292;&#33267;&#23569; runtime &#21644; standard library &#19981;&#33021;&#20027;&#23472;&#25033;&#29992;&#31243;&#24335;&#30340;&#26368;&#32066;&#22823;&#23567;</p></li><li><p>&#31777;&#21270;&#32232;&#35695;&#36664;&#20986;</p></li><li><p>&#26356;&#26377;&#25928;&#30340;&#28961;&#29992;&#31243;&#24335;&#30908;&#21034;&#21098;</p></li><li><p>&#19981;&#35542;&#26159;&#21542;&#26377;heap&#65292;&#37117;&#25033;&#35442;&#33021;&#22816;&#25903;&#25588;&#65288;&#22312;&#19981;&#25903;&#25588;&#30340;&#24773;&#27841;&#19979;&#23559;&#28961;&#27861;&#20351;&#29992;class&#65289;</p></li><li><p>&#30433;&#21487;&#33021;&#22320;&#31227;&#38500; runtime call&#65292;&#27604;&#22914;&#20320;&#28961;&#27861; dynamic casting&#65292;&#20294;&#37096;&#20998;&#24773;&#27841;&#65288;&#22914;&#24341;&#29992;&#35336;&#25976;&#65289;&#21487;&#20801;&#35377;</p></li><li><p>&#29983;&#25104;&#26368;&#23567;&#38748;&#24907;&#36899;&#32080;&#30340; binary &#65288;&#20840;&#37096;&#38748;&#24907;&#36899;&#32080;&#25165;&#33021;&#26377;&#25928;&#22320;&#36914;&#34892;&#23610;&#23544;&#30340;&#26368;&#20339;&#21270;&#65289;</p></li></ul><p>&#35201;&#21034;&#38500;&#36889;&#40636;&#22810;&#21151;&#33021;&#30340;&#24773;&#27841;&#19979;&#65292;Swift &#20840;&#21151;&#33021;&#25903;&#25588;&#33258;&#28982;&#19981;&#23526;&#38555;&#65292;&#25152;&#20197; Embeded Swift &#26371;&#26159;&#19968;&#20491; Swift &#30340;&#23376;&#38598;&#65292;&#19981;&#31649; ABI &#31337;&#23450;&#24615;&#65292;&#19981;&#25903;&#25588;&#27211;&#25509; ObjC&#65292;runtime &#21151;&#33021;&#22823;&#24133;&#21034;&#38500;&#65292;String API &#33287; unicode &#30456;&#38364;&#30340;&#26371;&#34987;&#21106;&#21040;&#21478;&#22806;&#30340;&#22320;&#26041;&#21435;&#12290;&#26368;&#22823;&#24433;&#38911;&#30340;&#25033;&#35442;&#26159; <code>print()</code> &#19981;&#33021;&#30452;&#25509;&#29992;&#20358;&#21360;&#19968;&#20491;&#29289;&#20214;&#65288;&#21483;&#20154;&#24590;&#40636; debug&#65281;&#65311;&#65289;&#65292;&#20294;&#26371;&#26377;&#26367;&#20195;&#24418;&#24335;&#20986;&#29694;&#65292;&#26368;&#26032;&#30340; <code>any</code> existentail &#20063;&#19981;&#25903;&#25588;&#12290;</p><p>&#28982;&#32780;&#36889;&#38936;&#22495;&#20013;&#65292;&#22823;&#22810;&#25976;&#27161;&#28310;&#24235;&#21151;&#33021;&#24050;&#32147;&#33021;&#22816;&#39023;&#33879;&#25552;&#21319;&#38283;&#30332;&#39636;&#39511;&#65292;&#20363;&#22914;&#65292;&#35201;&#34389;&#29702;&#36899;&#32396;&#30340;binary &#25976;&#25818;&#65292;&#21487;&#20197;&#20351;&#29992; Sequence &#20358;&#33258;&#23450;&#32681;&#36845;&#20195;&#26041;&#24335;&#65292;&#25110;&#32773;&#21487;&#20197;&#30452;&#25509;&#20351;&#29992;map&#12289;reduce&#31561;&#21151;&#33021;&#65292;&#24819;&#24517;&#26371;&#35731;&#38283;&#30332;&#26356;&#21152;&#24841;&#24555;</p><p>&#30446;&#21069;&#24050;&#26377;&#30495;&#30340;&#21487;&#20197;&#21205;&#30340; PoC&#65292;&#35443;&#35211;<a href="https://forums.swift.org/t/embedded-swift/67057#proof-of-concept-1">&#35542;&#22727;&#25991;&#31456;</a>&#65292;&#23436;&#25972;&#30340;&#25216;&#34899;&#30446;&#27161;&#21644;&#22519;&#34892;&#26041;&#21521;&#21487;&#20197;&#30475;<a href="https://github.com/kubamracek/swift-evolution/blob/embedded-swift/visions/embedded-swift.md">&#39000;&#26223;&#25991;&#31456;</a>&#12290;</p><p></p><h3><strong><a href="https://forums.swift.org/t/se-0407-member-macro-conformances/66951">[SE-0407] Member Macro Conformances (Reviewing)</a></strong></h3><p><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0389-attached-macros.md">SE-0389</a> &#21487;&#20197;&#35731;&#20320;&#23459;&#21578;&#33021;&#30452;&#25509;&#36981;&#24490; protocol &#30340; macros&#65292;<a href="https://github.com/apple/swift-evolution/blob/main/proposals/0402-extension-macros.md">SE-0402</a> &#21487;&#20197;&#25903;&#25588; &#24118;&#26377; where &#30340;&#36981;&#24490;&#65292;&#19981;&#36942;&#19978;&#36848;&#37117;&#26159;&#29992; <code>extension</code> &#30340;&#24418;&#24335;&#65292;&#32780;&#26377;&#20123;&#36981;&#24490;&#24517;&#38920;&#22312;&#26368;&#21407;&#22987;&#23459;&#21578;&#30340;&#22320;&#26041;&#36914;&#34892;&#65288;&#27604;&#22914; <code>Encodable</code>&#65289;&#65292; <a href="https://github.com/apple/swift-evolution/blob/main/proposals/0407-member-macro-conformances.md">SE-0407</a> &#21063;&#28415;&#36275;&#20102;&#36889;&#20491;&#38656;&#27714;</p><pre><code><code>
protocol DefaultInit {
  init()
}

@attached(extension, conformances: DefaultInit)
@attached(member, conformances: DefaultInit, names: named(init()))
macro DefaultInit() = #externalMacro(module: "MacroDefinition", type: "RequiredDefaultInitMacro")

@DefaultInit
class C { } // &#26371;&#35722;&#25104; class C: DefaultInit { required init() {...} }
</code></code></pre><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#22914;&#26524;&#20320;&#30332;&#29694;&#20320;&#22823;&#22810;&#26178;&#38291;&#37117;&#22312;&#34389;&#29702;&#22296;&#38538;&#20107;&#21209;&#65292;&#19988;&#20839;&#24515;&#20063;&#19981;&#30906;&#23450;&#36889;&#26159;&#19981;&#26159;&#27491;&#36884;&#30340;&#35441;&#65292;<a href="https://noidea.dog/glue">Being Glue</a> &#36889;&#31687;&#25991;&#31456;&#33021;&#24171;&#20320;&#24478;&#26356;&#39640;&#38542;&#30340;&#35264;&#40670;&#24605;&#32771; &#65288;&#25991;&#38263;&#27880;&#24847;&#65289;</p><p><a href="https://noidea.dog/glue">https://noidea.dog/glue</a></p><p></p><p>RTO&#65288;&#22238;&#21040;&#36774;&#20844;&#23460;&#65289;&#26159;&#28858;&#20102;&#25104;&#28858;&#22812;&#26223;&#21834; &#129394;</p><p><a href="https://mastodon.social/@krzyzanowskim/110971740824689308">https://mastodon.social/@krzyzanowskim/110971740824689308</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KYsW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KYsW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KYsW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KYsW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KYsW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KYsW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg" width="1284" height="1007" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1007,&quot;width&quot;:1284,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KYsW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KYsW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KYsW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KYsW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa699260c-4948-44a3-8028-4557189e9516_1284x1007.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#24819;&#29609; visionOS &#19978;&#30340;&#24392;&#24149;&#36938;&#25138; &#65288;&#25105;&#35258;&#24471;&#20139;&#21463;&#23396;&#29544;&#26371;&#26159; visionOS &#19978;&#26368;&#36969;&#21512;&#30340;&#25033;&#29992;&#65289;</p><p><a href="https://mastodon.social/@jamesswiney/110976072360326932">https://mastodon.social/@jamesswiney/110976072360326932</a></p>]]></content:encoded></item><item><title><![CDATA[波報 #58 - 鐵腿 VR Game]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/8/21 - 2023/8/27]]></description><link>https://pofat.substack.com/p/58</link><guid isPermaLink="false">https://pofat.substack.com/p/58</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Mon, 28 Aug 2023 00:34:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4260c0d-a0a4-41b8-a1d3-10e108fbffef_1280x548.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#26368;&#36817;&#29609;&#20102;&#19968;&#27454;&#21517;&#28858; <a href="https://store.steampowered.com/agecheck/app/1957780/">Ghost of Tabor</a> &#30340; VR FPS PVP/PVE &#36938;&#25138;&#65292;&#19981;&#23569;&#24817;&#20154; bug&#65292;&#25945;&#23416;&#38364;&#21345;&#21644;&#19978;&#25163;&#20063;&#38656;&#35201;&#19981;&#23569;&#26178;&#38291;&#65292;&#22240;&#28858;&#25805;&#20316;&#30340;&#32048;&#31680;&#21644;&#33021;&#25910;&#38598;&#30340;&#26481;&#35199;&#23526;&#22312;&#26159;&#22826;&#22810;&#20102;&#65281;</p><p>&#19981;&#36942;&#20063;&#27491;&#22240;&#22914;&#27492;&#65292;&#19978;&#25163;&#24460;&#36880;&#28472;&#24863;&#21463;&#21040;&#23427;&#30340;&#39749;&#21147;&#65292;&#36938;&#25138;&#20027;&#35201;&#30340;&#29609;&#27861;&#23601;&#26159;&#38283;&#27085;&#25171;&#27515;&#25973;&#20154;&#65292;&#25910;&#38598;&#26481;&#35199;&#28982;&#24460;&#21040;&#23450;&#40670;&#25104;&#21151;&#25764;&#36864;&#12290;</p><p>&#12300;&#36889;&#40636;&#32769;&#22871;&#30340;&#29609;&#27861;&#24590;&#36996;&#26371;&#26377;&#36259;&#65311;&#12301;&#21487;&#33021;&#20320;&#26371;&#22914;&#27492;&#25079;&#30097;&#12290;</p><p>&#20294;&#26159;&#36889;&#27454;&#36938;&#25138;&#21487;&#20197;&#20114;&#21205;&#30340;&#26041;&#27861;&#21644;&#29289;&#21697;&#23526;&#22312;&#22810;&#19981;&#21213;&#25976;&#65292;&#25343;&#38283;&#27085;&#30340;&#28310;&#20633;&#24037;&#20316;&#20358;&#35498;&#65292;&#38283;&#27085;&#21069;&#35201;&#19968;&#25163;&#25569;&#27085;&#65292;&#19968;&#25163;&#25569;&#24392;&#21283;&#65288;&#30070;&#28982;&#35201;&#36984;&#23565;&#24392;&#21283;&#65289;&#25163;&#21205;&#23559;&#24392;&#21283;&#35037;&#19978;&#65292;&#28982;&#24460;&#20877;&#36914;&#34892;&#19978;&#33179;&#65292;&#27493;&#27085;&#38656;&#35201;&#25289;&#21205;&#21491;&#37002;&#30340;&#27085;&#27231;&#25289;&#26564;&#19978;&#33179;&#65292;&#32780;&#25163;&#27085;&#21063;&#26159;&#25289;&#21205;&#19978;&#21322;&#37096;&#30340;&#22871;&#31570;&#65292;&#38283;&#20445;&#38570;&#24460;&#25165;&#33021;&#38283;&#28779;&#12290;&#38500;&#27492;&#20043;&#22806;&#65292;&#25163;&#25226;&#25511;&#21046;&#22120;&#19978;&#21508;&#26377;&#23565;&#25033;&#22982;&#25351;&#12289;&#39135;&#25351;&#33287;&#20854;&#23427;&#19977;&#25351;&#30340;&#25353;&#37749;&#65292;&#35201;&#29992;&#27491;&#30906;&#30340;&#25163;&#25351;&#25165;&#33021;&#36914;&#34892;&#21205;&#20316;&#65306;&#25569;&#24392;&#21283;&#35201;&#19979;&#38754;&#19977;&#25351;&#65292;&#25289;&#27085;&#27231;&#35201;&#39135;&#25351;&#65292;&#38283;&#20445;&#38570;&#21063;&#26159;&#25287;&#25351;&#36000;&#36012;&#12290;&#32893;&#21040;&#36889;&#65292;&#25033;&#35442;&#19981;&#38627;&#24819;&#20687;&#38754;&#23565;&#25973;&#20154;&#27794;&#23376;&#24392;&#26178;&#26371;&#26377;&#22810;&#24908;&#24373;&#20102;&#12290;&#21083;&#38283;&#22987;&#26178;&#65292;&#25105;&#32147;&#24120;&#26371;&#24324;&#37679;&#27493;&#39519;&#65292;&#29289;&#21697;&#25481;&#21040;&#22320;&#19978;&#65292;&#24517;&#38920;&#19981;&#20572;&#22320;&#36466;&#19979;&#21435;&#25791;&#22238;&#20358;&#65288;&#19981;&#28982;&#25791;&#19981;&#21040;&#65281;&#65281;&#65289;&#65292;&#29609;&#21040;&#38548;&#22825;&#37941;&#33151;<s>&#36889;&#32085;&#23565;&#19981;&#26159;&#19978;&#36913;&#27794;&#20986;&#36913;&#22577;&#30340;&#21407;&#22240;</s>&#12290;</p><p>&#36938;&#25138;&#30340;&#33879;&#36855;&#20043;&#34389;&#26159;&#20320;&#21487;&#20197;&#25910;&#38598;&#24456;&#22810;&#26481;&#35199;&#65292;&#20294;&#26159;&#35201;&#36880;&#19968;&#25972;&#29702;&#20986;&#33258;&#24049;&#30340;&#36557;&#28779;&#23637;&#31034;&#24235;&#65292;&#30475;&#21040;&#36880;&#28472;&#35920;&#23500;&#30340;&#29254;&#38754;&#65292;&#30495;&#30340;&#26371;&#24456;&#26377;&#25104;&#23601;&#24863;&#12290;&#20760;&#31649;&#36938;&#25138;&#20013;&#26377;&#24456;&#22810;&#24817;&#20154;&#30340;&#23567; bug &#21644;&#19981;&#33391;&#30340;&#35373;&#35336;&#65288;&#20363;&#22914;&#65292;&#19981;&#23567;&#24515;&#21034;&#38500;&#21152;&#20837;&#26368;&#24859;&#30340;&#36092;&#36023;&#29289;&#21697;&#65292;&#24517;&#38920;&#36820;&#22238;&#24215;&#23478;&#37325;&#26032;&#25475;&#25551;&#29289;&#21697;&#21152;&#22238;&#21435;&#65292;&#36229;&#32026;&#30606;&#65289;&#65292;&#30070;&#22160;&#21040;&#20102;&#37261;&#37264;&#21619;&#23601;&#26371;&#20572;&#19981;&#19979;&#20358;&#65292;&#36763;&#33510;&#21462;&#22238;&#30340;&#36942;&#31243;&#26371;&#35731;&#29289;&#21697;&#26356;&#26377;&#20729;&#20540;&#12290;</p><p>&#36889;&#40636;&#22810;&#20803;&#30340;&#25805;&#20316;&#21487;&#33021;&#24615;&#35373;&#35336;&#65292;&#19981;&#21487;&#36991;&#20813;&#22320;&#26371;&#34987;&#25343;&#20358;&#33287; VR &#31070;&#20316; <a href="https://store.steampowered.com/app/546560/HalfLife_Alyx/">Half-Life: Alyx</a> &#27604;&#36611;&#65292;&#25105;&#35469;&#28858; Alyx &#33021;&#20114;&#21205;&#30340;&#29289;&#21697;&#36611;&#22810;&#65292;&#20294;&#26377;&#24847;&#32681;&#30340;&#20114;&#21205;&#22810;&#20803;&#24615;&#21063;&#26159; Ghost of Tabor &#22823;&#21213;&#65292;&#30495;&#27491;&#27169;&#25836;&#31038;&#26371;&#20013;&#30340;&#21214;&#21205;&#33287;&#29518;&#21237;&#27231;&#21046;&#65292;&#36969;&#21512;<s>&#27794;&#25104;&#23601;&#24863;&#30340;&#31038;&#30044;</s>&#25910;&#38598;&#29378;&#30340;&#29609;&#23478;&#12290;</p><p>&#26368;&#24460;&#25105;&#24314;&#35696;&#22312; VR &#19978;&#20197;&#29544;&#31435;&#27169;&#24335;&#36938;&#29609;&#65292;&#22240;&#28858;&#20018;&#27969;&#32882;&#38899;&#26371;&#26377;&#26126;&#39023;&#24310;&#36978;&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/p/57">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://hachyderm.io/@SmileyKeith/110935326005741395">Experimental Swift Explicit Module in Xcode 15 Beta 7</a></strong></h3><p><a href="https://hachyderm.io/@SmileyKeith/110935326005741395">&#26377;&#20154;&#30332;&#29694;</a> Xcode 15 Beta 7 &#21253;&#21547;&#20102; <code>_EXPERIMENTAL_SWIFT_EXPLICIT_MODULES</code> &#36889;&#20491;&#32232;&#35695;&#21151;&#33021;&#38283;&#38364;&#65292;&#28982;&#32780;&#36889;&#19968;&#32048;&#31680;&#20006;&#26410;&#20986;&#29694;&#22312; release note &#20013;&#12290;</p><p>Swift &#30446;&#21069;&#25505;&#29992;&#30340;&#26159; Implicit Module&#65292;&#32232;&#35695;&#36942;&#31243;&#20013;&#27599;&#19968;&#20491;&#24037;&#20316;&#30475;&#21040; <code>import XXX</code> &#26178;&#26371;&#33258;&#24049;&#21435;&#25214;&#23563;&#35442;&#27169;&#32068;&#30340;&#24555;&#21462;&#32232;&#35695;&#32080;&#26524;&#65292;&#27794;&#26377;&#30340;&#35441;&#23601;&#33258;&#24049;&#38283;&#19968;&#20491; thread&#37325;&#32232;&#65292;&#32232;&#35695;&#36942;&#31243;&#20013;&#36935;&#21040;&#20854;&#23427; import &#20063;&#26371;&#22914;&#27492;&#36958;&#36852;&#19979;&#21435;&#12290;&#36889;&#20123;&#32232;&#35695;&#36942;&#31243;&#38577;&#21547;&#26044;&#21508;&#20491;&#24037;&#20316;&#20043;&#24460;&#12289;&#21508;&#33258;&#24537;&#30860;&#19981;&#28317;&#36890;&#30340;&#32080;&#26524;&#21063;&#26159;&#32232;&#35695;&#25928;&#33021;&#20302;&#19979;&#65292;&#19968;&#26086;&#26377; race &#21063; cache &#22833;&#25943;&#65292;&#20063;&#28961;&#27861;&#26377;&#25928;&#25490;&#31243;&#20197;&#26368;&#22823;&#21033;&#29992;&#22810;&#26680;&#24515;&#65292;&#32317;&#20043;&#23601;&#26159;&#24930;&#65292;&#28369;&#22047;&#30340;&#26178;&#38291;&#21448;&#22686;&#21152;&#20102;&#65281;</p><p>&#32780; Explicit Module &#21063;&#26159;&#25226;&#21407;&#26412;&#36889;&#20123;&#34893;&#29983;&#30340;&#24037;&#20316;&#24478;&#27599;&#19968;&#20491;&#32232;&#35695;&#24037;&#20316;&#20013;&#31227;&#20986;&#25104;&#29544;&#31435;&#24037;&#20316;&#65292;&#31227;&#20837;&#32232;&#35695;&#31995;&#32113;&#20013;&#20197;&#21487;&#20197;&#26377;&#25928;&#30906;&#20445;&#24555;&#21462;&#30340;&#27491;&#30906;&#65292;&#33287;&#26368;&#20339;&#21033;&#29992;&#22810;&#26680;&#24515;&#30340;&#25490;&#31243;&#65292;&#35443;&#24773;&#21487;&#20197;&#35211;<a href="https://forums.swift.org/t/explicit-module-builds-the-new-swift-driver-and-swiftpm/36990">&#35542;&#22727;&#35498;&#26126;&#25991;</a>&#65292;&#32147;&#36942;&#19977;&#24180;&#30340;&#26178;&#38291;&#65292;&#36889;&#20491;&#21151;&#33021;&#32066;&#26044;&#21576;&#29694;&#22312;&#22823;&#23478;&#38754;&#21069;&#12290;</p><p><a href="https://hachyderm.io/@SmileyKeith/110935326005741395">https://hachyderm.io/@SmileyKeith/110935326005741395</a></p><p></p><h3><strong>SwiftUI &#22914;&#20309;&#28858;&#26377;&#19981;&#21516;&#24418;&#29376;&#21487;&#33021;&#30340; Shape &#21152;&#19978;&#37002;&#26694;</strong></h3><p>Apollo &#20316;&#32773; Christian Selig &#25552;&#20986;&#30340;&#26377;&#36259;&#21839;&#38988;&#65306;&#22914;&#26524;&#20320;&#26377;&#19968;&#20491; Shape &#21487;&#33021;&#28858;&#22291;&#25110;&#26041;&#65292;&#22914;&#20309;&#28858;&#23427;&#21152;&#19978; <code>strokeBorder</code> &#65311; <code>strokeBorder(style:antialiased:)</code> &#26159;&#23660;&#26044; protocol <code>InsettableShape</code> <a href="https://developer.apple.com/documentation/swiftui/insettableshape/strokeborder(style:antialiased:)">&#23450;&#32681;&#30340;&#26041;&#27861;</a>&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SZca!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3f7f79-f8eb-44fa-bd02-3157bcbb50af_1512x1150.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SZca!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3f7f79-f8eb-44fa-bd02-3157bcbb50af_1512x1150.png 424w, https://substackcdn.com/image/fetch/$s_!SZca!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3f7f79-f8eb-44fa-bd02-3157bcbb50af_1512x1150.png 848w, https://substackcdn.com/image/fetch/$s_!SZca!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3f7f79-f8eb-44fa-bd02-3157bcbb50af_1512x1150.png 1272w, https://substackcdn.com/image/fetch/$s_!SZca!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3f7f79-f8eb-44fa-bd02-3157bcbb50af_1512x1150.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SZca!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3f7f79-f8eb-44fa-bd02-3157bcbb50af_1512x1150.png" width="1456" height="1107" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f3f7f79-f8eb-44fa-bd02-3157bcbb50af_1512x1150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1107,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SZca!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3f7f79-f8eb-44fa-bd02-3157bcbb50af_1512x1150.png 424w, https://substackcdn.com/image/fetch/$s_!SZca!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3f7f79-f8eb-44fa-bd02-3157bcbb50af_1512x1150.png 848w, https://substackcdn.com/image/fetch/$s_!SZca!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3f7f79-f8eb-44fa-bd02-3157bcbb50af_1512x1150.png 1272w, https://substackcdn.com/image/fetch/$s_!SZca!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3f7f79-f8eb-44fa-bd02-3157bcbb50af_1512x1150.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#31572;&#65306;&#23526;&#20570; <code>AnyInsettableShape</code> &#20358;&#21253;&#35037;&#25274;&#38500;&#39006;&#22411;&#65288;<a href="https://gist.github.com/sebj/a053cc42005e214a4257cb7014fdaa15">&#31684;&#20363;</a>&#65289;&#65292;&#25110;&#32773;&#23526;&#20570;&#19968;&#20491; <a href="https://mastodon.tinycart.club/@emorydunn/110928270920541007">EitherShape</a> &#36981;&#24490; <code>InsettableShape</code>&#12290;</p><p></p><h3><strong><a href="https://xenodium.com/my-custom-tesco-clubcard-pkpass/">&#33258;&#35069;&#30456;&#23481; Apple Wallet &#30340;&#26371;&#21729;&#21345;</a></strong></h3><p>&#25105;&#26368;&#36817;&#27491;&#22312;&#24605;&#32771;&#22914;&#20309;&#25226;&#36939;&#21205;&#20013;&#24515;&#30340;&#26371;&#21729;&#26781;&#30908;&#21152;&#20837; Apple Wallet&#65292;&#22240;&#28858;&#23427;&#21482;&#26159;&#22312; app &#20013;&#39023;&#31034;&#26781;&#30908;&#22294;&#29255;&#65292;&#27841;&#19988; app &#20570;&#24456;&#29211;&#24120;&#25171;&#19981;&#38283;&#65307;&#21478;&#19968;&#20491;&#22909;&#34389;&#26159;&#21487;&#20197;&#21516;&#27493;&#21040; Apple Watch&#65292;&#30050;&#31455;&#25105;&#19981;&#26159;&#24456;&#24819;&#24118;&#25163;&#27231;&#21435;&#65292;&#28982;&#24460;&#23601;&#30475;&#21040;&#20102;&#33258;&#35069; Apple Wallet &#26371;&#21729;&#21345;&#30340;<a href="https://xenodium.com/my-custom-tesco-clubcard-pkpass/">&#25945;&#23416;&#25991;</a>&#12290;</p><p>Apple Wallet &#20013;&#20351;&#29992;&#30340;&#27284;&#26696;&#26684;&#24335;&#26159; <a href="https://en.wikipedia.org/wiki/PKPASS">pkpasses</a> &#65292;&#20320;&#38656;&#35201;&#20808;&#24314;&#20491; certificate &#21644;&#21521; Apple &#30003;&#35531;&#19968;&#20491; identifier&#65292;&#20195;&#34920;&#20320;&#24471;&#35201;&#20808;&#32371; Apple Developer Program &#30340;&#20445;&#35703;&#36027;&#65292;&#20854;&#23427;&#30340;&#27493;&#39519;&#23601;&#26159;&#29031;&#27284;&#26696;&#26684;&#24335;&#22635;&#19978;&#36039;&#26009;&#65288;&#21487;&#33021;&#40635;&#29033;&#30340;&#26159;&#20320;&#35201;&#20808;&#25630;&#28165;&#26970;&#26781;&#30908;&#30340;&#23565;&#25033;&#20839;&#23481;&#65289;&#65292;&#20063;&#21487;&#20197;&#25918;&#22294;&#29255;&#12290;</p><p>&#38614;&#28982;&#19981;&#30693;&#36947;&#22312; Apple Watch &#19978;&#39023;&#31034;&#32080;&#26524;&#28858;&#20309;&#65292;&#25105;&#29468;&#21487;&#33021;&#26371;&#22240;&#28858;&#34920;&#38754;&#27604;&#36611;&#23567;&#65292;&#32780;&#26377;&#19968;&#23450;&#27231;&#26371;&#28961;&#27861;&#25104;&#21151;&#25475;&#25551;&#65292;&#25105;&#26371;&#22312;&#35430;&#35430;&#24460;&#20877;&#22238;&#22577;&#32080;&#26524;&#12290;</p><p></p><h3><strong><a href="https://github.com/TopWidgets/SwingAnimation">WidgetKit &#30340;&#21205;&#30059;</a></strong></h3><p>&#32020;&#20998;&#20139;&#25512;&#21451;<a href="https://twitter.com/_Octree/status/1693456374540484639?s=20">&#38283;&#28304;&#30340;&#23560;&#26696;</a>&#65292;&#20294;&#25105;&#20006;&#19981;&#25512;&#34214;&#28961;&#33126;&#28858; WidgetKit &#21152;&#21205;&#30059;&#65292;&#26371;&#21205;&#30340;&#26481;&#35199;&#26371;&#22823;&#37327;&#21560;&#24341;&#27880;&#24847;&#21147;&#65292;&#36889;&#20006;&#19981;&#26159; Apple &#26399;&#26395;&#38283;&#30332;&#32773;&#20351;&#29992;&#30340;&#26041;&#24335;&#65292;&#20063;&#36890;&#24120;&#19981;&#26159;&#20491;&#29702;&#24819;&#30340;&#35373;&#35336;&#12290;</p><p></p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>oh no</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://webcomicname.com/post/179690527329" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_G4T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4260c0d-a0a4-41b8-a1d3-10e108fbffef_1280x548.png 424w, https://substackcdn.com/image/fetch/$s_!_G4T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4260c0d-a0a4-41b8-a1d3-10e108fbffef_1280x548.png 848w, https://substackcdn.com/image/fetch/$s_!_G4T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4260c0d-a0a4-41b8-a1d3-10e108fbffef_1280x548.png 1272w, https://substackcdn.com/image/fetch/$s_!_G4T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4260c0d-a0a4-41b8-a1d3-10e108fbffef_1280x548.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_G4T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4260c0d-a0a4-41b8-a1d3-10e108fbffef_1280x548.png" width="1280" height="548" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4260c0d-a0a4-41b8-a1d3-10e108fbffef_1280x548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:548,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://webcomicname.com/post/179690527329&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_G4T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4260c0d-a0a4-41b8-a1d3-10e108fbffef_1280x548.png 424w, https://substackcdn.com/image/fetch/$s_!_G4T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4260c0d-a0a4-41b8-a1d3-10e108fbffef_1280x548.png 848w, https://substackcdn.com/image/fetch/$s_!_G4T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4260c0d-a0a4-41b8-a1d3-10e108fbffef_1280x548.png 1272w, https://substackcdn.com/image/fetch/$s_!_G4T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4260c0d-a0a4-41b8-a1d3-10e108fbffef_1280x548.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#25215;&#19978;&#65292;&#20316;&#32365;&#33258;&#32283;&#23526;&#20035;&#20154;&#20043;&#22825;&#24615;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://twitter.com/KassandraSanch/status/1694347725196738710?s=20" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JB_u!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f2a65b1-4243-430e-b15a-9005124b9a86_1890x1874.png 424w, https://substackcdn.com/image/fetch/$s_!JB_u!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f2a65b1-4243-430e-b15a-9005124b9a86_1890x1874.png 848w, https://substackcdn.com/image/fetch/$s_!JB_u!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f2a65b1-4243-430e-b15a-9005124b9a86_1890x1874.png 1272w, https://substackcdn.com/image/fetch/$s_!JB_u!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f2a65b1-4243-430e-b15a-9005124b9a86_1890x1874.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JB_u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f2a65b1-4243-430e-b15a-9005124b9a86_1890x1874.png" width="1456" height="1444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f2a65b1-4243-430e-b15a-9005124b9a86_1890x1874.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1444,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://twitter.com/KassandraSanch/status/1694347725196738710?s=20&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JB_u!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f2a65b1-4243-430e-b15a-9005124b9a86_1890x1874.png 424w, https://substackcdn.com/image/fetch/$s_!JB_u!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f2a65b1-4243-430e-b15a-9005124b9a86_1890x1874.png 848w, https://substackcdn.com/image/fetch/$s_!JB_u!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f2a65b1-4243-430e-b15a-9005124b9a86_1890x1874.png 1272w, https://substackcdn.com/image/fetch/$s_!JB_u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f2a65b1-4243-430e-b15a-9005124b9a86_1890x1874.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[波報 #57 - 給 Apple Watch Ultra 一個讚]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/8/7 - 2023/8/13]]></description><link>https://pofat.substack.com/p/57</link><guid isPermaLink="false">https://pofat.substack.com/p/57</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Mon, 14 Aug 2023 01:00:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LKfK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>Apple Watch Ultra &#26159;&#25105;&#36889;&#19968;&#24180;&#20839;&#26368;&#28415;&#24847;&#30340;&#34315;&#26524;&#36092;&#29289;&#65292;&#25105;&#25140;&#33879;&#23427;&#24478;&#20107;&#20102;&#19981;&#23569;&#27425;&#27700;&#19978;&#27963;&#21205;&#21644;&#23567;&#20581;&#34892;&#65292;&#20854;&#20013;&#20581;&#34892;&#36335;&#24465;&#22238;&#28335;&#12289;wayfinder &#25214;&#20572;&#36554;&#34389;&#12289;&#28507;&#27700;&#28145;&#24230;&#21644;&#26178;&#38291;&#65292;&#20197;&#21450;&#39640;&#20142;&#24230;&#30340;&#34722;&#24149;&#35731;&#23427;&#25104;&#28858;&#20102;&#25142;&#22806;&#12300;&#36208;&#20657;&#12301;&#30340;&#26368;&#20339;&#20249;&#20276;&#65292;&#19981;&#36942;&#25105;&#24517;&#38920;&#32882;&#26126;&#36889;&#35041;&#25351;&#30340;&#26159;&#21608;&#26411;&#19968;&#20841;&#22825;&#37027;&#27171;&#30340;&#36629;&#24230;&#20882;&#38570;&#65292;&#22240;&#28858;&#25105;&#29694;&#22312;&#39636;&#33021;&#20063;&#21482;&#33021;&#35430;&#21040;&#36889;&#31278;&#31243;&#24230;&#12290;</p><p>&#30446;&#21069;&#26377;&#35498;&#27861;&#19979;&#19968;&#27454;&#30340; ultra <a href="https://www.macrumors.com/2023/08/10/lg-producing-microled-displays-apple-watch/">&#21487;&#33021;&#26371;&#37197;&#20633; MicroLED</a>&#65292;&#33509;&#25104;&#30495;&#37027;&#32396;&#33322;&#36969;&#24517;&#26371;&#20877;&#22823;&#22823;&#25552;&#21319;&#65292;&#33509;&#33021;&#25744;&#21040;&#22235;&#20116;&#22825;&#37027;&#20063;&#33021;&#36969;&#29992;&#26044;&#36611;&#22823;&#22411;&#30340;&#30331;&#23665;&#27963;&#21205;&#20102;&#12290;</p><p>&#25105;&#26368;&#21916;&#27489;&#30340;&#21151;&#33021;&#26159;&#22812;&#38291;&#27169;&#24335;&#65292;&#23565; Wayfinder &#34920;&#38754;&#36681;&#21205;&#34920;&#20896;&#65292;&#23427;&#26371;&#35722;&#25104;&#26263;&#32005;&#33394;&#65292;&#36889;&#20358;&#33258;&#25142;&#22806;&#38957;&#29128;&#34892;&#20043;&#26377;&#24180;&#30340;&#21151;&#33021;&#65292;&#35731;&#20320;&#22312;&#24456;&#26263;&#30340;&#22320;&#26041;&#20351;&#29992;&#26178;&#65288;&#27604;&#22914;&#23665;&#23627;&#65289;&#19981;&#23565;&#20182;&#20154;&#36896;&#25104;&#24433;&#38911;&#65292;&#36889;&#40670;&#26377;&#20013;&#25142;&#22806;&#20154;&#30340;&#24515;&#12290;&#65288;&#22294;&#29255;&#20358;&#33258; <a href="https://support.apple.com/en-gb/guide/watch-ultra/apdcde57a739/watchos">Apple &#23448;&#32178;</a>&#65289;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LKfK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LKfK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png 424w, https://substackcdn.com/image/fetch/$s_!LKfK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png 848w, https://substackcdn.com/image/fetch/$s_!LKfK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png 1272w, https://substackcdn.com/image/fetch/$s_!LKfK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LKfK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png" width="440" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/deaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LKfK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png 424w, https://substackcdn.com/image/fetch/$s_!LKfK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png 848w, https://substackcdn.com/image/fetch/$s_!LKfK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png 1272w, https://substackcdn.com/image/fetch/$s_!LKfK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeaf531a-dbd2-47cf-a6ef-389bfb3a95cc_440x490.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#35498;&#21040;&#36889;&#65292;Craig &#23565;&#26044; Apple &#31185;&#25216;&#30340;&#30332;&#23637;&#36208;&#21521;&#26377;&#33879;&#26377;&#36259;&#30340;&#35211;&#35299; - &#30475; Apple Watch &#23601;&#23565;&#20102;&#65281;&#35443;&#32048;&#35211;<a href="https://mastodon.social/@chockenberry/110871847218243296">&#22047;&#25991;</a>&#65292;&#24456;&#26377;&#24847;&#24605;&#12290;</p><p>&#12298;<a href="https://pofat.substack.com/p/56">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h2><strong><a href="https://forums.swift.org/t/webauthn-1-0-0-alpha-1/66676">Passkeys Implementation on Server Side</a></strong></h2><p>&#20570;&#28858;&#26524;&#31881;&#38283;&#30332;&#32773;&#24819;&#24517;&#26089;&#23601;&#35731;&#25163;&#19978;&#30340;&#23560;&#26696;&#25903;&#25588; passkeys &#20102;&#21543;&#65292;&#20294;&#29694;&#22312;&#21487;&#20197;&#22312; server side &#29992; Swift &#23526;&#20316; passkeys &#65292;<a href="https://github.com/swift-server/webauthn-swift/releases/tag/1.0.0-alpha.1">WebAuth Swift 1.0.0 Alpha</a> &#20013;&#21253;&#21547;&#20102; passkeys &#30340;&#25903;&#25345;&#65292;&#36889;&#35041;&#26377;&#29694;&#25104;&#30340;<a href="https://github.com/brokenhandsio/Vapor-PasskeyDemo">&#31684;&#20363;</a>&#20379;&#21443;&#32771;&#65292;&#35443;&#24773;&#35531;&#35211; <a href="https://forums.swift.org/t/webauthn-1-0-0-alpha-1/66676">Swift Forums</a>&#12290;</p><p></p><h2><strong><a href="https://huggingface.co/blog/swift-coreml-llm">Swift Transformers: Run On-Device LLMs in Apple Devices</a></strong></h2><p>&#22823;&#22810;&#25976;&#23186;&#39636;&#23565; Apple &#22312;&#22823;&#22411;&#35486;&#35328;&#27169;&#22411;&#65288;LLM&#65289;&#20043;&#25136;&#30340;&#21205;&#20316;&#38928;&#28204;&#37117;&#26159;&#30446;&#27161; on-device &#30340;&#35486;&#35328;&#27169;&#22411;&#20197;&#31526;&#20182;&#20497;&#19968;&#36011;&#30340;&#38577;&#31169;&#31574;&#30053;&#12290; <a href="https://github.com/huggingface/swift-transformers">Swift Transformer</a> &#36889;&#20491;&#23560;&#26696;&#21487;&#20197;&#24171;&#21161;&#20320;&#26356;&#23481;&#26131;&#22320;&#36948;&#25104;&#36889;&#20491;&#30446;&#27161;&#65292;&#23427;&#33021;&#22816;&#26356;&#23481;&#26131;&#22320;&#25226;&#22823;&#22411;&#35486;&#35328;&#27169;&#22411;&#36681;&#25104; CoreML &#29992;&#30340;&#27169;&#22411;&#65292;&#20063;&#33021;&#30906;&#20445;&#30828;&#39636;&#30340;&#26368;&#20339;&#21033;&#29992;&#12290;<a href="https://huggingface.co/blog/swift-coreml-llm">&#36889;&#19968;&#31687;&#25945;&#23416;&#25991;</a>&#20197; Meta &#37323;&#20986;&#30340; <a href="https://ai.meta.com/llama/">Llama 2</a> &#28858;&#20363;&#65292;&#25163;&#25226;&#25163;&#22320;&#24118;&#20320;&#20837;&#38272;&#65292;&#24819;&#20808;&#35430;&#29609;&#32080;&#26524;&#21487;&#20197;&#30452;&#25509;&#35430; <a href="https://github.com/huggingface/swift-chat">swift-chat</a>&#12290;&#32780;&#26368;&#36817;&#20063;&#26377;&#20154;&#37323;&#20986;&#20102;&#20197;&#21488;&#28771;&#32321;&#39636;&#20013;&#25991;&#28858;&#22522;&#30990;&#35519;&#25972;&#30340; llama 2 &#27169;&#22411; - <a href="https://github.com/MiuLab/Taiwan-LLaMa">Taiwan LLaMa</a>&#65292;&#26377;&#33288;&#36259;&#30340;&#35712;&#32773;&#19981;&#22952;&#35430;&#35430;&#30475;&#33021;&#19981;&#33021;&#20018;&#36215;&#20358;&#65292;&#24324;&#20491; Taiwan Swift Chat&#12290;</p><p></p><h3><strong><a href="https://mastodon.social/@b3ll/110867586952293676">Xcode Pro Tip</a></strong></h3><p>&#20854;&#19968;&#65306; Xcode 15 &#27284;&#26696;&#35722;&#24471;&#24456;&#23567;&#65292;&#22240;&#28858;&#20195;&#20729;&#36681;&#21040;&#38283;&#30332;&#32773;&#30340;&#26178;&#38291;&#19978;&#20102;&#65292;&#25152;&#26377;&#30340; simulator runtime &#37117;&#24471;&#21478;&#22806;&#19979;&#36617;&#65292;&#22914;&#26524;&#20320;&#26377;&#22810;&#21488;&#38651;&#33126;&#37117;&#35201;&#35037;&#23526;&#22312;&#24456;&#29033;&#65292;Adam &#25552;&#20379;&#20102;&#23560;&#26989;&#23567;&#25735;&#27493;&#65306;&#21407;&#20358;&#36889;&#20123; runtime &#21487;&#20197;&#21295;&#20986;&#65292;&#31227;&#21040;&#20854;&#23427;&#38651;&#33126;&#20877;&#29992; simctl &#25351;&#20196;&#21152;&#20837;&#21363;&#21487;&#12290;</p><p><a href="https://mastodon.social/@b3ll/110867586952293676">https://mastodon.social/@b3ll/110867586952293676</a></p><p>&#20854;&#20108;&#65306;&#22914;&#26524;&#20320;&#36935;&#21040; SwiftUI preview &#19968;&#30452;&#21345;&#22312;&#12300;&#28310;&#20633;&#20013;&#12301;&#65292;&#38500;&#20102;&#37325;&#38283;&#27231;&#22806;&#21487;&#20197;&#20808;&#35430;&#35430;&#36889;&#20491;<a href="https://gist.github.com/chockenberry/e33df6b0f4f201bd161763946158c11c">&#28165;&#29702; script</a>&#12290;</p><p><a href="https://mastodon.social/@chockenberry/110849610687454805">https://mastodon.social/@chockenberry/110849610687454805</a></p><p></p><h3><strong><a href="https://sixcolors.com/post/2023/08/in-ios-17-siri-can-make-the-web-speak/">Siri &#22312; iOS 17 &#19978;&#33021;&#28858;&#24859;&#26391;&#35712;</a></strong></h3><p>iOS 17 &#21487;&#20197;&#23565; Siri &#35498; read this &#20358;&#26391;&#35712;&#32178;&#38913;&#65292;&#36969;&#21512;&#31227;&#21205;&#26178;&#21448;&#24819;&#30475;&#32178;&#38913;&#30340;&#22580;&#21512;&#12290;</p><p><a href="https://sixcolors.com/post/2023/08/in-ios-17-siri-can-make-the-web-speak/">https://sixcolors.com/post/2023/08/in-ios-17-siri-can-make-the-web-speak/</a></p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/macro-adoption-concerns-around-swiftsyntax/66588/1">Macro Adoption Concerns around SwiftSyntax</a></strong></h3><p>Swift macros &#30340;&#24375;&#22823;&#37117;&#24314;&#31435;&#22312; SwiftSyntax &#30340;&#22522;&#30990;&#19978;&#65292;&#20294;&#25104;&#20063;&#34157;&#20309;&#65292;&#25943;&#20063;&#34157;&#20309;&#65292;SwiftSyntax &#26412;&#36523;&#30340;&#21839;&#38988;&#32102; Swift macro &#30340;&#24341;&#20837;&#20063;&#24118;&#20358;&#21839;&#38988;&#65292;&#20027;&#35201;&#26159;&#65306;<br>- Build time &#22823;&#24133;&#22320;&#22686;&#21152;</p><ul><li><p>&#30772;&#30862;&#19981;&#19968;&#30340;&#29256;&#26412;&#20381;&#36084;</p></li><li><p>API &#19981;&#26178;&#30340;&#35722;&#36983;</p></li></ul><p>build time &#31561;&#21487;&#20197;&#35299;&#27770;&#65292;&#24460;&#20841;&#32773;&#21487;&#30171;&#33510;&#22810;&#20102;&#21834;&#65281;</p><p><a href="https://forums.swift.org/t/macro-adoption-concerns-around-swiftsyntax/66588/48">https://forums.swift.org/t/macro-adoption-concerns-around-swiftsyntax/66588/48</a></p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>&#36575;&#39636;&#24037;&#31243;&#26085;&#24120;</p><p><a href="https://mas.to/@carnage4life/110850691497063871">https://mas.to/@carnage4life/110850691497063871</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gR62!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b03f80-e5d7-4289-a3e6-6f55a25e4c65_1242x1163.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gR62!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b03f80-e5d7-4289-a3e6-6f55a25e4c65_1242x1163.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gR62!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b03f80-e5d7-4289-a3e6-6f55a25e4c65_1242x1163.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gR62!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b03f80-e5d7-4289-a3e6-6f55a25e4c65_1242x1163.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gR62!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b03f80-e5d7-4289-a3e6-6f55a25e4c65_1242x1163.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gR62!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b03f80-e5d7-4289-a3e6-6f55a25e4c65_1242x1163.jpeg" width="1242" height="1163" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73b03f80-e5d7-4289-a3e6-6f55a25e4c65_1242x1163.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1163,&quot;width&quot;:1242,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gR62!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b03f80-e5d7-4289-a3e6-6f55a25e4c65_1242x1163.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gR62!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b03f80-e5d7-4289-a3e6-6f55a25e4c65_1242x1163.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gR62!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b03f80-e5d7-4289-a3e6-6f55a25e4c65_1242x1163.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gR62!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73b03f80-e5d7-4289-a3e6-6f55a25e4c65_1242x1163.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[波報 #56 - 歡迎來到地獄（倫敦）]]></title><description><![CDATA[Swift &#22823;&#23567;&#20107; 2023/7/24 - 2023/7/30]]></description><link>https://pofat.substack.com/p/56</link><guid isPermaLink="false">https://pofat.substack.com/p/56</guid><dc:creator><![CDATA[Pofat]]></dc:creator><pubDate>Sun, 30 Jul 2023 22:00:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!m5U3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>&#128172; Pofat &#30340;&#35441;</strong></h2><p>&#20303;&#22312;&#20523;&#25958;&#30475;&#21040;&#31505;&#33879;&#31505;&#33879;&#23601;&#21741;&#20102;&#65292;&#38627;&#24618; UniFi &#30340;&#24291;&#21578;&#35201; <a href="https://www.youtube.com/watch?v=hqnl9awwYiM">delete london</a>&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m5U3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m5U3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!m5U3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!m5U3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!m5U3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m5U3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!m5U3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!m5U3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!m5U3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!m5U3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f20ee47-35bf-4b5b-b744-2c348920ac35_4000x3000.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#35611;&#40670;&#38283;&#24515;&#30340;&#65292;&#22823;&#23478;&#25910;&#21040; Xbox &#30340;&#39318;&#38913;&#26356;&#26032;&#20102;&#21966;&#65311;</p><p>&#12298;<a href="https://pofat.substack.com/p/55">&#30475;&#21069;&#19968;&#26399;</a> | <a href="https://pofat.substack.com/">&#25152;&#26377;&#25991;&#31456;</a>&#12299;</p><div><hr></div><h2><strong>&#127758; On Swift Community</strong></h2><h3><strong><a href="https://developer.apple.com/visionos/work-with-apple/">Vision Pro developer labs &#33287; developer kit &#38283;&#25918;&#30003;&#35531;</a></strong></h3><p>Lab &#20677;&#22312; Cupertino&#65292;&#20523;&#25958;&#65292;&#24917;&#23612;&#40657;&#65292;&#19978;&#28023;&#65292;&#26032;&#21152;&#22369;&#33287;&#26481;&#20140;&#65292;&#24050;&#32147;&#26377;&#20154;&#36890;&#36942;&#30003;&#35531;&#12290;</p><p>&#32780; developer kit &#30475;&#36215;&#20358;&#37327;&#19981;&#26371;&#24456;&#22810;&#65292;&#21152;&#19978;&#26377;&#21490;&#20197;&#20358;&#26368;&#22196;&#26684;&#30340;&#20445;&#31649;&#26781;&#20214;&#65292;&#36889;&#27425;&#25033;&#35442;&#24456;&#38627;<a href="https://developer.apple.com/visionos/developer-kit/">&#30003;&#35531;</a>&#21040;&#21834;&#12290;</p><p>&#20445;&#31649;&#30340;&#38480;&#21046;&#21253;&#25324;&#65306;&#19981;&#21487;&#20197;&#32102;&#23478;&#20154;&#30475;&#21040;&#12289;&#38626;&#38283;&#35201;&#37782;&#22312;&#23427;&#30340;&#31665;&#23376;&#35041;&#20877;&#37782;&#22312;&#20182;&#20154;&#19981;&#21487;&#36914;&#20837;&#30340;&#31354;&#38291;&#65292;&#38626;&#38283;&#21313;&#22825;&#35201;&#36890;&#30693;&#24037;&#20316;&#20154;&#21729;&#25351;&#23566;&#24590;&#40636;&#23384;&#25918;&#65292;&#19981;&#24871;&#26159;&#34315;&#26524;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8mgP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e14d53d-c4e4-4f4b-9959-895e2b3f2903.tif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8mgP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e14d53d-c4e4-4f4b-9959-895e2b3f2903.tif 424w, https://substackcdn.com/image/fetch/$s_!8mgP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e14d53d-c4e4-4f4b-9959-895e2b3f2903.tif 848w, https://substackcdn.com/image/fetch/$s_!8mgP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e14d53d-c4e4-4f4b-9959-895e2b3f2903.tif 1272w, https://substackcdn.com/image/fetch/$s_!8mgP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e14d53d-c4e4-4f4b-9959-895e2b3f2903.tif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8mgP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e14d53d-c4e4-4f4b-9959-895e2b3f2903.tif" width="1298" height="456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e14d53d-c4e4-4f4b-9959-895e2b3f2903.tif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:456,&quot;width&quot;:1298,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8mgP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e14d53d-c4e4-4f4b-9959-895e2b3f2903.tif 424w, https://substackcdn.com/image/fetch/$s_!8mgP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e14d53d-c4e4-4f4b-9959-895e2b3f2903.tif 848w, https://substackcdn.com/image/fetch/$s_!8mgP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e14d53d-c4e4-4f4b-9959-895e2b3f2903.tif 1272w, https://substackcdn.com/image/fetch/$s_!8mgP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e14d53d-c4e4-4f4b-9959-895e2b3f2903.tif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3><strong><a href="https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api">Apple &#23559;&#35201;&#27714;&#38283;&#30332;&#32773;&#28858;&#23384;&#21462;&#26576;&#20123; API &#21152;&#19978;&#20351;&#29992;&#29702;&#30001;</a></strong></h3><p>&#19979;&#21015; API &#34987;&#21015;&#28858;&#12300;&#21487;&#33021;&#26371;&#23384;&#21462;&#25935;&#24863;&#36039;&#35338;&#12301;&#65292;&#20351;&#29992;&#21040;&#30340;&#38283;&#30332;&#32773;&#35201;&#22312; 2024 &#24180;&#26149;&#23395;&#21069;&#22312; privacy manifest &#20013;&#21152;&#19978;&#20351;&#29992;&#30340;&#29702;&#30001;&#12290;</p><ul><li><p>&#27284;&#26696; timestamp API</p></li><li><p>&#31995;&#32113;&#21855;&#21205; timestamp API</p></li><li><p>&#30913;&#30879;&#31354;&#38291; API</p></li><li><p>&#24050;&#21855;&#21205;&#37749;&#30436; (active keyboard) API</p></li><li><p>User defaults API</p></li></ul><p>&#36889;&#34892;&#28858;&#33289;&#27490;&#24456; Apple &#65292;&#21482;&#26159;&#25105;&#35469;&#28858;&#31532;&#19968;&#38917;&#21644;&#26368;&#24460;&#19968;&#38917;&#22826;&#30219;&#65292;&#26681;&#26412;&#26159;&#22312;&#30733;&#65288;&#22823;&#22411;&#65289;&#38283;&#30332;&#32773;&#30340;&#33139;&#65292;&#22522;&#26412;&#19978; iOS &#23384;&#21462;&#19981;&#21040; sandbox &#22806;&#30340;&#27284;&#26696;&#65292; user defaults &#33021;&#21462;&#24471;&#12289;&#26377;&#38577;&#31169;&#32771;&#37327;&#30340;&#26481;&#35199;&#20063;&#24517;&#26371;&#20808;&#21478;&#22806;&#35201;&#27714;&#27402;&#38480;&#65292;&#38283;&#30332;&#21830;&#24819;&#35201;&#36879;&#36942; App Groups &#35731;&#26071;&#19979;&#21508; app &#20114;&#36890;&#26377;&#28961;&#12289;&#25110; app &#33287; widget &#38291;&#30340;&#28317;&#36890;&#20063;&#26371;&#22240;&#27492;&#22686;&#21152;&#38459;&#21147;&#12290;</p><p>&#21488;&#28771;&#26377;&#23389;&#36947;&#22806;&#21253;&#65292;&#27700;&#26524;&#21063;&#26159;&#38577;&#31169;&#27402;&#32887;&#36012;&#65288;&#21253;&#25324;&#19981;&#23384;&#22312;&#30340;&#65289;&#22806;&#21253;&#32102;&#30526;&#38283;&#30332;&#32773;&#20497;&#12290; Firebase&#65306;&#12300;&#21741;&#21834;&#65281;&#12301;</p><p>&#20294;&#30050;&#31455;&#22312;&#20154;&#23478;&#30340;&#22320;&#65292;&#24471;&#23432;&#20154;&#23478;&#30340;&#35215;&#20808;&#65292;&#35443;&#24773;&#35531;<a href="https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api">&#35712;&#36889;</a>&#12290;</p><p></p><h3><strong><a href="https://developer.apple.com/documentation/TipKit">TipKit is here</a></strong></h3><p><a href="https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes">Xcode 15 beta 5</a> &#37323;&#20986;&#20102;&#20170;&#24180; WWDC &#38928;&#21578;&#30340; <a href="https://developer.apple.com/documentation/TipKit">TipKit</a> &#21021;&#29256;&#65292;&#32769;&#23526;&#35498;&#36889;&#21487;&#33021;&#26159;&#25105;&#26368;&#19981;&#24863;&#21040;&#33288;&#22894;&#30340; framework&#65292;&#22240;&#28858;&#22914;&#24433;&#29255;&#21098;&#36655;&#36889;&#31278;&#39640;&#25805;&#20316;&#35079;&#38620;&#24230;&#30340; app &#38614;&#26377;&#36889;&#38656;&#27714;&#65292;&#20294;&#20063;&#26089;&#23601;&#26377;&#33258;&#24049;&#30340;&#23526;&#36368;&#65292;&#32780;&#21151;&#33021;&#36611;&#38598;&#20013;&#12289;&#21934;&#32020;&#30340; app &#22914;&#26524;&#36996;&#38656;&#35201;&#25552;&#31034;&#65292;&#21487;&#33021;&#37325;&#26032;&#27298;&#35222;&#35373;&#35336;&#26371;&#26356;&#26377;&#24171;&#21161;&#65292;&#22240;&#28858;&#35373;&#35336;&#30028;&#26377;&#21477;&#21517;&#35328;&#65306;</p><blockquote><p>UX is like a joke. If you have to explain it, it&#8217;s not good.</p></blockquote><p>&#20351;&#29992;&#21069;&#24314;&#35696;&#20808;&#35712;<a href="https://developer.apple.com/documentation/TipKit">&#25991;&#20214;</a>&#21644;&#30475;&#36942; <a href="https://developer.apple.com/videos/play/wwdc2023/10229/">WWDC &#24433;&#29255;</a>&#65292;&#20102;&#35299;&#20854;&#25152;&#33021;&#24460;&#20877;&#20358;&#24605;&#32771;&#36969;&#19981;&#36969;&#21512;&#25918;&#20837;&#33258;&#24049;&#30340; app &#20013;&#65292;&#24819;&#30452;&#25509;&#30475;&#31684;&#20363;&#20063;&#24050;&#32147;<a href="https://github.com/jordibruin/TipKit-Examples">&#26377;&#20154;&#23531;&#22909;&#20102;</a>&#12290;</p><p></p><h3><strong><a href="https://gist.github.com/0x1306a94/09674ddc71459ffa00a625f01b5f49cc">&#22914;&#20309;&#19981;&#20351;&#29992; Swift Package Manager &#20358;&#23566;&#20837; Swift macros</a></strong></h3><p>Swift macros &#23637;&#38283;&#30340;&#21407;&#29702;&#26159;&#30001; SPM &#36879;&#36942; compiler plugin &#23436;&#25104;&#30340;&#65292;macros &#23526;&#20570;&#30340;&#37096;&#20998;&#26371;&#20808;&#34987;&#32232;&#25104; dylib&#65292;&#30070; compiler &#30475;&#21040; macro &#27161;&#35352;&#20415;&#26371;&#30001; plugin &#21435;&#21839;&#36889;&#20491; dylib &#35442;&#24590;&#40636;&#23637;&#38283;&#65292;&#20877;&#25918;&#22238;&#21407;&#26412;&#30340;&#31243;&#24335;&#30908;&#20013;&#12290;</p><p>&#22914;&#26524;&#20320;&#19981;&#24819;&#36879;&#36942; SPM &#65288;&#27604;&#22914;&#20320;&#26159;&#29992; bazel&#12289;buck &#25110;&#25163;&#23531;&#25351;&#20196;&#20358;&#36914;&#34892;&#32232;&#35695;&#65289;&#65292;<a href="https://gist.github.com/0x1306a94/09674ddc71459ffa00a625f01b5f49cc">&#36889;&#35041;&#26377;&#25945;&#23416;</a>&#22914;&#20309;&#30452;&#25509;&#29992;&#25351;&#20196;&#26367;&#20195; compiler plugin&#65292;&#19981;&#36942;&#20320;&#24471;&#20808;&#33258;&#24049;&#25226; macro &#23526;&#20316;&#32232;&#25104; dylib &#25110;&#22519;&#34892;&#27284;&#12290;</p><p></p><h3><strong><a href="https://developer.apple.com/augmented-reality/quick-look/">&#22312; visionOS &#29609; 3D &#19981;&#29992;&#25812;&#24515;&#27794;&#27169;&#32068;</a></strong></h3><p>&#22914;&#26524;&#20320;&#22312;&#29609; visionOS &#38656;&#35201; 3D &#27169;&#32068;&#65292;Apple &#24050;&#32147;&#26377;&#19968;&#20491;&#29694;&#25104;&#30340;<a href="https://developer.apple.com/augmented-reality/quick-look/">&#27169;&#32068;&#24235;</a>&#20379;&#20320;&#29609;&#32781;&#12290;</p><p><a href="https://twitter.com/hiddevdploeg/status/1685249663996207105?s=20">https://twitter.com/hiddevdploeg/status/1685249663996207105?s=20</a></p><p></p><h3><strong><a href="https://twitter.com/zhuowei/status/1683372172402737153">visionOS &#21021;&#27425;&#38283;&#27231;&#21205;&#30059;</a></strong></h3><p>&#20320;&#21487;&#20197;&#36879;&#36942; simctl &#20358;&#38283;&#21855;&#27169;&#25836;&#22120;&#19978;&#30340;&#21021;&#27425;&#35373;&#23450;&#30059;&#38754;</p><p><a href="https://twitter.com/zhuowei/status/1683372172402737153">https://twitter.com/zhuowei/status/1683372172402737153</a></p><div><hr></div><h2><strong>&#128483;&#65039; On Swift Forum</strong></h2><h3><strong><a href="https://forums.swift.org/t/accepted-se-0387-swift-sdks-for-cross-compilation/66399">[Accepted] SE-0387: Swift SDKs for Cross-Compilation</a></strong></h3><p><a href="https://github.com/apple/swift-evolution/blob/main/proposals/0387-cross-compilation-destinations.md">SE-0387</a>&#25903;&#25588;&#22312; macOS &#19978;&#32232;&#35695;&#20986;&#32102; Linux &#20351;&#29992;&#30340; SDK&#65292;&#19981;&#36942;&#38500;&#20102;&#35041;&#38754;&#25552;&#21040;&#22312; macOS &#32232;&#20986;&#20358;&#32102; Raspberry Pi &#36889;&#31278;&#36939;&#31639;&#21147;&#27604;&#36611;&#20302;&#30340;&#21934;&#26230;&#29255;&#38651;&#33126;&#30452;&#25509;&#20351;&#29992;&#22806;&#65292;&#25105;&#24819;&#19981;&#21040;&#36996;&#26377;&#20160;&#40636;&#20351;&#29992;&#23526;&#20363;&#65292;&#22312; macOS &#19978;&#32232; server side Swift SDK &#32102; Linux &#29992;&#65311;</p><p>&#25105;&#24819;&#22823;&#23478;&#26356;&#24819;&#35201;&#30340;&#26159; Linux &#19978;&#30340; cross-build &#65292;&#36889;&#27171;&#23601;&#21487;&#20197;&#35299;&#37782;&#35377;&#22810;&#36939;&#31639;&#21147;&#26356;&#24375;&#65292;&#25104;&#26412;&#26356;&#23526;&#24800;&#30340; CI &#26381;&#21209;&#12290;</p><div><hr></div><h2><strong>&#129322; Pofat &#36984;&#25512;</strong></h2><p>G&#128064;gle</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://twitter.com/krzyzanowskim/status/1684157081119518720?s=20" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kNpc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4792dd99-9729-439a-bd7b-dcd8e7f967ce_800x445.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kNpc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4792dd99-9729-439a-bd7b-dcd8e7f967ce_800x445.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kNpc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4792dd99-9729-439a-bd7b-dcd8e7f967ce_800x445.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kNpc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4792dd99-9729-439a-bd7b-dcd8e7f967ce_800x445.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kNpc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4792dd99-9729-439a-bd7b-dcd8e7f967ce_800x445.jpeg" width="800" height="445" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4792dd99-9729-439a-bd7b-dcd8e7f967ce_800x445.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:445,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#22294;&#29255;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://twitter.com/krzyzanowskim/status/1684157081119518720?s=20&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#22294;&#29255;" title="&#22294;&#29255;" srcset="https://substackcdn.com/image/fetch/$s_!kNpc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4792dd99-9729-439a-bd7b-dcd8e7f967ce_800x445.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kNpc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4792dd99-9729-439a-bd7b-dcd8e7f967ce_800x445.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kNpc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4792dd99-9729-439a-bd7b-dcd8e7f967ce_800x445.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kNpc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4792dd99-9729-439a-bd7b-dcd8e7f967ce_800x445.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>True story</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://twitter.com/iammemeloper/status/1684939013889601537?s=20" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z6Ti!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3702f3d-17ba-4cf7-8f3f-c0404516777b_500x494.png 424w, https://substackcdn.com/image/fetch/$s_!z6Ti!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3702f3d-17ba-4cf7-8f3f-c0404516777b_500x494.png 848w, https://substackcdn.com/image/fetch/$s_!z6Ti!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3702f3d-17ba-4cf7-8f3f-c0404516777b_500x494.png 1272w, https://substackcdn.com/image/fetch/$s_!z6Ti!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3702f3d-17ba-4cf7-8f3f-c0404516777b_500x494.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z6Ti!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3702f3d-17ba-4cf7-8f3f-c0404516777b_500x494.png" width="500" height="494" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3702f3d-17ba-4cf7-8f3f-c0404516777b_500x494.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:494,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#22294;&#29255;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://twitter.com/iammemeloper/status/1684939013889601537?s=20&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#22294;&#29255;" title="&#22294;&#29255;" srcset="https://substackcdn.com/image/fetch/$s_!z6Ti!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3702f3d-17ba-4cf7-8f3f-c0404516777b_500x494.png 424w, https://substackcdn.com/image/fetch/$s_!z6Ti!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3702f3d-17ba-4cf7-8f3f-c0404516777b_500x494.png 848w, https://substackcdn.com/image/fetch/$s_!z6Ti!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3702f3d-17ba-4cf7-8f3f-c0404516777b_500x494.png 1272w, https://substackcdn.com/image/fetch/$s_!z6Ti!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3702f3d-17ba-4cf7-8f3f-c0404516777b_500x494.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Xbox &#20840;&#26032;&#30340;&#39318;&#38913;&#35373;&#35336;&#65292;&#36938;&#25138;&#20999;&#25563;&#20687; PS &#30340;&#30028;&#38754;&#65292;&#25105;&#24456;&#21916;&#27489;&#65281;</p><p><a href="https://twitter.com/tomwarren/status/1684220591757197313?s=20">https://twitter.com/tomwarren/status/1684220591757197313?s=20</a></p>]]></content:encoded></item></channel></rss>