<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Base Layouts</title>
    <description>The latest articles on DEV Community by Base Layouts (@baselayoutschief).</description>
    <link>https://dev.to/baselayoutschief</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4189381%2Fecef8594-02f3-4492-ae72-7ac7194402e1.png</url>
      <title>DEV Community: Base Layouts</title>
      <link>https://dev.to/baselayoutschief</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/baselayoutschief"/>
    <language>en</language>
    <item>
      <title>TH16 Hybrid &amp; Farm Base Copy Guide: How to Protect Storages (Nov 2026)</title>
      <dc:creator>Base Layouts</dc:creator>
      <pubDate>Thu, 05 Nov 2026 02:40:51 +0000</pubDate>
      <link>https://dev.to/baselayoutschief/th16-hybrid-farm-base-copy-guide-how-to-protect-storages-nov-2026-212o</link>
      <guid>https://dev.to/baselayoutschief/th16-hybrid-farm-base-copy-guide-how-to-protect-storages-nov-2026-212o</guid>
      <description>&lt;p&gt;Copying a base is easy. Copying one that actually protects your loot is the hard part. Here is what I check before I commit to a TH16 hybrid or farm layout.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Storage placement
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep Gold and Elixir Storages split across different quadrants, not stacked together.&lt;/li&gt;
&lt;li&gt;Put at least one storage deep in the core behind two layers of walls so a single spell wave cannot reach it.&lt;/li&gt;
&lt;li&gt;Dark Elixir Storage goes central; it is the one you most want to keep.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Decoy Town Hall
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;If you farm, consider pulling the TH outside the core as a decoy so attackers take the shield and leave.&lt;/li&gt;
&lt;li&gt;For hybrids, keep the TH semi-protected so it gives up a star but not the whole base.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Trap lanes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Look for the path attackers take after the first building falls: place Giant Bombs and Seeking Air Mines on the funnel, not on the edges.&lt;/li&gt;
&lt;li&gt;Leave a clear but trapped lane toward the core so troops walk into it.&lt;/li&gt;
&lt;li&gt;Spread Skeleton Traps near storages to mislead Hero targeting.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. When to rotate after triples
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Got triple-starred twice in a row? Rotate. Replays reveal the weakness fast.&lt;/li&gt;
&lt;li&gt;Check the replay: if the same side opened every time, rebuild that side instead of the whole base.&lt;/li&gt;
&lt;li&gt;Rotate after about two to three days of the same layout in busy seasons.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Check before you copy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Does it fit your wall and building levels? A layout built for max defenses can fall apart with yours.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Disclosure: I keep a free iOS layout library sorted by Town Hall. If you want a place to browse copyable bases, it is here: &lt;a href="https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_en5&amp;amp;mt=8" rel="noopener noreferrer"&gt;Base Layouts on the App Store&lt;/a&gt;. Unofficial app, not affiliated with or endorsed by Supercell.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>clashofclans</category>
      <category>gaming</category>
    </item>
    <item>
      <title>I built a free iOS app for Clash of Clans bases you can copy by Town Hall</title>
      <dc:creator>Base Layouts</dc:creator>
      <pubDate>Wed, 04 Nov 2026 02:10:18 +0000</pubDate>
      <link>https://dev.to/baselayoutschief/i-built-a-free-ios-app-for-clash-of-clans-bases-you-can-copy-by-town-hall-o2l</link>
      <guid>https://dev.to/baselayoutschief/i-built-a-free-ios-app-for-clash-of-clans-bases-you-can-copy-by-town-hall-o2l</guid>
      <description>&lt;p&gt;Looking for Clash of Clans war &amp;amp; farm bases you can actually copy — not just screenshots?&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Base Layouts: War &amp;amp; Farm Maps&lt;/strong&gt;, a free iOS app with war, farming and CWL layouts by Town Hall. Pick your TH, browse matching bases, one-tap copy into Clash of Clans. Copy counts help spot burnt layouts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filter by Town Hall&lt;/li&gt;
