├── .github └── workflows │ ├── build.yml │ └── updateTwitterList.yml ├── .gitignore ├── Mintfile ├── README.md ├── TwitterList.md ├── content └── blogs.json ├── gatsby-browser.js ├── gatsby-config.js ├── gatsby-node.js ├── gatsby-ssr.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── src ├── components │ ├── blogPost.js │ ├── footer.js │ ├── listPaging.js │ ├── navbar.js │ ├── seo.js │ └── stats.js ├── images │ └── icon.png ├── markdown-pages │ └── about.md ├── pages │ ├── 404.js │ ├── about.js │ └── index.js └── styles │ └── global.css ├── static └── logo.png └── tailwind.config.js /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Aggregate and Deploy 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | # Runs "At minute 0 past every 2nd hour." (see https://crontab.guru) 7 | - cron: '0 */2 * * *' 8 | 9 | jobs: 10 | build: 11 | 12 | runs-on: macos-13 13 | 14 | steps: 15 | - uses: actions/checkout@v4 16 | - uses: actions/setup-node@v3 17 | with: 18 | node-version: 16 19 | - name: Cache/Restore Mint packages 20 | id: mint-cache 21 | uses: actions/cache@v4 22 | with: 23 | path: ${{ github.workspace }}/mint 24 | key: ${{ runner.os }}-mint-${{ hashFiles('**/Mintfile') }} 25 | restore-keys: ${{ runner.os }}-mint- 26 | - name: Install package manager "Mint" to install and run Swift command line tool packages 27 | run: | 28 | brew upgrade mint || brew install mint || true 29 | - name: Install command line tool (if not yet cached) 30 | if: steps.mint-cache.outputs.cache-hit != 'true' 31 | run: mint bootstrap 32 | - name: Run command line tool 33 | run: mint run --silent OsmiumAtlas > blogs.json 34 | env: 35 | DEVELOPER_DIR: /Applications/Xcode_15.2.app/Contents/Developer 36 | - name: Copy blogs.json to content folder 37 | run: cp blogs.json content/ 38 | - uses: actions/upload-artifact@v4 39 | with: 40 | name: blogs.json 41 | path: content/blogs.json 42 | - name: Cache node modules 43 | uses: actions/cache@v4 44 | with: 45 | # npm cache files are stored in `~/.npm` on Linux/macOS 46 | path: ~/.npm 47 | key: ${{ runner.os }}-build-cache-node-modules-${{ hashFiles('**/package-lock.json') }} 48 | restore-keys: | 49 | ${{ runner.os }}-build-cache-node-modules- 50 | ${{ runner.os }}-build- 51 | ${{ runner.os }}- 52 | - run: npm ci 53 | - name: Build website 54 | run: npm run build 55 | - name: Push website to gh-pages 56 | run: | 57 | git config --global user.email "${GITHUB_ACTOR}" 58 | git config --global user.name "${GITHUB_ACTOR}@users.noreply.github.com" 59 | git clone "https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" out 60 | cd out 61 | git checkout gh-pages 62 | git rm -rf . 63 | cd .. 64 | cp -a public/. out/. 65 | cd out 66 | git add -A 67 | git commit -m "Automated deployment to GitHub Pages: ${GITHUB_SHA}" --allow-empty 68 | git push origin gh-pages 69 | env: 70 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 71 | -------------------------------------------------------------------------------- /.github/workflows/updateTwitterList.yml: -------------------------------------------------------------------------------- 1 | name: Update Twitter List 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | # Runs "At 00:00 on Monday." (see https://crontab.guru) 7 | - cron: '0 0 * * 1' 8 | 9 | jobs: 10 | build: 11 | 12 | runs-on: macos-latest 13 | 14 | steps: 15 | - uses: actions/checkout@v2 16 | - name: Cache/Restore Mint packages 17 | id: mint-cache 18 | uses: actions/cache@v2 19 | with: 20 | path: ${{ github.workspace }}/mint 21 | key: ${{ runner.os }}-mint-${{ hashFiles('**/Mintfile') }} 22 | restore-keys: ${{ runner.os }}-mint- 23 | - name: Install package manager "Mint" to install and run Swift command line tool packages 24 | run: | 25 | brew upgrade mint || brew install mint || true 26 | - name: Install command line tool (if not yet cached) 27 | if: steps.mint-cache.outputs.cache-hit != 'true' 28 | run: mint bootstrap 29 | - name: Run command line tool 30 | run: mint run --silent OsmiumAtlas update-twitterlist ${{ secrets.CONSUMERKEY }} ${{ secrets.CONSUMERSECRET }} ${{ secrets.OAUTHTOKEN }} ${{ secrets.OAUTHTOKENSECRET }} --debug 31 | env: 32 | DEVELOPER_DIR: /Applications/Xcode_13.2.1.app/Contents/Developer 33 | - name: Cache node modules 34 | uses: actions/cache@v2 35 | with: 36 | # npm cache files are stored in `~/.npm` on Linux/macOS 37 | path: ~/.npm 38 | key: ${{ runner.os }}-build-cache-node-modules-${{ hashFiles('**/package-lock.json') }} 39 | restore-keys: | 40 | ${{ runner.os }}-build-cache-node-modules- 41 | ${{ runner.os }}-build- 42 | ${{ runner.os }}- 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | .cache/ 6 | 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | public 14 | 15 | # misc 16 | .DS_Store 17 | .env.local 18 | .env.development.local 19 | .env.test.local 20 | .env.production.local 21 | 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | -------------------------------------------------------------------------------- /Mintfile: -------------------------------------------------------------------------------- 1 | MarcoEidinger/OsmiumAtlas@1.1.7 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Gatsby 4 | 5 |

6 |

7 | The slightly different feed aggregator powered by the iOS Dev Directory 8 | 9 | 10 |

