1<!DOCTYPE html> 2<html lang="zh-Hant" data-theme="light"> 3<head> 4 <title>ð¹ð¼å·ç¥èï¼å°ç£æ¯ iOS App Store 第å大å¸å ´</title> 5 <meta charset="utf-8" /> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 7 <meta name="HandheldFriendly" content="True" /> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> 9 <meta name="color-scheme" content="light dark" /> 10 <link rel="preconnect" href="https://fonts.googleapis.com"> 11 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 12 <link href="https://fonts.googleapis.com/css2?family=Instrument+Sans:ital,wght@0,400..700;1,400..700&family=JetBrains+Mono:wght@500;700&family=Noto+Sans+TC:wght@400;500;700;900&display=swap" rel="stylesheet"> 13 <link rel="preload" as="style" href="https://ethanhuang13.plus/assets/built/screen.css?v=fRHHoHqaLmSPvNgA" /> 14 <link rel="preload" as="script" href="https://ethanhuang13.plus/assets/built/codex.js?v=4MTsvgvmq4bGV7be" /> 15 <link rel="preload" as="script" href="https://ethanhuang13.plus/assets/built/telemetry.js?v=wBaWtf3t3Fo9xR7j" /> 16 <link rel="stylesheet" type="text/css" href="https://ethanhuang13.plus/assets/built/screen.css?v=fRHHoHqaLmSPvNgA" /> 17 <link rel="stylesheet" href="https://ethanhuang13.plus/assets/built/prism-xcode.css?v=-CCR3xH7YhcSHKzg"> 18
18<script> 19 if (matchMedia('(prefers-color-scheme:dark)').matches) 20 document.documentElement.dataset.theme = 'dark'; 21 </script>
21 22 <meta name="description" content="åé£åçºäºæºå iOS AI Summer Campï¼çºæä¸å¤©ãå¨å°ç£å¤§å¸è辦çå è²»å¸çéç¼è å¤ä»¤çï¼ï¼å»æ¥äºä¸ä¸ App Store çå¸å ´æåï¼æç¼ç¾ï¼å°ç£çè»é«å¸å ´çè¦æ¨¡åååè ï¼è䏿ç¼ç¾å¾å¤äººä¸¦ä¸ç¥ééåäºå¯¦ã"> 23 <link rel="icon" href="https://storage.ghost.io/c/b5/ef/b5ef3a60-300e-4c93-99a1-ce3ec3f3c437/content/images/size/w256h256/2026/07/Profile-2026-1.jpeg" type="image/jpeg"> 24 <link rel="canonical" href="https://ethanhuang13.plus/taiwan-top-app-store-market/"> 25 <link rel="alternate" type="text/markdown" href="https://ethanhuang13.plus/taiwan-top-app-store-market.md"> 26 <meta name="referrer" content="no-referrer-when-downgrade"> 27 28 <meta property="og:site_name" content="13å ± "> 29 <meta property="og:type" content="article"> 30 <meta property="og:title" content="ð¹ð¼å·ç¥èï¼å°ç£æ¯ iOS App Store 第å大å¸å ´"> 31 <meta property="og:description" content="åé£åçºäºæºå iOS AI Summer Campï¼çºæä¸å¤©ãå¨å°ç£å¤§å¸è辦çå è²»å¸çéç¼è å¤ä»¤çï¼ï¼å»æ¥äºä¸ä¸ App Store çå¸å ´æåï¼æç¼ç¾ï¼å°ç£çè»é«å¸å ´çè¦æ¨¡åååè ï¼è䏿ç¼ç¾å¾å¤äººä¸¦ä¸ç¥ééåäºå¯¦ã"> 32 <meta property="og:url" content="https://ethanhuang13.plus/taiwan-top-app-store-market/"> 33 <meta property="article:published_time" content="2026-07-22T22:00:15.000Z"> 34 <meta property="article:modified_time" content="2026-07-22T22:00:14.000Z"> 35 <meta property="article:tag" content="ð« ç¢åç¶ç"> 36 37 <meta name="twitter:card" content="summary"> 38 <meta name="twitter:title" content="ð¹ð¼å·ç¥èï¼å°ç£æ¯ iOS App Store 第å大å¸å ´"> 39 <meta name="twitter:description" content="åé£åçºäºæºå iOS AI Summer Campï¼çºæä¸å¤©ãå¨å°ç£å¤§å¸è辦çå è²»å¸çéç¼è å¤ä»¤çï¼ï¼å»æ¥äºä¸ä¸ App Store çå¸å ´æåï¼æç¼ç¾ï¼å°ç£çè»é«å¸å ´çè¦æ¨¡åååè ï¼è䏿ç¼ç¾å¾å¤äººä¸¦ä¸ç¥ééåäºå¯¦ã"> 40 <meta name="twitter:url" content="https://ethanhuang13.plus/taiwan-top-app-store-market/"> 41 <meta name="twitter:label1" content="Written by"> 42 <meta name="twitter:data1" content="13"> 43 <meta name="twitter:label2" content="Filed under"> 44 <meta name="twitter:data2" content="ð« ç¢åç¶ç"> 45 <meta name="twitter:site" content="@ethanhuang13"> 46 <meta name="twitter:creator" content="@ethanhuang13"> 47 48
48<script type="application/ld+json"> 49{ 50 "@context": "https://schema.org", 51 "@type": "Article", 52 "publisher": { 53 "@type": "Organization", 54 "name": "13å ± ", 55 "url": "https://ethanhuang13.plus/", 56 "logo": { 57 "@type": "ImageObject", 58 "url": "https://storage.ghost.io/c/b5/ef/b5ef3a60-300e-4c93-99a1-ce3ec3f3c437/content/images/size/w256h256/2026/07/Profile-2026-1.jpeg", 59 "width": 60, 60 "height": 60 61 } 62 }, 63 "author": { 64 "@type": "Person", 65 "name": "13", 66 "image": { 67 "@type": "ImageObject", 68 "url": "https://storage.ghost.io/c/b5/ef/b5ef3a60-300e-4c93-99a1-ce3ec3f3c437/content/images/size/w1200/2026/07/Profile-2026.jpeg", 69 "width": 1200, 70 "height": 1200 71 }, 72 "url": "https://ethanhuang13.plus/author/13/", 73 "sameAs": [ 74 "https://ethanhuang13.com", 75 "https://x.com/ethanhuang13" 76 ] 77 }, 78 "headline": "ð¹ð¼å·ç¥èï¼å°ç£æ¯ iOS App Store 第å大å¸å ´", 79 "url": "https://ethanhuang13.plus/taiwan-top-app-store-market/", 80 "datePublished": "2026-07-22T22:00:15.000Z", 81 "dateModified": "2026-07-22T22:00:14.000Z", 82 "keywords": "ð« ç¢åç¶ç", 83 "description": "åé£åçºäºæºå iOS AI Summer Campï¼çºæä¸å¤©ãå¨å°ç£å¤§å¸è辦çå è²»å¸çéç¼è å¤ä»¤çï¼ï¼å»æ¥äºä¸ä¸ App Store çå¸å ´æåï¼æç¼ç¾ï¼å°ç£çè»é«å¸å ´çè¦æ¨¡åååè ï¼è䏿ç¼ç¾å¾å¤äººä¸¦ä¸ç¥ééåäºå¯¦ã", 84 "mainEntityOfPage": "https://ethanhuang13.plus/taiwan-top-app-store-market/" 85} 86 </script>
86 87 88 <meta name="generator" content="Ghost 6.65"> 89 <link rel="alternate" type="application/rss+xml" title="13å ± " href="https://ethanhuang13.plus/rss/"> 90
90<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.71/umd/portal.min.js" data-i18n="true" data-ghost="https://ethanhuang13.plus/" data-key="c34269a432c8f4c71005502c83" data-api="https://ethanhuang13.ghost.io/ghost/api/content/" data-locale="zh-Hant" crossorigin="anonymous"></script>
90<style id="gh-members-styles">.gh-post-upgrade-cta-content, 91.gh-post-upgrade-cta { 92 display: flex; 93 flex-direction: column; 94 align-items: center; 95 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; 96 text-align: center; 97 width: 100%; 98 color: #ffffff; 99 font-size: 16px; 100} 101 102.gh-post-upgrade-cta-content { 103 border-radius: 8px; 104 padding: 40px 4vw; 105} 106 107.gh-post-upgrade-cta h2 { 108 color: #ffffff; 109 font-size: 28px; 110 letter-spacing: -0.2px; 111 margin: 0; 112 padding: 0; 113} 114 115.gh-post-upgrade-cta p { 116 margin: 20px 0 0; 117 padding: 0; 118} 119 120.gh-post-upgrade-cta small { 121 font-size: 16px; 122 letter-spacing: -0.2px; 123} 124 125.gh-post-upgrade-cta a { 126 color: #ffffff; 127 cursor: pointer; 128 font-weight: 500; 129 box-shadow: none; 130 text-decoration: underline; 131} 132 133.gh-post-upgrade-cta a:hover { 134 color: #ffffff; 135 opacity: 0.8; 136 box-shadow: none; 137 text-decoration: underline; 138} 139 140.gh-post-upgrade-cta a.gh-btn { 141 display: block; 142 background: #ffffff; 143 text-decoration: none; 144 margin: 28px 0 0; 145 padding: 8px 18px; 146 border-radius: 4px; 147 font-size: 16px; 148 font-weight: 600; 149} 150 151.gh-post-upgrade-cta a.gh-btn:hover { 152 opacity: 0.92; 153}</style> 154
154<script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js" data-key="c34269a432c8f4c71005502c83" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://ethanhuang13.ghost.io/" data-locale="zh-Hant" crossorigin="anonymous"></script>
154 155 156 <link href="https://ethanhuang13.plus/webmentions/receive/" rel="webmention"> 157
157<script defer src="/public/member-attribution.min.js?v=AKG4hWena9j3yX3I"></script>
157 158
158<script defer src="/public/ghost-stats.min.js?v=vFcCUf6ZQ0Hyhc8h" data-stringify-payload="false" data-datasource="analytics_events" data-storage="localStorage" data-host="https://ethanhuang13.plus/.ghost/analytics/api/v1/page_hit" tb_site_uuid="b5ef3a60-300e-4c93-99a1-ce3ec3f3c437" tb_post_uuid="badda029-3d4a-4218-8a27-4a7f5d044101" tb_post_type="post" tb_member_uuid="undefined" tb_member_status="undefined" tb_gift_link=""></script>
158<style>:root {--ghost-accent-color: #0F4C81;}</style> 159 <!--
159<script src="https://cdn.jsdelivr.net/npm/prismjs/prism.min.js" defer></script>
vendor: 1 bytes, line 159
159
160<script src="https://cdn.jsdelivr.net/npm/prismjs/plugins/autoloader/prism-autoloader.min.js" defer></script>
160--> 161<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/prismjs/themes/prism.min.css"> 162 163<style> 164 /* Prism.js Toolbar Positioning */ 165 .code-toolbar { 166 position: relative; 167 } 168 .toolbar { 169 position: absolute; 170 top: 14px; 171 right: 0; 172 font-size: 14px; 173 color: green; 174 } 175 .toolbar-item { 176 display: inline-block; 177 margin-right: 5px; 178 } 179 .copy-to-clipboard-button, .toolbar-item > button { 180 color: green; 181 } 182</style> 183 184<!-- Prism Core -->
185<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/components/prism-core.min.js" integrity="sha512-9khQRAUBYEJDCDVP2yw3LRUQvjJ0Pjx0EShmaQjcHa6AXiOv6qHQu9lCAIR8O+/D8FtaCoJ2c0Tf9Xo7hYH01Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
185 186 187<!-- Autoloader Plugin -->
188<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/plugins/autoloader/prism-autoloader.min.js" integrity="sha512-fTl/qcO1VgvKtOMApX2PdZzkziyr2stM65GYPLGuYMnuMm1z2JLJG6XVU7C/mR+E7xBUqCivykuhlzfqxXBXbg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
188 189 190<!-- Toolbar Plugin -->
191<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/plugins/toolbar/prism-toolbar.min.js"></script>
191 192 193<!-- Copy-to-Clipboard Plugin -->
194<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.28.0/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js"></script>
194 195 196 197<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 197-198
197 198<script async src="https://www.googletagmanager.com/gtag/js?id=
198G-ECLEY320MR
vendor: 12 bytes, line 198
198"></script>
199<script> 200
vendor: 134 bytes, lines 200-204
200window.dataLayer = window.dataLayer || []; 201 function gtag(){dataLayer.push(arguments);} 202 gtag('js', new Date()); 203 204 gtag('config', '
204G-ECLEY320MR
vendor: 4 bytes, line 204
204');
205</script>
205 206</head> 207<body class="site-body post-template tag-product-building is-visitor" data-member-state="visitor"> 208 <a class="skip-link" href="#site-main">è·³å°å §å®¹</a> 209 <div class="site-shell"> 210 <header class="site-header"> 211 <div class="site-header__inner"> 212 <a class="site-brand" href="https://ethanhuang13.plus"> 213 <span class="site-brand__mark">13å ±</span> 214 </a> 215 216 <nav class="site-nav site-nav--desktop" aria-label="主è¦å°è¦½"> 217 <a href="https://ethanhuang13.plus/tag/news/">éç¼è é±å ±</a> 218 <a href="https://ethanhuang13.plus/index/">æææç« </a> 219 <a href="https://ethanhuang13.plus/tag/lightning-talk/">çç¯æç¼</a> 220 <a href="https://ethanhuang13.plus/#topics">主é¡åé¡</a> 221 <a class="utility-link desktop-only" href="https://ethanhuang13.plus/about/">éæ¼</a> 222 <button type="button" data-ghost-search data-nav-close>æå°</button> 223 </nav> 224 225 <div class="site-header__actions"> 226 <a class="button-link button-link--strong desktop-only" href="https://patreon.com/ethanhuang13/membership" target="_blank" rel="noreferrer">æ¥çæ¹æ¡</a> 227 <button type="button" class="utility-link site-menu-trigger mobile-only" data-nav-toggle aria-expanded="false" aria-controls="site-drawer"> 228 <span>é¸å®</span> 229 </button> 230 </div> 231 </div> 232</header> 233 234<nav id="site-drawer" class="site-drawer" aria-label="è¡åå°è¦½" aria-hidden="true" inert data-nav-panel> 235 <div class="site-drawer__inner"> 236 <div class="site-drawer__top"> 237 <p>13å ±</p> 238 <button type="button" class="utility-link" data-nav-close aria-label="ééå°è¦½"> 239 <span>éé</span> 240 </button> 241 </div> 242 <div class="site-drawer__links"> 243 <a href="https://ethanhuang13.plus/tag/news/">éç¼è é±å ±</a> 244 <a href="https://ethanhuang13.plus/index/">æææç« </a> 245 <a href="https://ethanhuang13.plus/tag/lightning-talk/">çç¯æç¼</a> 246 <a href="https://ethanhuang13.plus/#topics">主é¡åé¡</a> 247 <a href="https://ethanhuang13.plus/about/">éæ¼</a> 248 <button type="button" data-ghost-search data-nav-close>æå°</button> 249 </div> 250 <div class="site-drawer__actions"> 251 <a class="button-link button-link--strong" href="https://patreon.com/ethanhuang13/membership" target="_blank" rel="noreferrer">æ¥çæ¹æ¡</a> 252 <a class="button-link" href="#/portal/signin" data-portal="signin">ç»å ¥</a> 253 </div> 254 </div> 255</nav> 256 <main id="site-main" class="site-main" tabindex="-1"> 257 258<article class="article-shell post tag-product-building no-image"> 259 <header class="article-header"> 260 <div class="article-header__inner"> 261 <div class="article-header__eyebrow"> 262 <span>å°æ¬ / ç ç©¶çè¨</span> 263 <a href="https://ethanhuang13.plus/tag/product-building/">ð« ç¢åç¶ç</a> 264 </div> 265 <h1 data-article-title>ð¹ð¼å·ç¥èï¼å°ç£æ¯ iOS App Store 第å大å¸å ´</h1> 266 267 <div class="article-header__lower"> 268 <p class="article-header__deck"> 269 åé£åçºäºæºå iOS AI Summer Campï¼çºæä¸å¤©ãå¨å°ç£å¤§å¸è辦çå è²»å¸çéç¼è å¤ä»¤çï¼ï¼å»æ¥äºä¸ä¸ App Store çå¸å ´æåï¼æç¼ç¾ï¼å°ç£çè»é«å¸å ´çè¦æ¨¡åååè ï¼è䏿ç¼ç¾å¾å¤äººä¸¦ä¸ç¥ééåäºå¯¦ã 270 </p> 271 272 <aside class="article-aside"> 273 <div class="article-aside__block article-aside__block--tags"> 274 <p class="article-aside__label">æ¨ç±¤</p> 275 <div class="article-aside__tags"> 276 </div> 277 </div> 278 <div class="article-aside__block article-aside__block--status"> 279 <p class="article-aside__label">çæ </p> 280 <p> <span class="access-badge access-badge--public">å ¬é</span> 281</p> 282 </div> 283 <div class="article-aside__block article-aside__block--date"> 284 <p class="article-aside__label">æ¥æ</p> 285 <p>2026-07-23</p> 286 </div> 287 <div class="article-aside__block article-aside__block--author"> 288 <p class="article-aside__label">ä½è </p> 289 <p><a href="/author/13/">13</a></p> 290 </div> 291 </aside> 292 </div> 293 </div> 294 </header> 295 296 <div class="article-layout"> 297 <div class="article-main"> 298 299 <section class="gh-content"> 300 <p>æ ¹æ Sensor Towerï¼data.aiï¼ç<a href="https://sensortower.com/report/forecast-report/download?ref=ethanhuang13.plus">
300å ¬éå ±åï¼Mobile App Market Forecast 2030ï¼</a>ï¼2023 å¹´ iOS App Store çæ¶è²»è æ¯åºæåï¼å奿¯ï¼</p><ol><li>ç¾å $30.8B</li><li>ä¸å $15.7B</li><li>æ¥æ¬ $12.3B</li><li>å°ç£ $2.9B</li><li>è±å $2.6B</li></ol><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/b5/ef/b5ef3a60-300e-4c93-99a1-ce3ec3f3c437/content/images/2026/07/[email protected]" class="kg-image" alt="" loading="lazy" width="2000" height="1098" srcset="https://storage.ghost.io/c/b5/ef/b5ef3a60-300e-4c93-99a1-ce3ec3f3c437/content/images/size/w600/2026/07/[email protected] 600w, https://storage.ghost.io/c/b5/ef/b5ef3a60-300e-4c93-99a1-ce3ec3f3c437/content/images/size/w1000/2026/07/[email protected] 1000w, https://storage.ghost.io/c/b5/ef/b5ef3a60-300e-4c93-99a1-ce3ec3f3c437/content/images/size/w1600/2026/07/[email protected] 1600w, https://storage.ghost.io/c/b5/ef/b5ef3a60-300e-4c93-99a1-ce3ec3f3c437/content/images/2026/07/[email protected] 2000w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">ä¾èª Sensor Tower ç </span><a href="https://sensortower.com/report/forecast-report/download?ref=ethanhuang13.plus"><span style="white-space: pre-wrap;">Mobile App Market Forecast 2030</span></a></figcaption></figure><p>éç¶éä»½å ±åçæéå¨ vibe coding æä»£ä¹åï¼æ«ææ¾ä¸å°æ´æ°çå ¬éæ¸æï¼ãä¹ä¸æ¯ Apple 宿¹çæ¸æï¼ä½ Sensor Tower ç®æ¯å¾å¤§çæ¸ææ©æ§ï¼å¯ä¿¡åº¦é«ã</p><p>è©²å ±åé æ¸¬ï¼å°äº 2030 å¹´ï¼å°ç£çå¸å ´è¦æ¨¡æå¾ 29 åç¾éæé·å° <strong>49 åç¾é</strong>ãé æ¸¬èªçºï¼å°ç£å¸å ´å¹´è¤åæé·çï¼CAGRï¼ææ¯ 8.1%ï¼ä½ä½æ¼è±åç 10.6%ï¼æä»¥æåæè¢«å¾è è¶ è¶ã</p><p>éè¦æ³¨æçæ¯ï¼åä¸åçå¸å ´è¦æ¨¡èåãäºåæå¾å¤§çå·®è·ã第ä¸åçæ¥æ¬æ¯å°ç£ç ~4 åï¼æ´ä¸ç¨èªªä¸åç ~5 åãç¾åç ~10 åã</p><p>ä½ä¸è«å¦ä½ï¼ææ³èªªçæ¯ï¼å¾ App Store ä¾çï¼å¨æ¶è²»ç´è»é«æéæ²æ¹é¢ï¼<strong>å°ç£äººç¸å°æ¼å ¨çä¾èªªï¼é¡æåºé¢ãä¹åºå¾èµ·</strong>ã</p><p>å°ç£å¾æç¢ºæ¯ AI 硬é«ä¾æéçè¦è§ãç¸å°çï¼è»é«æ¹é¢çµ¦äººçå°è±¡ç¸½æ¯éæå¾å¤§ç鲿¥ç©ºéã</p><p>ç¶èï¼å¾æ¶è²»è æ¯åºçè§åº¦ä¾çï¼äººå顿è±é¢è³¼è²·è»é«ï¼æåçæ´»å質è工使çãéå ¶å¯¦æ¯å°ç£ç¼å±è»é«çå¥½æ¶æ¯ã</p><p>ä½ è¦ºå¾å°ç£äººææ¨æ¼æ¯ææ¬åçéç¼è åï¼æèªçºå°ç£çéç¼è å¾ææ©æãé乿¯çºä»éº¼ææå·¥ä½è¾æä»¥å¾ï¼ä¸ç´å¨<a href="https://www.threads.com/@ethanhuang13/post/Da9nWTOlG25?ref=ethanhuang13.plus">åæ ½å¹ä¸ä¸ä»£éç¼è çäºæ </a>ã</p><p>å¦æä½ æ¯ä¾èªå°ç£çéç¼è ï¼æå¦ä½ç¶çå°ç£çè»é«å¸å ´å¢ï¼æ¡è¿è·æåäº«ä½ ççæ³ã</p> 301 </section> 302 303 </div> 304 </div> 305 306 <section class="article-more"> 307 <div class="directory-block"> 308 <div class="section-heading"> 309 <h2>延伸é±è®</h2> 310 </div> 311 <div class="essay-list"> 312 <article class="post-item post tag-product-building tag-todayos"> 313 <a class="post-item__link" href="/app-launch-preparation-part-3-site/"> 314 <div class="post-item__meta"> 315 <span>2026-07-22</span> 316 <span>ð« ç¢åç¶ç</span> 317 <span class="access-badge access-badge--locked">ä»è²»</span> 318 </div> 319 <h3 class="post-item__title">ð§æ¶è¨å®ç¶²æ¯åºæ¬ââ䏿¶ App åç©¶ç«æå¤å°æºåå·¥ä½ï¼ï¼ä¸ï¼</h3> 320 <p class="post-item__excerpt"> 321 宿¹ç¶²ç«ä¸æ¯ nice to haveï¼èæ¯å»ºç«åçä¿¡ä»»çèµ·é»ã 322 </p> 323 </a> 324</article> 325 <article class="post-item post tag-software-development-thinking tag-product-building tag-todayos"> 326 <a class="post-item__link" href="/app-launch-preparation-part-2-onboarding/"> 327 <div class="post-item__meta">
328 <span>2026-07-06</span> 329 <span>ð§ è»é«éç¼æç¶</span> 330 <span class="access-badge access-badge--locked">ä»è²»</span> 331 </div> 332 <h3 class="post-item__title">ð§æ°ææå¸ä¸å®è¦åââ䏿¶ App åç©¶ç«æå¤å°æºåå·¥ä½ï¼ï¼äºï¼</h3> 333 <p class="post-item__excerpt"> 334 æè¦ºå¾æ°ææå¸æ¯æéº»ç ©ï¼ä½ä¹æ¯æå¿ é èªçé¢å°çå·¥ä½ãå¦æä½ ç app å·²ç¶ä¸æ¶ï¼ä½éæ²æåæ°ææå¸ï¼é£éº¼ä½ æ¥ä¸ä¾çå·¥ä½ï¼å°±è©²æ¯æè並ååºæ°ææå¸ã 335 </p> 336 </a> 337</article> 338 <article class="post-item post tag-software-development-thinking tag-product-building tag-todayos tag-codex"> 339 <a class="post-item__link" href="/todayos-meta-operation/"> 340 <div class="post-item__meta"> 341 <span>2026-07-02</span> 342 <span>ð§ è»é«éç¼æç¶</span> 343 <span class="access-badge access-badge--locked">ä»è²»</span> 344 </div> 345 <h3 class="post-item__title">ðï¸ç¨ todayOS çè¨è¨å²å¸ä¾ç¶ç todayOS</h3> 346 <p class="post-item__excerpt"> 347 ç¨ç«éç¼è è¦å¦ä½ææ¡å·¥ä½ç¯å¥ï¼ææ app çè¨è¨å²å¸å¥ç¨å¨æ¯ä¸å¤©çå·¥ä½å §å®¹ï¼åäºç°¡å®çä»é¢æéèªå·±ã 348 </p> 349 </a> 350</article> 351 </div> 352 </div> 353 354 <div class="directory-block"> 355 <div class="section-heading"> 356 <h2>æè¿æ´æ°</h2> 357 </div> 358 <div class="essay-list"> 359 <article class="post-item post tag-news tag-iphone-duo no-image"> 360 <a class="post-item__link" href="/dev-news-268-iphone-duo/"> 361 <div class="post-item__meta"> 362 <span>2026-09-24</span> 363 <span>ð° éç¼è æ°ç¥èè©è«</span> 364 <span class="access-badge access-badge--locked">ä»è²»</span> 365 </div> 366 <h3 class="post-item__title">ð°Apple éç¼è é±å ± #269 iPhone Duo ç¹è¼¯</h3> 367 <p class="post-item__excerpt"> 368 âª13å ±+â«æ»¿å ©é±å¹´ãå¹´è²»åªæ æ¹æ¡å° 9/30 æªæ¢ã 369 </p> 370 </a> 371</article> 372 <article class="post-item post tag-announcement no-image"> 373 <a class="post-item__link" href="/13-plus-two-year-love-you/"> 374 <div class="post-item__meta"> 375 <span>2026-09-14</span> 376 <span>ðª§ å ¬å</span> 377 <span class="access-badge access-badge--public">å ¬é</span> 378 </div> 379 <h3 class="post-item__title">ðæè¬è®è ï¼âª13å ±+â«è¦æ»¿å ©é±å¹´äºï¼</h3> 380 <p class="post-item__excerpt"> 381 ä¹è«çæéè¦æ¶æ¯èå¹´è²»è¨é±æ£æ¬¾æéã 382 </p> 383 </a> 384</article> 385 <article class="post-item post tag-news tag-likit tag-local-ai no-image"> 386 <a class="post-item__link" href="/dev-news-268/"> 387 <div class="post-item__meta"> 388 <span>2026-09-09</span> 389 <span>ð° éç¼è æ°ç¥èè©è«</span> 390 <span class="access-badge access-badge--locked">ä»è²»</span> 391 </div> 392 <h3 class="post-item__title">ð°Apple éç¼è é±å ± #268 LIKit</h3> 393 <p class="post-item__excerpt"> 394 Do you like it? 395 </p> 396 </a> 397</article> 398 </div> 399 </div> 400 </section> 401 402</article> 403 404 </main> 405 <footer class="site-footer"> 406 <div class="site-footer__lead"> 407 <p class="site-footer__brand">13å ±</p> 408 <p>寫給 Apple éç¼è çé±å ±èå°æ¬ã</p> 409 </div> 410 <div class="site-footer__meta"> 411 <div class="site-footer__actions"> 412 <a href="https://patreon.com/ethanhuang13/membership" target="_blank" rel="noreferrer">æçºæå¡</a> 413 <a href="#/portal/signin" data-portal="signin">ç»å ¥ï¼ä½¿ç¨ Patreon é»åéµä»¶ï¼</a> 414 </div> 415 </div> 416 <p class="site-footer__note">© 2026 Ethan Huang (13)</p> 417</footer> 418 </div> 419
419<script src="https://ethanhuang13.plus/assets/built/codex.js?v=4MTsvgvmq4bGV7be"></script>
419 420
420<script src="https://ethanhuang13.plus/assets/built/telemetry.js?v=wBaWtf3t3Fo9xR7j"></script>
420 421 <style> 422 code[class*="language-"], 423 pre[class*="language-"] { 424 text-shadow: none; 425 } 426 .token.operator { 427 background: none; 428 } 429 </style> 430 431
431<script> 432 document.addEventListener("DOMContentLoaded", function () { 433 const links = document.querySelectorAll('a[href$="#/portal/signup"], a[href$="#/portal"]'); 434 links.forEach(link => { 435 link.href = "https://patreon.com/ethanhuang13"; 436 link.target = "_blank"; 437 link.rel = "noopener noreferrer"; 438 439 const newLink = link.cloneNode(true); 440 link.parentNode.replaceChild(newLink, link); 441 }); 442 }); 443 </script>
443 444 445
445<script> 446 document.addEventListener("DOMContentLoaded", function () { 447 const title = document.querySelector(".gh-post-upgrade-cta h2"); 448 const subscribeBtn = document.querySelector(".gh-post-upgrade-cta a[data-portal='signup']"); 449 const signInText = document.querySelector(".gh-post-upgrade-cta p"); 450 451 if (title) title.textContent = "å å ¥æå¡ä»¥è§£éæ¬ç¯æç« "; 452 if (subscribeBtn) subscribeBtn.textContent = "ç«å³è¨»åï¼Patreonï¼"; 453 if (signInText) signInText.innerHTML = 'å·²ç¶æå¸³èäºåï¼<a data-portal="signin" href="#/portal/signin" class="gh-portal-close">ç»å ¥</a>'; 454 }); 455 </script>
455 456 457 <!-- Embedded YouTube Playback Control--> 458
458<script> 459 (function() { 460 'use strict'; 461 462 var players = {}; 463 var playersReady = {}; 464 465 if (!window.YT) { 466 var tag = document.createElement('script'); 467 tag.src = "https://www.youtube.com/iframe_api"; 468 var firstScriptTag = document.getElementsByTagName('script')[0]; 469 firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 470 } 471 472 window.onYouTubeIframeAPIReady = function() { 473 console.log('â YouTube API loaded'); 474 initializePlayers(); 475 }; 476 477 function initializePlayers() { 478 var iframes = document.querySelectorAll('iframe[src*="youtube.com/embed"]'); 479 console.log('Found ' + iframes.length + ' YouTube iframes'); 480 481 iframes.forEach(function(iframe, index) { 482 var match = iframe.src.match(/embed\/([^?]+)/); 483 if (match) { 484 var videoId = match[1]; 485 console.log('Processing iframe for video:', videoId); 486 487 // å¦ææ²æ IDï¼èªåæ·»å 488 if (!iframe.id) { 489 iframe.id = 'youtube-player-' + videoId; 490 console.log('Added ID:', iframe.id); 491 } 492 493 // 妿 src æ²æ enablejsapi=1ï¼æ·»å å® 494 if (!iframe.src.includes('enablejsapi=1')) { 495 var separator = iframe.src.includes('?') ? '&' : '?'; 496 iframe.src = iframe.src + separator + 'enablejsapi=1'; 497 console.log('Added enablejsapi=1 to src'); 498 } 499 500 // åå§åææ¾å¨ 501 players[videoId] = new YT.Player(iframe.id, { 502 events: { 503 'onReady': function() { 504 console.log('â Player ready:', videoId); 505 playersReady[videoId] = true; 506 modifyLinks(); 507 } 508 } 509 }); 510 } 511 }); 512 } 513 514 function parseYouTubeUrl(url) { 515 var videoId = null; 516 var timestamp = null; 517 518 var match = url.match(/[?&]v=([^&]+)/); 519 if (match) videoId = match[1]; 520 521 if (!videoId) { 522 match = url.match(/youtu\.be\/([^?&]+)/); 523 if (match) videoId = match[1]; 524 } 525 526 match = url.match(/[?&]t=(\d+)/); 527 if (match) { 528 timestamp = parseInt(match[1]); 529 } else if (videoId) { 530 // 妿æ videoId 使²æ t 忏ï¼è¨å®çº 0ï¼å½±çéé ï¼ 531 timestamp = 0; 532 } 533 534 return { videoId: videoId, timestamp: timestamp }; 535 } 536 537 var linksModified = false; 538 539 function modifyLinks() { 540 if (linksModified) return; 541 542 var links = document.querySelectorAll('a[href*="youtube.com"], a[href*="youtu.be"]'); 543 console.log('Found ' + links.length + ' YouTube links'); 544 545 var modifiedCount = 0; 546 547 links.forEach(function(link) { 548 var parsed = parseYouTubeUrl(link.href); 549 550 if (parsed.videoId && parsed.timestamp !== null && players[parsed.videoId] && playersReady[parsed.videoId]) { 551 console.log('ð Modifying link:', link.textContent.trim(), '(t=' + parsed.timestamp + ')'); 552 553 link.setAttribute('data-original-href', link.href); 554 link.setAttribute('data-yt-videoid', parsed.videoId); 555 link.setAttribute('data-yt-timestamp', parsed.timestamp); 556 557 link.href = 'javascript:void(0)'; 558 link.removeAttribute('target'); 559 link.removeAttribute('rel'); 560 561 modifiedCount++; 562 } 563 }); 564 565 if (modifiedCount > 0) { 566 linksModified = true; 567 console.log('â Modified ' + modifiedCount + ' links'); 568 } 569 } 570 571 function handleYouTubeLinkInteraction(e) { 572 var target = e.target; 573 574 while (target && target.tagName !== 'A') { 575 target = target.parentElement; 576 } 577 578 if (!target) return; 579 580 var videoId = target.getAttribute('data-yt-videoid'); 581 var timestamp = target.getAttribute('data-yt-timestamp'); 582 583 if (videoId && timestamp !== null) { 584 console.log('ð Link clicked! Video:', videoId, 'Time:', timestamp); 585 e.preventDefault(); 586 e.stopPropagation(); 587 588 var player = players[videoId]; 589 if (player) { 590 player.seekTo(parseInt(timestamp), true); 591 player.playVideo(); 592
593 var iframe = document.getElementById('youtube-player-' + videoId); 594 if (iframe) { 595 iframe.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); 596 } 597 } 598 599 return false; 600 } 601 } 602 603 // æ¯æ´æ¡é¢åè¡åè£ç½® 604 document.addEventListener('click', handleYouTubeLinkInteraction, true); 605 document.addEventListener('touchstart', handleYouTubeLinkInteraction, true); 606 607 if (document.readyState === 'loading') { 608 document.addEventListener('DOMContentLoaded', function() { 609 if (window.YT && window.YT.Player) { 610 initializePlayers(); 611 } 612 }); 613 } else { 614 if (window.YT && window.YT.Player) { 615 initializePlayers(); 616 } 617 } 618 619 window.ghostYTPlayers = players; 620 })(); 621 </script>
621 622</body> 623</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.