&lt;li&gt;War / farm / CWL modes&lt;/li&gt;
&lt;li&gt;One-tap copy&lt;/li&gt;
&lt;li&gt;Copy counts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unofficial fan app — not affiliated with Supercell. Free, no account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_en4&amp;amp;mt=8" rel="noopener noreferrer"&gt;https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_en4&amp;amp;mt=8&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>mobile</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Ich baue eine kleine iOS-App für Clash-of-Clans-Layouts — was Spieler wirklich filtern</title>
      <dc:creator>Base Layouts</dc:creator>
      <pubDate>Tue, 03 Nov 2026 12:56:04 +0000</pubDate>
      <link>https://dev.to/baselayoutschief/ich-baue-eine-kleine-ios-app-fur-clash-of-clans-layouts-was-spieler-wirklich-filtern-345f</link>
      <guid>https://dev.to/baselayoutschief/ich-baue-eine-kleine-ios-app-fur-clash-of-clans-layouts-was-spieler-wirklich-filtern-345f</guid>
      <description>&lt;p&gt;In Clash of Clans suchen Spieler fast nie nach „bester Base“. Sie filtern zuerst nach Rathaus-Level, dann nach Zweck: Krieg, Farm oder CWL. Genau in dieser Reihenfolge habe ich die UI gebaut.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Base Layouts: War &amp;amp; Farm Maps&lt;/strong&gt; ist meine eigene, kostenlose iOS-App (inoffiziell, nicht von Supercell). Was sie kann:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filter nach Town Hall — keine TH12-Basen, wenn du TH16+ spielst&lt;/li&gt;
&lt;li&gt;Getrennte Modi: Krieg / Farm / CWL&lt;/li&gt;
&lt;li&gt;Ein-Tipp-Kopie direkt ins Spiel&lt;/li&gt;
&lt;li&gt;Copy-Zähler — Layouts, die schon „verbrannt“ sind, fallen auf&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Überraschung aus den Nutzungsdaten: viele Spieler wählen Basen mit &lt;em&gt;weniger&lt;/em&gt; Kopien, nicht mit den meisten. Weniger sichtbar = schwerer vorzubereiten.&lt;/p&gt;

&lt;p&gt;App: &lt;a href="https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_de&amp;amp;mt=8" rel="noopener noreferrer"&gt;https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_de&amp;amp;mt=8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Frage an andere Maker: baut ihr Features nach dem, was laut ist, oder nach dem, was Spieler wirklich tippen?&lt;/p&gt;

</description>
      <category>ios</category>
      <category>gamedev</category>
      <category>mobile</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Como fiz um app iOS para copiar layouts de Clash of Clans com um toque</title>
      <dc:creator>Base Layouts</dc:creator>
      <pubDate>Sat, 31 Oct 2026 02:50:42 +0000</pubDate>
      <link>https://dev.to/baselayoutschief/como-fiz-um-app-ios-para-copiar-layouts-de-clash-of-clans-com-um-toque-95e</link>
      <guid>https://dev.to/baselayoutschief/como-fiz-um-app-ios-para-copiar-layouts-de-clash-of-clans-com-um-toque-95e</guid>
      <description>&lt;p&gt;Sou o desenvolvedor do &lt;strong&gt;Base Layouts: War &amp;amp; Farm Maps&lt;/strong&gt;, um app gratuito para iOS. Criei porque cansei de procurar bases de Clash of Clans em prints borrados e links quebrados em grupos e fóruns.&lt;/p&gt;

&lt;h2&gt;
  
  
  O problema
&lt;/h2&gt;

&lt;p&gt;Quem joga CoC sabe: a base certa muda tudo na guerra e no farm, mas achar um layout atualizado para o seu Centro de Vila (CV/TH) é chato. Metade dos links já expirou, e a outra metade é para outro nível.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que o app faz
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Filtro por Centro de Vila:&lt;/strong&gt; você escolhe seu TH e vê só layouts do seu nível.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guerra, farm e CWL separados:&lt;/strong&gt; cada base fica na categoria certa, então você não perde tempo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copiar com um toque:&lt;/strong&gt; toca em "Copiar" e o layout abre direto no Clash of Clans, pronto para salvar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contador de cópias:&lt;/strong&gt; mostra quais bases a galera mais está usando, um bom sinal do que funciona.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grátis e sem cadastro.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  O que aprendi
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Filtrar antes de mostrar:&lt;/strong&gt; organizar tudo por nível de TH logo no início deixou a navegação muito mais rápida do que uma lista gigante com busca.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep link é a feature principal:&lt;/strong&gt; o fluxo "ver → tocar → abrir no jogo" precisava ser imediato. Cada toque a mais fazia o usuário desistir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Números ajudam a decidir:&lt;/strong&gt; o contador de cópias virou a forma mais simples de prova social, sem precisar de login ou comentários.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Quer testar?
&lt;/h2&gt;