11 | 12 | Screen Shot of iosdevupdates.com on 2022-01-09 at 7:16:53 AM PST 13 | 14 | ## About 15 | 16 | **Each blog, written in the English language, will be listed only once with its most recent article.** 17 | 18 | This mechanism keeps the list relatively small as not all blog posts for all blogs are shown. It allows the curious person to see which blogs published their last article when. This hopefully makes it more likely that non-professional blogs (i.e. without full time commitment and publishing every day) can be discovered as those are not buried at the very end of the list. 19 | 20 | ## Technical details 21 | 22 | I use [GatsbyJS](https://www.gatsbyjs.com/) to generate this static site. 23 | 24 | I use [GitHub Pages](https://pages.github.com/) to host this static site for free. 25 | 26 | I use [my very own command-line tool](https://github.com/MarcoEidinger/OsmiumAtlas), written with Swift, to get the latest posts from blogs listed on the iOS Dev Directory. 27 | 28 | ## Local Testing 29 | 30 | Run the following command in your terminal. 31 | 32 | ```shell 33 | npm run develop 34 | ``` 35 | 36 | The site is now running at http://localhost:8000! 37 | 38 | Edit `src/pages/index.js` and see updates in real-time! 39 | -------------------------------------------------------------------------------- /TwitterList.md: -------------------------------------------------------------------------------- 1 | # Twitter List "Active iOS Dev Bloggers" 2 | 3 | Find and follow the most [Active iOS Dev Bloggers](https://twitter.com/i/lists/1490025783963754502) on Twitter with https://iosdevupdates.com 4 | 5 | https://user-images.githubusercontent.com/4176826/153654502-e513c5e5-d0dd-45db-b0de-911e55ec0f7b.mov 6 | 7 | ## How to become a member? 8 | 9 | You are eligible to be added if 10 | 11 | - you [registered](https://iosdevdirectory.com/contributing/) your blog in the iOS Dev Directory 12 | - as an *English iOS development blog* 13 | - which does have a valid `feed_url` and `twitter_url` 14 | - **you published a blog post recently** 15 | 16 | ## Who to contact to be added? 17 | 18 | No action needed from your side :) 19 | 20 | Your Twitter account gets automatically added if you belong to the most recent 75 people who published a blog post since the *Update Twitter List* workflow started (see details below.) 21 | 22 | ## When will members be updated? 23 | 24 | Every Monday a [GitHub workflow](https://github.com/MarcoEidinger/iosdevupdates/actions/workflows/updateTwitterList.yml) will automatically add or remove members from the Twitter list based on the criteria's listed above. 25 | 26 | > The Twitter list is intentionally limited to up to 75 members. 27 | 28 | ## How to become a subscriber? 29 | 30 | Click the "Follow" button for this Twitter list :) 31 | -------------------------------------------------------------------------------- /content/blogs.json: -------------------------------------------------------------------------------- 1 | {"sites":[{"author":"Rudrank Riyam","title":"Rudrank's Blog","site_url":"https://rudrank.blog","feed_url":"https://rudrank.blog/feed.xml","most_recent_article":{"title":"Hosting a Jekyll Theme on GitHub Pages","url":"https://rudrank.blog/hosting-jekyll-theme-on-github-pages","published_date":"01/06/2022"}},{"author":"Marco Eidinger","title":"Marco Eidinger’s Blog (Swifty Tech)","site_url":"https://blog.eidinger.info/","feed_url":"https://blog.eidinger.info/rss.xml","most_recent_article":{"title":"Visualize your keystrokes on screenshots or videos","url":"https://blog.eidinger.info/visualize-your-keystrokes-on-screenshots-or-videos","published_date":"01/06/2022"}},{"author":"Artur Gruchała","title":"Artur Gruchała's Blog","site_url":"https://arturgruchala.com/","feed_url":"https://arturgruchala.com/rss/","most_recent_article":{"title":"RxSwift course - flatMap, flatMapLatest and async tasks","url":"https://arturgruchala.com/rxswift-course-flat-map/","published_date":"01/06/2022"}},{"author":"Joseph Heck","title":"Rhonabwy","site_url":"https://rhonabwy.com/","feed_url":"https://rhonabwy.com/feed/","most_recent_article":{"title":"API Design decisions behind Lindenmayer in Swift","url":"https://rhonabwy.com/2022/01/05/api-design-decisions-behind-lindenmayer-in-swift/","published_date":"01/05/2022"}},{"author":"Michael Tsai","title":"Michael Tsai’s Blog","site_url":"https://mjtsai.com/blog","feed_url":"https://mjtsai.com/blog/feed/","most_recent_article":{"title":"Wordle","url":"https://mjtsai.com/blog/2022/01/05/wordle/","published_date":"01/05/2022"}},{"author":"John Sundell","title":"Swift by Sundell","site_url":"https://www.swiftbysundell.com/","feed_url":"https://www.swiftbysundell.com/posts?format=RSS","most_recent_article":{"title":"Creating Combine-compatible versions of async/await-based APIs","url":"https://www.swiftbysundell.com/articles/creating-combine-compatible-versions-of-async-await-apis","published_date":"01/05/2022"}},{"author":"Adam Rush","title":"SwiftlyRush - Build apps using Swift","site_url":"https://swiftlyrush.com","feed_url":"https://www.swiftlyrush.com/feed/","most_recent_article":{"title":"MetricKit – Getting Started","url":"https://www.swiftlyrush.com/metrickit-getting-started/","published_date":"01/05/2022"}},{"author":"Graham Lee","title":"SICPERS","site_url":"http://www.sicpers.info","feed_url":"http://www.sicpers.info/feed/","most_recent_article":{"title":"On the glorification of ignorance","url":"https://www.sicpers.info/2022/01/on-the-glorification-of-ignorance/","published_date":"01/05/2022"}},{"author":"Leonardo Pugliese","title":"Holy Swift","site_url":"https://holyswift.app","feed_url":"https://holyswift.app/rss.xml","most_recent_article":{"title":"Odd Even Linked List problem in Swift","url":"https://holyswift.app/odd-even-linked-list-problem-in-swift","published_date":"01/04/2022"}},{"author":"Matthew Waller","title":"Cephalopod Studio","site_url":"https://www.cephalopod.studio/blog","feed_url":"https://www.cephalopod.studio/blog?format=rss","most_recent_article":{"title":"Lessons from Developing an App on the iPad in Swift Playgrounds from Start to Finish (Including Publishing on the App Store)","url":"https://www.cephalopod.studio/blog/lessons-from-developing-an-app-on-the-ipad-from-start-to-finish-on-the-app-store","published_date":"01/04/2022"}},{"author":"Joe Masilotti","title":"Joe Masilotti’s Blog","site_url":"http://masilotti.com","feed_url":"http://masilotti.com/feed.xml","most_recent_article":{"title":"How I took my SaaS from idea to sold in 14 months","url":"https://masilotti.com/idea-to-sold-in-14-months","published_date":"01/04/2022"}},{"author":"Guilherme Rambo","title":"Guilherme Rambo’s Blog","site_url":"https://rambo.codes","feed_url":"https://rambo.codes/feed.rss","most_recent_article":{"title":"Encoding and decoding references to other types with Codable","url":"https://rambo.codes/posts/2022-01-04-encoding-and-decoding-references-to-other-types-with-codable","published_date":"01/04/2022"}},{"author":"Jason Brennan","title":"Speed of Light","site_url":"http://nearthespeedoflight.com","feed_url":"http://nearthespeedoflight.com/index.xml","most_recent_article":{"title":"1000 Books, Year 7","url":"tag:nearthespeedoflight.com,2022-01-04:/article/2022_01_04_1000_books__year_7","published_date":"01/04/2022"}},{"author":"Daniel Steinberg","title":"Dim Sum Thinking","site_url":"https://dimsumthinking.com","feed_url":"https://dimsumthinking.com/rss.xml","most_recent_article":{"title":"Newsletter 93 - Driving Lessons","url":"https://mailchi.mp/bf7ad528689a/93-driving-lessons","published_date":"01/04/2022"}},{"author":"Natascha Fadeeva","title":"Tanaschita","site_url":"https://tanaschita.com/","feed_url":"https://tanaschita.com/rss.xml","most_recent_article":{"title":"Public-key cryptography with CryptoKit for iOS","url":"https://tanaschita.com/20220105-public-key-cryptography-with-cryptokit","published_date":"01/04/2022"}},{"author":"Brent Simmons","title":"Inessential","site_url":"http://inessential.com/","feed_url":"http://inessential.com/xml/rss.xml","most_recent_article":{"title":"1942 Letter to My Grandfather from His Father","url":"https://inessential.com/2022/01/04/1942_letter_to_my_grandfather_from_his_father","published_date":"01/04/2022"}},{"author":"Alexander Grebenyuk","title":"Alexander Grebenyuk’s Blog","site_url":"https://kean.blog/","feed_url":"https://kean.blog/feed.xml","most_recent_article":{"title":"Introducing CreateAPI","url":"https://kean.blog/post/create-api","published_date":"01/04/2022"}},{"author":"Antoine van der Lee","title":"SwiftLee","site_url":"https://www.avanderlee.com","feed_url":"https://www.avanderlee.com/feed/","most_recent_article":{"title":"Writing Swift Articles: Tips to become a better writer","url":"https://www.avanderlee.com/optimization/writing-swift-articles/","published_date":"01/04/2022"}},{"author":"Ufuk Canli","title":"Ufuk's Blog","site_url":"https://ufukcanli.com","feed_url":"https://ufukcanli.com/rss.xml","most_recent_article":{"title":"Let me introduce you to the Stack data structure","url":"https://ufukcanli.com/let-me-introduce-you-to-the-stack-data-structure","published_date":"01/04/2022"}},{"author":"Oliver Binns","title":"Oliver Binns’ Blog","site_url":"https://www.oliverbinns.co.uk/index.php/blog","feed_url":"https://www.oliverbinns.co.uk/index.php/category/ios/feed","most_recent_article":{"title":"Some thoughts on Xcode Cloud","url":"https://www.oliverbinns.co.uk/2022/01/04/some-thoughts-on-xcode-cloud/","published_date":"01/03/2022"}},{"author":"David Sinclair","title":"David Sinclair’s Blog","site_url":"http://www.dejal.com/blog/","feed_url":"http://www.dejal.com/blog/feed","most_recent_article":{"title":"Dejal year in review: 2021","url":"https://dejal.com/blog/2021/12/dejal-year-review-2021","published_date":"01/03/2022"}},{"author":"David Piper","title":"David Piper on Medium","site_url":"https://medium.com/@HeyDaveTheDev","feed_url":"https://medium.com/feed/@HeyDaveTheDev","most_recent_article":{"title":"Getting Started With Audio Graphs in Swift and iOS 15","url":"https://betterprogramming.pub/getting-started-with-audio-graphs-in-swift-7502979494f6?source=rss-e4ec23bc86d1------2","published_date":"01/03/2022"}},{"author":"Bruno Rocha","title":"Swift Rocks","site_url":"https://swiftrocks.com/","feed_url":"https://swiftrocks.com/rss.xml","most_recent_article":{"title":"Future of SwiftRocks","url":"https://swiftrocks.com/future-of-swiftrocks","published_date":"01/03/2022"}},{"author":"Daniele Margutti","title":"OffNotes.org","site_url":"https://offnotes.org","feed_url":"https://www.offnotes.org/rss/","most_recent_article":{"title":"The Economy of Tech Debt","url":"https://www.offnotes.org/the-economy-of-tech-debt/","published_date":"01/03/2022"}},{"author":"Donny Wals","title":"Donny Wals’ Blog","site_url":"https://www.donnywals.com","feed_url":"https://www.donnywals.com/feed/","most_recent_article":{"title":"Five things iOS developers should focus on in 2022","url":"https://www.donnywals.com/five-things-ios-developers-should-focus-on-in-2022/","published_date":"01/03/2022"}},{"author":"Graham Lee and Adrian Kosmaczewski","title":"De Programmatica Ipsum","site_url":"https://deprogrammaticaipsum.com/","feed_url":"https://deprogrammaticaipsum.com/feed/","most_recent_article":{"title":"Issue #40: Skeuomorphism","url":"https://deprogrammaticaipsum.com/issue-40-skeuomorphism/","published_date":"01/02/2022"}},{"author":"Jordan Morgan","title":"Swiftjective-C","site_url":"https://swiftjectivec.com/","feed_url":"https://www.swiftjectivec.com/feed.xml","most_recent_article":{"title":"Swift Playgrounds 4","url":"https://swiftjectivec.com/Swift-Playgrounds","published_date":"01/02/2022"}},{"author":"Jeff Johnson","title":"Jeff Johnson’s Blog","site_url":"http://lapcatsoftware.com/articles/index.html","feed_url":"http://lapcatsoftware.com/articles/atom.xml","most_recent_article":{"title":"Siri may phone home with Ask Siri disabled","url":"https://lapcatsoftware.com/articles/siri.html","published_date":"01/02/2022"}},{"author":"Chris Wu","title":"Chris Wu's Blog","site_url":"http://chriswu.com/categories/development/","feed_url":"http://chriswu.com/index.xml","most_recent_article":{"title":"Using AppStorage with complex objects and SwiftUI Pickers","url":"http://chriswu.com/posts/swiftui/appstoragepicker/","published_date":"01/02/2022"}},{"author":"Joohee Kim","title":"Joohee Kim's Blog","site_url":"https://imjhk03.github.io","feed_url":"https://imjhk03.github.io/feed.xml","most_recent_article":{"title":"SwiftUI에서 NavigationView 사용하기","url":"https://imjhk03.github.io/posts/swiftui-navigationview/","published_date":"01/02/2022"}},{"author":"Felizia Bernutz","title":"Felizia Bernutz's Blog","site_url":"https://fbernutz.github.io/ios/","feed_url":"https://fbernutz.github.io/feed.rss","most_recent_article":{"title":"Thoughts about 2021","url":"https://fbernutz.github.io/posts/2022-01-01-thoughts-about-2021","published_date":"01/01/2022"}},{"author":"Andrea Antonioni","title":"Andrea Antonioni’s Blog","site_url":"https://aantonioni.me/","feed_url":"https://aantonioni.me/feed/","most_recent_article":{"title":"My 2021 Wrapped","url":"https://aantonioni.me/2022/01/01/my-2021-wrapped/","published_date":"01/01/2022"}},{"author":"Ash Furrow","title":"Ash Furrow’s Blog","site_url":"https://ashfurrow.com/","feed_url":"https://feed.ashfurrow.com/feed.xml","most_recent_article":{"title":"2021: My Year of Closed Rings","url":"https://ashfurrow.com/blog/2021-my-year-of-closed-rings/","published_date":"12/31/2021"}},{"author":"Jesse Squires","title":"Jesse Squires’ Blog","site_url":"https://www.jessesquires.com","feed_url":"https://www.jessesquires.com/feed.xml","most_recent_article":{"title":"Top posts of 2021","url":"https://www.jessesquires.com/blog/2021/12/31/top-posts-of-2021/","published_date":"12/31/2021"}},{"author":"Tim Oliver","title":"Tim Oliver’s Blog","site_url":"http://timoliver.blog","feed_url":"https://timoliver.blog/feed/","most_recent_article":{"title":"2021. Slowly. But surely.","url":"https://timoliver.blog/2021/12/31/2021-slowly-but-surely/","published_date":"12/31/2021"}},{"author":"Jordan Rose","title":"dealloc","site_url":"https://belkadan.com/blog/","feed_url":"https://belkadan.com/blog/atom","most_recent_article":{"title":"Swift Regrets: Wrap-up","url":"tag:belkadan.com,2007:dealloc/2021/12/Swift-Regrets-Wrap-up/","published_date":"12/31/2021"}},{"author":"Mark Thormann","title":"eMpTy Theory","site_url":"https://emptytheory.com","feed_url":"https://emptytheory.com/feed/","most_recent_article":{"title":"Working Around Xcode and Continuous Integration Issues on Apple Silicon","url":"https://emptytheory.com/2021/12/30/working-around-xcode-and-continuous-integration-issues-on-apple-silicon/","published_date":"12/30/2021"}},{"author":"Cesare Forelli","title":"cdf1982 blog","site_url":"https://cdf1982.com/blog","feed_url":"https://cdf1982.com/feed.xml","most_recent_article":{"title":"Best of 2021","url":"https://cdf1982.com/2021/12/31/best_of_2021","published_date":"12/30/2021"}},{"author":"Bas Broek","title":"Bas’ Blog","site_url":"https://basthomas.github.io","feed_url":"https://basthomas.github.io/feed.xml","most_recent_article":{"title":"Getting Started With Accessibility: Dynamic Type","url":"https://www.basbroek.nl/getting-started-dynamic-type","published_date":"12/30/2021"}},{"author":"Bryan Irace","title":"Bryan Irace’s Blog","site_url":"http://irace.me/","feed_url":"http://irace.me/feed.xml","most_recent_article":{"title":"The read-write web in 2021, or “A Young Man’s Illustrated Primer”","url":"http://irace.me/the-read-write-web-in-2021","published_date":"12/30/2021"}},{"author":"Geoff Hackworth","title":"Geoff Hackworth on Medium","site_url":"https://medium.com/@hacknicity","feed_url":"https://medium.com/feed/@hacknicity","most_recent_article":{"title":"Xcode Build Times with Custom SF Symbols","url":"https://hacknicity.medium.com/xcode-build-times-with-custom-sf-symbols-58ebdd92bc43?source=rss-4a59fa99a5c4------2","published_date":"12/29/2021"}},{"author":"Christian Tietze","title":"Christian Tietze’s Blog","site_url":"https://christiantietze.de/","feed_url":"https://christiantietze.de/feed.atom","most_recent_article":{"title":"Remote Bulk Editing Using Regexp with Emacs","url":"tag:christiantietze.de,2021-12-29:/posts/2021/12/remote-emacs-bulk-editing/","published_date":"12/29/2021"}},{"author":"Magnus Kahr Jensen","title":"magnuskahr writing code","site_url":"https://www.magnuskahr.dk","feed_url":"https://www.magnuskahr.dk/feed.rss","most_recent_article":{"title":"Cascading Environment actions in SwiftUI","url":"https://magnuskahr.dk/posts/2021/12/cascading-environment-actions-in-swiftui","published_date":"12/28/2021"}},{"author":"Helge Heß","title":"The Always Right Institute","site_url":"https://www.alwaysrightinstitute.com/","feed_url":"https://www.alwaysrightinstitute.com/feed","most_recent_article":{"title":"🐮 iOS App w/ VisualStudio Code. Or not?","url":"http://alwaysrightinstitute.github.io//tows-ios/","published_date":"12/28/2021"}},{"author":"Gualtiero Frigerio","title":"Gualtiero Frigerio’s Blog","site_url":"https://gfrigerio.com","feed_url":"https://gfrigerio.com/feed","most_recent_article":{"title":"Custom URL schemes in a WKWebView","url":"https://www.gfrigerio.com/custom-url-schemes-in-a-wkwebview/","published_date":"12/28/2021"}},{"author":"Harshil Shah","title":"Harshil Shah’s Blog","site_url":"https://harshil.net/","feed_url":"https://harshil.net/feed.xml","most_recent_article":{"title":"Solving Advent of Code 2021 in Swift","url":"https://harshil.net/blog/advent-of-code-2021","published_date":"12/28/2021"}},{"author":"JC Pastant","title":"Swift Unwrap","site_url":"https://swiftunwrap.com","feed_url":"https://swiftunwrap.com/feed.rss","most_recent_article":{"title":"State of the Art 2021","url":"https://swiftunwrap.com/article/state-of-the-art-2021","published_date":"12/27/2021"}},{"author":"Chris Eidhof","title":"Chris Eidhof’s Blog","site_url":"http://chris.eidhof.nl/","feed_url":"http://chris.eidhof.nl/index.xml","most_recent_article":{"title":"2021","url":"http://chris.eidhof.nl/post/2021","published_date":"12/27/2021"}},{"author":"Filip Němeček","title":"Filip Němeček’s Blog","site_url":"https://nemecek.be/blog/swift-and-ios","feed_url":"https://nemecek.be/blog/feed/rss","most_recent_article":{"title":"Careful when getting inspiration from popular apps","url":"https://nemecek.be/blog/137/careful-when-getting-inspiration-from-popular-apps","published_date":"12/27/2021"}},{"author":"César Vargas Casaseca","title":"César Vargas on Medium","site_url":"https://toupper.medium.com","feed_url":"https://medium.com/feed/@toupper","most_recent_article":{"title":"Convert your Swift Facades to the new async/await syntax using Continuations","url":"https://medium.com/axel-springer-tech/convert-your-swift-facades-to-the-new-async-await-syntax-using-continuations-d4a7bda4611b?source=rss-c2f877dba4d------2","published_date":"12/27/2021"}},{"author":"Nikita Lazarev-Zubov","title":"Nikita Lazarev-Zubov on Medium","site_url":"https://medium.com/@lazarevzubov","feed_url":"https://medium.com/feed/@lazarevzubov","most_recent_article":{"title":"Retriable API Calls with Modern Swift","url":"https://towardsdev.com/retriable-api-calls-with-modern-swift-202c8e9ef5bb?source=rss-63310a0d2b01------2","published_date":"12/27/2021"}},{"author":"Thomas Ricouard","title":"Thomas Ricouard on Medium","site_url":"https://medium.com/@dimillian","feed_url":"https://medium.com/feed/@dimillian","most_recent_article":{"title":"Use Task with AsyncStream and avoid retain cycle","url":"https://dimillian.medium.com/use-task-with-asyncstream-and-avoid-retain-cycle-4c92dddf30ef?source=rss-b067c9115d59------2","published_date":"12/26/2021"}},{"author":"Joel Kin, Jerry Jones","title":"Spaceman Labs Blog","site_url":"https://blog.spacemanlabs.com","feed_url":"https://blog.spacemanlabs.com/feed/","most_recent_article":{"title":"Handling Empty Lists with Realm’s Property Wrappers","url":"https://blog.spacemanlabs.com/2021/12/handling-empty-lists-with-realms-property-wrappers/","published_date":"12/23/2021"}},{"author":"Gabriel Theodoropoulos","title":"Gabriel Theodoropoulos’ Blog","site_url":"https://gtiapps.com","feed_url":"https://gtiapps.com/?feed=rss2","most_recent_article":{"title":"Embedding SwiftUI Views in Storyboard-Based macOS Apps","url":"https://serialcoder.dev/text-tutorials/macos-tutorials/embedding-swiftui-views-in-storyboard-based-macos-apps/","published_date":"12/23/2021"}},{"author":"Andre Salla","title":"Andre Salla's Blog","site_url":"https://andresalla.dev/en","feed_url":"https://andresalla.dev/en/?feed=rss2","most_recent_article":{"title":"Stop using ‘branch’ in your Podfiles!","url":"https://andresalla.com/en/stop-using-branch-in-your-podfiles/?utm_source=rss&utm_medium=rss&utm_campaign=stop-using-branch-in-your-podfiles","published_date":"12/21/2021"}},{"author":"Tjeerd in ’t Veen","title":"Swift in Depth","site_url":"https://swiftindepth.com/","feed_url":"https://swiftindepth.com/feed.xml","most_recent_article":{"title":"Supporting async/await as a module owner","url":"https://www.swiftindepth.com/articles/async-await-modules","published_date":"12/21/2021"}},{"author":"Bart Jacobs","title":"Cocoacasts","site_url":"https://cocoacasts.com/blog","feed_url":"https://cocoacasts.com/feed","most_recent_article":{"title":"Fetching Video Progress","url":"https://cocoacasts.com/building-a-modern-networking-layer-in-swift-fetching-video-progress","published_date":"12/20/2021"}},{"author":"Kamil Tustanowski","title":"Cornerbit Kamil Tustanowski's Blog","site_url":"https://cornerbit.tech/","feed_url":"https://cornerbit.tech/rss/","most_recent_article":{"title":"Detecting face capture quality using the Vision framework","url":"https://cornerbit.tech/detecting-face-capture-quality-using-the-vision-framework/","published_date":"12/20/2021"}},{"author":"Igor Kulman","title":"Igor Kulman’s Blog","site_url":"https://blog.kulman.sk","feed_url":"https://blog.kulman.sk/index.xml","most_recent_article":{"title":"Automatically merging conflicts in Xcode project files","url":"https://blog.kulman.sk/automatically-merge-xcode-project-conflicts/","published_date":"12/20/2021"}},{"author":"Majid Jabrayilov","title":"Majid’s Blog about Swift development","site_url":"https://mecid.github.io","feed_url":"https://mecid.github.io/feed.xml","most_recent_article":{"title":"SF Symbols in SwiftUI","url":"https://swiftwithmajid.com/2021/12/21/sf-symbols-in-swiftui","published_date":"12/20/2021"}},{"author":"Keith Harrison","title":"Use Your Loaf","site_url":"https://useyourloaf.com/blog/","feed_url":"https://useyourloaf.com/blog/rss.xml","most_recent_article":{"title":"Using @SceneStorage With @FetchRequest","url":"https://useyourloaf.com/blog/using-scenestorage-with-fetchrequest/","published_date":"12/20/2021"}},{"author":"Marin Todorov","title":"try Combine","site_url":"http://trycombine.com","feed_url":"http://trycombine.com/index.xml","most_recent_article":{"title":"Extending Xcode with power-ups","url":"https://trycombine.com/posts/xcode-powerups/","published_date":"12/19/2021"}},{"author":"Alexandre Colucci","title":"Timac","site_url":"https://blog.timac.org","feed_url":"https://blog.timac.org/index.xml","most_recent_article":{"title":"Apple’s use of Swift and SwiftUI in iOS 15","url":"https://blog.timac.org/2021/1219-state-of-swift-and-swiftui-ios15/","published_date":"12/19/2021"}},{"author":"Shaun Donnelly","title":"Codakuma","site_url":"https://codakuma.com/ios-blog","feed_url":"https://codakuma.com/feed.xml","most_recent_article":{"title":"2021 in review","url":"https://codakuma.com/2021-in-review","published_date":"12/18/2021"}},{"author":"Giovanni Monaco, Tiago Gomes Pereira, and Moritz Philip Recke","title":"Create with Swift","site_url":"https://www.createwithswift.com/","feed_url":"https://www.createwithswift.com/rss/","most_recent_article":{"title":"Using MapKit with SwiftUI","url":"https://www.createwithswift.com/using-mapkit-with-swiftui/","published_date":"12/17/2021"}},{"author":"Mick Floc’hlay","title":"Bootstragram","site_url":"https://bootstragram.com/tag/ios/","feed_url":"https://bootstragram.com/feed/by_tag/ios.xml","most_recent_article":{"title":"A Swift Recoverable Precondition That Can Throw","url":"https://bootstragram.com/blog/swift-precondition-that-throws","published_date":"12/16/2021"}},{"author":"Matt Hanlon","title":"The Code Hub Blog","site_url":"https://www.thecodehub.ie/news","feed_url":"https://www.thecodehub.ie/news/feed/","most_recent_article":{"title":"Swift Playgrounds 4.0: Christmas Come Early!","url":"https://www.thecodehub.ie/news/2021/12/16/swift-playgrounds-4-0-christmas-come-early/","published_date":"12/15/2021"}},{"author":"Cassius Pacheco","title":"Cassius Pacheco's Blog","site_url":"https://cassiuspacheco.com","feed_url":"https://cassiuspacheco.com/rss.xml","most_recent_article":{"title":"Flutter MVVM and Clean Architecture - Part 3: Multi-packages structure","url":"https://cassiuspacheco.com/flutter-mvvm-and-clean-architecture-part-3-multi-packages-structure","published_date":"12/15/2021"}},{"author":"Kristaps Grinbergs","title":"Kristaps Grinbergs’s Blog","site_url":"https://kristaps.me","feed_url":"https://kristaps.me/feed.rss","most_recent_article":{"title":"Solidity for Swift developers: File Structure and Functions","url":"https://kristaps.me/blog/swift-solidity-structure-functions","published_date":"12/15/2021"}},{"author":"Paul Hudson","title":"Hacking with Swift","site_url":"https://www.hackingwithswift.com/articles","feed_url":"https://www.hackingwithswift.com/articles/rss","most_recent_article":{"title":"How to build your first SwiftUI app with Swift Playgrounds","url":"https://www.hackingwithswift.com/articles/245/build-your-first-swiftui-app-with-swift-playgrounds","published_date":"12/15/2021"}},{"author":"Steve Lipton","title":"Making App Pie","site_url":"https://makeapppie.com/","feed_url":"https://makeapppie.com/feed/","most_recent_article":{"title":"Why You Don’t Draw a Straight Line to Success","url":"https://makeapppie.com/2021/12/15/why-you-dont-draw-a-straight-line-to-success/","published_date":"12/15/2021"}},{"author":"Khawer Khaliq","title":"Khawer Khaliq’s Blog","site_url":"https://khawerkhaliq.com","feed_url":"https://khawerkhaliq.com/feed/","most_recent_article":{"title":"When and how to use the Equatable and Identifiable protocols in Swift","url":"https://khawerkhaliq.com/blog/swift-equatable-identifiable/","published_date":"12/12/2021"}},{"author":"Samuel Défago","title":"Samuel Défago's Corner","site_url":"https://defagos.github.io","feed_url":"https://defagos.github.io/feed.xml","most_recent_article":{"title":"Declarative Reactive Programming with Combine","url":"/declarative_reactive_programming_with_combine","published_date":"12/12/2021"}},{"author":"Brad Root","title":"Amiantos.net","site_url":"https://amiantos.net/tags/swift/","feed_url":"https://amiantos.net/rss.xml","most_recent_article":{"title":"What I’m Up To - Week 49, 2021","url":"https://amiantos.net/wiut-2021-week-49/","published_date":"12/11/2021"}},{"author":"Chris Mash","title":"Chris Mash on Medium","site_url":"https://medium.com/@chris-mash","feed_url":"https://medium.com/feed/@chris-mash","most_recent_article":{"title":"Goodbye MFMailComposeViewController?","url":"https://chris-mash.medium.com/goodbye-mfmailcomposeviewcontroller-4d9778e8d862?source=rss-ea8ebe82ceec------2","published_date":"12/11/2021"}},{"author":"David Yang","title":"David Yang’s Blog’","site_url":"https://david.y4ng.fr/","feed_url":"https://david.y4ng.fr/atom.xml","most_recent_article":{"title":"Implementing and testing Universal Links","url":"https://david.y4ng.fr/implementing-and-testing-universal-links","published_date":"12/10/2021"}},{"author":"Thibault Wittemberg","title":"Warp your mobile development","site_url":"https://twittemb.github.io","feed_url":"https://twittemb.github.io/feed.rss","most_recent_article":{"title":"Equatable Errors in Swift","url":"http://blog.warpfactor.io/posts/2021-12-10-EquatableError","published_date":"12/10/2021"}},{"author":"Mike Zornek","title":"Mike Zornek Personal Blog","site_url":"http://mikezornek.com/","feed_url":"http://mikezornek.com/posts/index.xml","most_recent_article":{"title":"Filters Shaping My Next Project Idea","url":"http://mikezornek.com/posts/2021/12/next-project-filters/","published_date":"12/09/2021"}},{"author":"An Tran","title":"AnSwift - Swift Dev Journey","site_url":"https://antran.app/","feed_url":"https://antran.app/rss/swift.xml","most_recent_article":{"title":"How to install the latest ruby version on M1/M1 Pro/M1 Max Macs?","url":"https://antran.app/2021/m1_mac_part2/","published_date":"12/07/2021"}},{"author":"Aymen Rebouh","title":"Aymen Rebouh on Medium","site_url":"https://medium.com/@aymen.rebouh","feed_url":"https://medium.com/feed/@aymen.rebouh","most_recent_article":{"title":"From an iOS engineer to a Backend Engineer","url":"https://medium.com/eureka-engineering/from-an-ios-engineer-to-a-backend-engineer-bc52d2c79af1?source=rss-82ceb7481588------2","published_date":"12/06/2021"}},{"author":"Oleksii Nezhyborets","title":"Digging Developer blog","site_url":"https://diggingdeveloper.blog","feed_url":"https://diggingdeveloper.blog/?feed=rss","most_recent_article":{"title":"Your Core Data fetches may return unexpected results, or why you should use Query Generations","url":"https://diggingdeveloper.blog/2021/12/06/nsmanagedobjectcontexts-perform_-is-not-consistent-by-default-or-why-you-should-use-query-generations/","published_date":"12/06/2021"}},{"author":"The WWDC Community","title":"WWDC Notes","site_url":"https://wwdcnotes.com","feed_url":"https://wwdcnotes.com/feed.rss","most_recent_article":{"title":"Advanced ScrollView Techniques","url":"https://www.wwdcnotes.com/notes/wwdc11/104","published_date":"12/05/2021"}},{"author":"Khoa Pham","title":"onmyway133","site_url":"https://onmyway133.com/","feed_url":"https://onmyway133.com/index.xml","most_recent_article":{"title":"How to disable with ButtonStyle in SwiftUI","url":"https://onmyway133.com/posts/how-to-disable-with-buttonstyle-in-swiftui/","published_date":"12/04/2021"}},{"author":"Benoit Pasquier","title":"Benoit Pasquier’s Blog","site_url":"https://benoitpasquier.com/","feed_url":"https://benoitpasquier.com/index.xml","most_recent_article":{"title":"Flutter and fastlane, how to setup an iOS continuous delivery solution","url":"https://benoitpasquier.com/fastlane-flutter-ios/","published_date":"12/04/2021"}},{"author":"Rony Fadel","title":"Rony Fadel’s Blog","site_url":"https://www.fadel.io/blog","feed_url":"https://www.fadel.io/blog/index.xml","most_recent_article":{"title":"30 tips to make you a better iOS developer","url":"https://www.fadel.io/blog/posts/30-tips-to-make-you-a-better-ios-developer/","published_date":"12/03/2021"}},{"author":"Adam Fowler","title":"Optical Aberration","site_url":"https://opticalaberration.com","feed_url":"https://opticalaberration.com/feed.xml","most_recent_article":{"title":"Building a HTTP Proxy with Swift","url":"https://opticalaberration.com/2021/12/proxy-server.html","published_date":"12/03/2021"}},{"author":"Noah Martin","title":"Noah Martin on Medium","site_url":"https://medium.com/@noahm444","feed_url":"https://medium.com/feed/@noahm444","most_recent_article":{"title":"The Surprising Cost of Protocol Conformances in Swift","url":"https://medium.com/geekculture/the-surprising-cost-of-protocol-conformances-in-swift-dfa5db15ac0c?source=rss-26887d1ff012------2","published_date":"12/03/2021"}},{"author":"Michael Sprindzuikate","title":"michael s.","site_url":"https://michaelsprindzuikate.github.io","feed_url":"https://michaelsprindzuikate.github.io/index.xml","most_recent_article":{"title":"A Festive Development","url":"https://michaelsprindzuikate.github.io/posts/a-festive-development/","published_date":"12/01/2021"}},{"author":"Kornel Miszczak","title":"Smash Swift","site_url":"https://smashswift.com/","feed_url":"https://smashswift.com/feed/","most_recent_article":{"title":"Difference Between Try, Try? and Try!","url":"https://smashswift.com/difference-between-try-try-and-try/","published_date":"11/28/2021"}},{"author":"Srđan Stanić","title":"Srđan's notes on programming","site_url":"https://dev.srdanstanic.com/","feed_url":"https://dev.srdanstanic.com/feed-ios.xml","most_recent_article":{"title":"[iOS] Firebase Crashlytics/Analytics, GDPR, and user data management","url":"http://dev.srdanstanic.com/firebase-crashlytics-analytics-gdpr-user-data-management/","published_date":"11/27/2021"}},{"author":"Peter Friese","title":"Peter Friese’s Blog","site_url":"https://peterfriese.dev","feed_url":"https://peterfriese.dev/rss.xml","most_recent_article":{"title":"Confirmation Dialogs in SwiftUI","url":"https://peterfriese.dev/swiftui-confirmation-dialogs/","published_date":"11/26/2021"}},{"author":"Artem Novichkov","title":"Artem Novichkov’s Blog","site_url":"https://artemnovichkov.com","feed_url":"https://artemnovichkov.com/feed.xml","most_recent_article":{"title":"Async/await for existing iOS apps","url":"https://artemnovichkov.com/blog/async-await-offline","published_date":"11/25/2021"}},{"author":"Cookpad","title":"Source Diving","site_url":"https://sourcediving.com/tagged/ios","feed_url":"https://sourcediving.com/feed/tagged/ios","most_recent_article":{"title":"Solving Mysterious Logout Issues on iOS 15","url":"https://sourcediving.com/solving-mysterious-logout-issues-on-ios-15-8b818c089466?source=rss----217db81c7a01--ios","published_date":"11/25/2021"}},{"author":"Stuart Breckenridge","title":"Stuart Breckenridge’s Blog","site_url":"https://mynameisstuart.com/blog/","feed_url":"https://mynameisstuart.com/blog/rss/","most_recent_article":{"title":"Singapore Buses 1.1 Released","url":"tag:mynameisstuart.com,2021:7d738f137419f1ebfd1330e4c2422a99","published_date":"11/24/2021"}},{"author":"Mark Szymczyk","title":"Swift Dev Journal","site_url":"https://swiftdevjournal.com/","feed_url":"https://swiftdevjournal.com/feed","most_recent_article":{"title":"Edit Swift Files Outside Xcode","url":"https://www.swiftdevjournal.com/edit-swift-files-outside-xcode-2/","published_date":"11/24/2021"}},{"author":"Daniel Jalkut","title":"Indie Stack","site_url":"http://indiestack.com","feed_url":"http://indiestack.com/feed/","most_recent_article":{"title":"Xcode’s Environmental Pollution","url":"https://indiestack.com/2021/11/xcodes-environmental-pollution/","published_date":"11/22/2021"}},{"author":"David Smith","title":"David Smith’s Blog’","site_url":"http://david-smith.org/","feed_url":"https://david-smith.org/atom.xml","most_recent_article":{"title":"Wearing an Apple Watch in Glencoe","url":"http://david-smith.org/blog/2021/11/22/glencoe","published_date":"11/22/2021"}},{"author":"Batikan SOSUN","title":"Batikan’s iOS Blog","site_url":"https://medium.com/@batikansosun","feed_url":"https://medium.com/feed/@batikansosun","most_recent_article":{"title":"Xcode Cloud: Automated Workflows","url":"https://blog.devgenius.io/xcode-cloud-automated-workflows-730277773c37?source=rss-a0e19a28a49a------2","published_date":"11/22/2021"}},{"author":"Ralf Ebert","title":"Ralf Ebert's Blog","site_url":"https://www.ralfebert.com/blog/","feed_url":"https://www.ralfebert.com/blog/index.rss","most_recent_article":{"title":"AsyncView – Asynchronous loading operations in SwiftUI","url":"https://www.ralfebert.com/ios-app-development/swiftui/asyncview/","published_date":"11/16/2021"}},{"author":"Kin + Carta Create Engineers","title":"Kin + Carta Create Medium (iOS)","site_url":"https://medium.com/kinandcartacreated/tagged/ios","feed_url":"https://medium.com/feed/kinandcartacreated/tagged/ios","most_recent_article":{"title":"Building a Blockchain in Swift (Part 2)","url":"https://medium.com/kinandcartacreated/building-a-blockchain-in-swift-part-2-aa701d52955c?source=rss----22c4451bb0c1--ios","published_date":"11/16/2021"}},{"author":"Federico Zanetello","title":"Five Stars","site_url":"https://www.fivestars.blog/","feed_url":"https://www.fivestars.blog/feed.xml","most_recent_article":{"title":"What's new in Xcode 13.2 beta 2","url":"https://www.fivestars.blog/articles/xcode-13-2-beta-2","published_date":"11/16/2021"}},{"author":"Lee Kah Seng","title":"Swift Senpai","site_url":"https://swiftsenpai.com/","feed_url":"https://swiftsenpai.com/feed/","most_recent_article":{"title":"How to Handle Errors in Swift Task Groups","url":"https://swiftsenpai.com/swift/task-groups-error-handling/?utm_source=rss&utm_medium=rss&utm_campaign=task-groups-error-handling","published_date":"11/16/2021"}},{"author":"Junda Ong","title":"samwize’s Blog","site_url":"https://samwize.com","feed_url":"https://samwize.com/feed.xml","most_recent_article":{"title":"PITFALL: App Tracking Transparency prompt not showing","url":"https://samwize.com/2021/11/16/pitfall-app-tracking-transparency-prompt-not-showing/","published_date":"11/15/2021"}},{"author":"Oleg Dreyman","title":"Oleg Dreyman’s Blog","site_url":"https://olegdreyman.medium.com","feed_url":"https://medium.com/feed/@olegdreyman","most_recent_article":{"title":"Animator: easy trick to make UIKit animations reusable","url":"https://medium.com/nice-photon-ios/animator-easy-trick-to-make-uikit-animations-reusable-2d10713ca3a?source=rss-7872af0bbed1------2","published_date":"11/14/2021"}},{"author":"Bruce Evans","title":"Brevans.io","site_url":"https://brevans.io/","feed_url":"https://brevans.io/index.php/feed/","most_recent_article":{"title":"DevDay 2021","url":"https://brevans.io/index.php/2021/11/14/devday-2021/","published_date":"11/13/2021"}},{"author":"Brian Donohue","title":"Makin’ that Instapaper","site_url":"http://bthdonohue.com","feed_url":"http://bthdonohue.com/feed.xml","most_recent_article":{"title":"ethTip: Open Source Plugin for ETH Tipping","url":"/2021/11/14/ethtip","published_date":"11/13/2021"}},{"author":"Patrick Wardle","title":"Objective-See’s Blog","site_url":"https://www.objective-see.com/blog.html","feed_url":"https://objective-see.com/rss.xml","most_recent_article":{"title":"OSX.CDDS (MacMa): A Sophisticated Watering Hole Campaign Drops A New macOS Implant!","url":"https://objective-see.com/blog/blog_0x69.html","published_date":"11/10/2021"}},{"author":"Omar","title":"Obscured Pixels","site_url":"https://obscuredpixels.com/","feed_url":"https://obscuredpixels.com/rss.xml","most_recent_article":{"title":"Awaiting WebSockets in SwiftUI","url":"https://obscuredpixels.com/awaiting-websockets-in-swiftui","published_date":"11/10/2021"}},{"author":"Matt Ronge","title":"Matt Ronge's Blog","site_url":"https://mronge.com","feed_url":"https://mronge.com/feed/","most_recent_article":{"title":"How NOT to screw up switching your app to subscriptions","url":"https://www.mronge.com/how-not-to-screw-up-when-switching-your-app-to-subscriptions/","published_date":"11/09/2021"}},{"author":"Tom Harrington","title":"The Atomic Birdhouse","site_url":"https://atomicbird.com/","feed_url":"https://atomicbird.com/index.xml","most_recent_article":{"title":"Core Data Using Only Code","url":"https://atomicbird.com/blog/core-data-code-only/","published_date":"11/07/2021"}},{"author":"Krzysztof Zabłocki","title":"Krzysztof Zabłocki’s Blog","site_url":"http://merowing.info/post/","feed_url":"http://merowing.info/index.xml","most_recent_article":{"title":"Leave your ego at the door","url":"https://www.merowing.info/2021/11/leave-your-ego-at-the-door/","published_date":"11/07/2021"}},{"author":"Sam Soffes","title":"Hi, I’m Sam","site_url":"https://soffes.blog/","feed_url":"https://soffes.blog/rss/","most_recent_article":{"title":"Impact","url":"https://soffes.blog/impact","published_date":"11/07/2021"}},{"author":"Aaron Sky","title":"Aaron Sky","site_url":"https://skyaaron.com/","feed_url":"https://skyaaron.com/posts/index.xml","most_recent_article":{"title":"Swift Playgrounds App Projects","url":"https://skyaaron.com/posts/swiftpm-app-projects/","published_date":"11/05/2021"}},{"author":"David Seek and Ting Becker","title":"David Seek’s Blog","site_url":"https://www.davidseek.com","feed_url":"https://www.davidseek.com/rss/","most_recent_article":{"title":"How to install old Ruby versions on Apple M1","url":"https://www.davidseek.com/ruby-on-m1/","published_date":"11/03/2021"}},{"author":"Marin Todorov","title":"rx_marin","site_url":"http://rx-marin.com/","feed_url":"http://rx-marin.com/index.xml","most_recent_article":{"title":"Announcing: “Modern Concurrency in Swift”","url":"http://rx-marin.com/post/announcing-modern-swift-concurrency-book/","published_date":"11/02/2021"}},{"author":"Bartosz Ciechanowski","title":"Bartosz Ciechanowski’s Blog","site_url":"http://ciechanowski.me/","feed_url":"http://ciechanowski.me/atom.xml","most_recent_article":{"title":"Curves and Surfaces","url":"https://ciechanow.ski/curves-and-surfaces/","published_date":"11/02/2021"}},{"author":"Alfian Losari","title":"Xcoding with Alfian","site_url":"https://alfianlosari.com/","feed_url":"https://alfianlosari.com/feed.rss","most_recent_article":{"title":"Video Tutorial - Refactor MovieDB App from SwiftUI 1 to SwiftUI 3 with iOS 15 & Swift 5.5 Async Await","url":"https://alfianlosari.com/posts/video-tutorial-refactor-moviedb-app-to-swiftui3","published_date":"11/01/2021"}},{"author":"Daniel Jalkut","title":"Bitsplitting","site_url":"http://bitsplitting.org","feed_url":"http://bitsplitting.org/feed/","most_recent_article":{"title":"The Talk Show 327: Giddy with Mac-ness","url":"https://bitsplitting.org/2021/11/01/the-talk-show-327-giddy-with-mac-ness/","published_date":"11/01/2021"}},{"author":"Lukas Mathis","title":"ignore the code","site_url":"http://ignorethecode.net","feed_url":"http://ignorethecode.net/blog/rss/","most_recent_article":{"title":"Honey, Please Shrink the Touchpad","url":"http://ignorethecode.net/blog/2021/10/31/honey_please_shrink_the_touchpad/","published_date":"10/31/2021"}},{"author":"Aleksandar Vacić","title":"Aleksandar Vacić’s Blog","site_url":"http://aplus.rs/categories/iosdev/","feed_url":"http://aplus.rs/index.xml","most_recent_article":{"title":"Async Operation for Core Data imports","url":"https://aplus.rs/2021/async-operation-coredata-save/","published_date":"10/30/2021"}},{"author":"Pete Smith","title":"Fresh Swift","site_url":"http://freshswift.net","feed_url":"http://freshswift.net/index.xml","most_recent_article":{"title":"iOS Architecture at Lyft","url":"https://scottberrevoets.com/2021/10/14/ios-architecture-at-lyft/","published_date":"10/28/2021"}},{"author":"Carson Katri","title":"Carson Katri's Blog","site_url":"https://www.carsonkatri.com/","feed_url":"https://www.carsonkatri.com/feed.rss","most_recent_article":{"title":"Deploying SwiftUI on the Web","url":"https://www.carsonkatri.com/articles/deploying-swiftui-on-the-web","published_date":"10/27/2021"}},{"author":"Frank Courville","title":"School of Swift","site_url":"https://schoolofswift.com/articles","feed_url":"https://schoolofswift.com/feed.xml","most_recent_article":{"title":"Optimize your testing workflow with Xcode keyboard shortcuts","url":"/articles/testing-workflow","published_date":"10/27/2021"}},{"author":"Josh Holtz","title":"Josh Holtz's Blog","site_url":"https://www.joshholtz.com/blog/","feed_url":"https://www.joshholtz.com/feed.xml","most_recent_article":{"title":"Josh’s M1 Mac Development Environment - homebrew, zsh, Ruby and python version managers","url":"https://www.joshholtz.com/blog/2021/10/27/joshs-m1-development-environemnt","published_date":"10/27/2021"}},{"author":"Michael Eisel","title":"Michael Eisel’s Blog","site_url":"https://eisel.me","feed_url":"https://eisel.me/feed.xml","most_recent_article":{"title":"Faster Mac Dev Tools with Custom Allocators","url":"http://eisel.me/devtool-allocators","published_date":"10/26/2021"}},{"author":"Adam Fowler","title":"Soto Blog","site_url":"https://soto.codes","feed_url":"https://soto.codes/feed.xml","most_recent_article":{"title":"Soto and Swift concurrency","url":"https://soto.codes/2021/10/async-await.html","published_date":"10/26/2021"}},{"author":"Pete Smith","title":"Pete Smith on Medium","site_url":"https://superpeteblaze.medium.com","feed_url":"https://medium.com/feed/@superpeteblaze","most_recent_article":{"title":"iOS How-to — Capture Touch Events Outside UIView Bounds","url":"https://medium.com/zendesk-engineering/ios-how-to-capture-touch-events-outside-uiview-bounds-bc7461970788?source=rss-d0ff76ca6320------2","published_date":"10/25/2021"}},{"author":"Eneko Alonso","title":"Eneko Alonso's Blog","site_url":"https://www.enekoalonso.com/","feed_url":"http://www.enekoalonso.com/feed.xml","most_recent_article":{"title":"First time using Xcode Cloud","url":"https://www.enekoalonso.com/articles/first-time-using-xcode-cloud","published_date":"10/25/2021"}},{"author":"Sarah Reichelt","title":"TrozWare","site_url":"https://troz.net/","feed_url":"https://troz.net/index.xml","most_recent_article":{"title":"Site Search","url":"https://troz.net/post/2021/site_search/","published_date":"10/24/2021"}},{"author":"Pietro Rea","title":"Pietro Rea’s Blog","site_url":"https://www.pietrorea.com","feed_url":"https://www.pietrorea.com/rss.xml","most_recent_article":{"title":"Filtering emails by the List-Unsubscribe header in Fastmail","url":"https://pietrorea.com/2021/10/22/filter-emails-by-the-list-unsubscribe-header","published_date":"10/21/2021"}},{"author":"Gene De Lisa","title":"Gene De Lisa’s Blog","site_url":"https://rockhoppertech.com/blog","feed_url":"https://rockhoppertech.com/blog/feed","most_recent_article":{"title":"WordPress again","url":"https://www.rockhoppertech.com/blog/wordpress-again/","published_date":"10/21/2021"}},{"author":"Julian Alonso","title":"Julian Alonso's Blog","site_url":"http://diariodeprogramacion.com/","feed_url":"http://diariodeprogramacion.com/feed.xml","most_recent_article":{"title":"About Phantom Types","url":"http://diariodeprogramacion.com/2021/10/20/about-phantom-types.html","published_date":"10/19/2021"}},{"author":"Marina Gornostaeva","title":"Marina Gornostaeva's Blog","site_url":"https://hybridcattt.com","feed_url":"https://hybridcattt.com/feed.xml","most_recent_article":{"title":"Debugging on iOS 15 with Xcode 12","url":"https://hybridcattt.com/blog/debugging-on-latest-ios-with-older-xcode","published_date":"10/18/2021"}},{"author":"David Cordero","title":"David Cordero’s Blog","site_url":"https://www.dcordero.me/","feed_url":"https://www.dcordero.me/feed.xml","most_recent_article":{"title":"Logarithmic Volume Control","url":"https://www.dcordero.me/posts/logarithmic_volume_control","published_date":"10/17/2021"}},{"author":"Ioannis Diamantidis","title":"Ioannis Diamantidis","site_url":"https://diamantidis.github.io","feed_url":"https://diamantidis.github.io/feed.xml","most_recent_article":{"title":"Flutter: Two-way communication between a WebView and a web page","url":"https://diamantidis.github.io/2021/10/17/two-way-communication-between-flutter-webview-and-a-web-page","published_date":"10/17/2021"}},{"author":"Giovanni Lodi","title":"mokacoding","site_url":"http://www.mokacoding.com","feed_url":"http://www.mokacoding.com/feed.xml","most_recent_article":{"title":"When to test a @Published property using sink","url":"https://mokacoding.com/blog/when-to-test-published-property-with-sink","published_date":"10/16/2021"}},{"author":"Scott Berrevoets","title":"Scott Berrevoets’ Blog","site_url":"https://scottberrevoets.com/","feed_url":"https://scottberrevoets.com/feeds/all.rss.xml","most_recent_article":{"title":"iOS Architecture at Lyft","url":"https://scottberrevoets.com/2021/10/14/ios-architecture-at-lyft/","published_date":"10/14/2021"}},{"author":"Andy Ibanez","title":"Andy Ibanez’s Blog","site_url":"https://www.andyibanez.com/tags/apple/","feed_url":"https://www.andyibanez.com/tags/apple/index.xml","most_recent_article":{"title":"Ten Years and Over a 100 Articles Later - And Break Notice","url":"https://www.andyibanez.com/posts/ten-years-and-over-100-articles-later/","published_date":"10/13/2021"}},{"author":"Jon Reid","title":"Quality Coding","site_url":"https://qualitycoding.org/","feed_url":"http://feeds.feedburner.com/qualitycoding","most_recent_article":{"title":"How to Unit Test Scene Delegates when Swift Won’t Let You","url":"https://qualitycoding.org/unit-test-scene-delegates/","published_date":"10/12/2021"}},{"author":"Brian Coyner","title":"Brian Coyner’s Blog","site_url":"https://briancoyner.github.io/","feed_url":"https://briancoyner.github.io/feed.rss","most_recent_article":{"title":"Building A Reorderable UICollectionView","url":"https://briancoyner.github.io/articles/2021-10-12-reorderable-collection-view","published_date":"10/11/2021"}},{"author":"Soroush Khanlou","title":"Soroush Khanlou’s Blog","site_url":"http://khanlou.com/","feed_url":"http://khanlou.com/feed/","most_recent_article":{"title":"Download Progress With Awaited Network Tasks","url":"http://khanlou.com/2021/10/download-progress-with-awaited-network-tasks/","published_date":"10/11/2021"}},{"author":"Orestis Papadopoulos","title":"Orestis' Papadopoulos Blog","site_url":"https://orjpap.github.io","feed_url":"https://orjpap.github.io/feed.xml","most_recent_article":{"title":"UserDefaultsPeristable: Save and Load a struct in UserDefaults","url":"https://orjpap.github.io/swift/userdefaults/ios/protocols/2021/10/10/Load-and-save-a-struct","published_date":"10/10/2021"}},{"author":"Dave DeLong","title":"Dave DeLong’s Blog","site_url":"https://davedelong.com","feed_url":"https://davedelong.com/feed.xml","most_recent_article":{"title":"Simplifying Backwards Compatibility in Swift","url":"https://davedelong.com/blog/2021/10/09/simplifying-backwards-compatibility-in-swift","published_date":"10/08/2021"}},{"author":"Nikolay Fiantsev","title":"Nikolay Fiantsev on Medium","site_url":"https://medium.com/@bigmotor","feed_url":"https://medium.com/feed/@bigmotor","most_recent_article":{"title":"Composable Contexts Architecture","url":"https://bigmotor.medium.com/composable-contexts-architecture-7a367c138613?source=rss-ac3fb61a3e86------2","published_date":"10/07/2021"}},{"author":"Arthur Van Siclen","title":"Arthur Van Siclen on Medium","site_url":"https://medium.com/@arthurofbabylon","feed_url":"https://medium.com/feed/@arthurofbabylon","most_recent_article":{"title":"Case study: Building a profitable app in 30 days","url":"https://bootcamp.uxdesign.cc/building-a-profitable-app-in-30-days-4935a4b55bfb?source=rss-3afecef24601------2","published_date":"10/06/2021"}},{"author":"Marco Arment","title":"Marco.org","site_url":"https://marco.org/","feed_url":"https://marco.org/rss","most_recent_article":{"title":"Ten years after we lost Steve Jobs","url":"https://marco.org/2021/10/05/steve-jobs-ten-years","published_date":"10/05/2021"}},{"author":"Joseph Lord","title":"Human Friendly Blog","site_url":"https://blog.human-friendly.com","feed_url":"http://blog.human-friendly.com/posts.atom","most_recent_article":{"title":"UK Covid Local Data App","url":"tag:blog.human-friendly.com,2013:Post/1743419","published_date":"10/03/2021"}},{"author":"Aryaman Sharda","title":"digital bunker","site_url":"https://digitalbunker.dev/","feed_url":"https://digitalbunker.dev/feed/","most_recent_article":{"title":"How to Test Private Variables in Swift","url":"https://digitalbunker.dev/how-to-test-private-methods-variables-in-swift/","published_date":"10/02/2021"}},{"author":"Janie Clayton","title":"The Red Queen Coder","site_url":"http://redqueencoder.com","feed_url":"http://redqueencoder.com/feed/","most_recent_article":{"title":"Inktober 2021","url":"http://redqueencoder.com/inktober-2021/","published_date":"10/01/2021"}},{"author":"Adam Overholtzer","title":"Overdesigned Blog","site_url":"https://blog.overdesigned.net/","feed_url":"https://blog.overdesigned.net/feed.rss","most_recent_article":{"title":"SwiftUI Animation Lessons From Building “Time’s Up! Timer”","url":"https://blog.overdesigned.net/posts/2021-09-29-swiftui-animation-tricks","published_date":"09/29/2021"}},{"author":"Wil Shipley","title":"Call Me Fishmeal","site_url":"http://blog.wilshipley.com/","feed_url":"http://blog.wilshipley.com/rss.xml","most_recent_article":{"title":"The Future of Delicious Library","url":"http://blog.wilshipley.com/2021/09/the-future-of-delicious-library.html","published_date":"09/27/2021"}},{"author":"Kyle Sherman","title":"This is Kyle","site_url":"http://thisiskyle.me","feed_url":"http://thisiskyle.me/feed.xml","most_recent_article":{"title":"Writing Effective Software Development Notes for Future You","url":"https://thisiskyle.me/posts/writing-effective-software-development-notes-for-future-you","published_date":"09/27/2021"}},{"author":"Cihat Gündüz","title":"Cihat Gündüz' Blog","site_url":"https://dev.to/jeehut","feed_url":"https://dev.to/feed/jeehut","most_recent_article":{"title":"Laser Focus priority strategy","url":"https://dev.to/jeehut/laser-focus-priority-strategy-31ok","published_date":"09/27/2021"}},{"author":"Damian Mehers","title":"Damian Mehers' Blog","site_url":"https://damian.fyi","feed_url":"https://damian.fyi/feed.xml","most_recent_article":{"title":"If you give a Moose an Apple Watch (unfinished)","url":"https://damian.fyi/swift/2021/09/24/moose","published_date":"09/24/2021"}},{"author":"Vojtech Rinik","title":"Vojtech Rinik on Medium","site_url":"https://medium.com/@vojto","feed_url":"https://medium.com/feed/@vojto","most_recent_article":{"title":"How to install Python under Rosetta 2","url":"https://medium.com/thinknum/how-to-install-python-under-rosetta-2-f98c0865e012?source=rss-5a63352826d8------2","published_date":"09/24/2021"}},{"author":"Daniel Saidi","title":"Daniel Saidi’s Blog","site_url":"https://danielsaidi.com/blog/","feed_url":"http://danielsaidi.com/feed.xml","most_recent_article":{"title":"Going open-source","url":"http://danielsaidi.com/blog/2021/09/23/going-open-source","published_date":"09/22/2021"}},{"author":"Matteo Manferdini","title":"Matteo Manferdini’s Blog","site_url":"https://matteomanferdini.com/blog/","feed_url":"https://matteomanferdini.com/feed/","most_recent_article":{"title":"Powerful Advanced Swift Techniques for Complex Apps","url":"https://matteomanferdini.com/advanced-swift/","published_date":"09/21/2021"}},{"author":"Jason Zurita","title":"Jason Zurita’s Blog","site_url":"http://jasonzurita.com/blog/","feed_url":"http://jasonzurita.com/feed.xml","most_recent_article":{"title":"Linting vs Formatting: A Swift Guide — Part 2","url":"http://jasonzurita.com/linting-and-formatting-swift-part-2/","published_date":"09/20/2021"}},{"author":"Aaron Brethorst and Rob Chipperfield","title":"Cocoa Controls","site_url":"http://www.cocoacontrols.com","feed_url":"https://www.cocoacontrols.com/index.xml","most_recent_article":{"title":"LCActionSheet","url":"https://www.cocoacontrols.com/controls/lcactionsheet","published_date":"09/19/2021"}},{"author":"Robert Pieta","title":"Advanced Swift","site_url":"https://www.advancedswift.com/","feed_url":"https://www.advancedswift.com/rss","most_recent_article":{"title":"Learn Swift for C++ Developers","url":"https://www.advancedswift.com/learn-swift-cpp/","published_date":"09/19/2021"}},{"author":"Arthur Knopper","title":"iOS Creator","site_url":"https://www.ioscreator.com/","feed_url":"https://www.ioscreator.com/tutorials?format=RSS","most_recent_article":{"title":"SwiftUI Stack View Tutorial","url":"https://www.ioscreator.com/tutorials/swiftui-stack-view-tutorial","published_date":"09/15/2021"}},{"author":"Ashish Kakkad","title":"Technology Makes A Wonderful World","site_url":"http://ashishkakkad.com","feed_url":"http://ashishkakkad.com/feed/","most_recent_article":{"title":"Apple Introduced iPhone, iPad, and many more in Sep 2021","url":"https://ashishkakkad.com/2021/09/apple-introduced-iphone-ipad-and-many-more-in-sep-2021/?utm_source=rss&utm_medium=rss&utm_campaign=apple-introduced-iphone-ipad-and-many-more-in-sep-2021","published_date":"09/14/2021"}},{"author":"Luis Recuenco","title":"Luis Recuenco on Medium","site_url":"https://medium.com/@recuenco/","feed_url":"https://medium.com/feed/@recuenco","most_recent_article":{"title":"Value integrity in Swift","url":"https://jobandtalent.engineering/value-integrity-in-swift-c5bf2b3f8340?source=rss-c3e9dcf69985------2","published_date":"09/14/2021"}},{"author":"Robin Kunde","title":"Recoursive","site_url":"https://recoursive.com/tag/ios/","feed_url":"https://recoursive.com/tag/ios/index.xml","most_recent_article":{"title":"How-to: Create compile time reminders in Xcode","url":"https://recoursive.com/2021/09/14/create_compile_time_reminders/","published_date":"09/13/2021"}},{"author":"Derik Ramirez","title":"Derik Ramirez’s Blog","site_url":"https://rderik.com","feed_url":"https://rderik.com/feed.xml","most_recent_article":{"title":"My thoughts on understanding dependencies, and adding a copy button to code blocks on my site","url":"https://rderik.com/blog/my-thoughts-on-understanding-dependencies-and-adding-a-copy-button-to-code-blocks-on-my-site/","published_date":"09/11/2021"}},{"author":"Will Bishop","title":"Will Bishop’s Blog","site_url":"https://blog.willbish.com/","feed_url":"https://blog.willbish.com/feed/","most_recent_article":{"title":"Building an incredibly simple PDF Signing App","url":"https://blog.willbish.com/2021/09/11/building-an-incredibly-simple-pdf-signing-app/","published_date":"09/10/2021"}},{"author":"Javier Nigro","title":"The SwiftUI Lab","site_url":"https://swiftui-lab.com/","feed_url":"https://swiftui-lab.com/feed/","most_recent_article":{"title":"Advanced SwiftUI Animations – Part 5: Canvas","url":"https://swiftui-lab.com/swiftui-animations-part5/?utm_source=rss&utm_medium=rss&utm_campaign=swiftui-animations-part5","published_date":"09/10/2021"}},{"author":"Samantha John","title":"Samantha John’s Blog","site_url":"https://samanthajohn.com","feed_url":"https://samanthajohn.com/feed.xml","most_recent_article":{"title":"A love letter to personal software","url":"/software/2021/09/07/Annotate","published_date":"09/07/2021"}},{"author":"Federico Jordan","title":"Federico Jordan’s Blog","site_url":"https://federicojordan.github.io/","feed_url":"https://federicojordan.github.io/feed.xml","most_recent_article":{"title":"Creating a Fastlane action to publish code coverage on Github","url":"https://federicojordan.github.io/2021/09/07/creating-a-fastlane-action-to-publish-code-coverage-on-github","published_date":"09/06/2021"}},{"author":"Pádraig Ó Cinnéide","title":"Modern AppKit","site_url":"https://padraig.org/","feed_url":"https://padraig.org/feed.xml","most_recent_article":{"title":"NSView Subviews","url":"https://padraig.org/appkit/2021/09/05/subviews","published_date":"09/05/2021"}},{"author":"Nikita Ermolenko","title":"Otbivnoe's Blog","site_url":"https://otbivnoe.ru","feed_url":"https://otbivnoe.ru/feed.xml","most_recent_article":{"title":"Type Eraser for Rx Subjects","url":"https://otbivnoe.ru/2021/09/04/Type-Eraser-for-RxSubjects","published_date":"09/04/2021"}},{"author":"Jared Sorge","title":"jsorge.net","site_url":"https://jsorge.net/","feed_url":"https://jsorge.net/rss","most_recent_article":{"title":"Powered by Tailwind","url":"https://jsorge.net/2021/09/03/powered-by-tailwind","published_date":"09/03/2021"}},{"author":"Matthijs Hollemans","title":"Machine Think","site_url":"http://machinethink.net/blog/","feed_url":"http://machinethink.net/blog/index.xml","most_recent_article":{"title":"Retiring the Core ML Survival Guide","url":"https://machinethink.net/blog/coreml-survival-guide/","published_date":"09/01/2021"}},{"author":"James Dempsey","title":"James Dempsey’s Blog","site_url":"https://jamesdempsey.net","feed_url":"https://jamesdempsey.net/feed.xml","most_recent_article":{"title":"Apple Home Page Tabs History—August 2021 Edition","url":"https://jamesdempsey.net/2021/08/31/apple-home-page-tabs-history-august-2021-edition","published_date":"08/31/2021"}},{"author":"Daniel Devesa Derksen-Staats","title":"Dadederk","site_url":"https://dadederk.github.io","feed_url":"https://dadederk.github.io/index.xml","most_recent_article":{"title":"Best practices for building accessible mobile apps","url":"https://dadederk.github.io/post/2021-08-31-01/","published_date":"08/31/2021"}},{"author":"Mike Swanson","title":"Mike Swanson’s Blog","site_url":"http://blog.mikeswanson.com/","feed_url":"http://blog.mikeswanson.com/rss","most_recent_article":{"title":"Achieving 2.5Gbps with the UDM Pro","url":"https://blog.mikeswanson.com/post/661008854541271040","published_date":"08/30/2021"}},{"author":"Ken Kocienda","title":"Ken Kocienda's Blog","site_url":"https://kocienda.micro.blog","feed_url":"https://kocienda.micro.blog/feed.xml","most_recent_article":{"title":"On watches, chicken vases, and the value of things","url":"https://kocienda.micro.blog/2021/08/30/184123.html","published_date":"08/30/2021"}},{"author":"Craig Hockenberry","title":"Furbo","site_url":"https://furbo.org","feed_url":"http://furbo.org/feed/","most_recent_article":{"title":"Introducing AV Remote","url":"https://furbo.org/2021/08/30/introducing-av-remote/","published_date":"08/30/2021"}},{"author":"Mohammad Azam","title":"AzamSharp Blog","site_url":"https://azamsharp.com/","feed_url":"https://azamsharp.com/feed.xml","most_recent_article":{"title":"Building Swiftui Rating View","url":"https://azamsharp.com/2021/08/27/building-swiftui-rating-view","published_date":"08/26/2021"}},{"author":"Hwee-Boon Yar","title":"Hwee-Boon Yar’s Blog","site_url":"http://hboon.com","feed_url":"http://hboon.com/feed/","most_recent_article":{"title":"Notes on listening to location changes in WKWebView","url":"http://hboon.com/notes-on-listening-to-location-changes-in-wkwebview","published_date":"08/24/2021"}},{"author":"Ben Dodson","title":"Dodo Games Development Log","site_url":"https://dodogames.io/devlog/","feed_url":"https://dodogames.io/feed.xml","most_recent_article":{"title":"Path generation","url":"https://dodogames.io/devlog/path-generation/","published_date":"08/24/2021"}},{"author":"Martin Höller","title":"Martin Höller's Blog","site_url":"https://blog.martinhoeller.net/development.html","feed_url":"https://blog.martinhoeller.net/feed.xml","most_recent_article":{"title":"In Your Face turns 2 – All the Numbers","url":"https://blog.martinhoeller.net/development/2021/08/24/iyf_turns_2","published_date":"08/24/2021"}},{"author":"Belle B. Cooper","title":"Belle B. Cooper’s Blog","site_url":"http://blog.bellebcooper.com","feed_url":"http://blog.bellebcooper.com/feeds/all.atom.xml","most_recent_article":{"title":"Introducing Hello Meds","url":"tag:blog.bellebcooper.com,2021-08-24:/introducing-hello-meds.html","published_date":"08/23/2021"}},{"author":"Joe Fabisevich","title":"Fabisevi.ch","site_url":"https://fabisevi.ch","feed_url":"https://fabisevi.ch/feed.xml","most_recent_article":{"title":"Creating Slick Color Palette APIs","url":"https://fabisevi.ch//2021/08/24/creating-slick-color-palette-apis","published_date":"08/23/2021"}},{"author":"Rizwan Ahmed","title":"Oh my Swift","site_url":"https://ohmyswift.com","feed_url":"https://ohmyswift.com/blog/feed.xml","most_recent_article":{"title":"Customizing UIButton in iOS 15","url":"https://ohmyswift.com/blog/2021/08/23/customizing-uibutton-in-ios-15","published_date":"08/23/2021"}},{"author":"Zach Knox","title":"Zach Knox’s Blog","site_url":"https://zachknox.com","feed_url":"https://zachknox.com/feed.xml","most_recent_article":{"title":"Building a Donation Tracker Widget with Scriptable","url":"https://zachknox.com/2021/08/21/building-a-donation-tracker-widget.html","published_date":"08/21/2021"}},{"author":"Raul Riera","title":"Raul Riera on Medium","site_url":"https://medium.com/@raulriera/","feed_url":"https://medium.com/feed/@raulriera","most_recent_article":{"title":"Remove that blue color from your React Native applications","url":"https://raulriera.medium.com/remove-that-blue-color-from-your-react-native-applications-7964fd0e87a3?source=rss-8501090bb2de------2","published_date":"08/21/2021"}},{"author":"Erica Sadun","title":"Erica Sadun’s Blog","site_url":"http://ericasadun.com","feed_url":"http://ericasadun.com/feed/","most_recent_article":{"title":"Piping stdout and stderr to Preview","url":"https://ericasadun.com/2021/08/19/piping-stdout-and-stderr-to-preview/","published_date":"08/19/2021"}},{"author":"Olivier Halligon","title":"Crunchy Development","site_url":"http://alisoftware.github.io/","feed_url":"http://alisoftware.github.io/feed.xml","most_recent_article":{"title":"YAML Superpowers, part 2: Multiline Strings","url":"https://alisoftware.github.io/yaml/2021/08/19/yaml-part2-strings/","published_date":"08/18/2021"}},{"author":"Adrian Schönig","title":"Adrian Schönig's Blog","site_url":"https://adrian.schoenig.me","feed_url":"https://adrian.schoenig.me/feed.xml","most_recent_article":{"title":"Using CoreData in a SPM executable","url":"https://adrian.schoenig.me/blog/2021/08/18/core-data-and-spm/","published_date":"08/17/2021"}},{"author":"Rob Rix","title":"Antitypical","site_url":"http://antitypical.com/","feed_url":"http://antitypical.com/feed.xml","most_recent_article":{"title":"Sequent calculus cheat sheet","url":"https://antitypical.com/posts/2021-08-14-sequent-calculus-cheat-sheet/index.html","published_date":"08/14/2021"}},{"author":"Rob Whitaker","title":"Mobile A11y","site_url":"https://mobilea11y.com","feed_url":"https://mobilea11y.com/index.xml","most_recent_article":{"title":"iOS UIKit Accessibility traits","url":"https://mobilea11y.com/blog/traits/","published_date":"08/13/2021"}},{"author":"Ross Butler","title":"Ross Butler on Medium","site_url":"https://medium.com/@rwbutler","feed_url":"https://medium.com/feed/@rwbutler","most_recent_article":{"title":"Protect Yourself Against Commits Forged In Your Name Using GitHub’s New Vigilant Mode","url":"https://medium.com/@rwbutler/protect-yourself-against-commits-forged-in-your-name-using-githubs-new-vigilant-mode-84ed00a71f94?source=rss-48f7d614a0e6------2","published_date":"08/11/2021"}},{"author":"Joshua Emmons","title":"Figure Ink","site_url":"http://www.figure.ink/","feed_url":"http://www.figure.ink/blog?format=RSS","most_recent_article":{"title":"What to Do with Localized Errors","url":"http://www.figure.ink/blog/2021/8/8/what-to-do-with-localized-errors","published_date":"08/08/2021"}},{"author":"Guillermo Culkin","title":"moraleda.info","site_url":"http://moraleda.info/blog/","feed_url":"http://moraleda.info/feed.xml","most_recent_article":{"title":"Masking out text in SwiftUI","url":"http://moraleda.info/2021/08/03/masking-out-text-in-swiftui","published_date":"08/02/2021"}},{"author":"Daniel Bernal","title":"Daniel Bernal's Blog","site_url":"https://danielbernal.co","feed_url":"https://danielbernal.co/feed","most_recent_article":{"title":"Live preview for your UIKit views","url":"https://danielbernal.co/live-preview-for-your-uikit-views/","published_date":"07/30/2021"}},{"author":"Shad Rayhan Mazumder","title":"mobidevtalk, Learning through case study","site_url":"https://mobidevtalk.com/","feed_url":"https://mobidevtalk.com/feed/","most_recent_article":{"title":"associatedtype on Protocol, making Protocol Generic","url":"https://mobidevtalk.com/associatedtype-on-protocol/","published_date":"07/27/2021"}},{"author":"Ray Fix","title":"Ray Fix's Blog","site_url":"https://rayfix.org","feed_url":"https://rayfix.org/feed.xml","most_recent_article":{"title":"Extensible API in Swift","url":"/2021/07/27/extensible-api-swift","published_date":"07/26/2021"}},{"author":"Maxim Smirnov","title":"Maxim Smirnov on Medium","site_url":"https://medium.com/@atimca","feed_url":"https://medium.com/feed/@atimca","most_recent_article":{"title":"The Composable Architecture tutorial","url":"https://medium.com/@atimca/the-composable-architecture-tutorial-d220fd25cab3?source=rss-34717dc164a5------2","published_date":"07/23/2021"}},{"author":"Alberto De Bortoli","title":"Alberto De Bortoli’s Blog","site_url":"https://albertodebortoli.com/","feed_url":"https://albertodebortoli.com/rss/","most_recent_article":{"title":"The Continuous Integration system used by the mobile teams","url":"https://albertodebortoli.com/2021/07/23/the-continuous-integration-system-used-by-the-mobile-teams/","published_date":"07/23/2021"}},{"author":"Paulo Andrade","title":"Paulo Andrade’s Blog","site_url":"https://pfandrade.me/tags/ios/","feed_url":"https://pfandrade.me/tags/ios/index.xml","most_recent_article":{"title":"Tweaking Animation Timing","url":"https://pfandrade.me/blog/tweaking-animation-timing/","published_date":"07/22/2021"}},{"author":"Chris Hefferman","title":"Chris Hefferman's Blog","site_url":"https://chrishefferman.squarespace.com/blog-landing-page","feed_url":"https://chrishefferman.squarespace.com/blog?format=rss","most_recent_article":{"title":"Career Change to iOS Developer","url":"https://chrishefferman.squarespace.com/blog/career-change","published_date":"07/21/2021"}},{"author":"Sven Weidauer","title":"Sven Weidauer’s Blog","site_url":"https://5sw.de/","feed_url":"https://5sw.de/feed/","most_recent_article":{"title":"Automatic builders","url":"https://5sw.de/2021/07/automatic-builders/","published_date":"07/21/2021"}},{"author":"Daniel Tartaglia","title":"DanielT1263’s Blog mostly about RxSwift","site_url":"https://medium.com/@danielt1263","feed_url":"https://medium.com/feed/@danielt1263","most_recent_article":{"title":"Convert a Swift Delegate to RxSwift Observables","url":"https://danielt1263.medium.com/convert-a-swift-delegate-to-rxswift-observables-f52afe77f8d6?source=rss-656abcc75dfd------2","published_date":"07/20/2021"}},{"author":"Reva Yoga P","title":"revoreva's blog","site_url":"https://revoreva.medium.com/list/ios-development-aa0d87727e87","feed_url":"https://revoreva.medium.com/feed","most_recent_article":{"title":"Some essential parts when making an App","url":"https://revoreva.medium.com/some-essential-parts-when-making-an-app-a9dca53e2511?source=rss-a7645444f16d------2","published_date":"07/14/2021"}},{"author":"Martin Mitrevski","title":"Martin Mitrevski’s Blog","site_url":"https://martinmitrevski.com/","feed_url":"https://martinmitrevski.com/feed/","most_recent_article":{"title":"ML recommendation app with Create ML on iOS 15","url":"https://martinmitrevski.com/2021/07/11/ml-recommendation-app-with-create-ml-on-ios-15/","published_date":"07/11/2021"}},{"author":"Ole Begemann","title":"Ole Begemann’s Blog","site_url":"https://oleb.net/blog/","feed_url":"http://oleb.net/blog/atom.xml","most_recent_article":{"title":"What is structured concurrency?","url":"https://oleb.net/2021/structured-concurrency/","published_date":"07/08/2021"}},{"author":"Adam Wareing","title":"Adam Wareing on Medium","site_url":"https://medium.com/@adamwareing241/","feed_url":"https://medium.com/feed/@adamwareing241","most_recent_article":{"title":"Exploring Flutter’s communication with native code","url":"https://levelup.gitconnected.com/flutters-communication-flow-with-native-1672495e239f?source=rss-6026fb5d4244------2","published_date":"07/06/2021"}},{"author":"Sam Deane","title":"Elegant Chaos","site_url":"http://elegantchaos.com/news/","feed_url":"http://elegantchaos.com/rss.xml","most_recent_article":{"title":"Copilot Thoughts","url":"https://elegantchaos.com/2021/07/05/copilot.html","published_date":"07/05/2021"}},{"author":"John Patrick Morgan","title":"John Patrick Morgan’s Blog","site_url":"https://johnpatrickmorgan.github.io","feed_url":"https://johnpatrickmorgan.github.io/atom.xml","most_recent_article":{"title":"Improving SwiftUI Navigation for the Coordinator Pattern","url":"https://johnpatrickmorgan.github.io/2021/07/03/NStack/","published_date":"07/03/2021"}},{"author":"Michał Wojtysiak, Bartłomiej Woronin and Maciej Piotrowski","title":"swifting.io","site_url":"https://swifting.io/","feed_url":"https://swifting.io/feed.xml","most_recent_article":{"title":"

