This repository has been archived by the owner on Aug 14, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
archive.html
27 lines (25 loc) · 110 KB
/
archive.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html><html lang="en"><head><title>Archive | mokacoding</title><meta name="description" content="A blog about software testing, iOS development, automation, and productivity."><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1"><!-- Open Graph meta tags--><meta property="og:title" content="Archive"><meta property="og:description" content="A blog about software testing, iOS development, automation, and productivity."><meta property="og:url" content="/"><meta property="og:type" content="article"><meta property="og:site_name" content="mokacoding"><meta property="og:image" content="https://s3.amazonaws.com/mokacoding/mokacoding_og_image.jpg"><!-- Twitter meta tags--><meta property="twitter:card" content="summary"><meta property="twitter:title" content="Archive"><meta property="twitter:site" content="@mokacoding"><meta property="twitter:creator" content="@mokagio"><!-- Stylesheets--><link href="/css/griddy.css" rel="stylesheet"><link href="/css/style.css" rel="stylesheet"><link href="/css/font-awesome.min.css" rel="stylesheet"><link href="/css/zenburn.css" rel="stylesheet"><!-- FavIcon--><!-- Thanks to https://www.favicon-generator.org/ & https://html2jade.org/--><link rel="apple-touch-icon" sizes="57x57" href="https://s3.amazonaws.com/mokacoding/apple-icon-57x57.png"><link rel="apple-touch-icon" sizes="60x60" href="https://s3.amazonaws.com/mokacoding/apple-icon-60x60.png"><link rel="apple-touch-icon" sizes="72x72" href="https://s3.amazonaws.com/mokacoding/apple-icon-72x72.png"><link rel="apple-touch-icon" sizes="76x76" href="https://s3.amazonaws.com/mokacoding/apple-icon-76x76.png"><link rel="apple-touch-icon" sizes="114x114" href="https://s3.amazonaws.com/mokacoding/apple-icon-114x114.png"><link rel="apple-touch-icon" sizes="120x120" href="https://s3.amazonaws.com/mokacoding/apple-icon-120x120.png"><link rel="apple-touch-icon" sizes="144x144" href="https://s3.amazonaws.com/mokacoding/apple-icon-144x144.png"><link rel="apple-touch-icon" sizes="152x152" href="https://s3.amazonaws.com/mokacoding/apple-icon-152x152.png"><link rel="apple-touch-icon" sizes="180x180" href="https://s3.amazonaws.com/mokacoding/apple-icon-180x180.png"><link rel="icon" type="image/png" sizes="192x192" href="https://s3.amazonaws.com/mokacoding/android-icon-192x192.png"><link rel="icon" type="image/png" sizes="32x32" href="https://s3.amazonaws.com/mokacoding/favicon-32x32.png"><link rel="icon" type="image/png" sizes="96x96" href="https://s3.amazonaws.com/mokacoding/favicon-96x96.png"><link rel="icon" type="image/png" sizes="16x16" href="https://s3.amazonaws.com/mokacoding/favicon-16x16.png"><link rel="manifest" href="https://s3.amazonaws.com/mokacoding/manifest.json"><meta name="msapplication-TileColor" content="#ffffff"><meta name="msapplication-TileImage" content="https://s3.amazonaws.com/mokacoding/ms-icon-144x144.png"><meta name="theme-color" content="#ffffff"><!-- SumoMe--><script src="//load.sumome.com/" data-sumo-site-id="dd80959300db03e20c8bc3dd899f1424fd764d261e6c3c41923c96482a270dba" async="async"></script></head><body><!-- Use this to render an extra header in special occasions--><div class="special-header"><div class="page"><div class="row-12"><div class="col-12"><p><!-- - Saving this for later and to avoid a `git revert`:markdown
[What is your biggest struggle right now with building software?](https://goo.gl/forms/lCLlJd9hqCUYoTME2)--><p><a href="https://tddinswift.com?utm_source=mokacoding-site&utm_campaign=coming-soon&utm_medium=sticky-header">Avilable Now: <strong>Test-Driven Development in Swift with SwiftUI and Combine</strong></a></p>
</p></div></div></div></div><div class="page"><div class="row-12"><div class="col-12 header"><h1 class="brand"><a href="/">mokacoding</a></h1><div class="punchline">unit and acceptance testing, automation, productivity</div><div class="links"><a href="/archive.html">Archive</a><a href="/tags.html">Tags</a><a href="https://gio.codes">About</a><a href="#subscribe">Subscribe</a><a href="/feed.xml"><i class="fa fa-rss"></i></a></div></div><div class="col-12"><h1><a href="/tag/combine/index.html">Archive</a></h1><br><br><div class="post-container tag"><h2 class="post-title"><a href="/blog/tdd-in-swift-book-launch">Test-Driven Development in Swift is now available</a></h2><p class="post-meta"><span class="post-date">Thu Jul 15 2021 </span><a href="/tag/Books/index.html" class="post-tag">-Books</a><a href="/tag/TDD/index.html" class="post-tag">-TDD</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a></p><p class="post-description">My book, Test-Driven Development in Swift, is now available in online bookstores everywhere. You'll learn Test-Driven Development writing a real-world SwiftUI application, including events-flow management with Combine, networking, local storage, and third-party libraries.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/wwdc21-whats-new-in-testing">WWDC21: What's New in Testing</a></h2><p class="post-meta"><span class="post-date">Thu Jun 17 2021 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Talks/index.html" class="post-tag">-Talks</a></p><p class="post-description">A roundup of the testing-related new features announced at WWDC 2021. Including Xcode Cloud, how to test code using async/await, the new XCTExpectFailure and addTearDownBlock APIs, and the new Test Repetition configuration in Test Plans.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-test-async-await-code-in-swift">How to test Swift async/await code with XCTest</a></h2><p class="post-meta"><span class="post-date">Mon Jun 07 2021 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">Swift 5.5 and Xcode 13 introduce the async/await pattern for concurrent code. This tutorial post shows how to write unit tests for asynchronous code in Swift using the XCTest framework.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/better-swift-date-compare-tests">How to write better tests for Swift date comparisons</a></h2><p class="post-meta"><span class="post-date">Fri Jun 04 2021 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a></p><p class="post-description">Testing Swift date comparison code with XCTest can result in indeterministic tests because of the passage of time. To make tests robust and deterministic, decouple them from the system clock by injecting the reference date.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/distributed-working">On the benefits of distributed work</a></h2><p class="post-meta"><span class="post-date">Wed May 26 2021 </span><a href="/tag/Distributed/index.html" class="post-tag">-Distributed</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">Working from home doesn't have to be lonely. Going from remote to distributed can bring massive benefits to employees satisfaction and company productivity.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/scenario-builders-in-swift">How to manage complex inputs in your Swift tests with Scenario Builders</a></h2><p class="post-meta"><span class="post-date">Thu Apr 29 2021 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">When writing unit tests in Swift for complex objects, you may need to write a lot of setup boilerplate code in the arrange phase. Scenario Builders are a pattern that extracts and encapsulated all that logic in a single component with an English-like API. This tutorial shows how to build a Scenario Builder in Swift and looks at its pros and cons.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/a-world-without-slack">A World Without Slack</a></h2><p class="post-meta"><span class="post-date">Mon Apr 19 2021 </span><a href="/tag/books/index.html" class="post-tag">-books</a><a href="/tag/productivity/index.html" class="post-tag">-productivity</a><a href="/tag/processes/index.html" class="post-tag">-processes</a></p><p class="post-description">How to establish a workflow that minimizes unscheduled, unstructured communication and maximizes focus and productivity.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/distributed-app-release-process">A distributed asynchronous release process</a></h2><p class="post-meta"><span class="post-date">Sat Mar 13 2021 </span><a href="/tag/Distributed/index.html" class="post-tag">-Distributed</a><a href="/tag/Processes/index.html" class="post-tag">-Processes</a></p><p class="post-description">My latest post on mobile.blog explores two simple conventions Automattic uses to remove the need for synchronous meetings in their app release process.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/working-backwards">Working Backwards</a></h2><p class="post-meta"><span class="post-date">Sat Mar 06 2021 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">How working your way backwards from your desired outcome can make you more productive, focused, and motivated.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-waiting-in-line-can-improve-your-focus">How waiting in line can improve your focus</a></h2><p class="post-meta"><span class="post-date">Tue Feb 16 2021 </span><a href="/tag/Books/index.html" class="post-tag">-Books</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">Embrace boredom to train your brain to sustain focus when working on demanding tasks</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/testing-combine-publisher-cheatsheet">Unit Testing Combine Publisher Cheatsheet</a></h2><p class="post-meta"><span class="post-date">Thu Feb 11 2021 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Combine/index.html" class="post-tag">-Combine</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a></p><p class="post-description">Snippets to test the behavior of Combine Publishers in XCTest ready to copy and paste into Xcode</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/boring-iterations-interesting-steps">Boring Iterations. Interesting Steps.</a></h2><p class="post-meta"><span class="post-date">Sat Jan 30 2021 </span><a href="/tag/Strategy/index.html" class="post-tag">-Strategy</a><a href="/tag/TDD/index.html" class="post-tag">-TDD</a></p><p class="post-description">Camille Fournier encourages us to "Make Boring Plans" and move in small iterations.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-migrate-from-swiftui-to-uikit-life-cycle">How to migrate from SwiftUI to UIKit App Delegate Life Cycle in Xcode</a></h2><p class="post-meta"><span class="post-date">Thu Jan 21 2021 </span><a href="/tag/SwiftUI/index.html" class="post-tag">-SwiftUI</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">This free tutorial shows how to migrate an existing app with SwiftUI life cycle to use UIKit App Delegate instead</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-stick-with-your-new-year-resolutions">How to stick with your New Year resolutions</a></h2><p class="post-meta"><span class="post-date">Fri Jan 01 2021 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">The start of a new year is a great time to work on self-improvement, but unless you take the right steps, your New Year resolutions might not stick.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-set-default-values-in-swift-compiler-generate-init">How to set default values in Swift compiler-generated initializers</a></h2><p class="post-meta"><span class="post-date">Wed Dec 23 2020 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">You can get the Swift compiler to generate an initializer with default values for your structs, if you're willing to put up with a bit of mutability.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/tdd-and-ydniy">How to improve your Test-Driven Development workflow by asking "Do I need this yet?"</a></h2><p class="post-meta"><span class="post-date">Thu Dec 17 2020 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/TDD/index.html" class="post-tag">-TDD</a></p><p class="post-description">The "You Don't Need It Yet" technique to ship software on a schedule results in fast real-world feeback. The same mindset can be applied with Test-Driven Development to move between the Red, Green, and Refactor stages faster.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/write-better-swift-tests-with-xctest-assertions">Write better Swift unit tests with custom XCTest assertions</a></h2><p class="post-meta"><span class="post-date">Thu Dec 10 2020 </span><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">The XCTest Swift testing framework has a limited offer of assertions. There's only so much you can do with XCTAssertTrue and XCTAssertEqual. This XCTest tutorial shows how to create custom assertions to make your unit tests and UI tests shorter and clearer.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-write-tests-for-swift-result">How to write unit test assertions for Swift Result values</a></h2><p class="post-meta"><span class="post-date">Wed Dec 02 2020 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a></p><p class="post-description">Result is one of the most useful types in the Swift language. Learn how to write better unit tests using Result in this XCTest tutorial.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/when-experiments-go-wrong">When experiments go wrong</a></h2><p class="post-meta"><span class="post-date">Wed Nov 25 2020 </span><a href="/tag/Books/index.html" class="post-tag">-Books</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Learning/index.html" class="post-tag">-Learning</a></p><p class="post-description">Scientist can learn a lot from failed experiments. To do so, they must be methodical and collect all sorts of information. Softwar developers can learn a lot from failures, too. What are the practicies that can make learning easier?</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/better-merging-for-github-pull-requests">How to merge pull requests with a commit that improves your Git history</a></h2><p class="post-meta"><span class="post-date">Fri Nov 20 2020 </span><a href="/tag/GitHub/index.html" class="post-tag">-GitHub</a><a href="/tag/Git/index.html" class="post-tag">-Git</a></p><p class="post-description">When merging a pull request on GitHub, it helps to replace the default merge commit title with the PR title or an equally descriptive one. This will make your Git history more informative, and developers will understand the changes in the Git log faster.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/prevent-swiftui-app-loading-in-unit-tests">How to bypass the SwiftUI App when running unit tests</a></h2><p class="post-meta"><span class="post-date">Thu Nov 12 2020 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/SwiftUI/index.html" class="post-tag">-SwiftUI</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">How to make the unit tests of your SwiftUI app safer and faster by preventing them from running the program startup flow. This will avoid all of the launch operations like network requests or reads from the local storage that would affect the global state.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/vim-rename-file">How to rename a file in Vim</a></h2><p class="post-meta"><span class="post-date">Fri Nov 06 2020 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Vim/index.html" class="post-tag">-Vim</a></p><p class="post-description">There are many ways to rename a file in Vim. Here's three.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/remove-trailing-whitespaces-in-folder-files">How to remove trailing whitespaces from all files in a folder</a></h2><p class="post-meta"><span class="post-date">Thu Nov 05 2020 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Terminal/index.html" class="post-tag">-Terminal</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a></p><p class="post-description">Here's a shell command to trim all the trailing whitespaces in all the files of the current folder.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/nested-type-view-models">How to make the View to ViewModel relationship clear</a></h2><p class="post-meta"><span class="post-date">Wed Nov 04 2020 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/SwiftUI/index.html" class="post-tag">-SwiftUI</a></p><p class="post-description">Using Swift's nested types helps making it clear that a view model belongs to a view.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/swiftui-dependency-injection">Dependency Injection in SwiftUI</a></h2><p class="post-meta"><span class="post-date">Wed Oct 28 2020 </span></p><p class="post-description">This post shows two ways of achieving dependency injection in SwiftUI: using @EnvironmentObject or a View Model Factory.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/pipe-wrench">What can a pipe wrench teach us about software engineering?</a></h2><p class="post-meta"><span class="post-date">Wed Oct 21 2020 </span><a href="/tag/Books/index.html" class="post-tag">-Books</a><a href="/tag/Software-Design/index.html" class="post-tag">-Software Design</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">With his famous pipe wrench lecture, Vannevar Bush taught young MIT engineers the value of precision. The same teaching holds true for software developers.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/hyperfocus-review">Hyperfocus by Chris Bailey</a></h2><p class="post-meta"><span class="post-date">Mon Oct 12 2020 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a><a href="/tag/Books/index.html" class="post-tag">-Books</a></p><p class="post-description">Hyperfocus will teach you how to concentrate effectively and let your mind wander to reach creative insights.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/you-dont-need-it-yet">You Don't Need It Yet</a></h2><p class="post-meta"><span class="post-date">Wed Oct 07 2020 </span><a href="/tag/Software-Design/index.html" class="post-tag">-Software Design</a></p><p class="post-description">YDNIY is a purposeful restraint of what you decide to build in the interest of delivering value to the users as soon as possible and consistently.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/thats-funny-moments-are-learning-opportunities">"That's funny…" moments are learning opportunities</a></h2><p class="post-meta"><span class="post-date">Mon Sep 28 2020 </span><a href="/tag/Software-Design/index.html" class="post-tag">-Software Design</a><a href="/tag/Quotes/index.html" class="post-tag">-Quotes</a></p><p class="post-description">The most exciting phrase to hear in science, and software development, the one that heralds new discoveries, is not "Eureka!" but "That's funny…"</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/will-ios-14-destroy-your-productivity">Will iOS 14 Destroy Your Productivity?</a></h2><p class="post-meta"><span class="post-date">Mon Sep 21 2020 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">iOS 14 introduces Widgets, a feature that makes it incredibly easy to get distracted.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/replace-triple-boolean-with-enum">Replace Triple-state Boolean with Enumeration</a></h2><p class="post-meta"><span class="post-date">Mon Sep 14 2020 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">Triple-state Booleans can be ambiguous to work with. Replace them with an enum to make the code clearer.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-decouple-tests-from-frequently-changing-values">How to decouple unit tests from values that change frequently</a></h2><p class="post-meta"><span class="post-date">Tue Sep 01 2020 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">When the output value of a function changes often but the logic to pick it doesn't, adding a separation layer will make unit tests easier to maintain.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-add-coauthors-to-a-git-commit">How to add co-authors to a Git commit</a></h2><p class="post-meta"><span class="post-date">Tue Aug 25 2020 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Git/index.html" class="post-tag">-Git</a><a href="/tag/GitHub/index.html" class="post-tag">-GitHub</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-check-if-app-is-notarized">How to check if macOS app is notarized</a></h2><p class="post-meta"><span class="post-date">Mon Aug 24 2020 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-reverse-a-file-in-the-terminal">How to reverse a file in the terminal</a></h2><p class="post-meta"><span class="post-date">Sat Aug 22 2020 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-verify-ssh-key-password">How to verify your SSH private key password</a></h2><p class="post-meta"><span class="post-date">Thu Aug 20 2020 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-check-if-ruby-array-contains-element">How to check if array contains element with block in Ruby</a></h2><p class="post-meta"><span class="post-date">Tue Aug 18 2020 </span><a href="/tag/Ruby/index.html" class="post-tag">-Ruby</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/honesty-oriented-programming">Honesty-Oriented Programming</a></h2><p class="post-meta"><span class="post-date">Mon Jul 13 2020 </span><a href="/tag/Software-Design/index.html" class="post-tag">-Software Design</a></p><p class="post-description">If you focus on writing honest code, you'll end up with software that is easier to understand and work with.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/referential-transparency-in-swift">Referential Transparency in Swift</a></h2><p class="post-meta"><span class="post-date">Mon Jul 13 2020 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">An explanation of what referential transparency means with examples in Swift</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/main-vs-master-xcode-12">Should you change your branch name to "main"?</a></h2><p class="post-meta"><span class="post-date">Wed Jun 24 2020 </span></p><p class="post-description">In Xcode 12, the default branch name is main instead of master. This little language change has deeper implications and stirred up an hornets' nest.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/the-indistractable-developer">The Indistractable Developer</a></h2><p class="post-meta"><span class="post-date">Wed May 27 2020 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">The quality of your focus time is directly proportional to your value in the market. Become Indistractable to maximize it.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/cocoapods-ci-setup">How to use CocoaPods as a CLI tools manager</a></h2><p class="post-meta"><span class="post-date">Tue Mar 17 2020 </span><a href="/tag/iOS/index.html" class="post-tag">-iOS</a><a href="/tag/CocoaPods/index.html" class="post-tag">-CocoaPods</a><a href="/tag/Tooling/index.html" class="post-tag">-Tooling</a></p><p class="post-description">CocoaPods can be configured to only resolve and download dependencies, making it a great manager for vendored CLI tools</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-manually-generate-devise-reset-password-link">How to manually generate Devise reset password link</a></h2><p class="post-meta"><span class="post-date">Sun Jul 28 2019 </span><a href="/tag/Ruby-on-Rails/index.html" class="post-tag">-Ruby on Rails</a><a href="/tag/Ruby/index.html" class="post-tag">-Ruby</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/midwives-with-the-apple-watch">Midwives with the Apple Watch</a></h2><p class="post-meta"><span class="post-date">Mon Jun 03 2019 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a><a href="/tag/Deep-Work/index.html" class="post-tag">-Deep Work</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/social-media-operating-procedures">How to use social media productively</a></h2><p class="post-meta"><span class="post-date">Tue Apr 30 2019 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">Social media can be a valuable source of news and interactions, or a disruption to our focus. The difference is in how we approach using these technologies.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/running-one-test-in-xcode">How to run a single test in Xcode</a></h2><p class="post-meta"><span class="post-date">Tue Apr 23 2019 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">A collection of ways to run a single test or a subset of tests using Xcode.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/navigation-delegate-pattern">How to test view controllers navigation</a></h2><p class="post-meta"><span class="post-date">Tue Apr 16 2019 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/iOS/index.html" class="post-tag">-iOS</a><a href="/tag/Software-Design/index.html" class="post-tag">-Software-Design</a></p><p class="post-description">The answer to "How can I test that a view controller presents another view controller when something happens?" is as simple as defining a delegate.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/take-care-of-your-tools">Take care of your tools</a></h2><p class="post-meta"><span class="post-date">Tue Apr 09 2019 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">"You take care of your tools, your tools take care of you."</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/code-like-a-chef">Code Like A Chef</a></h2><p class="post-meta"><span class="post-date">Tue Apr 02 2019 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">Professional chefs keep their benches clean because clutter will get in the way of their work. Software developers should do the same.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/top-10-productivity-books">Top 10 Productivity Books</a></h2><p class="post-meta"><span class="post-date">Tue Mar 26 2019 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a><a href="/tag/Books/index.html" class="post-tag">-Books</a></p><p class="post-description">A running list of the top 10 most impactful books on productivity I've encountered so far</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/podcast-addiction">Why I'm cutting back on podcasts and audiobooks</a></h2><p class="post-meta"><span class="post-date">Tue Mar 19 2019 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a><a href="/tag/Podcasts/index.html" class="post-tag">-Podcasts</a><a href="/tag/Books/index.html" class="post-tag">-Books</a></p><p class="post-description">I realized I was on a path to remove time for reflection from my life, mainly by filling every available moment with podcasts and audiobooks. These are the steps I'm taking to cultivate more solitude, and the benefits I'm already seeing.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/better-tests-for-delegates">Better tests for delegates</a></h2><p class="post-meta"><span class="post-date">Tue Mar 12 2019 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">When testing delegates, we are asserting rigid implementation details. Here's a way to make those tests more flexible.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/3-lessons-from-new-england-patriots">3 Lessons on Software Development from the New England Patriots</a></h2><p class="post-meta"><span class="post-date">Tue Mar 05 2019 </span></p><p class="post-description">By looking at how the consistently successful New England Patriots operate we can learn useful lessons to apply to our job as software developers.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/clutter-and-optimization">The value of decluttering and optimizing your software</a></h2><p class="post-meta"><span class="post-date">Tue Feb 26 2019 </span><a href="/tag/Books/index.html" class="post-tag">-Books</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a><a href="/tag/Software-Design/index.html" class="post-tag">-Software Design</a></p><p class="post-description">Digital minimalists believe that clutter is costly and optimization is important. Let me show you how these ideas apply to software development as well.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/code-coverage-is-broken">Code Coverage Is A Broken Metric</a></h2><p class="post-meta"><span class="post-date">Tue Feb 19 2019 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Refactoring/index.html" class="post-tag">-Refactoring</a></p><p class="post-description">But you should track it anyways.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/wirte-less-code">Write Less Code</a></h2><p class="post-meta"><span class="post-date">Wed Feb 13 2019 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a><a href="/tag/Refactoring/index.html" class="post-tag">-Refactoring</a><a href="/tag/Software-Design/index.html" class="post-tag">-Software Design</a></p><p class="post-description">The best thing you can do as a software developer is not writing code, but removing it. Here's why.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/step-by-step-tdd-in-swift-part-1">How to TDD in Swift, a step by step guide</a></h2><p class="post-meta"><span class="post-date">Fri Feb 08 2019 </span><a href="/tag/TDD/index.html" class="post-tag">-TDD</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">With test driven development you can write high quality software in small shippable steps. Here's how to get started.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/the-productivity-project-notes">The Productivity Project - by Chris Bailey</a></h2><p class="post-meta"><span class="post-date">Tue Jan 29 2019 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a><a href="/tag/Books/index.html" class="post-tag">-Books</a></p><p class="post-description">My notes and quotes from The Productivity Project by Chris Bailey</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/swift-test-doubles">Test doubles in Swift: dummies, fakes, stubs, and spies.</a></h2><p class="post-meta"><span class="post-date">Tue Nov 27 2018 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">An overview of the different kind of doubles we can use in our tests, and how to write them in Swift.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/terminal-aliases">How to become drastically faster at using the terminal</a></h2><p class="post-meta"><span class="post-date">Tue Nov 20 2018 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a><a href="/tag/Terminal/index.html" class="post-tag">-Terminal</a></p><p class="post-description">Using the terminal might seem slow and cumbersome because every command needs to be typed. Learn how to drastically reduce the amount of typing you have to do by configuring aliases for your most used commands, making them only a few keystrokes long.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-split-decision-and-action-logic-with-the-swift-type-system">How to split decision and action logic with the Swift type system</a></h2><p class="post-meta"><span class="post-date">Tue Nov 13 2018 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Refactoring/index.html" class="post-tag">-Refactoring</a></p><p class="post-description">There is a subtle way to overload software components, by making them both take decision and act on them. We can simplify these bloated components by separating the responsibility of taking decisions from the one action on them. This will result in leaner and easier to maintain software, and is made simple by the Swift type system.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-remove-duplication-from-swift-tests-with-helper-functions">How to remove duplication from Swift tests with helper functions</a></h2><p class="post-meta"><span class="post-date">Tue Nov 06 2018 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a></p><p class="post-description">Some code ends up requiring a lot of duplication to be tested. You can remove it by using helper functions encapsulating the shared assertion logic.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/stephen-king-advice-to-software-developers">Stephen King's Advice To Software Developers</a></h2><p class="post-meta"><span class="post-date">Tue Oct 30 2018 </span><a href="/tag/Books/index.html" class="post-tag">-Books</a><a href="/tag/Quotes/index.html" class="post-tag">-Quotes</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">In "On Writing" Stephen King shares invaluable lessons for aspiring novelists which can be applied to software development too.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/where-to-start-to-become-more-productive">Where to start to become more productive</a></h2><p class="post-meta"><span class="post-date">Tue Oct 23 2018 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">What does it take to be productive? What does it event mean? Here's a introduction to the pillars of productivity, with many resources to start from.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-write-code-faster-using-snippets">How to write code faster using snippets</a></h2><p class="post-meta"><span class="post-date">Tue Oct 16 2018 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a></p><p class="post-description">Leveraging "snippets" is a way to get faster at writing code and free mental resources for problem solving. Most IDEs and text editor offer this feature, where you can write code scaffolding with a keyboard shortcut.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/streamlining-tests-setup-with-fixtures-in-swift">Streamlining tests setup with fixtures in Swift</a></h2><p class="post-meta"><span class="post-date">Tue Oct 09 2018 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">Keeping tests short and focused is important for the health of the test suite. A fixture method to generate instances with default values in the tests helps keeping the setup code short, focused, and readable</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/invest-in-your-terminal-to-become-a-better-developer">Invest in your terminal to become a better developer</a></h2><p class="post-meta"><span class="post-date">Tue Oct 02 2018 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a><a href="/tag/Tooling/index.html" class="post-tag">-Tooling</a><a href="/tag/Shell/index.html" class="post-tag">-Shell</a></p><p class="post-description">One of the best things you could do to improve as a software developer is constantly investing in your terminal setup and skills.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/what-software-developers-can-learn-from-leonardo-da-vinci">What software developers can learn from Leonardo da Vinci</a></h2><p class="post-meta"><span class="post-date">Tue Sep 25 2018 </span><a href="/tag/Books/index.html" class="post-tag">-Books</a></p><p class="post-description">Leonardo da Vinci's life as told by Walter Isaacson in his biography is a source of inspiration for anyone working in a technical and creative field.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/red-green-and-dont-forget-refactor">Red, green, and don't forget refactor</a></h2><p class="post-meta"><span class="post-date">Tue Sep 18 2018 </span><a href="/tag/TDD/index.html" class="post-tag">-TDD</a></p><p class="post-description">Test driven development works at its best when you refactor as you go. Write the failing test, write just enough code to make it pass, then and only then focus on making that code good.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/action-focused-protocols-enhance-testability">Action focused protocols enhance testability</a></h2><p class="post-meta"><span class="post-date">Tue Sep 11 2018 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">Using protocols describing a single capability or action that can be performed is a way to enhance local reasoning and facilitate testability</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-choose-what-to-refactor">How to choose what to refactor</a></h2><p class="post-meta"><span class="post-date">Tue Sep 04 2018 </span><a href="/tag/Refactoring/index.html" class="post-tag">-Refactoring</a><a href="/tag/Books/index.html" class="post-tag">-Books</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">A way to identify the areas of code to refactor with the highest return of investment using the "focusing question" technique.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/the-focusing-question">How to get better at setting priorities</a></h2><p class="post-meta"><span class="post-date">Sat Aug 25 2018 </span></p><p class="post-description">The focusing question, a tool devised by Gray W. Keller, is a simple yet effective way to identify work to focus on with the highest return of investment.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/if-youre-not-writing-tests-first-youre-missing-out">If you're not writing tests first you're missing out</a></h2><p class="post-meta"><span class="post-date">Fri Aug 17 2018 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/TDD/index.html" class="post-tag">-TDD</a></p><p class="post-description">A look at the benefits of writing unit tests before production code, in other words TDD.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/does-software-understand-complexity-m-feathers">"Does Software Understand Complexity?" via Michael Feathers</a></h2><p class="post-meta"><span class="post-date">Sun Aug 12 2018 </span></p><p class="post-description">Thoughts on a Michael Feathers post on how the understanding of complexity in software development compares to other fields.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/apps-and-tools-i-use">Apps and Tools</a></h2><p class="post-meta"><span class="post-date">Sat Jul 28 2018 </span><a href="/tag/Apps/index.html" class="post-tag">-Apps</a></p><p class="post-description">A list of the apps and tools I use everyday and help me getting stuff done.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/books-to-start-2018">4 books to kick start 2018</a></h2><p class="post-meta"><span class="post-date">Mon Jan 01 2018 </span><a href="/tag/Books/index.html" class="post-tag">-Books</a></p><p class="post-description">Books suggestions to start 2018 with the right mindset and tools.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/symliks-in-git">Symbolic links in Git</a></h2><p class="post-meta"><span class="post-date">Tue Sep 12 2017 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Git/index.html" class="post-tag">-Git</a></p><p class="post-description">Here's how to track symbolic liks in a Git repository, in a way suitable for teams.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/quick-beforesuite-aftersuite-behaviour">Quick beforeSuite and afterSuite behaviour</a></h2><p class="post-meta"><span class="post-date">Thu May 11 2017 </span><a href="/tag/Quick/index.html" class="post-tag">-Quick</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">A look at how beforeSuite and afterSuite behave in the Quick testing framework, and the dangers of using them</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/quick-beforeeach-aftereach-behaviour">Quick beforeEach and afterEach behaviour</a></h2><p class="post-meta"><span class="post-date">Mon May 08 2017 </span><a href="/tag/Quick/index.html" class="post-tag">-Quick</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">A look at how nested beforeEach and afterEach behave in the Quick testing framework.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/waituntil-vs-toeventually">Nimble: when to use waitUntil or toEventually</a></h2><p class="post-meta"><span class="post-date">Fri May 05 2017 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Nimble/index.html" class="post-tag">-Nimble</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">The Nimble matchers framework provides two ways assert expectations on asynchronous code, this post explores when to use one or the other.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/unless-swift">Unless.swift</a></h2><p class="post-meta"><span class="post-date">Tue Apr 04 2017 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">Porting Ruby's unless operator into Swift via a function.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/xctest-closure-based-expectation">XCTest closure based expectations</a></h2><p class="post-meta"><span class="post-date">Wed Mar 22 2017 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">Testing async code is not simple, but XCTest provides us with all the required tool. This post shows how to wait for an expectation to be fulfilled based on a Swift closure.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/dependency-injection-for-classes-in-swift">How to use dependency injection for classes in Swift</a></h2><p class="post-meta"><span class="post-date">Wed Mar 01 2017 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">In Swift it is possible to pass a reference to a type itself, not just to an instance of it. This post shows how to use this capability to test legacy code.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/lessons-learned-working-on-danger-swiftlint-selective-linting">Lessons learned working on danger-switlint selective linting</a></h2><p class="post-meta"><span class="post-date">Thu Jan 26 2017 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Ruby/index.html" class="post-tag">-Ruby</a><a href="/tag/Open-Source/index.html" class="post-tag">-Open Source</a></p><p class="post-description">A little post to share some things I learnt while working on a PR for danger-swiftlint to allow selective linting.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/your-git-log-should-tell-a-story">Your Git Log Should Tell A Story</a></h2><p class="post-meta"><span class="post-date">Mon Dec 19 2016 </span><a href="/tag/Git/index.html" class="post-tag">-Git</a></p><p class="post-description">A look at the practical benefits of writing descriptive commits</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/better-build-phase-scripts">Better Xcode Run Script Build Phases</a></h2><p class="post-meta"><span class="post-date">Mon Nov 07 2016 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">Practical tips to write "Run Script" build phases in Xcode.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/setting-up-firebase-without-cocoapods">Setting Up Firebase Without Using CocoaPods</a></h2><p class="post-meta"><span class="post-date">Mon Aug 15 2016 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Firebase/index.html" class="post-tag">-Firebase</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">A guide on how to configure your Xcode project to use Google Firebase without using CocoaPods.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/impliticly-vs-force-unwrapping-swift-optionals">Implicitly vs Force Unwrapping Swift Optionals</a></h2><p class="post-meta"><span class="post-date">Tue Aug 09 2016 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">A look at what implicitly unwrapping and force unwrap a Swift Optional mean, and how they differ from each other.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/cloud-66-postfix-deploy-hook">Cloud 66 Postfix Deploy Hook</a></h2><p class="post-meta"><span class="post-date">Mon Aug 01 2016 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Cloud-66/index.html" class="post-tag">-Cloud 66</a><a href="/tag/DevOps/index.html" class="post-tag">-DevOps</a></p><p class="post-description">A deploy hook to configure Postfix every time a Cloud 66 stack is built</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/why-implicitly-unwrapping-swift-optionals-is-dangerous">Why Implicitly Unwrapping Swift Optionals Is Dangerous</a></h2><p class="post-meta"><span class="post-date">Tue Jul 26 2016 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">A look at what implicitly unwrapping an Optional value means and why it should be avoided.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/swift-either">Swift Either enum</a></h2><p class="post-meta"><span class="post-date">Mon Jul 18 2016 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Haskell/index.html" class="post-tag">-Haskell</a></p><p class="post-description">This post introduces the Either type and shows a practical application of it in Swift, injecting extra cells in a table view.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/strong-opinions-loosely-held">Strong Opinions Loosely Held</a></h2><p class="post-meta"><span class="post-date">Fri Jul 08 2016 </span><a href="/tag/Podcasts/index.html" class="post-tag">-Podcasts</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Quotes/index.html" class="post-tag">-Quotes</a></p><p class="post-description">Strong opinions loosely held, and other cornerstones for a winning mindset</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/writing-your-own-swift-if-let">Writing your own Swift "if let"</a></h2><p class="post-meta"><span class="post-date">Thu Jul 07 2016 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">An exercise to understand Swift's optional type: reimplementing the if let functionality</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/what-is-an-optional-value-in-swift">What is an optional value in Swift</a></h2><p class="post-meta"><span class="post-date">Thu Jun 30 2016 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">This post looks into one of Swift's most powerful feature: optionals</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/maintaining-sanity-with-multiple-versions-of-xcode">Maintaining Sanity with Multiple Versions of Xcode</a></h2><p class="post-meta"><span class="post-date">Mon Jun 20 2016 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">Working with Xcode and Xcode-beta on the same machine can sometimes be confusing, this post shares some tools to help make it less so.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/swift-unavailable-how-to">How to make Swift methods unavailable</a></h2><p class="post-meta"><span class="post-date">Tue Jun 07 2016 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">A quick post showing how to use the Swift availability attribute to mark objects and functions as unavailable.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/functional-core-reactive-shell">Functional Core Reactive Shell</a></h2><p class="post-meta"><span class="post-date">Wed Jun 01 2016 </span><a href="/tag/Functional-Programming/index.html" class="post-tag">-Functional Programming</a><a href="/tag/Functional-Reactive-Programming/index.html" class="post-tag">-Functional Reactive Programming</a><a href="/tag/Talks/index.html" class="post-tag">-Talks</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Software-Design/index.html" class="post-tag">-Software Design</a></p><p class="post-description">This is a blogpost version of the content of my talk "Functional Core, Reactive Shell"</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/language-agnostic-automation-setup">Language Agnostic Automation Setup</a></h2><p class="post-meta"><span class="post-date">Tue May 17 2016 </span><a href="/tag/Automation/index.html" class="post-tag">-Automation</a><a href="/tag/Continuous-Integration/index.html" class="post-tag">-Continuous Integration</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">Every project can benefit from having a set of scripts to automate tasks such as running tests or distributing to testers. When setting up automation for your projects you can use a language agnostic setup. This will make it easier for new team members to get started, and allow you to change the setup without having to change the way the scripts are invoked.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/nsdateformatter-json-date">NSDateFormatter format for JSON dates</a></h2><p class="post-meta"><span class="post-date">Thu May 12 2016 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Foundation/index.html" class="post-tag">-Foundation</a><a href="/tag/JSON/index.html" class="post-tag">-JSON</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">How to configure NSDateFormatter to work with JSON API dates.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/functional-core-reactive-shell-resources">"Functional Core, Reactive Shell" Resources</a></h2><p class="post-meta"><span class="post-date">Fri Apr 15 2016 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Talks/index.html" class="post-tag">-Talks</a></p><p class="post-description">Links from my "Functional Core, Reactive Shell" talk</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/getting-started-with-automation">Getting Started With Automation</a></h2><p class="post-meta"><span class="post-date">Tue Mar 29 2016 </span><a href="/tag/Automation/index.html" class="post-tag">-Automation</a></p><p class="post-description">A collection of tips to get you started with workflow automation, increase productivity, and save time.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/using-swift-protocols-to-improve-testability">Using Swift protocols to abstract third party dependencies and improve testability</a></h2><p class="post-meta"><span class="post-date">Wed Mar 02 2016 </span><a href="/tag/testing/index.html" class="post-tag">-testing</a><a href="/tag/swift/index.html" class="post-tag">-swift</a></p><p class="post-description">Third party code can be hard to test, but you can use Swift's protocols to abstract its details and improve testability</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/update-all-xcode-plugins-for-latest-version">How to update all plug-ins for the latest version of Xcode and Xcode-beta</a></h2><p class="post-meta"><span class="post-date">Wed Feb 24 2016 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">An handy script to update all Xcode plug-ins to be compatible with the latest version of Xcode and Xcode-beta.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/ohhttpstubs">Getting Started With OHHTTPStubs</a></h2><p class="post-meta"><span class="post-date">Tue Feb 23 2016 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/iOS/index.html" class="post-tag">-iOS</a></p><p class="post-description">Good unit tests are fast and deterministic. Testing code that hits the network could undermine this goal, but using OHHTTPStubs we can take back control of our tests. This post explores the advantages of stubbing the network, and provide a guide on how to do it with OHHTTPStubs.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/why-hitting-the-network-is-bad-for-your-tests">Why hitting the network is bad for your test, and what to do about it</a></h2><p class="post-meta"><span class="post-date">Tue Feb 16 2016 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">In this post we are going to look at why hitting the network from your unit tests is a bad thing, and introduce some way to solve the problem.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/ruby-for-ios-developers-bundler">Ruby for iOS Developers - Managing Ruby Tools with Bundler</a></h2><p class="post-meta"><span class="post-date">Wed Feb 10 2016 </span><a href="/tag/Ruby/index.html" class="post-tag">-Ruby</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a></p><p class="post-description">Between CocoaPods and Fastlane, Ruby is an important part of the iOS developer toolchain. How can we reliably control the versions of the tools our project's automation is using in Ruby? Bundler is a simple way to specify Ruby dependencies and automate their setup.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/ruby-for-ios-developers">Ruby for iOS Developers - Managing Ruby Versions</a></h2><p class="post-meta"><span class="post-date">Tue Feb 02 2016 </span><a href="/tag/Ruby/index.html" class="post-tag">-Ruby</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a></p><p class="post-description">Between CocoaPods and Fastlane, Ruby is an important part of the iOS developer toolchain. Managing versions and gems can be a challenge for developers outside of the Ruby community, but it doesn't have to be. In this two parts post we will see how to simply and reliably handle our Rubies.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-fix-fabric-startup-crash">How To Fix Fabric Crashing On Startup When Installed Via CocoaPods</a></h2><p class="post-meta"><span class="post-date">Thu Jan 28 2016 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/iOS/index.html" class="post-tag">-iOS</a></p><p class="post-description">If you are experiencing crashes with a version of Fabric and Crashlytics installed via CocoaPods chances are you are missing required information in the Info.plist. This post shows how to solve this issue.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/async-testing-with-quick-and-nimble">Async Testing with Quick and Nimble</a></h2><p class="post-meta"><span class="post-date">Wed Jan 27 2016 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">A look at how to write tests for async code when using the Quick and Nimble Swift frameworks. This post is part of the Practical Testing in Swift series.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/testing-delegates-in-swift-with-xctest">Testing Delegates in Swift with XCTest</a></h2><p class="post-meta"><span class="post-date">Tue Jan 19 2016 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a></p><p class="post-description">In this second post of the Practical Testing in Swift we a look at strategies to test how objects call their delegate methods or set property on them.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/testing-callbacks-in-swift-with-xctest">Testing callbacks in Swift with XCTest</a></h2><p class="post-meta"><span class="post-date">Tue Jan 12 2016 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/prevent-unit-tests-from-loading-app-delegate-in-swift">Prevent Unit Tests from Loading AppDelegate in Swift</a></h2><p class="post-meta"><span class="post-date">Fri Jan 08 2016 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">How to prevent the unit test target from loading the AppDelegate and have faster tests execution.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/double-slash-xcconfig">How to use a double slash in xcconfig files</a></h2><p class="post-meta"><span class="post-date">Sat Jan 02 2016 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">A short post showing how to use a double slash in xcconfig files, for example to write URLs like https://mokacoding.com</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/2015-retrospective">2015 Retrospective</a></h2><p class="post-meta"><span class="post-date">Wed Dec 30 2015 </span><a href="/tag/Retrospective/index.html" class="post-tag">-Retrospective</a></p><p class="post-description">A retrospective on my consulting business in 2015. What when well, what didn't and how to act on it, how to move forward in 2016. I think my personal experience could be valuable for every iOS freelancer, I have done a couple of things right that helped my business a lot.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/bitbucket-pr-from-command-line">Opening a PR to Bitbucket from the terminal</a></h2><p class="post-meta"><span class="post-date">Thu Nov 26 2015 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a><a href="/tag/BitBucket/index.html" class="post-tag">-BitBucket</a></p><p class="post-description">A simple script you can run to open a PR on BitBucket for your current branch.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/xcode-plugins-update">How to update an Xcode plug-in for the latest version of Xcode</a></h2><p class="post-meta"><span class="post-date">Wed Nov 25 2015 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">A simple command to run in your terminal to make sure you can use your favourite plugins on the latest version of Xcode</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/hacker-news-button">Hacker News Button</a></h2><p class="post-meta"><span class="post-date">Tue Nov 24 2015 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">How to add an Hacker News button to your blog</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/install-xcode-plugin-with-fastlane">Installing Xcode plugins from the terminal with Fastlane</a></h2><p class="post-meta"><span class="post-date">Tue Nov 17 2015 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Fastlane/index.html" class="post-tag">-Fastlane</a></p><p class="post-description">How to install Xcode plugins from the terminal using Fastlane, and persist them across machines.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/env-xargs">Injecting environment variables from a file with xargs</a></h2><p class="post-meta"><span class="post-date">Fri Nov 13 2015 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Shell/index.html" class="post-tag">-Shell</a><a href="/tag/Tooling/index.html" class="post-tag">-Tooling</a></p><p class="post-description">How to provide environment variables stored in a .env file as an input for a command execution without having to export then, with a deep look at the shell commands used.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/travis-ci-ios-testing">How to configure Travis CI for iOS testing</a></h2><p class="post-meta"><span class="post-date">Tue Nov 10 2015 </span><a href="/tag/Continuous-Integration/index.html" class="post-tag">-Continuous Integration</a><a href="/tag/Travis-CI/index.html" class="post-tag">-Travis CI</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">A practical guide on how to configure Travis CI to run iOS, and OS X, tests.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/homebrew-in-ci-script">How to use Homebrew in CI</a></h2><p class="post-meta"><span class="post-date">Wed Nov 04 2015 </span><a href="/tag/Continuous-Integration/index.html" class="post-tag">-Continuous Integration</a><a href="/tag/Homebrew/index.html" class="post-tag">-Homebrew</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">A quick guide on how to safely use Homebrew in CI.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/circle-ci-ios-testing">How to configure CircleCI for iOS testing</a></h2><p class="post-meta"><span class="post-date">Tue Nov 03 2015 </span><a href="/tag/Continuous-Integration/index.html" class="post-tag">-Continuous Integration</a><a href="/tag/CircleCI/index.html" class="post-tag">-CircleCI</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">A practical guide on how to configure CircleCI for to run iOS, and OS X, tests.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/fixing-bugs-driven-by-tests-in-swift">Fixing Bugs Driven By Tests in Swift</a></h2><p class="post-meta"><span class="post-date">Wed Oct 28 2015 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Acceptance-Testing/index.html" class="post-tag">-Acceptance Testing</a><a href="/tag/UI-Testing/index.html" class="post-tag">-UI Testing</a></p><p class="post-description">Unit and acceptance test are powerful tools that can be used to identify and fix bugs. Let's see how using a bugged Swift app as an example.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/tools-sharpening">How To Sharpen Your Software Developer Tools</a></h2><p class="post-meta"><span class="post-date">Tue Oct 20 2015 </span></p><p class="post-description">Practical advices on how to keep your tools sharp, master them, and become more productive.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/xcodebuild-destination-options">Xcodebuild Destination Cheatsheet</a></h2><p class="post-meta"><span class="post-date">Tue Oct 13 2015 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">A collection of tips on how to configure the -destination option for the xcodebuild tool.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/ifttt-pocket-rss">The best free RSS reader app ever: IFTTT + Pocket</a></h2><p class="post-meta"><span class="post-date">Thu Oct 08 2015 </span><a href="/tag/Automation/index.html" class="post-tag">-Automation</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">By using the powerful automation provided by IFTTT we can make deliver the latest posts of your favourite blogs to Pocket. This is the most powerful RSS reader ever, and it is free.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/when-to-use-map-flatmap-for">When to use map, flatMap, or for loops in Swift</a></h2><p class="post-meta"><span class="post-date">Mon Oct 05 2015 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">Swift allows us to natively iterate over arrays using map. Map could be used to replace every for loop in your code, but that's not a great idea. Map and for have different purposes and should be used appropriately</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/nerdtree-relative-numbers">How to display relative line numbers in NERDTree</a></h2><p class="post-meta"><span class="post-date">Thu Oct 01 2015 </span><a href="/tag/Vim/index.html" class="post-tag">-Vim</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">Vim's relative line numbers are great for jumpin around files, and once you get used to them you want to enable them everywhere. Here's how to have NERDTree use relative line numbers</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/automatic-xcode-versioning-with-git">Automated Xcode version and build numbering via Git</a></h2><p class="post-meta"><span class="post-date">Tue Sep 29 2015 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">How to configure Xcode to automatically set the version and build number of your projects using Git.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-always-run-latest-simulator-cli">How to always use the latest Simulator with Xcodebuild</a></h2><p class="post-meta"><span class="post-date">Fri Sep 25 2015 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">There is a simple keyword you can use in the destination option of an xcodebuild command to always run the most recent Simulator version.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/demistifying-swift-functor">Swift Optionals, Functional Programming, and You</a></h2><p class="post-meta"><span class="post-date">Tue Sep 22 2015 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Functional-Programming/index.html" class="post-tag">-Functional Programming</a></p><p class="post-description">This is the post version of a talk I've been given in the past months. In this post we will demystify functional programming terms like monad and functor, and see how those concepts can be brought back to the every day Swift development, in particular how they can help to deal with optionals in a leaner way.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/carthage-no-build">An even lighter way to use Carthage</a></h2><p class="post-meta"><span class="post-date">Tue Sep 15 2015 </span><a href="/tag/Carthage/index.html" class="post-tag">-Carthage</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">Among the options Carthage, an iOS and OS X dependency manager, provides there is the --no-build one. Using this we can integrate dependencies in the form of Xcode projects rather than frameworks, keeping the repository slimmer and the CI time low. This approach is lighter than than the usual way to work with Carthage, but comes with some disadvantages too.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/how-to-install-xcode-cli-tools-without-gui">How to install Xcode Command Line Tools without GUI or Xcode</a></h2><p class="post-meta"><span class="post-date">Wed Sep 09 2015 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a></p><p class="post-description">Here's a little script that will allow you to install the Xcode Command Line Tools without having to install Xcode, nor having a logged GUI. This can come pretty handy in automated scripts or when provisioning virtual machines.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/devworld2015-notes-of-a-testing-fanboy">/dev/world/2015 notes of a testing fanboy</a></h2><p class="post-meta"><span class="post-date">Tue Sep 08 2015 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Tooling/index.html" class="post-tag">-Tooling</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a><a href="/tag/Conferences/index.html" class="post-tag">-Conferences</a></p><p class="post-description">I attended /dev/world/2015 in Melbourne this week. It has been a great conference, full of very friendly and smart people. Being a test and automation fanboy I attended as many talks related to that topic as I could. These are my notes.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/xctest-nimble">Enhancing XCTest test cases with Nimble matchers</a></h2><p class="post-meta"><span class="post-date">Tue Aug 25 2015 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/TDD/index.html" class="post-tag">-TDD</a><a href="/tag/Nimble/index.html" class="post-tag">-Nimble</a></p><p class="post-description">Nimble is a matchers framework built for Swift that provides powerful and versatile expectations. Writing test within the standard XCTest harness but using Nimble assertions is easier and productive, and a good combination of tools to introduce testing and TDD to colleagues and teams in a frictionless way.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/custom-afnetworking-response-serializer-for-errors">AFNetworking custom response serializer to add error information</a></h2><p class="post-meta"><span class="post-date">Wed Aug 19 2015 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/iOS/index.html" class="post-tag">-iOS</a><a href="/tag/Objective-C/index.html" class="post-tag">-Objective-C</a></p><p class="post-description">How to implement a custom AFNetworking response serializer to read the failure response data and populate the callback error with it.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/explicit-dependencies-swift">Explicit Dependencies, Swift Edition</a></h2><p class="post-meta"><span class="post-date">Tue Aug 18 2015 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Software-Design/index.html" class="post-tag">-Software Design</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a></p><p class="post-description">A look at how to write classes and structs that expose their dependencies as initialization arguments in Swift.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/itunes-connect-multiple-accounts">How to have multiple iTunes Connect accounts, and submit apps</a></h2><p class="post-meta"><span class="post-date">Sat Aug 15 2015 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/iTunes-Connect/index.html" class="post-tag">-iTunes Connect</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/swift-array-string-characters">Swift array of characters from String</a></h2><p class="post-meta"><span class="post-date">Wed Aug 12 2015 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">How to get an array of single characters String from a multiple characters String. From foobar to [f, o, o, b, a, r].</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/explicit-dependencies">Explicit Dependencies for Code with No Surprises</a></h2><p class="post-meta"><span class="post-date">Tue Aug 11 2015 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Objective-C/index.html" class="post-tag">-Objective-C</a><a href="/tag/Software-Design/index.html" class="post-tag">-Software-Design</a></p><p class="post-description">Sometimes the idea we get when reading a class interface is different from what is actually going on inside its implementation, for example there could be several hidden dependencies. Making a class dependency explicit in its interface is a useful technique to make the code simpler to understand, and easier to test.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/terminal-reusing-last-command-parameter">How to reuse the last parameter in a terminal command</a></h2><p class="post-meta"><span class="post-date">Wed Aug 05 2015 </span><a href="/tag/Shell/index.html" class="post-tag">-Shell</a><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a></p><p class="post-description">When typing a shell command it is possible to reuse the last argument of the previous call without having to type it. Let's see how.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/keep-your-bench-clean">Keep Your Bench Clean</a></h2><p class="post-meta"><span class="post-date">Tue Aug 04 2015 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">Like good chefs keep their benches clean to make delicious dishes all day long in the restaurants' kitchens, so good developer keep their codebase clean. It all comes down to little habits, the result of which when summed up together is a tidy, clean and easy to maintain software.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/packaging-swift-ipa">Packaging an ipa with Swift files from the terminal</a></h2><p class="post-meta"><span class="post-date">Mon Aug 03 2015 </span><a href="/tag/Espresso/index.html" class="post-tag">-Espresso</a><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a><a href="/tag/TestFlight/index.html" class="post-tag">-TestFlight</a></p><p class="post-description">If you are having problems with xcodebuild failing to export your apps with either Swift or Watch Kit support here's the solution, with a handy custom script.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/xcode-ui-test-view-changes">How to test UI changes in Xcode 7</a></h2><p class="post-meta"><span class="post-date">Sat Jul 25 2015 </span><a href="/tag/Acceptance-Testing/index.html" class="post-tag">-Acceptance Testing</a><a href="/tag/UI-Testing/index.html" class="post-tag">-UI Testing</a><a href="/tag/iOS/index.html" class="post-tag">-iOS</a></p><p class="post-description">One of the characteristic of the UI is that it changes, and there are scenarios in which writing UI tests to assure that the change has happened correctly can be very valuable for the reliability of our apps. Writing such a test is a bit harder than normal, let's see how to do it.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/setting-up-testing-libraries-with-carthage-xcode7">How to add testing dependencies using Carthage, with Swift 2 and Xcode 7</a></h2><p class="post-meta"><span class="post-date">Tue Jul 21 2015 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Carthage/index.html" class="post-tag">-Carthage</a><a href="/tag/Tooling/index.html" class="post-tag">-Tooling</a></p><p class="post-description">In this little tutorial we will see how to use Cathage, an OS X and iOS depencendy manager, to install libraries written in Swift 2 and Xcode 7, with a focus on the process to get testing dependencies.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/functor-applicative-monads-in-pictures">Swift Functors, Applicatives, and Monads in Pictures</a></h2><p class="post-meta"><span class="post-date">Tue Jul 14 2015 </span><a href="/tag/Swift/index.html" class="post-tag">-Swift</a><a href="/tag/Functional-Programming/index.html" class="post-tag">-Functional Programming</a></p><p class="post-description">In this port to Swift of the great of Haskell's "Functors, Applicatives, And Monads In Pictures" we are going to look at these functional programming concepts aided by some very helpful pictures.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/xvim">XVim, harnessing the king of text editor's power in Xcode</a></h2><p class="post-meta"><span class="post-date">Tue Jul 07 2015 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">An introduction to the XVim plugin, that adds most Vim keybindings and features to the Xcode IDE, and how this can make you more productive as a developer.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/testing-realm-apps">Testing Realm apps</a></h2><p class="post-meta"><span class="post-date">Tue Jun 30 2015 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a></p><p class="post-description">Realm is a mobile database that, unlike CoreData, is easy to test. In this post we will discuss some ideas on how to test an app using Realm as its database.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/the-value-of-acceptance-testing">The value of acceptance testing for mobile projects</a></h2><p class="post-meta"><span class="post-date">Tue Jun 23 2015 </span><a href="/tag/Acceptance-Testing/index.html" class="post-tag">-Acceptance Testing</a></p><p class="post-description">Companion blogpost for Gio's talk "Talking myself into the value of acceptance testing" at Melbourne CocoaHeads meetup</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/xcode-7-ui-testing">Xcode 7 UI testing, a first look</a></h2><p class="post-meta"><span class="post-date">Tue Jun 16 2015 </span><a href="/tag/Acceptance-Testing/index.html" class="post-tag">-Acceptance Testing</a><a href="/tag/UI-Testing/index.html" class="post-tag">-UI Testing</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">How to get started with UI testing in Xcode 7, recording tests and using the new APIs to assert the state of the application under test.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/automating-mokacoding-weekly">MailChimp automated workflow for mokacoding weekly</a></h2><p class="post-meta"><span class="post-date">Tue Jun 09 2015 </span><a href="/tag/Automation/index.html" class="post-tag">-Automation</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">At mokacoding we're big on automation, and we eat our own dog's food! The workflow to write and send new issues of our newsletter, mokacoding weekly, is (partially) automated thanks to some simple Ruby scripting and Mac command line utilities.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/pre-commit-hooks">Automation with pre-commit hooks</a></h2><p class="post-meta"><span class="post-date">Wed Jun 03 2015 </span><a href="/tag/Git/index.html" class="post-tag">-Git</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a></p><p class="post-description">Git provides a mechanism to run one or more scripts before a commit is actually added to the history called pre-commit hook. We can use this hook to run scripts that validate or sanitise the changes to be committed automatically, saving time and brain power, and assuring the quality of the codbase and git log.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/xunique">xUnique: a tool to avoid Xcode project merge conflicts</a></h2><p class="post-meta"><span class="post-date">Tue May 12 2015 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">How many times when working on a Mac OSX or iOS app with a team have you had a merge conflict on the project.pbxproj file? I guess more than a few, a lot more than a few. Lucky for you there is an handy tool called xUnique that will make the chances of this happening way smaller.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/expecta-custom-matchers">Writing an Expecta custom matcher</a></h2><p class="post-meta"><span class="post-date">Tue May 05 2015 </span><a href="/tag/Specta/index.html" class="post-tag">-Specta</a><a href="/tag/Expecta/index.html" class="post-tag">-Expecta</a></p><p class="post-description">Not only Expecta is a simple to use library that allows us to write highly readable code, but it can also be extended by the users with custom matchers. Let's see how to write a custom matcher to gain readability and reuse code in our test suites.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/expecta">Expecta, a matcher library that speaks English</a></h2><p class="post-meta"><span class="post-date">Tue Apr 28 2015 </span><a href="/tag/Specta/index.html" class="post-tag">-Specta</a><a href="/tag/Expecta/index.html" class="post-tag">-Expecta</a></p><p class="post-description">A test that express is intent clearly is arguably twice as effective as one that doesn't. Writing test in an xSpec style is a good first step to express behaviour clearly, and when matched with a matcher library such as Expecta the results are test that are easy to read and reason about</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/specta-global-before-after-each-updated">Specta global before and after each hooks (Updated)</a></h2><p class="post-meta"><span class="post-date">Fri Apr 24 2015 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Specta/index.html" class="post-tag">-Specta</a></p><p class="post-description">An interesting and powerful, yet not at all documented feature of Spetca are global beforeEach and afterEach hooks. In this post we'll see how to configure them, and how to blacklist classes from running them. Updated for version 0.5</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/job-stories-acceptance-tests-with-kif-and-specta">Job stories acceptance tests using KIF and Specta</a></h2><p class="post-meta"><span class="post-date">Tue Apr 21 2015 </span><a href="/tag/Acceptance-Testing/index.html" class="post-tag">-Acceptance Testing</a><a href="/tag/KIF/index.html" class="post-tag">-KIF</a><a href="/tag/Specta/index.html" class="post-tag">-Specta</a></p><p class="post-description">When writing tests it's very important do be declarative, aiming to have tests that explain how a class is supposed to behave as good as its documentation would do. When talking about acceptance tests we can achieve this kind of clarity by having a 1:1 relationship between the tests and the acceptance criteria for the application. A very effective way to express acceptance criteria is through _job stories_. In this post we'll see how to write acceptance tests that map job stories for our iOS apps, using KIF and Specta.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/better-tests-with-specta">Better tests with Specta</a></h2><p class="post-meta"><span class="post-date">Tue Apr 14 2015 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Specta/index.html" class="post-tag">-Specta</a><a href="/tag/XCTest/index.html" class="post-tag">-XCTest</a></p><p class="post-description">Writing unit tests for our iOS and OS X projects not only is important, but should be always part of the development cycle. As such the way we write the tests is as important, and having the option to write tests that easily explain their purpose can drastically increase the quality of the suite. Specta and Expecta are two libraries that provide a different way to writing tests than XCTest, let's see what we can gain by using such approach.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/xcode-testing-shortcuts">Xcode keyboard shortcuts for testing</a></h2><p class="post-meta"><span class="post-date">Tue Apr 07 2015 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">Keyboard shortcuts are easies way to start increasing your productivity. Let's look at how to run tests in Xcode without ever touching the mouse.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/setting-up-kif-for-ios-acceptance-testing">Setting up KIF for iOS acceptance testing</a></h2><p class="post-meta"><span class="post-date">Tue Mar 31 2015 </span><a href="/tag/Acceptance-Testing/index.html" class="post-tag">-Acceptance Testing</a><a href="/tag/KIF/index.html" class="post-tag">-KIF</a></p><p class="post-description">A guide on install and use the KIF framework for iOS acceptance testing.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/ios-testing-in-2015">The state of iOS testing in 2015</a></h2><p class="post-meta"><span class="post-date">Tue Mar 24 2015 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Acceptance-Testing/index.html" class="post-tag">-Acceptance Testing</a><a href="/tag/Continuous-Integration/index.html" class="post-tag">-Continuous Integration</a></p><p class="post-description">In this post we'll look at the main tools and libraries available to write unit and acceptance tests for iOS and OS X applications, as well as the solutions to host Continuous Integration for our projects.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/specta-global-before-after-each">Specta global before and after each hooks</a></h2><p class="post-meta"><span class="post-date">Thu Mar 19 2015 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Specta/index.html" class="post-tag">-Specta</a></p><p class="post-description">An interesting and powerful, yet not at all documented feature of Spetca are global beforeEach and afterEach hooks. In this post we'll see how to configure them, and how to blacklist classes from running them.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/running-tests-from-the-terminal">How to run Xcode tests from the terminal</a></h2><p class="post-meta"><span class="post-date">Last updated: Fri Jan 08 2021 </span><a href="/tag/Testing/index.html" class="post-tag">-Testing</a><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a><a href="/tag/Terminal/index.html" class="post-tag">-Terminal</a><a href="/tag/Automation/index.html" class="post-tag">-Automation</a></p><p class="post-description">How to invoke xcodebuild to run the tests from the command line and how to format its output using xcbeautify or xcpretty</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/simpler-calabash-testing-with-rake">How to simplify Calabash acceptance testing with Rake</a></h2><p class="post-meta"><span class="post-date">Wed Feb 25 2015 </span><a href="/tag/Acceptance-Testing/index.html" class="post-tag">-Acceptance Testing</a><a href="/tag/Calabash/index.html" class="post-tag">-Calabash</a><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">Rake, the Ruby build utility, can lift off all the typing involved in running the Cucumber/Calabash acceptance tests, saving us a lot of typing time.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/gitiquette">Git-iquette</a></h2><p class="post-meta"><span class="post-date">Sun Feb 15 2015 </span><a href="/tag/Git/index.html" class="post-tag">-Git</a></p><p class="post-description">Every team and every project should have a Git-iquette: a set of common practices for managing the git repository.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/calabash-ios-with-cocoapods-and-build-configurations">Setting up Calabash for iOS projects with Cocoapods and Build Configurations</a></h2><p class="post-meta"><span class="post-date">Sun Jan 25 2015 </span><a href="/tag/Acceptance-Testing/index.html" class="post-tag">-Acceptance Testing</a><a href="/tag/Calabash/index.html" class="post-tag">-Calabash</a></p><p class="post-description">A simple guide that shows the simplest way to install Calabash on an iOS project, by using Build Configurations and CocoaPods.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/5-habits-that-will-make-you-a-better-software-developer">5 habits that will make you a better software developer</a></h2><p class="post-meta"><span class="post-date">Wed Jan 07 2015 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">By implementing these 5 small habits you'll kickstart your 2015 and become a better software developer.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/security-tips-for-freelance-software-developers">Security Tips for Freelance Software Developers</a></h2><p class="post-meta"><span class="post-date">Wed Oct 29 2014 </span></p><p class="post-description">Tips for freelance software developers (and non) to improve the security of laptops, smartphones and website accounts, to keep your and your clients data safe.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/why-i-dont-work-on-friday">Why I don't work on Fridays</a></h2><p class="post-meta"><span class="post-date">Fri Aug 29 2014 </span><a href="/tag/Productivity/index.html" class="post-tag">-Productivity</a></p><p class="post-description">Some time ago I learned the hard way that I shouldn't work on Fridays. I've been applying an alternative schedule to my week, and it's working out pretty well.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/in-app-purchase-debugging-lessons">In-App Purchase Debugging Lessons</a></h2><p class="post-meta"><span class="post-date">Tue Aug 26 2014 </span><a href="/tag/iOS/index.html" class="post-tag">-iOS</a></p><p class="post-description">A couple of tips learnt the hard way on how to develop and debug In App Purchase support in an iOS app.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/why-i-shouldnt-have-stopped-blogging-with-jekyll">Why I (shouldn't have) stopped blogging with Jekyll</a></h2><p class="post-meta"><span class="post-date">Fri Aug 08 2014 </span><a href="/tag/Ruby/index.html" class="post-tag">-Ruby</a><a href="/tag/Javascript/index.html" class="post-tag">-Javascript</a></p><p class="post-description">I recently decided to move my blog from Ruby and Jekyll, to Metalsmith and Javascript. It turned out to be not as easy as I thought, and a quite stupid choice, but not because of the tech.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/cocoapods-and-custom-build-configurations">CocoaPods and custom Build Configurations</a></h2><p class="post-meta"><span class="post-date">Wed Apr 16 2014 </span><a href="/tag/CocoaPods/index.html" class="post-tag">-CocoaPods</a></p><p class="post-description">Some tips on how to use CocoaPods and customs build configurations without headaches.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/2014-resolutions-review">2014 resolutions review</a></h2><p class="post-meta"><span class="post-date">Wed Apr 09 2014 </span></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/gradient-backgrounds-studio">Gradient Backgrounds Studio: Lessons Learned</a></h2><p class="post-meta"><span class="post-date">Thu Apr 03 2014 </span><a href="/tag/iOS/index.html" class="post-tag">-iOS</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/upgrading-podfile">A caveat when upgrading a Podfile</a></h2><p class="post-meta"><span class="post-date">Fri Mar 28 2014 </span><a href="/tag/CocoaPods/index.html" class="post-tag">-CocoaPods</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/sharing-assets-with-cocoapods-resource-bundle-and-dynamically-loaded-fonts">Sharing assets across iOS projects with CocoaPods, Resource Bundle, and dynamically loaded fonts</a></h2><p class="post-meta"><span class="post-date">Thu Feb 13 2014 </span><a href="/tag/iOS/index.html" class="post-tag">-iOS</a><a href="/tag/CocoaPods/index.html" class="post-tag">-CocoaPods</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/automating-ios-enterprise-deployment">Automating iOS Enterprise Deployment with shenzhen</a></h2><p class="post-meta"><span class="post-date">Mon Jan 06 2014 </span><a href="/tag/Automation/index.html" class="post-tag">-Automation</a></p><p class="post-description">A way of automating the deployment of an iOS app for enterprise distribution using the shenzhen gem.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/2013-retrospectives-and-2014-propositions">2013 retrospectives... and 2014 propositions</a></h2><p class="post-meta"><span class="post-date">Thu Jan 02 2014 </span></p><p class="post-description">Taking a look back at 2013, to find good propositions for 2014</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/podcasts">Podcasts, grow your brain through soundwaves</a></h2><p class="post-meta"><span class="post-date">Wed Nov 20 2013 </span></p><p class="post-description">A list of the tech podcasts I follow</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/rails-add-has-many-association-to-existing-model">Rails: adding a new has_many association to an existing model</a></h2><p class="post-meta"><span class="post-date">Wed Nov 13 2013 </span><a href="/tag/Ruby/index.html" class="post-tag">-Ruby</a><a href="/tag/Ruby-on-Rails/index.html" class="post-tag">-Ruby on Rails</a></p><p class="post-description">A little guide on how to edit an existing model adding a new has_many association</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/things-learned-in-october">Some things I learned in October</a></h2><p class="post-meta"><span class="post-date">Tue Nov 12 2013 </span><a href="/tag/Life-long-learning/index.html" class="post-tag">-Life long learning</a></p><p class="post-description">A quick summary and memo of interesting things I've learned in October - iOS screen capture, HTML5 game development, ways to improve your coding.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/xcode-projects-and-workspaces">A dive into Xcode projects and workspaces</a></h2><p class="post-meta"><span class="post-date">Thu Oct 31 2013 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">A look at how Xcode stores information about the project and the workspace</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/october-questions">October's Questions</a></h2><p class="post-meta"><span class="post-date">Sun Oct 06 2013 </span><a href="/tag/Life-long-learning/index.html" class="post-tag">-Life long learning</a></p><p class="post-description">Introducing mokagio's monthly questions, related to iOS, Objective-C, Xcode, xctool, AFNetworking, CocoaPods.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/things-learned-in-september">Some things I learned in September</a></h2><p class="post-meta"><span class="post-date">Wed Oct 02 2013 </span><a href="/tag/Life-long-learning/index.html" class="post-tag">-Life long learning</a></p><p class="post-description">A quick summary and memo of interesting things I've learned in September</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/ios7-ux-designers-verdict">Sharing some thoughts on iOS 7</a></h2><p class="post-meta"><span class="post-date">Tue Sep 24 2013 </span><a href="/tag/iOS/index.html" class="post-tag">-iOS</a><a href="/tag/UX/index.html" class="post-tag">-UX</a></p><p class="post-description">Sharing thoughts by some lead designers on iOS 7.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/setup-a-dev-machine">Setting a Mac for Development</a></h2><p class="post-meta"><span class="post-date">Mon Sep 23 2013 </span><a href="/tag/OS-X/index.html" class="post-tag">-OS X</a></p><p class="post-description">A simple checklist of the basic tools to setup a Mac for development.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/mtfonticon">Bringing font icons in iOS with MTFontIcon</a></h2><p class="post-meta"><span class="post-date">Tue Sep 17 2013 </span><a href="/tag/iOS/index.html" class="post-tag">-iOS</a><a href="/tag/Objective-C/index.html" class="post-tag">-Objective-C</a><a href="/tag/Ruby/index.html" class="post-tag">-Ruby</a><a href="/tag/Layout/index.html" class="post-tag">-Layout</a><a href="/tag/CSS/index.html" class="post-tag">-CSS</a><a href="/tag/Open-Source/index.html" class="post-tag">-Open Source</a></p><p class="post-description">Introducing MTFontIcon, a CocoaPod library for iOS to improve application development efficiency by using font icons.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/xcode5-crash-on-submission">A workaround to Xcode 5 GM crash on app submission</a></h2><p class="post-meta"><span class="post-date">Mon Sep 16 2013 </span><a href="/tag/Xcode/index.html" class="post-tag">-Xcode</a></p><p class="post-description">A workaround for the unusual crash of Xcode 5 GM during the App Store submission process.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/things-learned-in-august">Some things I learned in August</a></h2><p class="post-meta"><span class="post-date">Tue Sep 03 2013 </span><a href="/tag/Life-long-learning/index.html" class="post-tag">-Life long learning</a></p><p class="post-description"></p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/things-learned-in-july">Some things I learned in July</a></h2><p class="post-meta"><span class="post-date">Thu Aug 01 2013 </span><a href="/tag/Life-long-learning/index.html" class="post-tag">-Life long learning</a></p><p class="post-description">A summary of the things I learned in July 2013.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/what-i-did-in-a-week">What I did in a week...</a></h2><p class="post-meta"><span class="post-date">Fri Jul 26 2013 </span></p><p class="post-description">A recap of what I developed during an unusual week left by myself without neither girlfriend nor friends.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/a-week-of-time">A week of time...</a></h2><p class="post-meta"><span class="post-date">Wed Jul 17 2013 </span></p><p class="post-description">A declaration of purposes for what I'm gonna do in the next week.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/cocoapods-the-inherited-flag">CocoaPods: the $(inherited) flag</a></h2><p class="post-meta"><span class="post-date">Tue Jul 09 2013 </span><a href="/tag/CocoaPods/index.html" class="post-tag">-CocoaPods</a><a href="/tag/iOS/index.html" class="post-tag">-iOS</a></p><p class="post-description">A self memo on how to set the $(inherited) flag on a project using CocoaPods on Xcode.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/things-learned-in-june">Some things I learned in June</a></h2><p class="post-meta"><span class="post-date">Sat Jul 06 2013 </span><a href="/tag/Life-long-learning/index.html" class="post-tag">-Life long learning</a></p><p class="post-description">A summary of the things I learned in June 2013.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/mokagios-self-memo-for-facebook-integration-on-ios-part-1">mokagio's self memo for Facebook Integration on iOS - Part 1</a></h2><p class="post-meta"><span class="post-date">Tue Jun 25 2013 </span><a href="/tag/iOS/index.html" class="post-tag">-iOS</a></p><p class="post-description">Step by step guide on how to integrate the Facebook SDK in an iOS app, the right way. Part 1: Facebook Login.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/osx-a-scanner-and-the-drivers-drama">OSX, a scanner, and the drivers drama</a></h2><p class="post-meta"><span class="post-date">Tue Jun 11 2013 </span><a href="/tag/OS-X/index.html" class="post-tag">-OS X</a></p><p class="post-description">The link to the Samsung Printer Drivers, enclosed in a ranting post.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/multiple-builds-of-the-same-app-and-testflight">Multiple builds of the same app and TestFlight</a></h2><p class="post-meta"><span class="post-date">Wed May 29 2013 </span><a href="/tag/Automation/index.html" class="post-tag">-Automation</a><a href="/tag/TestFlight/index.html" class="post-tag">-TestFlight</a></p><p class="post-description">How to distribute multiple builds of your iOS app, such as stable, QA and development builds, via TestFlight.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/cocoapods-how-to-create-your-own-pod">CocoaPods - How to create your own Pod</a></h2><p class="post-meta"><span class="post-date">Mon Jan 21 2013 </span><a href="/tag/CocoaPods/index.html" class="post-tag">-CocoaPods</a><a href="/tag/iOS/index.html" class="post-tag">-iOS</a></p><p class="post-description">A step by step guide to create a basic CocoaPod.</p></div><div class="post-container tag"><h2 class="post-title"><a href="/blog/cocoapods">CocoaPods!</a></h2><p class="post-meta"><span class="post-date">Sat Jan 05 2013 </span><a href="/tag/CocoaPods/index.html" class="post-tag">-CocoaPods</a><a href="/tag/iOS/index.html" class="post-tag">-iOS</a></p><p class="post-description">A brief introduction to CocoaPods, the Objective-C dependencies manager.</p></div></div></div><div class="row-12 footer"><div class="col-12"><h3><a href="/">mokacoding</a></h3></div><div id="copy" class="col-9"><p>Hi I'm <a href="https://gio.codes">Gio</a> I write here semi-regularly on software testing and TDD, productivity, and iOS development.</p>
<p><a href="mailto:[email protected]">Get in touch</a> if you're interested in working together.</p>
</div><div id="links" class="col-3"><p><i class="fa fa-twitter"></i> <a href="https://twitter.com/mokagio">@mokagio</a></p><p><i class="fa fa-github"></i> <a href="https://github.com/mokagio">mokagio</a></p></div></div></div></body><script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-43554041-1', 'auto');
ga('send', 'pageview');
</script><script>var toggle = function(elm){
var y = elm.style && elm.style.display ? elm.style.display : 'block';
if (y == 'block'){
elm.style.opacity='0';
setTimeout( function(){ elm.style.display = 'none'; }, 300 );
}
else {
elm.style.display='block';
setTimeout( function(){ elm.style.opacity = '1'; }, 10 );
}
}
document.getElementById('close').onclick = function(){
toggle(document.getElementById('sticky-header'));
toggle(document.getElementById('sticky-header-padding-hack'));
}</script></html>