&lt;p&gt;Se você joga CoC, me conta qual TH você usa e que tipo de base está faltando. Feedback de dev também é muito bem-vindo.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_ptbr&amp;amp;mt=8" rel="noopener noreferrer"&gt;https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_ptbr&amp;amp;mt=8&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>gamedev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Filtrare i layout di Clash of Clans per livello del Municipio: cosa ho imparato facendo un'app iOS</title>
      <dc:creator>Base Layouts</dc:creator>
      <pubDate>Fri, 30 Oct 2026 06:44:18 +0000</pubDate>
      <link>https://dev.to/baselayoutschief/filtrare-i-layout-di-clash-of-clans-per-livello-del-municipio-cosa-ho-imparato-facendo-unapp-ios-3aef</link>
      <guid>https://dev.to/baselayoutschief/filtrare-i-layout-di-clash-of-clans-per-livello-del-municipio-cosa-ho-imparato-facendo-unapp-ios-3aef</guid>
      <description>&lt;p&gt;Sono uno sviluppatore indipendente e gioco a Clash of Clans da anni. Il problema che avevo era banale: trovare un layout adatto al mio livello di Municipio richiedeva di scorrere decine di immagini sparse tra forum e video. Così ho fatto un'app, &lt;strong&gt;Base Layouts: War &amp;amp; Farm Maps&lt;/strong&gt; (gratuita, iOS), e qui racconto un paio di scelte tecniche.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Il livello del Municipio come filtro principale
&lt;/h2&gt;

&lt;p&gt;All'inizio avevo filtri per tipo (guerra, farm, trofei, CWL) e per livello insieme, con la stessa importanza. Dai primi feedback è emerso che quasi tutti scelgono prima il livello e solo dopo il tipo. Ho spostato il livello in cima, come selezione persistente, e la lista si aggiorna subito. In SwiftUI è un semplice &lt;code&gt;@AppStorage&lt;/code&gt; letto dal filtro della lista.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Immagini leggere
&lt;/h2&gt;

&lt;p&gt;I layout sono screenshot: pesanti se caricati a piena risoluzione in una griglia. Genero miniature più piccole per la lista e carico l'immagine completa solo nella schermata di dettaglio. Lo scorrimento è diventato molto più fluido sui telefoni più vecchi.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Copiare il layout nel gioco
&lt;/h2&gt;