#55 SwiftUI & The Composable Architecture - watch your performance (5 rules worth applying).

\n","url":"\n https://swifting.io/2021/07/01/SwiftUI-and-TCA-watch-your-perfomance.html\n ","published_date":"06/30/2021"}},{"author":"Soheil Novinfard","title":"Soheil Novinfard's Blog","site_url":"https://novinfard.medium.com","feed_url":"https://novinfard.medium.com/feed","most_recent_article":{"title":"Make your iOS app compatible with Right to Left languages in SwiftUI and UIKit!","url":"https://novinfard.medium.com/make-your-ios-app-compatible-with-right-to-left-languages-in-swiftui-and-uikit-bdb164892ce3?source=rss-6bca32d7b400------2","published_date":"06/28/2021"}},{"author":"Kyle Seth Gray","title":"Kyle Seth Gray’s Blog","site_url":"https://kylesethgray.com/","feed_url":"https://kylesethgray.com/rss/","most_recent_article":{"title":"Five Years","url":"https://kylesethgray.com/five-years/","published_date":"06/28/2021"}},{"author":"Musa Kökçen","title":"Musa Kökçen on Medium","site_url":"https://medium.com/@musakokcen","feed_url":"https://medium.com/feed/@musakokcen","most_recent_article":{"title":"How do we implement unit tests? — Unit test practices","url":"https://medium.com/plus-minus-one/how-do-we-implement-unit-tests-unit-test-practices-cc5f8761bfec?source=rss-929e86422f66------2","published_date":"06/25/2021"}},{"author":"Leonardo Diaz","title":"Leonardo Diaz's Blog","site_url":"https://leonardodiaz.medium.com","feed_url":"https://leonardodiaz.medium.com/feed","most_recent_article":{"title":"My Journey Into Software Engineering","url":"https://leonardodiaz.medium.com/my-journey-into-software-engineering-22ec60bc43c4?source=rss-bb8b9101a9eb------2","published_date":"06/22/2021"}},{"author":"Andrew Pontious","title":"Weaponized Fluff","site_url":"https://apontious.com","feed_url":"https://apontious.com/feed/","most_recent_article":{"title":"Object Permanence in Roll20","url":"https://apontious.com/2021/06/19/object-permanence-in-roll20/","published_date":"06/19/2021"}},{"author":"John Codeos","title":"John Codeos’ Blog","site_url":"https://johncodeos.com/category/tutorials/ios/","feed_url":"https://johncodeos.com/category/tutorials/ios/feed/","most_recent_article":{"title":"How to implement MVVM pattern with Swift in iOS","url":"https://johncodeos.com/how-to-implement-mvvm-pattern-with-swift-in-ios/","published_date":"06/19/2021"}},{"author":"Mihaela MJ","title":"Mihaela MJ's Blog","site_url":"https://aleahim.com","feed_url":"https://aleahim.com/rss/","most_recent_article":{"title":"Core Animation for fun and profit!","url":"https://aleahim.com/core-animation-for-fun-and-profit/","published_date":"06/17/2021"}},{"author":"Dominic Williams","title":"Dominic Williams' Blog","site_url":"https://domz.co.uk","feed_url":"https://domz.co.uk/feed.rss","most_recent_article":{"title":"How WWDC 21 Foreshadows AR Glasses","url":"https://www.domz.co.uk/posts/how-wwdc-21-foreshadows-ar-glasses","published_date":"06/14/2021"}},{"author":"Thomas Sivilay","title":"Morning SwiftUI","site_url":"https://www.morningswiftui.com/","feed_url":"https://www.morningswiftui.com/rss.xml","most_recent_article":{"title":"Customize formatted currency amount in iOS 15","url":"https://www.morningswiftui.com/2021-06-14-attributed-formatted-currency/","published_date":"06/14/2021"}},{"author":"Maxwell Anselm","title":"Floating little leaves of code","site_url":"https://silverhammermba.github.io/blog/","feed_url":"https://silverhammermba.github.io/blog/feed.xml","most_recent_article":{"title":"The Genetics of Dark (Netflix)","url":"https://silverhammermba.github.io/blog/2021/06/13/dark","published_date":"06/12/2021"}},{"author":"Simon Kågedal Reimer","title":"skagedal’s oboy","site_url":"https://blog.skagedal.tech","feed_url":"http://blog.skagedal.tech/feed.xml","most_recent_article":{"title":"Stuart Russell: Human Compatible","url":"https://blog.skagedal.tech/2021/06/13/human-compatible-chapter-1.html","published_date":"06/12/2021"}},{"author":"Joseph Duffy","title":"Joseph Duffy's Blog","site_url":"https://josephduffy.co.uk/posts","feed_url":"https://josephduffy.co.uk/atom.xml","most_recent_article":{"title":"Hosting DocC Archives","url":"https://josephduffy.co.uk/posts/hosting-docc-archives","published_date":"06/12/2021"}},{"author":"Ben Scheirman","title":"Ben Scheirman’s Blog","site_url":"https://benscheirman.com/","feed_url":"https://benscheirman.com/rss/","most_recent_article":{"title":"Async/Await and the Future of Combine","url":"https://benscheirman.com/2021/06/async-await-and-the-future-of-combine/","published_date":"06/09/2021"}},{"author":"Vlad Iacob","title":"Vlad Iacob on Medium","site_url":"https://vladiacob.medium.com","feed_url":"https://medium.com/feed/@vladiacob","most_recent_article":{"title":"Leveraging UIStackView and result builders to ease our remaining days of UIKit. (Part 1)","url":"https://vladiacob.medium.com/leveraging-uistackview-and-result-builders-to-ease-our-remaining-days-of-uikit-part-1-e9c325458047?source=rss-2bdec0ce35b7------2","published_date":"06/08/2021"}},{"author":"Mateusz Matrejek","title":"Mateusz Matrejek's Blog","site_url":"https://matrejek.eu/","feed_url":"https://matrejek.eu/feed.rss","most_recent_article":{"title":"Bottom sheet on iOS15 using UISheetPresentationController and Xcode 13","url":"https://matrejek.eu/posts/implementing-form-with-uisheetpresentationcontroller","published_date":"06/07/2021"}},{"author":"Becky Hansmeyer","title":"Becky Hansmeyer’s Blog","site_url":"http://beckyhansmeyer.com","feed_url":"http://beckyhansmeyer.com/category/general/feed/","most_recent_article":{"title":"A Few Thoughts on the Eve of WWDC","url":"https://beckyhansmeyer.com/2021/06/06/a-few-thoughts-on-the-eve-of-wwdc/","published_date":"06/05/2021"}},{"author":"Ilter Cengiz","title":"Objective Tidbits","site_url":"https://objectivetidbits.com","feed_url":"https://objectivetidbits.com/rss/","most_recent_article":{"title":"Announcing Check Later","url":"https://objectivetidbits.com/announcing-check-later/","published_date":"06/05/2021"}},{"author":"Steve Troughton-Smith","title":"High Caffeine Content","site_url":"https://www.highcaffeinecontent.com","feed_url":"https://www.highcaffeinecontent.com/rss.xml","most_recent_article":{"title":"Catalyst Sample Code Roundup","url":"https://www.highcaffeinecontent.com/blog/20210605-Catalyst-Sample-Code-Roundup","published_date":"06/05/2021"}},{"author":"Ted Bradley","title":"Tedly Codes","site_url":"https://tedly.codes","feed_url":"https://tedly.codes/rss/","most_recent_article":{"title":"Using Hopper to investigate crashes","url":"https://tedly.codes/using-hopper-to-investigate-crashes/","published_date":"06/02/2021"}},{"author":"Daniel Tavares","title":"Daniel Tavares’s Blog","site_url":"https://dev.to/vibrazy","feed_url":"https://dev.to/feed/vibrazy","most_recent_article":{"title":"Easier SwiftUI animations with AnimatedState property wrapper. ","url":"https://dev.to/vibrazy/easier-swiftui-animations-with-animatedstate-property-wrapper-gdi","published_date":"06/01/2021"}},{"author":"Kaya Thomas","title":"Kaya Thomas’ Blog","site_url":"https://kaya.dev/blog/","feed_url":"https://kaya.dev/feed.rss","most_recent_article":{"title":"Girls4Tech, A STEM Educational Initiative for Girls","url":"https://kaya.dev/blog/girls4tech","published_date":"05/29/2021"}},{"author":"Michele Titolo","title":"Michele Titolo’s Blog","site_url":"https://michele.io/","feed_url":"https://michele.io/index.xml","most_recent_article":{"title":"Running Linux Tools in Lambda Containers","url":"https://michele.io/linux-commands-in-lambda/","published_date":"05/28/2021"}},{"author":"Drew McCormack","title":"Drew McCormack on Medium","site_url":"https://medium.com/@drewmccormack","feed_url":"https://medium.com/feed/@drewmccormack","most_recent_article":{"title":"Here is what SwiftData will be (…and what it could have been)","url":"https://drewmccormack.medium.com/here-is-what-swiftdata-will-be-and-what-it-could-have-been-65b79cd11c6a?source=rss-4082d9467366------2","published_date":"05/28/2021"}},{"author":"Jeff Morhous","title":"Jeff Morhous’ Blog","site_url":"https://jeffmorhous.com","feed_url":"https://jeffmorhous.com/feed","most_recent_article":{"title":"How I Built and Launched a SaaS App In 2 Days","url":"https://jeffmorhous.com/how-i-built-and-launched-a-saas-app-in-2-days/","published_date":"05/22/2021"}},{"author":"Marcos Griselli","title":"Marcos Griselli’s Blog","site_url":"https://mar.codes/","feed_url":"https://mar.codes/feed.xml","most_recent_article":{"title":"Simulating side-by-side Xcode Previews","url":"https://mar.codes/blog/simulate-side-by-side-Xcode-previews","published_date":"05/17/2021"}},{"author":"Bram Huenaerts","title":"NSMutableString","site_url":"http://blog.huenaerts.be/","feed_url":"http://blog.huenaerts.be/feed.xml","most_recent_article":{"title":"Testing your app’s URL scheme the easy way","url":"http://blog.huenaerts.be/2021/05/17/testing-your-app-url-scheme","published_date":"05/16/2021"}},{"author":"Artem Loenko","title":"Just Sit And Grin","site_url":"https://dive.github.io/","feed_url":"https://dive.github.io/index.xml","most_recent_article":{"title":"How to get the current selected Xcode and list installed","url":"http://dive.github.io/posts/get_current_selected.xcode/","published_date":"05/16/2021"}},{"author":"Nick Randall","title":"ko9","site_url":"https://ko9.org/","feed_url":"https://ko9.org/feed.rss","most_recent_article":{"title":"Dictionary-Backed Objects","url":"https://ko9.org/posts/dictionary-backed-objects","published_date":"05/16/2021"}},{"author":"Leo Dion","title":"Learning Swift","site_url":"https://learningswift.brightdigit.com","feed_url":"https://learningswift.brightdigit.com/feed/","most_recent_article":{"title":"Package.swift – Getting Started with the SPM Manifest file","url":"https://learningswift.brightdigit.com/swift-package-manifest-file/","published_date":"05/11/2021"}},{"author":"Phil Yates","title":"Phil Yates’ Blog","site_url":"https://pyartez.github.io","feed_url":"https://pyartez.github.io/feed.xml","most_recent_article":{"title":"SOLID Principles in Swift - Open / Closed Principle","url":"https://pyartez.github.io/architecture/solid-principles-in-swift-open-closed-principle.html","published_date":"05/06/2021"}},{"author":"Maksym Shcheglov","title":"On Swift Wings","site_url":"https://onswiftwings.com","feed_url":"https://onswiftwings.com/index.xml","most_recent_article":{"title":"Colorizing images with CoreML","url":"https://www.onswiftwings.com/posts/image-colorization-coreml/","published_date":"05/05/2021"}},{"author":"Manoj Karki","title":"YoSwift","site_url":"https://yoswift.dev","feed_url":"https://yoswift.dev/feed.rss","most_recent_article":{"title":"Forward declaring protocols","url":"https://yoswift.dev/swift/forward-declaration","published_date":"05/05/2021"}},{"author":"Jared Sinclair","title":"Jared Sinclair’s Blog","site_url":"https://jaredsinclair.com/","feed_url":"https://jaredsinclair.com/feed.xml","most_recent_article":{"title":"The Destructors, or, Yet Another Rant About That Basecamp Post","url":"https://jaredsinclair.com/2021/05/03/basecramp","published_date":"05/02/2021"}},{"author":"Tammo Freese","title":"Tammo Freese on Medium","site_url":"https://medium.com/@tammofreese","feed_url":"https://medium.com/feed/@tammofreese","most_recent_article":{"title":"Safely Decoding Enums in Swift","url":"https://medium.com/mobimeo-technology/safely-decoding-enums-in-swift-1df532af9f42?source=rss-84cc0d5dfb3a------2","published_date":"04/30/2021"}},{"author":"Tim Ekl","title":"Tim Ekl’s Blog","site_url":"https://www.timekl.com","feed_url":"https://www.timekl.com/atom.xml","most_recent_article":{"title":"Swift Generics 2: Existentials Boogaloo","url":"https://timekl.com/blog/2021/04/26/swift-generics-2-existentials-boogaloo","published_date":"04/26/2021"}},{"author":"Christian Selig","title":"Christian Selig's Blog","site_url":"https://christianselig.com","feed_url":"https://christianselig.com/index.xml","most_recent_article":{"title":"Table of Contents Selector View","url":"https://christianselig.com/2021/04/table-of-contents-selector/","published_date":"04/25/2021"}},{"author":"Riley Testut","title":"Riley Testut’s Blog","site_url":"http://rileytestut.com/blog/","feed_url":"http://rileytestut.com/feed.xml","most_recent_article":{"title":"Delta 1.3 - Nintendo DS Emulation For Everyone","url":"http://rileytestut.com/blog/2021/04/21/delta-1-3-ds-for-everyone","published_date":"04/20/2021"}},{"author":"Richard Jones","title":"Richard Jones' Blog","site_url":"https://richardj.org","feed_url":"https://richardj.org/feed/","most_recent_article":{"title":"Sunbeam: Spring 2021 Update","url":"https://richardj.org/2021/04/18/sunbeam-spring-2021-update/","published_date":"04/18/2021"}},{"author":"Jeroen Leenarts - AppForce1","title":"AppForce1 blog","site_url":"https://appforce1.net/blog/","feed_url":"https://appforce1.net/blog/rss.php","most_recent_article":{"title":" Frequently used keyboard shortcuts I use in/with Xcode","url":"https://appforce1.net/blog/frequently-used-keyboard-shortcuts","published_date":"04/16/2021"}},{"author":"David Olesch","title":"Get on the Store","site_url":"https://getonthestore.com/","feed_url":"https://getonthestore.com/feed/","most_recent_article":{"title":"Writing your App’s Privacy Policy","url":"https://getonthestore.com/writing-your-apps-privacy-policy/?utm_source=rss&utm_medium=rss&utm_campaign=writing-your-apps-privacy-policy","published_date":"04/13/2021"}},{"author":"Peter Steinberger","title":"Peter Steinberger’s Blog","site_url":"https://steipete.com","feed_url":"https://steipete.com/feed.xml","most_recent_article":{"title":"Top-Level Menu Visibility in SwiftUI for macOS","url":"https://steipete.com/posts/top-level-menu-visibility-in-swiftui","published_date":"04/09/2021"}},{"author":"Fadi Ossama","title":"Fadi Ossama on Medium","site_url":"https://medium.com/@fadyossama","feed_url":"https://medium.com/feed/@fadyossama","most_recent_article":{"title":"Software task lifecycle","url":"https://medium.com/swiftcairo/software-task-lifecycle-cb717ef0ff92?source=rss-58c5886a5df0------2","published_date":"04/08/2021"}},{"author":"Manuel Kunz and Nicolas Spinner","title":"StepUp Development","site_url":"https://medium.com/stepup-development","feed_url":"https://medium.com/feed/stepup-development","most_recent_article":{"title":"Pie Chart in SwiftUI","url":"https://medium.com/stepup-development/pie-chart-in-swiftui-24a9ec44d438?source=rss----1ece39e3c702---4","published_date":"04/03/2021"}},{"author":"Markos Charatzas","title":"qnoid.com","site_url":"https://qnoid.com","feed_url":"https://qnoid.com/feed.xml","most_recent_article":{"title":"Interview on the CERN Alumni Podcast","url":"https://qnoid.com/2021/03/26/cern.html?utm_source=blog+rss+feed&utm_medium=rss&utm_campaign=rss+feed","published_date":"03/25/2021"}},{"author":"Matt Gallagher","title":"Cocoa with Love","site_url":"https://www.cocoawithlove.com/","feed_url":"http://www.cocoawithlove.com/feeds/posts/default?alt=rss","most_recent_article":{"title":"App architecture basics in SwiftUI Part 4: Services","url":"https://www.cocoawithlove.com/blog/separated-services-layer.html","published_date":"03/22/2021"}},{"author":"Mohammad Asif","title":"Asif's Blog","site_url":"https://asifmohd.github.io/","feed_url":"https://asifmohd.github.io/feed.ios.xml","most_recent_article":{"title":"Digging deeper into xcbuild: Rules and Tasks","url":"https://asifmohd.github.io/ios/2021/03/11/xcbuild-debug-info.html","published_date":"03/11/2021"}},{"author":"Ben Dodson","title":"Ben Dodson’s Weblog","site_url":"https://bendodson.com/weblog/","feed_url":"https://bendodson.com/rss.xml","most_recent_article":{"title":"Side Project: Stoutness","url":"https://bendodson.com/weblog/2021/03/10/stoutness/","published_date":"03/10/2021"}},{"author":"Vadim Bulavin","title":"YASB - Yet Another Swift Blog","site_url":"https://www.vadimbulavin.com/","feed_url":"https://www.vadimbulavin.com/feed.xml","most_recent_article":{"title":"Code Generating Swift Mocks with Sourcery","url":"https://www.vadimbulavin.com/mocking-with-sourcery","published_date":"03/08/2021"}},{"author":"Khorkov Vyacheslav","title":"Swifty Finch","site_url":"https://swiftyfinch.github.io/en","feed_url":"https://swiftyfinch.github.io/feed.rss","most_recent_article":{"title":"🏈 **Rugby:** Optimise CocoaPods project","url":"https://swiftyfinch.github.io/en/2021-03-09-rugby-story","published_date":"03/08/2021"}},{"author":"Hash Coding","title":"Hacking The iOS Interview","site_url":"https://medium.com/hash-coding","feed_url":"https://medium.com/feed/hash-coding","most_recent_article":{"title":"Swift — Initialization","url":"https://medium.com/hash-coding/swift-initialization-4f5bebc26425?source=rss----8167d64d21a9---4","published_date":"03/08/2021"}},{"author":"Randy Swift","title":"Simple Swift Guide","site_url":"https://www.simpleswiftguide.com","feed_url":"https://www.simpleswiftguide.com/feed/","most_recent_article":{"title":"SwiftUI TextEditor complete tutorial","url":"https://www.simpleswiftguide.com/swiftui-texteditor-complete-tutorial/","published_date":"03/06/2021"}},{"author":"Paul Weichhart","title":"The education of Paul Weichhart","site_url":"https://www.paulweichhart.com","feed_url":"https://www.paulweichhart.com/feed.xml","most_recent_article":{"title":"Introducing Set Your Intention","url":"https://www.paulweichhart.com/2021/03/03/Introducing-Set-Your-Intention","published_date":"03/02/2021"}},{"author":"Tim Roesner","title":"Tim Roesner's Blog","site_url":"https://blog.timroesner.com","feed_url":"https://blog.timroesner.com/feed.xml","most_recent_article":{"title":"Explore GraphQL with Graphman","url":"https://blog.timroesner.com/explore-graphql-with-graphman","published_date":"02/28/2021"}},{"author":"Conrad Stoll","title":"Conrad Stoll’s Blog","site_url":"http://conradstoll.com/","feed_url":"http://conradstoll.com/blog?format=RSS","most_recent_article":{"title":"Adding Services to Grocery for Mac with Catalyst and AppKit","url":"http://conradstoll.com/blog/2021/2/26/adding-services-to-grocery-for-mac-with-catalyst-and-appkit","published_date":"02/25/2021"}},{"author":"Stavros Schizas","title":"Stavros Schizas' Blog","site_url":"https://stavrosschizas.com","feed_url":"https://stavrosschizas.com/post/index.xml","most_recent_article":{"title":"Encrypt DNS in iOS 14 applications","url":"https://stavrosschizas.com/post/encrypt-dns-in-ios-14-applications/","published_date":"02/24/2021"}},{"author":"Noah Gilmore","title":"Noah Gilmore’s Blog","site_url":"https://noahgilmore.com/blog/tags/ios/","feed_url":"https://noahgilmore.com/blog/ios.xml","most_recent_article":{"title":"Loading WebP Images from UIPasteboard","url":"https://noahgilmore.com/blog/uipasteboard-webp","published_date":"02/23/2021"}},{"author":"Jimmy M Andersson","title":"Jimmy M Andersson on Medium","site_url":"https://medium.com/@JimmyMAndersson","feed_url":"https://medium.com/feed/@JimmyMAndersson","most_recent_article":{"title":"Data Visualization With SwiftUI: Pie Charts","url":"https://towardsdatascience.com/data-visualization-with-swiftui-pie-charts-bcad1903c5d2?source=rss-163113c6fbf8------2","published_date":"02/14/2021"}},{"author":"Dan Loman","title":"Dan Loman’s Blog","site_url":"https://danloman.com","feed_url":"https://danloman.com/feed.xml","most_recent_article":{"title":"Use a Gatekeeper to manage control flow","url":"https://danloman.com/2021/02/14/use-a-gatekeeper-to-manage-control-flow","published_date":"02/14/2021"}},{"author":"Andrew Bancroft","title":"Andrew Bancroft’s Blog","site_url":"https://www.andrewcbancroft.com","feed_url":"https://www.andrewcbancroft.com/index.xml","most_recent_article":{"title":"Swift Five - Week of February 14, 2021","url":"https://www.andrewcbancroft.com/blog/ios-development/swift-five/swift-five-2021-02-14/","published_date":"02/13/2021"}},{"author":"Jeremy W. Sherman","title":"Jeremy W. Sherman’s Blog","site_url":"https://jeremywsherman.com/","feed_url":"https://jeremywsherman.com/index.xml","most_recent_article":{"title":"Improving a testing-library test\n","url":"https://jeremywsherman.com/blog/2021/02/04/improving-a-testing-library-test/","published_date":"02/04/2021"}},{"author":"Mike Pesate","title":"Mike Pesate on Medium","site_url":"https://medium.com/@mpesate","feed_url":"https://medium.com/feed/@mpesate","most_recent_article":{"title":"The Do’s and Don’ts of Code Reviews","url":"https://betterprogramming.pub/the-dos-and-don-ts-of-code-reviews-77032ba3a30c?source=rss-e597980a604f------2","published_date":"01/25/2021"}},{"author":"Tai Le","title":"geek-is-stupid","site_url":"https://geek-is-stupid.github.io","feed_url":"https://geek-is-stupid.github.io/feed.xml","most_recent_article":{"title":"iOS Unit-Test Tips & Tricks","url":"https://geek-is-stupid.github.io/2021-01-24-iOS-UnitTest-Tips-and-Tricks/","published_date":"01/24/2021"}},{"author":"Sven A. Schmidt","title":"finestructure","site_url":"https://finestructure.co/","feed_url":"https://finestructure.co/blog?format=RSS","most_recent_article":{"title":"Podcast appearance: Empower Apps, Episode 77","url":"https://finestructure.co/blog/2021/1/22/podcast-appearance-empower-apps-episode-77","published_date":"01/22/2021"}},{"author":"Pierre Felgines","title":"Pierre Felgines’s Blog","site_url":"https://felginep.github.io","feed_url":"https://felginep.github.io/feed.xml","most_recent_article":{"title":"Xcode configuration for multiple environments","url":"https://felginep.github.io/2021-01-21/xcode-configuration-multiple-environments","published_date":"01/20/2021"}},{"author":"Natan Rolnik","title":"Natan Rolnik’s Blog","site_url":"https://blog.natanrolnik.me","feed_url":"https://blog.natanrolnik.me/feed.xml","most_recent_article":{"title":"Using Swift in AWS Lambda to Display CI Build Badges","url":"https://blog.natanrolnik.me/Swift-Lambda-Build-Badges","published_date":"01/19/2021"}},{"author":"Michael Collins","title":"The Imaginary Road","site_url":"https://www.michaelfcollins3.me/categories/ios-development/","feed_url":"https://www.michaelfcollins3.me/categories/ios-development/index.xml","most_recent_article":{"title":"Build libgit2 for iOS and Catalyst","url":"https://www.michaelfcollins3.me/posts/2021/01/build-libgit2-for-ios-and-catalyst/","published_date":"01/17/2021"}},{"author":"Claudio Cannino","title":"A Swift Misadventure","site_url":"https://medium.com/a-swift-misadventure","feed_url":"https://medium.com/feed/a-swift-misadventure","most_recent_article":{"title":"Mastering the iOS Interview","url":"https://medium.com/a-swift-misadventure/mastering-the-ios-interview-98e200902fe9?source=rss----7270030b88d6---4","published_date":"01/14/2021"}},{"author":"Max Desiatov","title":"Max Desiatov’s Blog","site_url":"https://desiatov.com/","feed_url":"https://desiatov.com/rss.xml","most_recent_article":{"title":"Introduction to structured concurrency in Swift: continuations, tasks, and cancellation","url":"https://desiatov.com/swift-structured-concurrency-introduction/","published_date":"01/14/2021"}},{"author":"Donnie Smith","title":"donnie-jp's Blog","site_url":"https://dev.to/donniejp","feed_url":"https://dev.to/feed/donniejp","most_recent_article":{"title":"How we build and deliver quality mobile SDKs at scale","url":"https://dev.to/donniejp/how-we-build-and-deliver-quality-mobile-sdks-at-scale-269k","published_date":"01/11/2021"}},{"author":"David Owens II","title":"owensd.io","site_url":"https://owensd.io","feed_url":"https://owensd.io/feed/","most_recent_article":{"title":"Some thoughts about Jan 6th","url":"https://owensd.io/2021/01/07/some-thoughts-about-jan-6th/","published_date":"01/07/2021"}},{"author":"Rui Miguel","title":"Rui Miguel's Blog","site_url":"https://ruimiguel.com/blog","feed_url":"https://ruimiguel.com/blog/feed/","most_recent_article":{"title":"A Tale of Xcode Server","url":"https://medium.com/karlmax-berlin/a-tale-of-xcode-server-d1649a4141b3?source=rss-2a8e219c534a------2","published_date":"01/07/2021"}},{"author":"Sasmito Adibowo","title":"Indie Spark","site_url":"https://indiespark.top/tag/ios/","feed_url":"https://indiespark.top/tag/ios/feed/","most_recent_article":{"title":"How to Transfer Applications for App Store Small Business Program Members","url":"https://indiespark.top/business/app-transfer-small-business-program/","published_date":"01/06/2021"}},{"author":"Mathias Quintero","title":"Mathias Quintero's Blog","site_url":"https://quintero.io/blog/","feed_url":"https://quintero.io/feed.rss","most_recent_article":{"title":"SwiftUI + GraphQL = 😍🚀🙌","url":"https://quintero.io/blog/Graphaello","published_date":"01/05/2021"}},{"author":"Ruslan Alikhamov","title":"iOS Divine","site_url":"https://iosdivin.blog","feed_url":"https://iosdivin.blog/feed/","most_recent_article":{"title":"SwiftUI Weekly Observations #2","url":"https://iosdivin.blog/2021/01/05/swiftui-weekly-observations-2/","published_date":"01/05/2021"}},{"author":"Avi Tsadok","title":"Scorpios","site_url":"https://scorpios.home.blog/","feed_url":"https://scorpios.home.blog/feed/","most_recent_article":{"title":"Async functions are coming to Swift","url":"https://scorpios.home.blog/2021/01/03/async-functions-are-coming-to-swift/","published_date":"01/02/2021"}},{"author":"Jogendra Kumar","title":"Jogendra’s Blog","site_url":"https://jogendra.dev/","feed_url":"https://jogendra.dev/feed.xml","most_recent_article":{"title":"Import Cycles in Golang: How To Deal With Them","url":"https://jogendra.dev/import-cycles-in-golang-and-how-to-deal-with-them","published_date":"01/02/2021"}},{"author":"Felix Krause","title":"Felix Krause’s Blog","site_url":"https://krausefx.com/","feed_url":"https://krausefx.com/feed.xml","most_recent_article":{"title":"iOS Privacy: Detect when an iOS user hits the Safari share button","url":"https://krausefx.com//blog/ios-privacy-safari-share-button","published_date":"01/01/2021"}},{"author":"Dave Verwer","title":"Dave Verwer’s Blog","site_url":"https://daveverwer.com/","feed_url":"https://daveverwer.com/feed.xml","most_recent_article":{"title":"Closing my rings in 2020","url":"https://daveverwer.com/blog/closing-my-rings-in-2020","published_date":"12/31/2020"}},{"author":"Alia","title":"Alia's artefacts","site_url":"https://alia-traces.github.io","feed_url":"https://alia-traces.github.io/feed.xml","most_recent_article":{"title":"Maskless, capeless, free (4KB Executable Graphics)","url":"https://alia-traces.github.io/demoscene/metal/pathtracing/2020/12/31/maskless-capeless-free","published_date":"12/31/2020"}},{"author":"Mark Brownsword","title":"Mark Brownsword's Blog","site_url":"https://markbrownsword.com/","feed_url":"https://markbrownsword.com/feed","most_recent_article":{"title":"Machine Learning: Sentence Embedding with Swift","url":"https://markbrownsword.com/2020/12/23/machine-learning-sentence-embedding-with-swift/","published_date":"12/22/2020"}},{"author":"Arthur Sabintsev","title":"Arthur Sabintsev's Blog","site_url":"https://medium.com/@artsabintsev","feed_url":"https://medium.com/feed/@artsabintsev","most_recent_article":{"title":"Simultaneously Supporting Bundle Resources in Swift Package Manager and CocoaPods","url":"https://blog.sabintsev.com/simultaneously-supporting-bundle-resources-in-swift-package-manager-and-cocoapods-3fa35f4bce4e?source=rss-d59564ad49f6------2","published_date":"12/21/2020"}},{"author":"Simon Ljungberg","title":"I Am Simme","site_url":"https://www.iamsim.me/","feed_url":"https://www.iamsim.me/index.xml","most_recent_article":{"title":"Composable Architecture and UIKit: Collection Views","url":"https://www.iamsim.me/composable-architecture-and-uikit-collection-views/","published_date":"12/16/2020"}},{"author":"Ozgur Sahin","title":"Ozgur Sahin on Medium","site_url":"https://medium.com/@ozgurs","feed_url":"https://medium.com/feed/@ozgurs","most_recent_article":{"title":"Train a Face-Mask Detection Model in Under 5 Minutes using Lobe.ai","url":"https://heartbeat.comet.ml/train-face-mask-detection-model-under-5-minutes-using-lobe-ai-46a26b7b1f17?source=rss-32c3e42a9823------2","published_date":"12/16/2020"}},{"author":"Mayur Gowravaram","title":"Mayur Gowravaram's Blog","site_url":"https://theswiftdeveloper.com","feed_url":"https://theswiftdeveloper.com/feed","most_recent_article":{"title":"Generics Part 2 – Type Constraints","url":"https://theswiftdeveloper.com/2020/12/08/generics-part-2-type-constraints/?utm_source=rss&utm_medium=rss&utm_campaign=generics-part-2-type-constraints","published_date":"12/08/2020"}},{"author":"Yunus Koçyiğit","title":"Yunus Koçyiğit - Medium","site_url":"https://kocyigityunus.medium.com","feed_url":"https://medium.com/feed/@kocyigityunus","most_recent_article":{"title":"How to configure Xcode projects for different environments?","url":"https://kocyigityunus.medium.com/how-to-configure-xcode-projects-for-different-environments-30b23ed44ee6?source=rss-65881dbca53b------2","published_date":"12/07/2020"}},{"author":"Gaël Foppolo","title":"/var/log/journal","site_url":"https://gaelfoppolo.com/","feed_url":"https://gaelfoppolo.com/feed.xml","most_recent_article":{"title":"Magical Objective-C entrypoint","url":"https://www.gaelfoppolo.com/magical-objective-c-entrypoint","published_date":"12/05/2020"}},{"author":"Dino Bozic","title":"Dino Bozic on Medium","site_url":"https://medium.com/@dino-bozic","feed_url":"https://medium.com/feed/@dino-bozic","most_recent_article":{"title":"DevOps in iOS","url":"https://medium.com/azikus/devops-in-ios-f6b9b26aec9d?source=rss-e26c12d2644------2","published_date":"12/04/2020"}},{"author":"Honza Dvorsky","title":"Honza Dvorsky’s Blog","site_url":"http://honzadvorsky.com","feed_url":"https://honzadvorsky.com/feed.xml","most_recent_article":{"title":"E15: Tesla (🇨🇿)","url":"http://honzadvorsky.com/articles/2020-12-04-11-30-e15_tesla/","published_date":"12/04/2020"}},{"author":"Denys Zhadanov","title":"Denys Zhadanov on Medium","site_url":"https://denzhadanov.com/","feed_url":"https://denzhadanov.com/feed/","most_recent_article":{"title":"How I read books: a guide on how to learn","url":"https://denzhadanov.com/how-i-read-books-a-guide-on-how-to-learn-a943123a4aeb?source=rss----5255a3782276---4","published_date":"12/02/2020"}},{"author":"Uli Kusterer","title":"Orange Juice Liberation Front","site_url":"https://orangejuiceliberationfront.com","feed_url":"https://orangejuiceliberationfront.com/feed.xml","most_recent_article":{"title":"The Surprising Slowness of C++’s std::variant","url":"https://orangejuiceliberationfront.com/surprising-slowness-of-cpp-std-variant","published_date":"11/27/2020"}},{"author":"Georgios Sotiropoulos","title":"Georgios Sotiropoulos on Medium","site_url":"https://medium.com/@ge.sotiropoulos","feed_url":"https://medium.com/feed/@ge.sotiropoulos","most_recent_article":{"title":"Snapshot Testing. Testing the UI and Beyond (Part 3)","url":"https://medium.com/xmglobal/snapshot-testing-testing-the-ui-and-beyond-part-3-860bd9e175b8?source=rss-f1e944862e90------2","published_date":"11/27/2020"}},{"author":"Gus Mueller","title":"The Shape of Everything","site_url":"http://shapeof.com/","feed_url":"http://shapeof.com/rss.xml","most_recent_article":{"title":"The Pursuit of Tone: Buddy Guy","url":"https://shapeof.com/archives/2020/11/the_pursuit_of_tone_buddy_guy.html","published_date":"11/26/2020"}},{"author":"Ryan Ashcraft","title":"Ryan Ashcraft's Blog","site_url":"https://ryanashcraft.com","feed_url":"https://ryanashcraft.com/rss/","most_recent_article":{"title":"iOS Apps on M1 Macs","url":"https://ryanashcraft.com/ios-apps-on-m1-macs/","published_date":"11/25/2020"}},{"author":"Eugene Kazaev","title":"Eugene Kazaev’s blog","site_url":"https://eugenenekhoroshiy.medium.com","feed_url":"https://medium.com/feed/@eugenenekhoroshiy","most_recent_article":{"title":"My COVID-19 lockdown project or how I started to dig into a custom UICollectionViewLayout to get a…","url":"https://itnext.io/my-covid-19-lockdown-project-or-how-i-started-to-dig-into-a-custom-uicollectionviewlayout-to-get-a-d053e1ad3aa0?source=rss-e3175bda00e0------2","published_date":"11/23/2020"}},{"author":"Natanel Niazoff","title":"Natanel Niazoff's Blog","site_url":"https://niazoff.com","feed_url":"https://niazoff.com/feed.rss","most_recent_article":{"title":"Hello World: Building a site in Swift with Publish","url":"https://niazoff.com/posts/hello-world","published_date":"11/22/2020"}},{"author":"Marc Palmer","title":"Marc Palmer’s Blog","site_url":"https://marcpalmer.net/category/ios/","feed_url":"https://marcpalmer.net/category/ios/feed/","most_recent_article":{"title":"Beware the cancelled interactive dismiss of SwiftUI popovers","url":"https://marcpalmer.net/beware-the-cancelled-interactive-dismiss-of-swiftui-popovers/","published_date":"11/21/2020"}},{"author":"Kamil Pyć","title":"Kamil Pyć’s Blog","site_url":"https://pyckamil.github.io","feed_url":"https://pyckamil.github.io/feed.xml","most_recent_article":{"title":"Deprecating Frameworks","url":"https://pyckamil.github.io/programming,/framework,/xcode/2020/11/21/deprecating-frameworks","published_date":"11/21/2020"}},{"author":"Adrian Ross","title":"Lux Mentis","site_url":"https://luxmentis.org","feed_url":"https://luxmentis.org/rss/","most_recent_article":{"title":"On iOS scenes, and why your UIApplicationDelegate method isn't being called","url":"https://luxmentis.org/on-ios-scenes-and-why-your/","published_date":"11/19/2020"}},{"author":"Azhar Anwar","title":"Swift Ramen","site_url":"https://swiftramen.com/","feed_url":"https://swiftramen.com/home?format=rss","most_recent_article":{"title":"Escaping closures","url":"https://www.swiftramen.com/home/escaping-and-non-escaping-closures","published_date":"11/18/2020"}},{"author":"Dan Gauthier","title":"Dan Gauthier’s Blog","site_url":"https://danielgauthier.me","feed_url":"https://danielgauthier.me/feed.xml","most_recent_article":{"title":"Identity Crisis!","url":"/identity-crisis/","published_date":"11/18/2020"}},{"author":"Badarinath Venkatnarayansetty","title":"Badarinath Venkatnarayansetty on Medium","site_url":"https://medium.com/@badrinathvm","feed_url":"https://medium.com/feed/@badrinathvm","most_recent_article":{"title":"Arguments Lists too long","url":"https://badrinathvm.medium.com/arguments-lists-too-long-cdc4c18add?source=rss-ddcf3cc4a563------2","published_date":"11/18/2020"}},{"author":"Axel Kee","title":"Fluffy","site_url":"https://fluffy.es/","feed_url":"https://fluffy.es/rss/","most_recent_article":{"title":"End of the road, and thanks for reading this blog!","url":"https://fluffy.es/goodbye/","published_date":"11/15/2020"}},{"author":"Kaira Diagne","title":"Kaira Diagne’s Blog","site_url":"https://kairadiagne.com","feed_url":"https://kairadiagne.com/feed.xml","most_recent_article":{"title":"Adopting the new PHPicker","url":"https://kairadiagne.com/2020/11/04/adopting-the-new-photo-picker","published_date":"11/03/2020"}},{"author":"Drew McCormack","title":"App Decentral","site_url":"https://appdecentral.com","feed_url":"https://appdecentral.com/feed/","most_recent_article":{"title":"Developing a Distributed Data App with SwiftUI and CRDTs","url":"https://appdecentral.com/2020/11/03/developing-a-distributed-data-app-with-swiftui-and-crdts/","published_date":"11/03/2020"}},{"author":"Imthath M","title":"Imthath's Swift Journey","site_url":"https://dev.to/imthath_m/","feed_url":"https://dev.to/feed/imthath_m","most_recent_article":{"title":"A Sidebar in SwiftUI without NavigationView","url":"https://dev.to/imthath_m/a-sidebar-in-swiftui-without-navigationview-4h7j","published_date":"11/02/2020"}},{"author":"Paul Solt","title":"Super Easy Apps","site_url":"http://blog.supereasyapps.com/","feed_url":"http://blog.supereasyapps.com/rss","most_recent_article":{"title":"30 Auto Layout Best Practices","url":"https://blog.supereasyapps.com/30-auto-layout-best-practices/","published_date":"10/19/2020"}},{"author":"Göksel Köksal","title":"Göksel Köksal on Medium","site_url":"https://medium.com/@gokselkoksal","feed_url":"https://medium.com/feed/@gokselkoksal","most_recent_article":{"title":"Testing Analytics Events","url":"https://medium.com/@gokselkoksal/testing-analytics-events-655cb01bf7ed?source=rss-5c2696f0be42------2","published_date":"10/19/2020"}},{"author":"Anastasiia Vixentael","title":"Anastasiia Vixentael on Medium","site_url":"https://medium.com/@vixentael/","feed_url":"https://medium.com/feed/@vixentael/","most_recent_article":{"title":"My interview with Sonya Moisset","url":"https://medium.com/@vixentael/my-interview-with-sonya-moisset-ca87f3605162?source=rss-5d8623d95b92------2","published_date":"10/19/2020"}},{"author":"Cory Bohon","title":"Cory Bohon's Blog","site_url":"https://corybohon.com/categories/software-development/","feed_url":"https://corybohon.com/categories/software-development/feed.xml","most_recent_article":{"title":"BluSaver — A macOS screensaver featuring Blu","url":"https://corybohon.com/2020/10/14/a-few-years.html","published_date":"10/14/2020"}},{"author":"Joachim Kurz","title":"Joachim Complains About Things","site_url":"http://blog.cocoafrog.de/","feed_url":"http://blog.cocoafrog.de/feed.xml","most_recent_article":{"title":"My 10 Year Journey to Apple","url":"https://blog.cocoafrog.de/how-to/2020/10/14/Joining-Apple","published_date":"10/14/2020"}},{"author":"Xavier Lowmiller","title":"Xavier Lowmiller's Blog","site_url":"https://xavierlowmiller.github.io","feed_url":"https://xavierlowmiller.github.io/feed.xml","most_recent_article":{"title":"Implementing the Slide to Unlock Animation in SwiftUI","url":"https://xavierlowmiller.github.io/blog/2020/10/14/Slide-to-unlock-in-SwiftUI","published_date":"10/13/2020"}},{"author":"Denis Poifol","title":"Denis Poifol’s Blog","site_url":"https://denispoifol.github.io/","feed_url":"https://denispoifol.github.io/feed.xml","most_recent_article":{"title":"Types of types","url":"https://denispoifol.github.io//swift/2020/10/12/Types_of_types.html","published_date":"10/12/2020"}},{"author":"Pavel Zak","title":"Pavel Zak’s Dev Blog","site_url":"https://izakpavel.github.io","feed_url":"https://izakpavel.github.io/feed.xml","most_recent_article":{"title":"Mastering transitions in SwiftUI","url":"http://izakpavel.github.io/development/2020/10/12/transitions-in-swiftui","published_date":"10/11/2020"}},{"author":"Douglas Hill","title":"Douglas Hill's Blog","site_url":"https://douglashill.co","feed_url":"https://douglashill.co/feed.json","most_recent_article":{"title":"What’s New in KeyboardKit for iOS 14?","url":"https://douglashill.co/whats-new-in-keyboardkit-for-ios-14/","published_date":"10/08/2020"}},{"author":"Rizwan Mohamed Ibrahim","title":"Rizwan's blog","site_url":"https://blog.rizwan.dev","feed_url":"https://blog.rizwan.dev/rss.xml","most_recent_article":{"title":"SwiftUI Import/Export files - Part 2","url":"https://blog.rizwan.dev/blog/swiftui-import-export-files-part-2","published_date":"10/06/2020"}},{"author":"Dmitrii Ivanov","title":"Topolog’s tech blog","site_url":"https://dmtopolog.com","feed_url":"https://dmtopolog.com/feed.xml","most_recent_article":{"title":"Do protocols break Single Responsibility Principle?","url":"http://dmtopolog.com/do-protocols-break-srp","published_date":"10/05/2020"}},{"author":"Marcin Krzyżanowski","title":"Marcin Krzyżanowski’s Blog","site_url":"http://blog.krzyzanowskim.com/","feed_url":"http://blog.krzyzanowskim.com/rss/","most_recent_article":{"title":"Local unit tests with Xcode","url":"https://blog.krzyzanowskim.com/2020/09/28/local-unit-tests-with-xcode/","published_date":"09/28/2020"}},{"author":"Grant Isom","title":"Grant Isom's Blog","site_url":"https://grantisom.com","feed_url":"https://grantisom.com/feed.xml","most_recent_article":{"title":"Next Chapter","url":"https://grantisom.com/2020/09/27/next-chapter.html","published_date":"09/27/2020"}},{"author":"Ben Scholtysik","title":"Ben Scholtysik’s Blog","site_url":"https://benjaminscholtysik.com/","feed_url":"https://benjaminscholtysik.com/feed/","most_recent_article":{"title":"Celebrate Bisexuality+ Day 2020","url":"https://benjaminscholtysik.com/2020/09/22/world-bisexuality-day-2020/","published_date":"09/22/2020"}},{"author":"Paweł Madej","title":"Paweł Madej's Blog","site_url":"https://pawelmadej.com","feed_url":"https://pawelmadej.com/feed.xml","most_recent_article":{"title":"Introducing TwitterText Swift library","url":"https://www.pawelmadej.com/post/introducing-twitter-text-swift-library/","published_date":"09/22/2020"}},{"author":"Monica Pandey","title":"Monica's Compilation","site_url":"http://monicascompilation.com","feed_url":"http://monicascompilation.com/feed/","most_recent_article":{"title":"get_task_allow 🤔","url":"http://monicascompilation.com/get-task-allow/?utm_source=rss&utm_medium=rss&utm_campaign=get-task-allow","published_date":"09/21/2020"}},{"author":"Eleni Papanikolopoul","title":"Eleni Papanikolopoul on Medium","site_url":"https://medium.com/@elenipapanikolo","feed_url":"https://medium.com/feed/@elenipapanikolo","most_recent_article":{"title":"Integrating CI/CD for MULTIPLE environments with Jenkins & Fastlane (Part 2/2)","url":"https://medium.com/@elenipapanikolo/integrating-ci-cd-for-multiple-environments-with-jenkins-fastlane-part-2-2-7f1df780bf7c?source=rss-54fbb1ca7320------2","published_date":"09/19/2020"}},{"author":"Alexander Adelmaer","title":"AppMakers.Dev","site_url":"https://appmakers.dev/category/blog/","feed_url":"https://appmakers.dev/feed/","most_recent_article":{"title":"Xcode Releases – Xcode Release Notes","url":"https://appmakers.dev/xcode-releases-xcode-release-notes/","published_date":"09/15/2020"}},{"author":"Jeff Merola","title":"Coding with Jeff","site_url":"https://www.codingwithjeff.org","feed_url":"https://www.codingwithjeff.org/feed.xml","most_recent_article":{"title":"SwiftUI Modifiers","url":"https://www.codingwithjeff.org/blog/swiftui-modifiers/","published_date":"09/15/2020"}},{"author":"Simon Wolf","title":"Simon Wolf’s Writings","site_url":"http://www.swwritings.com","feed_url":"http://www.swwritings.com/feed.xml","most_recent_article":{"title":"Choosing A New Bike","url":"https://www.swwritings.com/post/choosing-a-new-bike","published_date":"09/13/2020"}},{"author":"Kane Cheshire","title":"Kane Cheshire's Blog","site_url":"https://medium.com/@kanecheshire","feed_url":"https://medium.com/feed/@kanecheshire","most_recent_article":{"title":"Recreating Swift’s Result type in Kotlin","url":"https://medium.com/@KaneCheshire/recreating-swifts-result-type-in-kotlin-f0a065fa6af1?source=rss-203911794be4------2","published_date":"09/09/2020"}},{"author":"Maxim Eremenko","title":"Swift Notes","site_url":"https://maximeremenko.com/","feed_url":"https://maximeremenko.com/feed.xml","most_recent_article":{"title":"Benchmarking Xcode Performance on a large Swift Project. iMac, MacBook, iMac Pro compared","url":"https://maximeremenko.com/benchmarking-xcode-performance-using-swift-imac-macbook-comparison","published_date":"09/07/2020"}},{"author":"Milen Dzhumerov","title":"Milen Dzhumerov’s Blog","site_url":"https://milen.me/","feed_url":"https://milen.me/writings/feed.xml","most_recent_article":{"title":"Auto Linking on iOS & macOS","url":"https://milen.me/writings/auto-linking-on-ios-and-macos/","published_date":"09/03/2020"}},{"author":"Rostyslav Dovhaliuk","title":"Rostyslav Dovhaliuk on Medium","site_url":"https://medium.com/@rdovhaliuk/","feed_url":"https://medium.com/feed/@rdovhaliuk/","most_recent_article":{"title":"iOS 14 UISplitViewController: 5 Issues That You May Run Into","url":"https://medium.com/swlh/ios-14-uisplitviewcontroller-5-issues-that-you-may-run-into-65b09601b3fb?source=rss-eb30806e2170------2","published_date":"09/02/2020"}},{"author":"Daniel Steinberg","title":"Drawing Your Own Conclusions","site_url":"https://www.drawingyourownconclusions.com","feed_url":"https://www.drawingyourownconclusions.com/feed.xml","most_recent_article":{"title":"Functions","url":"https://www.drawingyourownconclusions.com/2020/08/31/Functions","published_date":"08/30/2020"}},{"author":"Francesco Marisaldi","title":"Francesco Marisaldi on Medium","site_url":"https://medium.com/@francesco_","feed_url":"https://medium.com/feed/@francesco_","most_recent_article":{"title":"10 Tips on Developing iOS 14 Widgets","url":"https://medium.com/swlh/10-tips-on-developing-ios-14-widgets-f17b865fbdbc?source=rss-c87a8bf31dbc------2","published_date":"08/20/2020"}},{"author":"Mhd Hejazi","title":"Mhd Hejazi on Medium","site_url":"https://medium.com/@mhdhejazi","feed_url":"https://medium.com/feed/@mhdhejazi","most_recent_article":{"title":"How to Access the AppKit API From Mac Catalyst Apps","url":"https://betterprogramming.pub/how-to-access-the-appkit-api-from-mac-catalyst-apps-2184527020b5?source=rss-d4bee0bcb6bc------2","published_date":"08/19/2020"}},{"author":"Bill Gestrich","title":"Pilot Coder","site_url":"https://pilotcoder.com","feed_url":"https://pilotcoder.com/category/development/feed","most_recent_article":{"title":"Take Control of Your Window AC Unit","url":"https://pilotcoder.com/take-control-of-your-window-ac-unit/","published_date":"08/14/2020"}},{"author":"Thomas Hanning","title":"Thomas Hanning's Blog","site_url":"http://www.thomashanning.com","feed_url":"http://www.thomashanning.com/feed/","most_recent_article":{"title":"SwiftUI: Alert","url":"https://thomashanning.com/swiftui-alert/","published_date":"08/09/2020"}},{"author":"Andrey Volodin","title":"Andrey Volodin on Medium","site_url":"https://medium.com/@s1ddok/","feed_url":"https://medium.com/feed/@s1ddok/","most_recent_article":{"title":"One weird trick for Development Pod type of experience using Swift Package Manager and Xcode 12","url":"https://medium.com/@s1ddok/one-weird-trick-for-development-pod-type-of-experience-using-swift-package-manager-and-xcode-12-4de02d881ec1?source=rss-215d6c63b088------2","published_date":"08/08/2020"}},{"author":"Fabian Fett","title":"Fabian Fett's Blog","site_url":"https://fabianfett.de","feed_url":"https://fabianfett.de/feed.xml","most_recent_article":{"title":"Create your first HTTP endpoint with Swift on AWS Lambda","url":"https://fabianfett.dev/swift-on-aws-lambda-creating-your-first-http-endpoint","published_date":"07/27/2020"}},{"author":"Hesham Abd-Elmegid","title":"Hesham Abd-Elmegid’s Blog","site_url":"https://hesh.am","feed_url":"https://hesh.am/feed.xml","most_recent_article":{"title":"Exploring iOS 14: Crash Reporting using MetricKit","url":"http://hesh.am/2020-07-22/crash-reporting-using-metrickit","published_date":"07/22/2020"}},{"author":"Rajdeep Kwatra","title":"Rajdeep Kwatra on Medium","site_url":"https://medium.com/@rkwatra","feed_url":"https://medium.com/feed/@rkwatra","most_recent_article":{"title":"Background with rounded corners in UITextView","url":"https://levelup.gitconnected.com/background-with-rounded-corners-in-uitextview-1c095c708d14?source=rss-cee883b2eeac------2","published_date":"07/19/2020"}},{"author":"NSHipster","title":"NSHipster","site_url":"https://nshipster.com","feed_url":"https://nshipster.com/feed.xml","most_recent_article":{"title":"As We May Code","url":"https://nshipster.com/as-we-may-code","published_date":"07/07/2020"}},{"author":"António Nunes","title":"SintraWorks Blog","site_url":"https://sintraworks.github.io","feed_url":"https://sintraworks.github.io/feed","most_recent_article":{"title":"An Adaptable Segmented Control","url":"https://sintraworks.github.io/swift/swiftui/2020/07/07/segmentedpicker","published_date":"07/06/2020"}},{"author":"Daniel Kennett","title":"Daniel Kennett’s Blog","site_url":"http://ikennd.ac/","feed_url":"http://ikennd.ac/atom.xml","most_recent_article":{"title":"Vacation In Saudi Arabia","url":"tag:ikennd.ac,2020-07-05:/blog/2020/07/vacation-in-saudi-arabia/","published_date":"07/05/2020"}},{"author":"Lars Augustin","title":"Lars Augustin’s Blog","site_url":"https://larztech.com/","feed_url":"https://larztech.com/feed.rss","most_recent_article":{"title":"The Design of macOS Big Sur","url":"https://larztech.com/posts/2020/07/macos-big-sur-design","published_date":"07/02/2020"}},{"author":"Max","title":"myeyesareblind's Blog","site_url":"http://myeyesareblind.com/","feed_url":"http://myeyesareblind.com/feed.xml","most_recent_article":{"title":"How to build WebRTC for Mac-Catalyst or Ninja intro for Apple-developers | myeyesareblind","url":"http://myeyesareblind.com/2020/06/28/webrtc-catalyst/","published_date":"06/27/2020"}},{"author":"Vatsal Manot","title":"Vatsal Manot's Blog","site_url":"https://vmanot.com","feed_url":"https://vmanot.com/feed","most_recent_article":{"title":"How to use UIApplicationDelegateAdaptor","url":"tag:vmanot.com,2014:Post/how-to-use-uiapplicationdelegateadaptor","published_date":"06/24/2020"}},{"author":"Sam Dods","title":"Sam Dods’s Blog","site_url":"https://medium.com/@sdods","feed_url":"https://medium.com/feed/@sdods","most_recent_article":{"title":"When Will The Web Replace Native Mobile Apps? (Part II)","url":"https://medium.com/kinandcartacreated/when-will-the-web-replace-native-mobile-apps-part-ii-92ee050bbaf1?source=rss-195b086ce5f4------2","published_date":"06/24/2020"}},{"author":"Ilian Konchev","title":"Ilian Konchev on Medium","site_url":"https://medium.com/@iliankonchev","feed_url":"https://medium.com/feed/@iliankonchev","most_recent_article":{"title":"Bringing Zeplin Mobile to iPadOS","url":"https://medium.com/snapp-mobile/bringing-zeplin-mobile-to-ipados-2b3e3c28a194?source=rss-5f805460b514------2","published_date":"06/24/2020"}},{"author":"Sarin Swift","title":"Sarin Swift on Medium","site_url":"https://medium.com/@sarinyaswift","feed_url":"https://medium.com/feed/@sarinyaswift","most_recent_article":{"title":"PanGesture Slidable View — Swift 5","url":"https://medium.com/@sarinyaswift/pangesture-slidable-view-swift-5-6718517f94a8?source=rss-ed60eee1cd58------2","published_date":"06/23/2020"}},{"author":"Mohsen Alijanpour","title":"Mohsen’s Blog","site_url":"https://mohsen.dev","feed_url":"https://mohsen.dev/feed.xml","most_recent_article":{"title":"SwiftUI: Double-Edged Sword","url":"https://mohsen.dev/2020/06/21/swiftui-double-edged-sword","published_date":"06/20/2020"}},{"author":"Benedikt Terhechte","title":"Appventure","site_url":"https://appventure.me/","feed_url":"https://appventure.me/feed.rss","most_recent_article":{"title":"A touch of Combine","url":"https://appventure.me//posts/2020-6-17-a-touch-of-combine.html","published_date":"06/17/2020"}},{"author":"Glenn Gonda","title":"Glenn Gonda's Blog","site_url":"https://glenngonda.com/blog","feed_url":"http://feeds.feedburner.com/glenngonda","most_recent_article":{"title":"Build an iTunes Search App with SwiftUI and The Composable Architecture [Part 1]","url":"https://minimal-blog.lekoarts.de/blog/build-an-itunes-search-app-with-swiftui-and-the-composable-architecture-part-1","published_date":"06/14/2020"}},{"author":"Neil Smith","title":"Neil Smith’s Blog","site_url":"https://www.neilsmithdesign.com","feed_url":"https://www.neilsmithdesign.com/dev/rss.xml","most_recent_article":{"title":"Code Structure in SwiftUI - Part 1: Separating model and view","url":"https://www.neilsmithdesign.com/dev/code-structure-in-swiftui-part-1-separating-model-and-view","published_date":"06/11/2020"}},{"author":"Jack Newcombe","title":"Jack Newcombe's Blog","site_url":"https://newcombe.io/tag/ios/","feed_url":"https://newcombe.io/tag/ios/feed","most_recent_article":{"title":"Validation with SwiftUI & Combine – Part 2","url":"https://newcombe.io/2020/06/08/validation-with-swiftui-combine-part-2/","published_date":"06/08/2020"}},{"author":"Daniel Tull","title":"Daniel Tull’s Blog","site_url":"http://danieltull.co.uk/blog/","feed_url":"http://danieltull.co.uk/feed.xml","most_recent_article":{"title":"Renaming git's default master branch","url":"http://danieltull.co.uk//blog/2020/06/08/renaming-gits-default-master-branch/","published_date":"06/07/2020"}},{"author":"Heberti Almeida","title":"Heberti Almeida’s Blog","site_url":"https://heberti.com/","feed_url":"https://heberti.com/feed.rss","most_recent_article":{"title":"A Type-Safe FileWrapper","url":"https://heberti.com/posts/filewrapper","published_date":"06/02/2020"}},{"author":"Thomas Zoechling","title":"Build and Run","site_url":"https://thomas.zoechling.me/journal/","feed_url":"https://thomas.zoechling.me/journal/feed.xml","most_recent_article":{"title":"Claquette - Animated Screenshots","url":"tag:thomas.zoechling.me,2020-06-02:Claquette","published_date":"06/02/2020"}},{"author":"Artur Rymarz","title":"Ordinary Coding","site_url":"https://ordinarycoding.com","feed_url":"https://ordinarycoding.com/feed.rss","most_recent_article":{"title":"Continuous Integration and Delivery","url":"https://ordinarycoding.com/articles/continuous-integration-and-delivery","published_date":"06/01/2020"}},{"author":"Patrick Balestra","title":"Patrick Balestra’s Blog","site_url":"http://patrickbalestra.com/blog/","feed_url":"http://patrickbalestra.com/feed.xml","most_recent_article":{"title":"Building a Custom Minimal HomeKit Lamp","url":"https://balestrapatrick.github.io/blog/2020/05/31/building-a-custom-minimal-homekit-lamp","published_date":"05/30/2020"}},{"author":"Michael Redig","title":"Mike’s Psyche","site_url":"https://mikespsyche.com","feed_url":"https://mikespsyche.com/feed","most_recent_article":{"title":"80/20 Rule","url":"https://mikespsyche.com/80-20-rule/","published_date":"05/29/2020"}},{"author":"Felipe Marino","title":"Felipe Marino’s Blog","site_url":"https://marinofelipe.github.io","feed_url":"https://marinofelipe.github.io/feed.xml","most_recent_article":{"title":"Swift tip: final keyword","url":"https://marinofelipe.github.io/tips/swift/tips_final_modifier","published_date":"05/29/2020"}},{"author":"William Boles","title":"William Boles’s Blog","site_url":"https://williamboles.me/","feed_url":"https://williamboles.me/rss/","most_recent_article":{"title":"Finding hope in custom alerts","url":"https://williamboles.me/finding-hope-with-custom-alerts/","published_date":"05/26/2020"}},{"author":"Dan Cutting","title":"cutting.io","site_url":"https://cutting.io","feed_url":"http://feed.cutting.io","most_recent_article":{"title":"Game of Life on Metal","url":"tag:cutting.io,2020-05-24:/posts/game-of-life-on-metal/","published_date":"05/24/2020"}},{"author":"Sebastian Osiński","title":"Sebastian Osiński’s Blog","site_url":"https://osinski.dev","feed_url":"https://osinski.dev/index.xml","most_recent_article":{"title":"Reacting to Memory Warnings With Swinject","url":"https://osinski.dev/posts/reacting-to-memory-warnings-with-swinject/","published_date":"05/18/2020"}},{"author":"Ramsundar Shandilya","title":"Ram Shandilya's Blog","site_url":"https://ramshandilya.com","feed_url":"https://ramshandilya.com/feed.rss","most_recent_article":{"title":"Building a Design System for iOS - Part 4 - Animations","url":"https://ramshandilya.com/blog/design-system-animations","published_date":"05/17/2020"}},{"author":"Ortwin Gentz","title":"The FutureBlog","site_url":"https://www.futuretap.com/blog?tag=developer","feed_url":"https://www.futuretap.com/category/blog/feed?tag=developer","most_recent_article":{"title":"InAppSettingsKit 3.0","url":"https://www.futuretap.com/blog/inappsettingskit-3-0","published_date":"05/14/2020"}},{"author":"Johann Dowa","title":"Maniac Dev","site_url":"https://maniacdev.com","feed_url":"http://feeds.feedburner.com/maniacdev","most_recent_article":{"title":"DB Library For Working With Data In Hybrid Apps & PWA’s","url":"https://maniacdev.com/2020/05/db-library-for-working-with-data-in-hybrid-apps-pwas","published_date":"05/14/2020"}},{"author":"Bill Atkins","title":"More Indirection","site_url":"https://moreindirection.wordpress.com/tag/ios/","feed_url":"https://moreindirection.wordpress.com/tag/ios/feed/","most_recent_article":{"title":"Using Combine to simulate async / await in Swift","url":"https://moreindirection.wordpress.com/2020/05/13/using-combine-to-simulate-async-await-in-swift/","published_date":"05/13/2020"}},{"author":"Jeff Watkins","title":"Jeff Watkins’ Blog","site_url":"https://jeffwatkins.dev/articles","feed_url":"https://jeffwatkins.dev/articles/feed","most_recent_article":{"title":"Building an adaptive button","url":"https://jeffwatkins.dev/articles/building-an-adaptive-button","published_date":"05/10/2020"}},{"author":"Steve Mykytyn","title":"iOS Examples Without Code","site_url":"https://medium.com/ios-examples-without-code","feed_url":"https://medium.com/feed/ios-examples-without-code","most_recent_article":{"title":"Intermission 3","url":"https://medium.com/ios-examples-without-code/intermission-3-85737f8e7707?source=rss----1280784ec267---4","published_date":"05/07/2020"}},{"author":"Mike Nachbaur","title":"Development with Mike Nachbaur","site_url":"https://nachbaur.com/","feed_url":"https://nachbaur.com/posts/index.xml","most_recent_article":{"title":"Building a stretchable UITableView header","url":"https://nachbaur.com/2020/05/06/stretchable-tableview-header/","published_date":"05/06/2020"}},{"author":"Ben Gilroy","title":"Ben Gilroy's Medium","site_url":"https://medium.com/@bengilroy","feed_url":"https://medium.com/feed/@bengilroy","most_recent_article":{"title":"Using Array to Improve your Mocks in Unit Tests (iOS & Swift)","url":"https://medium.com/kinandcartacreated/using-array-to-improve-your-mocks-in-unit-tests-ios-swift-f8c343c80d21?source=rss-7a55141e3bc8------2","published_date":"05/05/2020"}},{"author":"Łukasz Mróz","title":"Sunshinejr’s Blog","site_url":"http://sunshinejr.com/tags/ios/","feed_url":"http://sunshinejr.com/tags/ios/index.xml","most_recent_article":{"title":"Different approach to Attributed Strings in Swift","url":"https://sunshinejr.com/2020/04/30/different-approach-to-attributed-strings-in-swift/","published_date":"04/30/2020"}},{"author":"Luis Ascorbe","title":"Luis Ascorbe's Blog","site_url":"https://lascorbe.com","feed_url":"https://lascorbe.com/feed.rss","most_recent_article":{"title":"MVP + Coordinators in SwiftUI (part 3)","url":"https://lascorbe.com/posts/2020-04-29-MVPCoordinators-SwiftUI-part3","published_date":"04/29/2020"}},{"author":"Andrew King","title":"Andrew King’s Blog","site_url":"https://andrewking.ca/category/ios-development","feed_url":"https://andrewking.ca/category/ios-development/feed/rss","most_recent_article":{"title":"How to Enable Custom Debugging in Release Builds","url":"https://andrewking.ca/2020/04/how-to-enable-custom-debugging-in-release-builds/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-enable-custom-debugging-in-release-builds","published_date":"04/27/2020"}},{"author":"Daniele Bogo","title":"Swift and Pizza","site_url":"https://swiftandpizza.com/","feed_url":"http://swiftandpizza.com/feed","most_recent_article":{"title":"Apple conference at the time of Covid-19","url":"https://swiftandpizza.com/apple-conference-at-the-time-of-covid-19/","published_date":"04/27/2020"}},{"author":"Scott Gardner","title":"Scott Gardner's Blog","site_url":"https://scotteg.github.io","feed_url":"https://scotteg.github.io/feed.xml","most_recent_article":{"title":"Protocol-Oriented Programming","url":"https://scotteg.github.io/protocol-oriented-programming","published_date":"04/21/2020"}},{"author":"Shankar Madeshvaran","title":"Shankar Madeshvaran on Medium","site_url":"https://medium.com/@shankarmadeshvaran","feed_url":"https://medium.com/feed/@shankarmadeshvaran/","most_recent_article":{"title":"UICollectionView -Developing Filters UI Using Auto Resizing Cells","url":"https://medium.com/@shankarmadeshvaran/uicollectionview-developing-filters-ui-using-auto-resizing-cells-98f19fbce88b?source=rss-443ff8fd11ff------2","published_date":"04/13/2020"}},{"author":"Chris Marshall","title":"Chris Marshall on Medium","site_url":"https://medium.com/chrismarshallny","feed_url":"https://medium.com/feed/chrismarshallny","most_recent_article":{"title":"The Curious Case of the Protocol Default","url":"https://medium.com/chrismarshallny/the-curious-case-of-the-protocol-default-bee08a9dd4a2?source=rss----5bec5b571650---4","published_date":"04/12/2020"}},{"author":"Neil Horton","title":"Neil Horton on Medium","site_url":"https://medium.com/@neil.horton/","feed_url":"https://medium.com/feed/@neil.horton","most_recent_article":{"title":"Building a COVID-19 symptom tracker in CareKit: Part 1","url":"https://medium.com/kinandcartacreated/building-a-covid-19-symptom-tracker-in-carekit-part-1-e20419a7aaa6?source=rss-9c17e3806ddd------2","published_date":"04/09/2020"}},{"author":"Jonathan Tarud","title":"Jonathan Tarud - Tech. Business. Design.","site_url":"https://www.jonathant.com","feed_url":"http://feed.jonathant.com/","most_recent_article":{"title":"Choose Boring Technology →","url":"https://mcfunley.com/choose-boring-technology","published_date":"04/07/2020"}},{"author":"Shihab Mehboob","title":"Shihab Mehboob (JPEGuin) on Medium","site_url":"https://medium.com/@shihab.mehboob/","feed_url":"https://medium.com/feed/@shihab.mehboob/","most_recent_article":{"title":"Cosmicast 2.0: This Post Should’ve Been a Podcast Episode","url":"https://medium.com/@shihab.mehboob/cosmicast-2-0-this-post-shouldve-been-a-podcast-episode-a161630575b1?source=rss-8b9318255609------2","published_date":"04/07/2020"}},{"author":"Alex Curylo","title":"Under The Bridge","site_url":"https://alexcurylo.com/blog/","feed_url":"https://www.alexcurylo.com/feed/","most_recent_article":{"title":"DIY Coronavirus Tracking","url":"http://www.alexcurylo.com/2020/04/03/diy-coronavirus-tracking/","published_date":"04/03/2020"}},{"author":"Adam Bell","title":"Adam Bell's Blog","site_url":"https://blog.adambell.ca/","feed_url":"https://blog.adambell.ca/rss.xml","most_recent_article":{"title":"Blogging in Swift (Part 3) (aka Vapor time)","url":"https://blog.adambell.ca/20200402-Blogging-in-Swift-(Part-3)-(aka-Vapor-time)/","published_date":"04/01/2020"}},{"author":"Jameson Quave","title":"Jameson Quave’s Blog","site_url":"http://jamesonquave.com/blog/","feed_url":"http://jamesonquave.com/blog/feed/","most_recent_article":{"title":"Tutorial: Night Mode Support in iOS 13 and Swift 5","url":"https://jamesonquave.com/blog/tutorial-night-mode-support-in-ios-13-and-swift-5/","published_date":"03/26/2020"}},{"author":"Serhii Kharauzov","title":"Serhii Kharauzov on Medium","site_url":"https://medium.com/@sergkharauzov","feed_url":"https://medium.com/feed/@sergkharauzov","most_recent_article":{"title":"The power of child ViewControllers in iOS","url":"https://medium.com/@sergkharauzov/the-power-of-child-viewcontrollers-in-ios-da3d58f5a9fe?source=rss-435333b617b0------2","published_date":"03/25/2020"}},{"author":"Peter Molnar","title":"Petermolnar.dev","site_url":"https://petermolnar.dev","feed_url":"https://petermolnar.dev/feed/","most_recent_article":{"title":"Swift enum range matching","url":"https://petermolnar.dev/swift-enum-range-matching/","published_date":"03/23/2020"}},{"author":"Roger Molas","title":"Roger Molas’s Blog","site_url":"http://blog.rogermolas.com/","feed_url":"http://blog.rogermolas.com/index.xml","most_recent_article":{"title":"Access class name using @objc attribute","url":"http://blog.rogermolas.com/posts/objc_class_name/","published_date":"03/19/2020"}},{"author":"Frank Courville","title":"Coach Frank","site_url":"http://www.ioscoachfrank.com","feed_url":"http://www.ioscoachfrank.com/feed/atom.xml","most_recent_article":{"title":"Composition in Swift and iOS","url":"https://ioscoachfrank.com/composition-in-swift.html","published_date":"03/18/2020"}},{"author":"Besher Al Maleh","title":"Besher Al Maleh’s Blog","site_url":"https://medium.com/@almalehdev","feed_url":"https://medium.com/feed/@almalehdev","most_recent_article":{"title":"The Nested Closure Trap","url":"https://medium.com/@almalehdev/the-nested-closure-trap-356a0145b6d?source=rss-1d15c542811f------2","published_date":"03/12/2020"}},{"author":"Adam Swinden","title":"iOS Dev Tools","site_url":"https://iosdev.tools/","feed_url":"https://iosdev.tools/rss.php","most_recent_article":{"title":"Porcupine","url":"https://iosdev.tools/backend-services/porcupine/","published_date":"03/10/2020"}},{"author":"Rubén Méndez","title":"Rubén Méndez on Medium","site_url":"https://medium.com/@ruben.mendez","feed_url":"https://medium.com/feed/@ruben.mendez","most_recent_article":{"title":"The Navigator","url":"https://jobandtalent.engineering/the-navigator-420b24fc57da?source=rss-5c2de239990c------2","published_date":"03/09/2020"}},{"author":"Andrew Lord","title":"Lord Codes","site_url":"https://www.lordcodes.com/ios/","feed_url":"https://www.lordcodes.com/feeds/ios.xml","most_recent_article":{"title":"Manage automation tasks using Swift Package Manager","url":"https://www.lordcodes.com/articles/manage-automation-tasks-using-spm","published_date":"03/07/2020"}},{"author":"Tung Fam","title":"Tung Fam on Medium","site_url":"https://medium.com/@tungfam","feed_url":"https://medium.com/feed/@tungfam","most_recent_article":{"title":"Custom UIViewController transitions in Swift","url":"https://medium.com/@tungfam/custom-uiviewcontroller-transitions-in-swift-d1677e5aa0bf?source=rss-69df2af07e8a------2","published_date":"02/27/2020"}},{"author":"Roland Leth","title":"Roland Leth’s Blog","site_url":"https://rolandleth.com","feed_url":"https://rolandleth.com/feed","most_recent_article":{"title":"Sync build versions between targets","url":"https://rolandleth.com/tech/blog/sync-build-versions-between-targets","published_date":"02/19/2020"}},{"author":"Tim Miko","title":"Tim Miko’s Blog","site_url":"https://tim.engineering","feed_url":"https://tim.engineering/rss/","most_recent_article":{"title":"How to use Xcode debugging tools on a cold app start","url":"https://tim.engineering/xcode-debugging-tools-app-start/","published_date":"02/17/2020"}},{"author":"Ilya Puchka","title":"Ilya Puchka’s Blog","site_url":"http://ilya.puchka.me","feed_url":"http://ilya.puchka.me/rss.xml","most_recent_article":{"title":"Decoding nested values with property wrappers","url":"https://ilya.puchka.me/decoding-nested-values-with-property-wrappers/","published_date":"02/12/2020"}},{"author":"Ryan Ackermann","title":"ackermann.io","site_url":"https://ackermann.io","feed_url":"https://ackermann.io/feed","most_recent_article":{"title":"The Adventure Begins","url":"https://ackermann.io/posts/the-adventure-begins","published_date":"02/10/2020"}},{"author":"Max Howell","title":"Max Howell on Medium","site_url":"https://medium.com/@mxcl","feed_url":"https://medium.com/feed/@mxcl","most_recent_article":{"title":"Maintaining a Homebrew Tap for Swift projects","url":"https://medium.com/@mxcl/maintaining-a-homebrew-tap-for-swift-projects-7287ed379324?source=rss-87f057c6e50c------2","published_date":"02/09/2020"}},{"author":"Charles Perry","title":"DazeEnd","site_url":"https://dazeend.org/","feed_url":"https://dazeend.org/feed/?cat=-12","most_recent_article":{"title":"Configuring a CentOS 8 LAMP Stack at Linode","url":"https://dazeend.org/2020/02/centos-8-lamp-stack-at-linode/","published_date":"02/05/2020"}},{"author":"Gwenn Guihal","title":"Gwenn Guihal on Medium","site_url":"https://medium.com/@_myrddin_","feed_url":"https://medium.com/feed/@_myrddin_","most_recent_article":{"title":"Resilient deserialization in swift","url":"https://medium.com/@_myrddin_/resilient-deserialization-in-swift-c1e69635c7b5?source=rss-aae4165d399------2","published_date":"02/04/2020"}},{"author":"Andreas Neusüß","title":"Andreas Neusüß's Blog - Anerma","site_url":"https://anerma.de/blog/","feed_url":"https://anerma.de/blog/feed/","most_recent_article":{"title":"Open-Source-Project: Audiograph","url":"https://anerma.de/blog/open-source-project-audiograph","published_date":"02/01/2020"}},{"author":"Oleg Dreyman","title":"AnySuggestion","site_url":"https://medium.com/anysuggestion","feed_url":"https://medium.com/feed/anysuggestion","most_recent_article":{"title":"Why so many iOS developers feel so frustrated right now","url":"https://medium.com/anysuggestion/why-so-many-ios-developers-feel-so-frustrated-right-now-bfcda80f2b81?source=rss----2535f529da4e---4","published_date":"01/30/2020"}},{"author":"Evan Deaubl","title":"Apps Dissected","site_url":"https://www.appsdissected.com","feed_url":"https://www.appsdissected.com/feed/","most_recent_article":{"title":"Building a Caching Custom Combine Operator #2: The .cache() Method","url":"https://www.appsdissected.com/caching-custom-combine-operator-2-cache-method-generics/","published_date":"01/22/2020"}},{"author":"Kent Humphries","title":"Kentios Thinks About Tech","site_url":"https://kenthumphries.github.io","feed_url":"https://kenthumphries.github.io/feed.xml","most_recent_article":{"title":"The *Right* Unit Tests","url":"https://kenthumphries.github.io/The-Right-Unit-Tests","published_date":"01/15/2020"}},{"author":"Jille van der Weerd","title":"Jille van der Weerd on Medium","site_url":"https://medium.com/@JillevdWeerd","feed_url":"https://medium.com/feed/@JillevdWeerd","most_recent_article":{"title":"App Authentication with Laravel Airlock","url":"https://medium.com/@JillevdWeerd/app-authentication-with-laravel-airlock-36e3d2027994?source=rss-78df6c0a7438------2","published_date":"01/10/2020"}},{"author":"Grant Emerson","title":"Grant Emerson's Blog","site_url":"https://www.grantemerson.co/blog/","feed_url":"https://www.grantemerson.co/feed.rss","most_recent_article":{"title":"Remove or Pop","url":"http://www.grantemerson.co/blog/SwiftMoji28","published_date":"12/20/2019"}},{"author":"Nick Arnott","title":"Neglected Potential","site_url":"http://www.neglectedpotential.com","feed_url":"http://www.neglectedpotential.com/feed/","most_recent_article":{"title":"Reverse Engineering the DirecTV App’s DVR Authentication","url":"http://www.neglectedpotential.com/2019/12/directtv-app-authentication/","published_date":"12/19/2019"}},{"author":"Jodi Humphreys","title":"Jodi Humphreys on Medium","site_url":"https://medium.com/@jodihumphreys","feed_url":"https://medium.com/feed/@jodihumphreys","most_recent_article":{"title":"More Ideas for Increasing Diversity in iOS","url":"https://medium.com/@jodihumphreys/more-ideas-for-increasing-diversity-in-ios-5ac90c3037e8?source=rss-d6aa129ddc19------2","published_date":"12/16/2019"}},{"author":"Weston Hanners","title":"Alloc-Init","site_url":"https://www.alloc-init.com","feed_url":"https://www.alloc-init.com/feed","most_recent_article":{"title":"Some reasons SwiftUI might not be right for you","url":"https://alloc-init.com/blog/swiftui-issues","published_date":"12/11/2019"}},{"author":"Peter Livesey","title":"Device Blogs","site_url":"https://medium.com/@peterlivesey","feed_url":"https://medium.com/feed/@peterlivesey","most_recent_article":{"title":"All you never wanted to know about state in SwiftUI","url":"https://medium.com/device-blogs/all-you-never-wanted-to-know-about-state-in-swiftui-7314d0c51318?source=rss-30f43bddcaef------2","published_date":"12/09/2019"}},{"author":"Ritesh Gupta","title":"ritesh.hh","site_url":"http://riteshhh.com","feed_url":"http://riteshhh.com/rss.xml","most_recent_article":{"title":"Declarative Networking with Combine","url":"https://riteshhh.com/combine/declarative-networking-with-combine/","published_date":"12/05/2019"}},{"author":"Dan Griffin","title":"Contageous Dev","site_url":"https://contagious.dev/blog/category/ios/","feed_url":"https://contagious.dev/blog/category/ios/feed/","most_recent_article":{"title":"The Caramel Recipe Document Spec","url":"https://contagious.dev/blog/the-caramel-recipe-document-spec/","published_date":"11/30/2019"}},{"author":"Cecilia Humlelu","title":"Cecilia Humlelu on Medium","site_url":"https://medium.com/@cecilia.humlelu","feed_url":"https://medium.com/feed/@cecilia.humlelu","most_recent_article":{"title":"Building a Swift Static Library","url":"https://medium.com/@cecilia.humlelu/building-a-swift-static-library-7a01d445a015?source=rss-5866c17e82fd------2","published_date":"11/29/2019"}},{"author":"Basem Emara","title":"Basem Emara’s Blog","site_url":"http://basememara.com","feed_url":"http://basememara.com/feed/","most_recent_article":{"title":"Building a Scalable SwiftUI Architecture","url":"https://zamzam.io/building-scalable-swiftui-architecture-app/","published_date":"11/28/2019"}},{"author":"Jim Dovey","title":"AQBlog","site_url":"https://alanquatermain.me","feed_url":"https://alanquatermain.me/feed.xml","most_recent_article":{"title":"Visual Effect Views in SwiftUI","url":"https://alanquatermain.me/programming/swiftui/VisualEffectView","published_date":"11/18/2019"}},{"author":"Ken Boreham","title":"Ken Boreham’s Blog","site_url":"https://kenb.us/","feed_url":"https://kenb.us/feed","most_recent_article":{"title":"Swift Basics","url":"https://kenb.us/swift-basics","published_date":"11/17/2019"}},{"author":"Russ Bishop","title":"Russ Bishop’s Blog","site_url":"http://www.russbishop.net","feed_url":"http://www.russbishop.net/feed","most_recent_article":{"title":"Cross-process Rendering","url":"http://www.russbishop.net/cross-process-rendering","published_date":"11/05/2019"}},{"author":"Arjun Nayini","title":"Arjun Nayini’s Blog","site_url":"http://arjunnayini.com/","feed_url":"http://arjunnayini.com/feed.xml","most_recent_article":{"title":"Swift Package Continuous Integration Tests with Github Actions","url":"https://anayini.github.io/2019-11-01-github-ci-swift-package/","published_date":"11/01/2019"}},{"author":"Fady Derias","title":"Fady Derias on Medium","site_url":"https://medium.com/@fadiderias","feed_url":"https://medium.com/feed/@fadiderias","most_recent_article":{"title":"iOS Security Tutorial — Part 2","url":"https://medium.com/@fadiderias/ios-security-tutorial-part-2-c481036170ca?source=rss-da92204bda7b------2","published_date":"10/24/2019"}},{"author":"Julian Schiavo","title":"Julian Schiavo’s Blog","site_url":"https://blog.schiavo.me","feed_url":"https://blog.schiavo.me/feed.rss","most_recent_article":{"title":"Launching ClusterCards 2: Marketing","url":"https://beta.schiavo.me/posts/launching-clustercards-marketing","published_date":"10/23/2019"}},{"author":"Mike Ash","title":"NSBlog","site_url":"http://www.mikeash.com/pyblog/","feed_url":"https://www.mikeash.com/pyblog/rss.py","most_recent_article":{"title":"objc_msgSend's New Prototype\n","url":"http://www.mikeash.com/pyblog/objc_msgsends-new-prototype.html","published_date":"10/11/2019"}},{"author":"Alex Gurin","title":"Alex Gurin’s Blog","site_url":"https://medium.com/@dn070287gav","feed_url":"https://medium.com/feed/@dn070287gav","most_recent_article":{"title":"How to build complex layout using UICollectionViewCompositionalLayout and…","url":"https://medium.com/@dn070287gav/how-to-build-complex-layout-using-uicollectionviewcompositionallayout-and-9448b11dcbee?source=rss-8d86f952f545------2","published_date":"10/07/2019"}},{"author":"Drew McCormack","title":"LLVS Blog","site_url":"https://mentalfaculty.github.io/LLVS","feed_url":"https://mentalfaculty.github.io/LLVS/feed.xml","most_recent_article":{"title":"Data Driven SwiftUI","url":"https://mentalfaculty.github.io/LLVS/2019/09/25/data-driven-swiftui","published_date":"09/24/2019"}},{"author":"Simon Fairbairn","title":"Simon Fairbairn’s Blog","site_url":"http://simonfairbairn.com/tag/swift/","feed_url":"http://simonfairbairn.com/tag/swift/feed","most_recent_article":{"title":"What I Learned at DevWorld 2019","url":"https://simonfairbairn.com/devworld-2019/","published_date":"09/12/2019"}},{"author":"Jean Mainguy","title":"Jean Mainguy on Medium","site_url":"https://medium.com/@jhandguy","feed_url":"https://medium.com/feed/@jhandguy","most_recent_article":{"title":"A Path to CI / CD Nirvana in iOS","url":"https://code.egym.de/a-path-to-ci-cd-nirvana-in-ios-a631fcdffb43?source=rss-60d6fa56fda3------2","published_date":"09/12/2019"}},{"author":"Kristina Fox","title":"Kristina.io","site_url":"https://kristina.io","feed_url":"https://kristina.io/feed/","most_recent_article":{"title":"Adopting Voice Control","url":"https://kristina.io/adopting-voice-control/","published_date":"08/26/2019"}},{"author":"Mark Struzinski","title":"Mark Struzinski’s Blog","site_url":"http://markstruzinski.com","feed_url":"http://markstruzinski.com/index.xml","most_recent_article":{"title":"Using Coordinator With Scene Delegates","url":"https://markstruzinski.com/2019/08/using-coordinator-with-scene-delegates/","published_date":"08/25/2019"}},{"author":"Nick O’Neill","title":"that thing in swift","site_url":"https://thatthinginswift.com/","feed_url":"https://thatthinginswift.com/index.xml","most_recent_article":{"title":"Should you write your app in SwiftUI?","url":"https://thatthinginswift.com/should-you-use-swiftui-in-your-app/","published_date":"08/24/2019"}},{"author":"Justin Williams","title":"carpeaqua","site_url":"https://carpeaqua.com/","feed_url":"https://carpeaqua.com/rss/","most_recent_article":{"title":"Removing Unremovable Files after Upgrading to macOS Catalina","url":"https://carpeaqua.com/2019/08/22/unremovable-files-macos-catalina/","published_date":"08/22/2019"}},{"author":"Kyle Bashour","title":"Kyle Bashour’s Blog","site_url":"https://kylebashour.com/","feed_url":"http://kylebashour.com/feed.xml","most_recent_article":{"title":"The Comprehensive Guide to iOS Context Menus","url":"http://kylebashour.com/posts/context-menu-guide","published_date":"08/22/2019"}},{"author":"Dejan Agostini","title":"Agostini.Tech","site_url":"https://agostini.tech","feed_url":"https://agostini.tech/feed/","most_recent_article":{"title":"Block and Identify Calls with Call Directory App Extension","url":"https://agostini.tech/2019/07/14/block-and-identify-calls-with-call-directory-app-extension/","published_date":"07/14/2019"}},{"author":"Vapor Team","title":"Vapor on Medium","site_url":"https://medium.com/@codevapor","feed_url":"https://medium.com/feed/@codevapor","most_recent_article":{"title":"Vapor Red 1.1 Released","url":"https://medium.com/@codevapor/vapor-red-1-1-released-1978207a4152?source=rss-26bf5124725c------2","published_date":"07/11/2019"}},{"author":"Shashikant Jagtap","title":"XCBlog","site_url":"http://shashikantjagtap.net/","feed_url":"http://shashikantjagtap.net/feed/","most_recent_article":{"title":"Apple  Dream come true!","url":"http://shashikantjagtap.net/apple-%ef%a3%bf-dream-come-true/","published_date":"07/05/2019"}},{"author":"Jeroen Bakker","title":"Baking Swift","site_url":"https://jeroenscode.com","feed_url":"https://jeroenscode.com/feed/","most_recent_article":{"title":"Result Type techniques in Swift 5","url":"https://jeroenscode.com/result-type-techniques-in-swift-5/","published_date":"07/03/2019"}},{"author":"Pedro Carrasco","title":"Pedro Carrasco’s Website","site_url":"https://pedrommcarrasco.github.io/","feed_url":"https://pedrommcarrasco.github.io/atom.xml","most_recent_article":{"title":"How To Have Multiple Icons?","url":"https://pedrommcarrasco.github.io/posts/how-to-have-multiple-icons","published_date":"06/29/2019"}},{"author":"Mike Mikina","title":"Mike Mikina’s Blog","site_url":"http://mikemikina.com","feed_url":"https://mikemikina.com/feed.xml","most_recent_article":{"title":"Tutorial: Building a Facebook bot with Vapor 3 and Swift, part I","url":"https://mikemikina.com/blog/tutorial-building-a-facebook-bot-with-vapor-3-and-swift-part-1","published_date":"06/25/2019"}},{"author":"Maksym Grebenets","title":"NSBogan","site_url":"https://mgrebenets.github.io","feed_url":"https://mgrebenets.github.io/rss.xml","most_recent_article":{"title":"TeamCity Kotlin REST Client","url":"https://mgrebenets.github.io/mobile%20ci/2019/06/24/kotlin-teamcity-rest-client","published_date":"06/23/2019"}},{"author":"Yari D’areglia","title":"Think & Build","site_url":"http://www.thinkandbuild.it","feed_url":"http://feeds.feedburner.com/ThinkAndBuild","most_recent_article":{"title":"Unreal Engine: Custom EQS Generators","url":"https://www.thinkandbuild.it/unreal-engine-custom-eqs-generators/","published_date":"06/03/2019"}},{"author":"Hal Mueller","title":"Hal Mueller’s Blog","site_url":"https://halmueller.wordpress.com","feed_url":"https://halmueller.wordpress.com/feed/","most_recent_article":{"title":"Some Observations about App Camp for Girls operations","url":"https://halmueller.wordpress.com/2019/05/30/some-observations-about-app-camp-for-girls-operations/","published_date":"05/30/2019"}},{"author":"Niamh Power","title":"Niamh Power on Medium","site_url":"https://medium.com/@niamhpower","feed_url":"https://medium.com/feed/@niamhpower","most_recent_article":{"title":"Firebase at Google I/O","url":"https://medium.com/@niamhpower/firebase-google-io-d0f6cb58daf8?source=rss-61de4ad69c14------2","published_date":"05/29/2019"}},{"author":"Damien Laughton","title":"Two Minute iOS","site_url":"https://medium.com/@dfplaughton","feed_url":"https://medium.com/feed/@dfplaughton","most_recent_article":{"title":"UITextField Obscura","url":"https://medium.com/@dfplaughton/uitextfield-obscura-9e155c6d6a3d?source=rss-e9bb96b29f78------2","published_date":"05/19/2019"}},{"author":"Dušan Tadić","title":"Dušan Tadić’s Blog","site_url":"https://www.dusantadic.dev/","feed_url":"https://www.dusantadic.dev/index.xml","most_recent_article":{"title":"How not to use enums in Swift","url":"https://www.dusantadic.dev/post/how-not-to-use-enums/","published_date":"05/18/2019"}},{"author":"Greg Scown","title":"CODE. COOK. READ.","site_url":"https://codecookread.com/","feed_url":"https://codecookread.com/feed/rss","most_recent_article":{"title":"How to Get Bugs Fixed by Apple","url":"https://codecookread.com/get-bugs-fixed/?utm_source=rss&utm_medium=rss&utm_campaign=get-bugs-fixed","published_date":"04/08/2019"}},{"author":"Bartosz Polaczyk","title":"Bartosz Polaczyk on Medium","site_url":"https://medium.com/@londeix/","feed_url":"https://medium.com/feed/@londeix","most_recent_article":{"title":"Stubbing in pair with Swift compiler: A spy registration","url":"https://medium.com/@londeix/stubbing-in-pair-with-swift-compiler-a-spy-registration-bbfdc1cf87a1?source=rss-455e6a104b5e------2","published_date":"04/08/2019"}},{"author":"Jussi Suojanen","title":"SwiftyJimmy","site_url":"http://swiftyjimmy.com","feed_url":"http://swiftyjimmy.com/feed/","most_recent_article":{"title":"Server-side Swift with Vapor 3 – backend set up","url":"http://swiftyjimmy.com/server-side-swift-vapor/","published_date":"03/26/2019"}},{"author":"Nate Thompson","title":"Nate Thompson’s Blog","site_url":"https://www.natethompson.io/blog/","feed_url":"https://www.natethompson.io/feed.xml","most_recent_article":{"title":"Using Drag and Drop with NSTableView","url":"/2019/03/23/nstableview-drag-and-drop.html","published_date":"03/22/2019"}},{"author":"Eli Perkins","title":"Eli Perkins’ Blog","site_url":"https://blog.eliperkins.me/","feed_url":"https://blog.eliperkins.me/rss.xml","most_recent_article":{"title":"Validating Relay Queries With This One Weird Trick™","url":"https://blog.eliperkins.me/what-is-relay-validate/","published_date":"03/21/2019"}},{"author":"Alan Zeino","title":"Alan Zeino on Medium","site_url":"https://medium.com/@alanzeino","feed_url":"https://medium.com/feed/@alanzeino","most_recent_article":{"title":"Safely supporting new versions of Swift","url":"https://medium.com/@alanzeino/safely-supporting-new-versions-of-swift-e722b7eb9963?source=rss-9e185327ea4b------2","published_date":"03/04/2019"}},{"author":"Colin Reisterer","title":"FullyTyped","site_url":"http://fullytyped.com","feed_url":"http://fullytyped.com/index.xml","most_recent_article":{"title":"Multi project strings With Twine and R.swift","url":"http://fullytyped.com/2019/03/03/multi-project-strings-with-twine-and-r/","published_date":"03/03/2019"}},{"author":"Karol S. Mazur","title":"Karol S. Mazur’s Blog","site_url":"https://blog.mazur.me","feed_url":"https://blog.mazur.me/feed.xml","most_recent_article":{"title":"How to get Playground Driven Development working with Carthage","url":"https://blog.mazur.me/playground-driven-development-and-carthage","published_date":"02/08/2019"}},{"author":"Cesare Rocchi","title":"upbeat.it","site_url":"https://www.upbeat.it","feed_url":"https://www.upbeat.it/atom.xml","most_recent_article":{"title":"A JavaScript budget for the browser","url":"https://www.upbeat.it/a-javascript-budget-for-the-browser/","published_date":"01/31/2019"}},{"author":"Berta Devant","title":"Berta Devant on Medium","site_url":"https://medium.com/@bertadevant","feed_url":"https://medium.com/feed/@bertadevant","most_recent_article":{"title":"Get started and learn how to make your first ARKit application","url":"https://medium.com/@bertadevant/get-started-and-learn-how-to-make-your-first-arkit-application-179033e67e43?source=rss-b8fea2ef3b22------2","published_date":"01/21/2019"}},{"author":"Josh Smith","title":"iJoshSmith","site_url":"https://ijoshsmith.com","feed_url":"https://ijoshsmith.com/feed/","most_recent_article":{"title":"Command line calculator in Swift 4.2","url":"https://ijoshsmith.com/2019/01/08/command-line-calculator-in-swift-4-2/","published_date":"01/08/2019"}},{"author":"Adrian Śliwa","title":"Adrian Śliwa on Medium","site_url":"https://medium.com/@adrianmsliwa","feed_url":"https://medium.com/feed/@adrianmsliwa","most_recent_article":{"title":"Static let pattern","url":"https://medium.com/@adrianmsliwa/static-let-pattern-efcd74958e95?source=rss-e68597695f05------2","published_date":"01/08/2019"}},{"author":"Pablo Villar","title":"Pablo Villar on Medium","site_url":"https://medium.com/@volbap","feed_url":"https://medium.com/feed/@volbap","most_recent_article":{"title":"Neat Data Sources in Swift","url":"https://medium.com/@volbap/neat-data-sources-in-swift-a788c439a227?source=rss-2261535f21e------2","published_date":"12/18/2018"}},{"author":"Zanella Gaétan","title":"Zanella Gaétan on Medium","site_url":"https://medium.com/@gaetan.zanella","feed_url":"https://medium.com/feed/@gaetan.zanella","most_recent_article":{"title":"Replicate Apple Maps overlay","url":"https://medium.com/@gaetan.zanella/replicate-apple-maps-overlay-199ce8caf455?source=rss-a2f0ed98a4b6------2","published_date":"12/17/2018"}},{"author":"Emilio Peláez","title":"Emilio Peláez’s Blog","site_url":"https://medium.com/@Pelaez","feed_url":"https://medium.com/feed/@Pelaez","most_recent_article":{"title":"Recreating Tweetbot’s Refresh Bar","url":"https://medium.com/@Pelaez/recreating-tweetbots-refresh-bar-526c115afdf7?source=rss-aff864e8163------2","published_date":"12/12/2018"}},{"author":"Dave Lyon","title":"iOS Dev Recipes","site_url":"https://iosdev.recipes/","feed_url":"https://iosdev.recipes/rss.xml","most_recent_article":{"title":"UIView layerClass, maskView and UITintAdjustmentMode","url":"https://www.iosdev.recipes/uiview/apis-you-forgot-layerclass-maskView-and-uitintadjustmentmode/","published_date":"12/04/2018"}},{"author":"Marcin Jackowski","title":"Marcin Jackowski on Medium","site_url":"https://medium.com/@marcinjackowski","feed_url":"https://medium.com/feed/@marcinjackowski","most_recent_article":{"title":"Unit test Network Layer","url":"https://medium.com/thecocoapps/unit-test-network-layer-de4280b2b0c0?source=rss-6c77af54b675------2","published_date":"11/21/2018"}},{"author":"Alexis Creuzot","title":"Alexis Creuzot on Medium","site_url":"https://medium.com/@alexiscreuzot","feed_url":"https://medium.com/feed/@alexiscreuzot","most_recent_article":{"title":"Reducing Core ML 2 Model Size by 4X Using Quantization in iOS 12","url":"https://heartbeat.comet.ml/reducing-coreml2-model-size-by-4x-with-quantization-in-ios12-b1c854651c4?source=rss-57dd0a46a136------2","published_date":"11/01/2018"}},{"author":"Dave Dribin","title":"Dave Dribin’s Blog","site_url":"http://www.dribin.org/dave/blog/","feed_url":"http://www.dribin.org/dave/blog/feed.xml","most_recent_article":{"title":"git Merge Commit Messages","url":"https://www.dribin.org/dave/blog/archives/2018/10/21/git-merge-commit-message","published_date":"10/21/2018"}},{"author":"Morten Bek Ditlevsen","title":"Morten Bek Ditlevsen on Medium","site_url":"https://medium.com/@bek_29339/","feed_url":"https://medium.com/feed/@bek_29339","most_recent_article":{"title":"Swifty Firebase APIs @ Ka-ching — part 4","url":"https://medium.com/swift2go/swifty-firebase-apis-ka-ching-part-4-1ec12f2be4dc?source=rss-8598b8818305------2","published_date":"10/14/2018"}},{"author":"Arek Holko","title":"Arek Holko’s Blog","site_url":"http://holko.pl","feed_url":"http://feeds.feedburner.com/ArkadiuszHolko","most_recent_article":{"title":"Hiding Implementation Details Using internal Properties","url":"https://holko.pl/2018/10/08/internal-modifier/","published_date":"10/08/2018"}},{"author":"Tomasz Szulc","title":"Tomasz Szulc’s Blog","site_url":"http://szulctomasz.com/programming-blog/","feed_url":"http://szulctomasz.com/programming-blog/index.xml","most_recent_article":{"title":"Add fireworks and sparks to a UIView","url":"http://szulctomasz.com/programming-blog/2018/09/add-fireworks-and-sparks-to-a-uiview/","published_date":"09/20/2018"}},{"author":"Colin Wheeler","title":"Cocoa Samurai","site_url":"https://cocoasamurai.blogspot.com/","feed_url":"https://cocoasamurai.blogspot.com/feeds/posts/default","most_recent_article":{"title":"A modest proposal for optional methods in Swift protocols","url":"tag:blogger.com,1999:blog-34442452.post-8584079703316304116","published_date":"08/18/2018"}},{"author":"Greg Heo","title":"Swift Unboxed","site_url":"https://swiftunboxed.com/","feed_url":"https://swiftunboxed.com/feed.xml","most_recent_article":{"title":"Hashable","url":"/protocols/hashable/","published_date":"08/15/2018"}},{"author":"Benjamin Encz","title":"Thinking inside a large box","site_url":"http://blog.benjamin-encz.de/","feed_url":"http://blog.benjamin-encz.de/index.xml","most_recent_article":{"title":"My Five Favorite Books for Engineering Leaders","url":"http://blog.benjamin-encz.de/post/five-favorite-books-for-engineering-leaders/","published_date":"08/05/2018"}},{"author":"Cons Bulaquena","title":"Cons Bulaquena on Medium","site_url":"https://medium.com/@consbulaquena","feed_url":"https://medium.com/feed/@consbulaquena","most_recent_article":{"title":"Swift Navigation Bar Image Title","url":"https://medium.com/@consbulaquena/swift-navigation-bar-image-title-53e1c7e6e9c3?source=rss-7ea46047efcb------2","published_date":"08/02/2018"}},{"author":"Chris Winstanley","title":"Chris Winstanley on Medium","site_url":"https://medium.com/@CWinstanley90","feed_url":"https://medium.com/feed/@CWinstanley90","most_recent_article":{"title":"Hey Siri, when is my next tram?","url":"https://medium.com/@CWinstanley90/hey-siri-when-is-my-next-tram-7d9eb87fd304?source=rss-5f28f7c27f1a------2","published_date":"07/02/2018"}},{"author":"Marcus Zarra and Matt Long","title":"Cocoa Is My Girlfriend","site_url":"http://www.cimgf.com","feed_url":"http://www.cimgf.com/feed/","most_recent_article":{"title":"Response: The Laws of Core Data","url":"https://www.cimgf.com/2018/05/10/response-the-laws-of-core-data/","published_date":"05/10/2018"}},{"author":"Matt Delves","title":"Matt Delves’ Blog","site_url":"https://mattdelves.com","feed_url":"https://mattdelves.com/feed.xml","most_recent_article":{"title":"Rounded corners using a bezier path","url":"http://mattdelves.com/technical/2018/05/10/rounded-corners","published_date":"05/09/2018"}},{"author":"Lewis Smith","title":"Lewis Makes Apps","site_url":"http://lewismakesapps.com","feed_url":"https://lewismakesapps.com/feed/","most_recent_article":{"title":"🎙 Are Subscriptions the Future? An interview with Jacob from RevenueCat","url":"https://lewismakesapps.com/are-subscriptions-the-future/","published_date":"05/08/2018"}},{"author":"Steve Moser","title":"Steve Moser’s Blog","site_url":"https://www.stevemoser.org/category/apple-dev/index.html","feed_url":"https://www.stevemoser.org/feed.apple-dev.xml","most_recent_article":{"title":"RichTexture","url":"https://stevemoser.org/posts/apple-dev/richtexture.html","published_date":"05/04/2018"}},{"author":"Slava Pestov","title":"Slava Pestov on Medium","site_url":"https://medium.com/@slavapestov","feed_url":"https://medium.com/feed/@slavapestov","most_recent_article":{"title":"Behind-the scenes improvements in Swift 4.1","url":"https://medium.com/@slavapestov/behind-the-scenes-improvements-in-swift-4-1-269dd56e30c2?source=rss-485b0d97de41------2","published_date":"04/10/2018"}},{"author":"Andreas Kurtz","title":"Andreas Kurtz’s Blog","site_url":"https://andreas-kurtz.de/post/","feed_url":"https://andreas-kurtz.de/post/index.xml","most_recent_article":{"title":"iOS MDM Profile Removal","url":"/2018/02/ios-mdm-profile-removal/","published_date":"02/09/2018"}},{"author":"Landon Fuller","title":"Landon Fuller’s Blog","site_url":"http://landonf.org","feed_url":"http://landonf.org/index.rss","most_recent_article":{"title":"FreeBSD Broadcom Wi-Fi Improvements","url":"http://landonf.org/2018/02/07#Broadcom_WiFi_Improvements.20180122","published_date":"02/07/2018"}},{"author":"Anindya Sengupta","title":"Cocoa, Coffee and Life","site_url":"https://cocoacaffeine.wordpress.com","feed_url":"https://cocoacaffeine.wordpress.com/feed/","most_recent_article":{"title":"A New Year, a New Beginning…","url":"https://cocoacaffeine.wordpress.com/2018/01/16/a-new-year-a-new-beginning/","published_date":"01/15/2018"}},{"author":"Junior Bonto","title":"BontoJR","site_url":"https://www.bonto.ch/","feed_url":"https://www.bonto.ch/atom.xml","most_recent_article":{"title":"NSOperation in Swift era","url":"/asynchronous%20programming/2018/01/01/nsoperation-in-swift-era","published_date":"12/31/2017"}},{"author":"Andy Matuschak","title":"Andy Matuschak’s Blog","site_url":"http://blog.andymatuschak.org","feed_url":"http://blog.andymatuschak.org/rss","most_recent_article":{"title":"Successful habits through smoothly ratcheting targets","url":"https://blog.andymatuschak.org/post/169043084412","published_date":"12/28/2017"}},{"author":"Marco Santarossa","title":"Marco Santa Dev","site_url":"https://www.marcosantadev.com/","feed_url":"https://www.marcosantadev.com/index.xml","most_recent_article":{"title":"Protocol Composition In Swift","url":"https://marcosantadev.com/protocol-composition-swift/","published_date":"10/29/2017"}},{"author":"Roy Marmelstein","title":"Roy Marmelstein on Medium","site_url":"https://medium.com/@marmelroy","feed_url":"https://medium.com/feed/@marmelroy","most_recent_article":{"title":"Log in with Spotify from your app in Swift","url":"https://medium.com/swift-and-ios-writing/log-in-with-spotify-from-your-app-in-swift-7fed49b6618?source=rss-35d1429e88f9------2","published_date":"08/31/2017"}},{"author":"Stuart Hall","title":"Stuart Hall’s Blog","site_url":"http://stuartkhall.com/","feed_url":"http://feeds.feedburner.com/stuartkhall","most_recent_article":{"title":"New Blog","url":"http://stuartkhall.com/blogs/new-blog","published_date":"08/13/2017"}},{"author":"Dominik Hauser","title":"Swift and Painless","site_url":"http://swiftandpainless.com/","feed_url":"http://swiftandpainless.com/feed.xml","most_recent_article":{"title":"Sketch Notes At UIKonf 2017","url":"http://swiftandpainless.com/sketch-notes-at-uikonf2017/","published_date":"05/17/2017"}},{"author":"Andy Obusek","title":"Andy Obusek’s Blog","site_url":"http://www.cleanswifter.com","feed_url":"http://cleanswifter.com/feed/","most_recent_article":{"title":"Improving Swift Unit Tests with Objective-C","url":"http://cleanswifter.com/improving-swift-unit-tests-objective-c/","published_date":"03/24/2017"}},{"author":"Cabel Sasser","title":"Cabel.me","site_url":"https://cabel.me","feed_url":"https://cabel.me/feed/","most_recent_article":{"title":"Stagehand Music","url":"https://cabel.com/2017/02/09/stagehand-the-music/","published_date":"02/09/2017"}},{"author":"Kyle Fuller","title":"Kyle Fuller’s Blog","site_url":"https://fuller.li/","feed_url":"https://fuller.li/posts/feed/latest.atom","most_recent_article":{"title":"Using Swift Package Manager with Carthage","url":"tag:fuller.li,2016-12-01:/posts/using-swift-package-manager-with-carthage/","published_date":"11/30/2016"}},{"author":"Michael Jurewitz","title":"Jury.me","site_url":"http://jury.me/blog/","feed_url":"http://jury.me/blog?format=rss","most_recent_article":{"title":"Kakistocracy","url":"http://jury.me/blog/2016/11/19/kakistocracy","published_date":"11/19/2016"}},{"author":"Jonathan Rentzsch","title":"Rentzsch","site_url":"http://rentzsch.tumblr.com/","feed_url":"http://rentzsch.tumblr.com/rss","most_recent_article":{"title":"mogenerator 1.31","url":"https://rentzsch.tumblr.com/post/151300114355","published_date":"10/03/2016"}},{"author":"Gabriel Hauber","title":"Gabriel Hauber’s Blog","site_url":"http://gabrielhauber.net/","feed_url":"http://gabrielhauber.net/feed.xml","most_recent_article":{"title":"I am an Indie Dev - Part 3","url":"http://gabrielhauber.net/devBlog/2016/09/14/indie-dev-part-3/","published_date":"09/14/2016"}},{"author":"Arseniy Kuznetsov","title":"Arseniy Kuznetsov’s Blog","site_url":"http://akpdev.com","feed_url":"http://www.akpdev.com/feed.xml","most_recent_article":{"title":"Visual Binary Trees with Swift 3, Part II","url":"http://akpdev.com/articles/2016/09/08/BinaryTreesPlayground-Part-II.html","published_date":"09/07/2016"}},{"author":"Drew McCormack","title":"The Mental Blog","site_url":"http://mentalfaculty.tumblr.com","feed_url":"http://mentalfaculty.tumblr.com/rss","most_recent_article":{"title":"The Story of Hiding Spots","url":"https://mentalfaculty.tumblr.com/post/147281270646","published_date":"07/12/2016"}},{"author":"Yonas Kolb","title":"Yonas Kolb’s Blog","site_url":"https://yonaskolb.com/","feed_url":"https://yonaskolb.com/blog?format=rss","most_recent_article":{"title":"Swift 3 Set insert behaviour","url":"http://yonaskolb.com/blog/2016/6/29/swift-3-set-behaviour","published_date":"06/30/2016"}},{"author":"Nick Hanan","title":"Coding Explorer Blog","site_url":"http://www.codingexplorer.com","feed_url":"http://www.codingexplorer.com/feed/","most_recent_article":{"title":"Error Handling in Swift","url":"https://www.codingexplorer.com/error-handling-swift/","published_date":"05/05/2016"}},{"author":"Klaas Pieter Annema","title":"annema.me","site_url":"http://www.annema.me/","feed_url":"https://annema.me/feed.xml","most_recent_article":{"title":"Find time zones where it’s currently a certain time","url":"https://annema.me/2016/05/05/find-time-zones-where-its-currently-a-certain-time","published_date":"05/05/2016"}},{"author":"Brad Larson","title":"Sunset Lake Software","site_url":"http://www.sunsetlakesoftware.com/blog","feed_url":"http://www.sunsetlakesoftware.com/blog/rss.xml/rss","most_recent_article":{"title":"Introducing GPUImage 2, redesigned in Swift","url":"http://www.sunsetlakesoftware.com/2016/04/16/introducing-gpuimage-2-redesigned-swift","published_date":"04/16/2016"}},{"author":"Hector Matos","title":"KrakenDev","site_url":"https://krakendev.io/","feed_url":"https://krakendev.io/?format=rss","most_recent_article":{"title":"Hipster Swift: Demystifying the Mysterious","url":"https://krakendev.io/blog/hipster-swift","published_date":"01/18/2016"}},{"author":"Ben Cohen","title":"Airspeed Velocity","site_url":"https://airspeedvelocity.net","feed_url":"https://airspeedvelocity.net/feed/","most_recent_article":{"title":"Writing A Generic Stable Sort","url":"https://airspeedvelocity.net/2016/01/10/writing-a-generic-stable-sort/","published_date":"01/10/2016"}},{"author":"Mateusz Stawecki","title":"Mateusz Stawecki’s Blog","site_url":"https://stawecki.wordpress.com","feed_url":"https://stawecki.wordpress.com/feed/","most_recent_article":{"title":"Visor-like access to Finder and Terminal on OS X El Capitan","url":"https://stawecki.wordpress.com/2015/10/19/visor-like-access-to-finder-and-terminal-on-os-x-el-capitan/","published_date":"10/19/2015"}},{"author":"Jonathon Mah","title":"dev etc","site_url":"http://devetc.org","feed_url":"http://devetc.org/feed.xml","most_recent_article":{"title":"No parameters","url":"http://devetc.org/code/2015/10/14/no-parameters.html","published_date":"10/14/2015"}},{"author":"Matt Stevens","title":"Code Workshop","site_url":"http://codeworkshop.net/","feed_url":"http://codeworkshop.net/feed","most_recent_article":{"title":"Xcode Build Setting Transformations","url":"tag:codeworkshop.net,2015-08-08:1439059813","published_date":"08/08/2015"}},{"author":"Alexandros Salazar","title":"Alexandros Salazar’s Blog","site_url":"https://nomothetis.svbtle.com","feed_url":"https://nomothetis.svbtle.com/feed","most_recent_article":{"title":"The Ghost of Swift Bugs Future","url":"tag:nomothetis.svbtle.com,2014:Post/the-ghost-of-swift-bugs-future","published_date":"06/12/2015"}},{"author":"Javier Soto","title":"Javier Soto’s Blog","site_url":"http://javisoto.tumblr.com/","feed_url":"http://javisoto.tumblr.com/rss","most_recent_article":{"title":"“Back to the Futures” talk at Swift Summit in London","url":"https://javisoto.tumblr.com/post/119471144169","published_date":"05/20/2015"}},{"author":"Nolan O’Brien","title":"NSProgrammer","site_url":"http://nsprogrammer.com","feed_url":"http://www.nsprogrammer.com/feeds/posts/default","most_recent_article":{"title":"UIColor - why hast though forsaken me!?","url":"tag:blogger.com,1999:blog-6486813749412754497.post-2374691466338954157","published_date":"11/22/2013"}},{"author":"Bret Victor","title":"Bret Victor’s Blog","site_url":"http://worrydream.com/","feed_url":"http://worrydream.com/feed.xml","most_recent_article":{"title":"New website","url":"tag:worrydream.com,2011-04-15:bretsite_new","published_date":"04/15/2011"}}],"stats":{"sites_total":514,"sites_active_60d":109,"sites_active_60d_in_percentage":21,"sites_active_90d":142,"sites_active_90d_in_percentage":28,"sites_active_30d":78,"sites_active_30d_in_percentage":15}} 2 | -------------------------------------------------------------------------------- /gatsby-browser.js: -------------------------------------------------------------------------------- 1 | import './src/styles/global.css' 2 | -------------------------------------------------------------------------------- /gatsby-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | siteMetadata: { 3 | url: "https://www.iosdevupdates.com", 4 | siteUrl: "https://www.iosdevupdates.com", 5 | title: "iOS Dev Updates", 6 | description: "The slightly different feed aggregator powered by the iOS Dev Directory. Read the most recent post for each blog with ease.", 7 | image: "/logo.png", 8 | twitterUsername: "@MarcoEidinger", 9 | keywords: `"ios blogs, swift blogs, swift news, newest ios articles, feed aggregator, iOS Dev Directory` 10 | }, 11 | plugins: [ 12 | "gatsby-plugin-postcss", 13 | "gatsby-plugin-react-helmet", 14 | "gatsby-plugin-sitemap", 15 | { 16 | resolve: `gatsby-plugin-manifest`, 17 | options: { 18 | icon: `src/images/icon.png`, 19 | }, 20 | }, 21 | { 22 | resolve: 'gatsby-plugin-robots-txt', 23 | options: { 24 | host: 'https://www.iosdevupdates.com', 25 | sitemap: 'https://www.iosdevupdates.com/sitemap.xml', 26 | policy: [{ userAgent: '*', allow: '/' }] 27 | } 28 | }, 29 | 'gatsby-plugin-cname', 30 | { 31 | resolve: 'gatsby-plugin-buildtime-timezone', 32 | options: { 33 | tz: 'America/Los_Angeles', 34 | format: 'h:mm a zz', 35 | }, 36 | }, 37 | ], 38 | }; 39 | -------------------------------------------------------------------------------- /gatsby-node.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const fs = require("fs"); 3 | const blogs = require("./content/blogs.json"); 4 | 5 | const POST_LIMIT = 60; 6 | 7 | exports.onPostBuild = async () => { 8 | const buildDate = new Date(); 9 | const filePath = path.resolve(__dirname, "./public/rss.xml"); 10 | const blogList = blogs.sites?.slice(0, POST_LIMIT); 11 | 12 | // skip anything that doesn't have a valid link 13 | const filteredBlogList = blogList.filter((item) => { 14 | return /^http/.test(item.most_recent_article?.url?.trim()); 15 | }); 16 | 17 | // generate RSS 18 | const content = generateRSS(filteredBlogList, buildDate); 19 | 20 | // write to public folder 21 | fs.writeFileSync(filePath, content); 22 | }; 23 | 24 | /** 25 | * RSS GENERATION 26 | */ 27 | 28 | // generate correct publication date format 29 | function pubDate(date) { 30 | if (typeof date === "undefined") { 31 | date = new Date(); 32 | } 33 | 34 | var pieces = date.toString().split(" "), 35 | offsetTime = pieces[5].match(/[-+]\d{4}/), 36 | offset = offsetTime ? offsetTime : pieces[5], 37 | parts = [ 38 | pieces[0] + ",", 39 | pieces[2], 40 | pieces[1], 41 | pieces[3], 42 | pieces[4], 43 | offset, 44 | ]; 45 | 46 | return parts.join(" "); 47 | } 48 | 49 | const generateRSS = (items, buildDate) => { 50 | const itemsRSS = items.map((item) => { 51 | return ` 52 | 53 | <![CDATA[${item.most_recent_article?.title}]]> 54 | 55 | 56 | 57 | ${pubDate( 58 | new Date(item.most_recent_article?.published_date) 59 | )} 60 | 61 | `; 62 | }); 63 | 64 | return ` 65 | 68 | 69 | <![CDATA[iOSDevUpdates]]> 70 | 71 | https://www.iosdevupdates.com/ 72 | ${pubDate(buildDate)} 73 | ${itemsRSS.join("")} 74 | 75 | `; 76 | }; 77 | -------------------------------------------------------------------------------- /gatsby-ssr.js: -------------------------------------------------------------------------------- 1 | // gatsby-ssr.js 2 | 3 | import React from 'react' 4 | 5 | export const onRenderBody = ({ setPostBodyComponents }) => { 6 | setPostBodyComponents([ 7 | ]) 20 | } 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "iosdevupdates", 3 | "version": "1.0.0", 4 | "private": true, 5 | "description": "The slightly different feed aggregator powered by the iOS Dev Directory", 6 | "author": "Marco Eidinger", 7 | "keywords": [ 8 | "gatsby" 9 | ], 10 | "scripts": { 11 | "develop": "gatsby develop", 12 | "start": "gatsby develop", 13 | "build": "gatsby build", 14 | "serve": "gatsby serve", 15 | "clean": "gatsby clean", 16 | "format": "prettier --write src/**/*.{js}" 17 | }, 18 | "dependencies": { 19 | "autoprefixer": "^10.4.2", 20 | "daisyui": "^1.21.0", 21 | "gatsby": "^4.4.0", 22 | "gatsby-plugin-buildtime-timezone": "^1.0.3", 23 | "gatsby-plugin-cname": "^1.0.0", 24 | "gatsby-plugin-manifest": "^4.4.0", 25 | "gatsby-plugin-postcss": "^5.4.0", 26 | "gatsby-plugin-react-helmet": "^5.4.0", 27 | "gatsby-plugin-robots-txt": "^1.6.14", 28 | "gatsby-plugin-sitemap": "^5.4.0", 29 | "gatsby-source-filesystem": "^4.4.0", 30 | "gatsby-transformer-remark": "^5.4.0", 31 | "postcss": "^8.4.5", 32 | "prop-types": "^15.8.1", 33 | "react": "^17.0.1", 34 | "react-dom": "^17.0.1", 35 | "react-helmet": "^6.1.0", 36 | "tailwindcss": "^3.0.12" 37 | }, 38 | "devDependencies": { 39 | "prettier": "2.5.1" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = () => ({ 2 | plugins: [require("tailwindcss")], 3 | }) 4 | -------------------------------------------------------------------------------- /src/components/blogPost.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const BlogPost = ({ site }) => { 4 | function getTwitterHandler(twitterURL) {// 5 | if (twitterURL && twitterURL.length > 0) { 6 | let handler = twitterURL.replace("https://www.twitter.com/", ''); 7 | handler = handler.replace("https://twitter.com/", '') 8 | handler = handler.replace("http://www.twitter.com/", ''); 9 | handler = handler.replace("http://twitter.com/", '') 10 | return "@" + handler 11 | } else { 12 | return "" 13 | } 14 | } 15 | 16 | const hasTwitterURL = site.twitter_url 17 | const twitterHandler = getTwitterHandler(site.twitter_url) 18 | return ( 19 |
20 |
21 |

22 | 32 |

33 |

34 | {/*

*/} 35 | 41 | {site.title} 42 | 43 | {hasTwitterURL && hasTwitterURL.length > 0 && 44 | 45 | {" "} by {" "} 46 | {twitterHandler} 47 | 48 | } 49 | {" "} 50 | - Published{" "} 51 | {new Date( 52 | site.most_recent_article.published_date 53 | ).toLocaleDateString("en-US", { 54 | weekday: "short", 55 | year: "numeric", 56 | month: "long", 57 | day: "numeric", 58 | })} 59 |

60 | {/*
*/} 61 | 62 |
63 |
64 |
65 | ); 66 | }; 67 | 68 | export default BlogPost; 69 | -------------------------------------------------------------------------------- /src/components/footer.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { useStaticQuery, graphql } from "gatsby" 3 | 4 | const Footer = () => { 5 | const data = useStaticQuery(graphql` 6 | query { 7 | site { 8 | buildTimeZone 9 | } 10 | } 11 | `) 12 | 13 | return ( 14 | 30 | ); 31 | }; 32 | 33 | export default Footer; 34 | -------------------------------------------------------------------------------- /src/components/listPaging.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ListPaging = ({ previousPage, nextPage }) => { 4 | return ( 5 |
6 | 9 | 12 |
13 | ); 14 | }; 15 | 16 | export default ListPaging; 17 | -------------------------------------------------------------------------------- /src/components/navbar.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Link } from "gatsby"; 3 | 4 | const Navbar = () => { 5 | return ( 6 | 71 | ); 72 | }; 73 | 74 | export default Navbar; 75 | -------------------------------------------------------------------------------- /src/components/seo.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import PropTypes from "prop-types" 3 | import { Helmet } from "react-helmet" 4 | import { useLocation } from "@reach/router" 5 | import { useStaticQuery, graphql } from "gatsby" 6 | 7 | const SEO = ({ title, description, image, article }) => { 8 | const { pathname } = useLocation() 9 | const { site } = useStaticQuery(query) 10 | 11 | const { 12 | defaultTitle, 13 | defaultDescription, 14 | siteUrl, 15 | defaultImage, 16 | twitterUsername, 17 | keywords, 18 | } = site.siteMetadata 19 | 20 | const seo = { 21 | title: title || defaultTitle, 22 | description: description || defaultDescription, 23 | image: `${siteUrl}${image || defaultImage}`, 24 | url: `${siteUrl}${pathname}`, 25 | keywords: keywords || [] 26 | } 27 | 28 | return ( 29 | 30 | 31 | 32 | 33 | 34 | {seo.url && } 35 | 36 | {(article ? true : null) && } 37 | 38 | {seo.title && } 39 | 40 | {seo.description && ( 41 | 42 | )} 43 | 44 | {seo.image && } 45 | 46 | 47 | 48 | {twitterUsername && ( 49 | 50 | )} 51 | 52 | {seo.title && } 53 | 54 | {seo.description && ( 55 | 56 | )} 57 | 58 | 59 | 60 | {seo.image && } 61 | 62 | 63 | ) 64 | } 65 | 66 | export default SEO 67 | 68 | SEO.propTypes = { 69 | title: PropTypes.string, 70 | description: PropTypes.string, 71 | image: PropTypes.string, 72 | article: PropTypes.bool, 73 | } 74 | 75 | SEO.defaultProps = { 76 | title: null, 77 | description: null, 78 | image: null, 79 | article: false, 80 | } 81 | 82 | const query = graphql` 83 | query SEO { 84 | site { 85 | siteMetadata { 86 | defaultTitle: title 87 | defaultDescription: description 88 | keywords 89 | siteUrl: url 90 | defaultImage: image 91 | twitterUsername 92 | } 93 | } 94 | } 95 | ` 96 | -------------------------------------------------------------------------------- /src/components/stats.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Stats = ({ stats }) => { 4 | return ( 5 |
6 |
7 |
Total Blogs
8 |
{stats.sites_total}
9 |
accessible through RSS
10 |
11 |
12 |
Most Recent Blogs
13 |
{stats.sites_active_30d}
14 |
posted within the last 30 days
15 |
16 |
17 |
Active Blogs
18 |
{stats.sites_active_90d_in_percentage}%
19 |
in the last 90 days
20 |
21 |
22 | ); 23 | }; 24 | 25 | export default Stats; 26 | -------------------------------------------------------------------------------- /src/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcoEidinger/iosdevupdates/4a322a88dada251cd360f549439b3f73e1ccd410/src/images/icon.png -------------------------------------------------------------------------------- /src/markdown-pages/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | path: "/" 3 | date: "2019-10-06" 4 | title: "About" 5 | --- 6 | 7 | # About us 8 | 9 | Here is the body of our content. It will be magically turned into HTML. 10 | -------------------------------------------------------------------------------- /src/pages/404.js: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { Link } from "gatsby"; 3 | 4 | // styles 5 | const pageStyles = { 6 | color: "#232129", 7 | padding: "96px", 8 | fontFamily: "-apple-system, Roboto, sans-serif, serif", 9 | }; 10 | const headingStyles = { 11 | marginTop: 0, 12 | marginBottom: 64, 13 | maxWidth: 320, 14 | }; 15 | 16 | const paragraphStyles = { 17 | marginBottom: 48, 18 | }; 19 | const codeStyles = { 20 | color: "#8A6534", 21 | padding: 4, 22 | backgroundColor: "#FFF4DB", 23 | fontSize: "1.25rem", 24 | borderRadius: 4, 25 | }; 26 | 27 | // markup 28 | const NotFoundPage = () => { 29 | return ( 30 |
31 | Not found 32 |