&lt;p&gt;L'azione più usata è "copia nel gioco". L'ho resa un pulsante grande in basso nella schermata di dettaglio, invece di nasconderla in un menu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cosa sto valutando
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;note per ogni layout (dove mettere le trappole, cosa cambiare dopo un attacco)&lt;/li&gt;
&lt;li&gt;preferiti sincronizzati&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se giocate a CoC e volete provarla, la trovate qui (l'ho fatta io, quindi ogni critica è benvenuta): &lt;a href="https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_it&amp;amp;mt=8" rel="noopener noreferrer"&gt;https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_it&amp;amp;mt=8&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>gamedev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Как я сделал фильтр планировок Clash of Clans по уровню ратуши в SwiftUI</title>
      <dc:creator>Base Layouts</dc:creator>
      <pubDate>Thu, 29 Oct 2026 03:48:36 +0000</pubDate>
      <link>https://dev.to/baselayoutschief/kak-ia-sdielal-filtr-planirovok-clash-of-clans-po-urovniu-ratushi-v-swiftui-2274</link>
      <guid>https://dev.to/baselayoutschief/kak-ia-sdielal-filtr-planirovok-clash-of-clans-po-urovniu-ratushi-v-swiftui-2274</guid>
      <description>&lt;p&gt;Я делаю небольшое бесплатное iOS-приложение с планировками баз для Clash of Clans, и одна из первых задач была простой на вид: показать игроку только те базы, которые подходят его ратуше.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Что пошло не так в первой версии&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Сначала я хранил уровень ратуши строкой ("TH16", "TH17"). Сортировка ломалась: "TH9" оказывался после "TH17". Перешёл на &lt;code&gt;Int&lt;/code&gt; и отдельный вычисляемый заголовок для интерфейса.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;Layout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Identifiable&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;UUID&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;townHall&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Int&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Kind&lt;/span&gt; &lt;span class="c1"&gt;// war, farm, trophy&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;"TH&lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;townHall&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Фильтр без лишних перерисовок&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Фильтрую через вычисляемое свойство, а выбранную ратушу держу в &lt;code&gt;@State&lt;/code&gt;. Список перерисовывается только при смене фильтра.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;filtered&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;Layout&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;layouts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;townHall&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;selectedTH&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;selectedKind&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Что понравилось игрокам&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Больше всего отзывов было не про сами базы, а про то, что фильтр запоминает последнюю ратушу. Мелочь, сохраняю её в &lt;code&gt;@AppStorage&lt;/code&gt;, и при следующем запуске человек сразу видит свои базы.&lt;/p&gt;

&lt;p&gt;Если интересно посмотреть, как это работает вживую, приложение называется Base Layouts: War &amp;amp; Farm Maps (я разработчик): &lt;a href="https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_ru&amp;amp;mt=8" rel="noopener noreferrer"&gt;https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_ru&amp;amp;mt=8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Буду рад советам, как вы организуете фильтры в SwiftUI-списках.&lt;/p&gt;

</description>
      <category>swift</category>
      <category>ios</category>
      <category>swiftui</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Trier des plans de village Clash of Clans par niveau d'Hôtel de Ville : ce que j'ai appris en SwiftUI</title>
      <dc:creator>Base Layouts</dc:creator>
      <pubDate>Wed, 28 Oct 2026 03:15:00 +0000</pubDate>
      <link>https://dev.to/baselayoutschief/trier-des-plans-de-village-clash-of-clans-par-niveau-dhotel-de-ville-ce-que-jai-appris-en-gh0</link>
      <guid>https://dev.to/baselayoutschief/trier-des-plans-de-village-clash-of-clans-par-niveau-dhotel-de-ville-ce-que-jai-appris-en-gh0</guid>
      <description>&lt;p&gt;J'ai créé une petite app iOS gratuite qui regroupe des plans de village Clash of Clans (guerre et farm) classés par niveau d'Hôtel de Ville. Voici trois choix techniques qui m'ont fait gagner du temps.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Un seul modèle, filtré côté client
&lt;/h2&gt;

&lt;p&gt;Chaque plan a un &lt;code&gt;townHall: Int&lt;/code&gt;, un &lt;code&gt;type&lt;/code&gt; (&lt;code&gt;.war&lt;/code&gt;, &lt;code&gt;.farm&lt;/code&gt;) et un lien de copie. La liste complète est petite, donc je filtre en mémoire avec un &lt;code&gt;@State&lt;/code&gt; plutôt que de refaire une requête à chaque changement de filtre. L'interface reste instantanée.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Un sélecteur horizontal plutôt qu'un menu
&lt;/h2&gt;

&lt;p&gt;Les joueurs changent souvent de niveau d'HDV pour comparer. Un &lt;code&gt;ScrollView(.horizontal)&lt;/code&gt; avec des boutons HDV 10 à 17 marche mieux qu'un &lt;code&gt;Picker&lt;/code&gt; caché dans un menu : un seul tap, et on voit tout de suite où on en est.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Ouvrir le lien de copie directement dans le jeu
&lt;/h2&gt;

&lt;p&gt;Les liens de copie de Clash of Clans s'ouvrent avec &lt;code&gt;openURL&lt;/code&gt;. Si le jeu est installé, le plan s'ouvre directement dans l'éditeur de village. Pas besoin de capture d'écran ni de reconstruire le plan à la main.&lt;/p&gt;

&lt;p&gt;Le plus dur n'a pas été le code mais le tri des plans : vérifier que chaque plan de guerre protège bien l'HDV et que les plans de farm protègent les réserves.&lt;/p&gt;

&lt;p&gt;Divulgation : c'est mon app. Si vous voulez voir le résultat : &lt;a href="https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_fr&amp;amp;mt=8" rel="noopener noreferrer"&gt;https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_fr&amp;amp;mt=8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Des retours sur la structure SwiftUI sont les bienvenus.&lt;/p&gt;

</description>
      <category>swift</category>
      <category>ios</category>
      <category>gamedev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Filtrar diseños de aldea de Clash of Clans por nivel de Ayuntamiento en SwiftUI: 3 patrones sencillos</title>
      <dc:creator>Base Layouts</dc:creator>
      <pubDate>Fri, 23 Oct 2026 05:45:22 +0000</pubDate>
      <link>https://dev.to/baselayoutschief/filtrar-disenos-de-aldea-de-clash-of-clans-por-nivel-de-ayuntamiento-en-swiftui-3-patrones-1ooo</link>
      <guid>https://dev.to/baselayoutschief/filtrar-disenos-de-aldea-de-clash-of-clans-por-nivel-de-ayuntamiento-en-swiftui-3-patrones-1ooo</guid>
      <description>&lt;p&gt;Hola. Tengo una app gratuita para iOS que reúne diseños de aldea de Clash of Clans (guerra, farmeo y trofeos) con enlace para copiarlos al juego. Divulgación: la app es mía. En este post no quiero hablar de la app, sino de un problema que aparece en cualquier catálogo parecido: filtrar por nivel de Ayuntamiento sin que el código se complique.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Guarda el nivel como entero, no como texto
&lt;/h2&gt;

&lt;p&gt;Si guardas "TH16" como cadena, ordenar se rompe enseguida ("TH9" queda detrás de "TH17"). Con un &lt;code&gt;Int&lt;/code&gt; la ordenación es correcta y la etiqueta se genera solo en la vista.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="kt"&gt;Purpose&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;CaseIterable&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;war&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;farm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;trophy&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;BaseLayout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Identifiable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;Hashable&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;UUID&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;townHall&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Int&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;purpose&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Purpose&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Un solo struct para todo el filtro
&lt;/h2&gt;

&lt;p&gt;En lugar de varios &lt;code&gt;@State&lt;/code&gt; sueltos, un struct con todos los criterios. El botón "Limpiar filtros" pasa a ser una sola línea y es difícil olvidarse de alguno.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;LayoutFilter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Equatable&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;townHall&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;purpose&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Purpose&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;

    &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;layout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;BaseLayout&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Bool&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;townHall&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;townHall&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;townHall&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;purpose&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;layout&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;purpose&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;purpose&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Recuerda el último Ayuntamiento elegido
&lt;/h2&gt;

&lt;p&gt;Casi todos los jugadores miran solo su propio nivel. Con &lt;code&gt;@AppStorage&lt;/code&gt; la pantalla se abre directamente con su Ayuntamiento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;@AppStorage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"lastTownHall"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;lastTownHall&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¿Vosotros filtráis en el cliente o hacéis la consulta en el servidor cuando la lista crece?&lt;/p&gt;

&lt;p&gt;Por si alguien quiere ver la app: &lt;a href="https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_es&amp;amp;mt=8" rel="noopener noreferrer"&gt;https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto_es&amp;amp;mt=8&lt;/a&gt;&lt;/p&gt;

</description>
      <category>swiftui</category>
      <category>ios</category>
      <category>spanish</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Tagging 1,000+ Clash of Clans base layouts: the tiny taxonomy that made search work</title>
      <dc:creator>Base Layouts</dc:creator>
      <pubDate>Thu, 22 Oct 2026 02:48:11 +0000</pubDate>
      <link>https://dev.to/baselayoutschief/tagging-1000-clash-of-clans-base-layouts-the-tiny-taxonomy-that-made-search-work-2c86</link>
      <guid>https://dev.to/baselayoutschief/tagging-1000-clash-of-clans-base-layouts-the-tiny-taxonomy-that-made-search-work-2c86</guid>
      <description>&lt;p&gt;When I started building a free iOS library of Clash of Clans base layouts, I assumed search would be the hard part. It turned out the hard part was deciding what a "base" even &lt;em&gt;is&lt;/em&gt; in data terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three fields that mattered
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Town Hall level&lt;/strong&gt; – the single filter every player uses first. Stored as an integer, never as a string like "TH16", so ranges (14–16) are trivial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Purpose&lt;/strong&gt; – war, farm, trophy, or hybrid. Players think in goals, not in building positions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source link&lt;/strong&gt; – the in-game copy link. Everything else is metadata; this is the payload.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I dropped
&lt;/h2&gt;

&lt;p&gt;I tried tagging "anti-2-star", "anti-3-star", "ring base", "island base"… and nobody used those filters. They were opinions, not facts, and two people tagged the same base differently. I kept them as free-text notes instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Model the decision the user makes, not the object. Players decide "I need a TH16 farm base", so that's the index.&lt;/li&gt;
&lt;li&gt;Keep opinionated labels out of filters. They erode trust when they're wrong.&lt;/li&gt;
&lt;li&gt;Validate the payload. A dead copy link is worse than no entry, so links get re-checked before they ship.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Disclosure: this is my own app, &lt;strong&gt;Base Layouts: War &amp;amp; Farm Maps&lt;/strong&gt; (free, iOS). If you play Clash, you can try it here: &lt;a href="https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto2&amp;amp;mt=8" rel="noopener noreferrer"&gt;https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto2&amp;amp;mt=8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy to answer questions about the data model in the comments.&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>gamedev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>What I learned building a free iOS base-layout library for Clash of Clans</title>
      <dc:creator>Base Layouts</dc:creator>
      <pubDate>Wed, 21 Oct 2026 12:49:17 +0000</pubDate>
      <link>https://dev.to/baselayoutschief/what-i-learned-building-a-free-ios-base-layout-library-for-clash-of-clans-jh0</link>
      <guid>https://dev.to/baselayoutschief/what-i-learned-building-a-free-ios-base-layout-library-for-clash-of-clans-jh0</guid>
      <description>&lt;p&gt;I play a lot of Clash of Clans, and every Clan War League season I watched the same thing happen in my clan: people spent 20 minutes scrolling random image dumps, found a base, then rebuilt it by hand building by building. So I built a small iOS app to fix that for myself, and later shipped it for free. A few things I learned along the way:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The "copy link" is the whole product.&lt;/strong&gt; Supercell lets players share a base through an in-game link. Screenshots are nice, but a working copy link is what people actually want. Every layout in the app has one, and I check them regularly because a link that opens to the wrong Town Hall level is worse than no link at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Organise by intent, not by date.&lt;/strong&gt; Players don't search for "newest base". They search for "TH16 war base" or "TH14 farm base". I sorted everything by Town Hall level first, then by purpose (war, CWL, farming, trophy), and that one decision made the app feel useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Game updates break content.&lt;/strong&gt; Each balance patch shifts the meta. A base that held two stars last month can get flattened after a troop buff. I treat the library like a product backlog: older layouts get re-reviewed after big updates instead of piling up forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Small, honest App Store copy beats buzzwords.&lt;/strong&gt; My first description was full of marketing words. The version that converted better simply says what it does: browse layouts by Town Hall, tap, copy into the game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Talk to players where they already are.&lt;/strong&gt; Most of my early feedback came from clanmates and forum threads, not from ads. People tell you very quickly which bases are outdated.&lt;/p&gt;

&lt;p&gt;If you play Clash and want to try it, the app is &lt;strong&gt;Base Layouts: War &amp;amp; Farm Maps&lt;/strong&gt; (free, iOS). Full disclosure: I'm the developer.&lt;br&gt;
&lt;a href="https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto&amp;amp;mt=8" rel="noopener noreferrer"&gt;https://apps.apple.com/app/apple-store/id6804564319?pt=2720803&amp;amp;ct=devto&amp;amp;mt=8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy to answer questions about the build or about keeping game-content apps up to date.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ios</category>
      <category>gamedev</category>
      <category>swift</category>
    </item>
  </channel>
</rss>