Page not found

33 |

34 | Sorry{" "} 35 | 36 | 😔 37 | {" "} 38 | we couldn’t find what you were looking for. 39 |
40 | {process.env.NODE_ENV === "development" ? ( 41 | <> 42 |
43 | Try creating a page in src/pages/. 44 |
45 | 46 | ) : null} 47 |
48 | Go home. 49 |

50 |
51 | ); 52 | }; 53 | 54 | export default NotFoundPage; 55 | -------------------------------------------------------------------------------- /src/pages/about.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Navbar from "../components/navbar"; 3 | import Footer from "../components/footer"; 4 | import Seo from "../components/seo" 5 | 6 | const About = ({ data }) => ( 7 |
8 | 9 |
10 | 11 |
12 |

Motivation & Purpose

13 |
14 |

I personally was overwhelmed with the sheer amount of iOS Dev Blogs created by amazing people. A comprehensive list of blogs covering iOS development is the iOS Dev Directory. It was originally put together, and is maintained by Dave Verwer. Adding a site is easy and well explained here.

15 |

16 |

I wondered how many blogs are active, and I wanted to get an overview of the most recent blogs.

17 |

18 |

Hence I created this website. The list of blogs is sourced from the iOS Dev Directory. There are other feed aggregator sites which are powered by the iOS Dev Directory. But iOSDevUpdate.com is a little bit different.

19 |

First and foremost: Each blog, written in the English language, will be listed only once with its most recent article.

20 |

This mechanism keeps the list relatively small as not all blog posts for all blogs are shown. It allows the curious person to see which blogs published their last article when. This hopefully makes it more likely that non-professional blogs (i.e. without full time commitment and publishing every day) can be discovered as those are not buried at the very end of the list.

21 |

Also some stats are presented how many blogs are listed in the iOS Dev Directory and how many are active in which timeframe. This might not be of interest for everone.

22 |
23 |
24 |
25 |
27 | ); 28 | 29 | export default About; 30 | -------------------------------------------------------------------------------- /src/pages/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import blogs from "../../content/blogs.json"; 3 | import Navbar from "../components/navbar"; 4 | import Stats from "../components/stats"; 5 | import BlogPost from "../components/blogPost"; 6 | import ListPaging from "../components/listPaging"; 7 | import Footer from "../components/footer"; 8 | import Seo from "../components/seo" 9 | 10 | class IndexPage extends React.Component { 11 | constructor(props) { 12 | super(props); 13 | this.state = { startElement: 0, endElement: 30 }; 14 | } 15 | 16 | previousPage = () => { 17 | if (this.state.startElement === 0) { 18 | return; 19 | } 20 | this.setState((prevState) => ({ 21 | startElement: prevState.startElement - 30, 22 | endElement: prevState.endElement - 30, 23 | })); 24 | window.scrollTo(0, 0); 25 | }; 26 | 27 | nextPage = () => { 28 | if (this.state.endElement + 30 > blogs.sites.length) { 29 | return; 30 | } 31 | this.setState((prevState) => ({ 32 | startElement: prevState.startElement + 30, 33 | endElement: prevState.endElement + 30, 34 | })); 35 | window.scrollTo(0, 0); 36 | }; 37 | 38 | render() { 39 | return ( 40 |
41 | 42 | 43 |
44 | 45 |
46 |
47 | {this.state.startElement !== 0 && ( 48 | 52 | )} 53 |

54 |
55 | {blogs.sites 56 | .slice(this.state.startElement, this.state.endElement) 57 | .map((site) => ( 58 | 59 | ))} 60 |
61 | 62 |
64 | ); 65 | } 66 | } 67 | 68 | export default IndexPage; 69 | -------------------------------------------------------------------------------- /src/styles/global.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /static/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcoEidinger/iosdevupdates/4a322a88dada251cd360f549439b3f73e1ccd410/static/logo.png -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: ['./src/**/*.{js,jsx,ts,tsx}', './public/index.html'], 3 | theme: { 4 | minHeight: { 5 | '25vh': '25vh', 6 | '50vh': '50vh', 7 | '75vh': '75vh', 8 | '85vh': '85vh', 9 | '95vh': '95vh', 10 | }, 11 | zIndex: { 12 | 'n3': -30, 13 | 'n2': -20, 14 | 'n1': -10, 15 | '0': 0, 16 | '10': 10, 17 | '20': 20, 18 | '30': 30, 19 | 'auto': 'auto', 20 | }, 21 | extend: { 22 | fontFamily: { 23 | 'poppins': ['Poppins', 'sans-serif'], 24 | 'roboto': ['Roboto', 'sans-serif'] 25 | } 26 | }, 27 | }, 28 | variants: { 29 | extend: {}, 30 | }, 31 | plugins: [ 32 | require('daisyui'), 33 | ], 34 | daisyui: { 35 | styled: true, 36 | base: true, 37 | utils: true, 38 | logs: true, 39 | rtl: false, 40 | themes: [ 41 | 'halloween' 42 | ], 43 | }, 44 | }; 45 | --------------------------------------------------------------------------------