41554 blogs · [ { "id": "01a087a8-283f-73b8-bd2f-a199f0c860f2", "title": "iTerm2 microphone permission for Claude Code", "url": "https://mokacoding.com/blog/how-to-claude-code-voice-mode-iterm-permission", "published_at": "2026-03-12T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d216eae7a", "title": "Porting save files from Delta iOS to the RG35XX Plus", "url": "https://mokacoding.com/blog/how-to-add-custom-roms-to-rg35xx-plus", "published_at": "2025-08-08T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d21a9a0d5", "title": "Pokémon Emerald Starters Cheat Codes on Delta iOS", "url": "https://mokacoding.com/blog/delta-emulator-pokemon-emerald-starters", "published_at": "2025-07-06T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2237ac52", "title": "How XcodeGen reduced the TDD in Swift codebase by 58,000+ lines", "url": "https://mokacoding.com/blog/how-xcodegen-reducet-the-tdd-in-swift-codebase-by-58-000-lines", "published_at": "2024-10-03T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2261082d", "title": "Tests Are The Best Kind Of Documentation", "url": "https://mokacoding.com/blog/tests-are-the-best-documentation", "published_at": "2022-06-03T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2336578a", "title": "How to convince your team to adopt TDD", "url": "https://mokacoding.com/blog/how-to-convince-your-team-to-use-tdd", "published_at": "2022-03-24T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d236e8a37", "title": "The case for creating a merge commit", "url": "https://mokacoding.com/blog/create-a-merge-commit", "published_at": "2022-03-09T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d242cfea8", "title": "XCTNSPredicateExpectation is slow, and what to do about it", "url": "https://mokacoding.com/blog/xctnspredicateexpectation-slow", "published_at": "2022-02-25T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d24ae542f", "title": "When to test a @Published property using sink", "url": "https://mokacoding.com/blog/when-to-test-published-property-with-sink", "published_at": "2021-10-17T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d25a313e1", "title": "A real-world example of TDD catching bugs", "url": "https://mokacoding.com/blog/tdd-catching-bugs-in-action", "published_at": "2021-08-25T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d26470938", "title": "How to write unit tests for SwiftUI apps", "url": "https://mokacoding.com/blog/how-to-test-swiftui-apps", "published_at": "2021-08-12T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d269cfd31", "title": "Test-Driven Development in Swift is now available", "url": "https://mokacoding.com/blog/tdd-in-swift-book-launch", "published_at": "2021-07-15T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2776fe4b", "title": "WWDC21: What's New in Testing", "url": "https://mokacoding.com/blog/wwdc21-whats-new-in-testing", "published_at": "2021-06-17T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d27813ff4", "title": "How to test Swift async/await code with XCTest", "url": "https://mokacoding.com/blog/how-to-test-async-await-code-in-swift", "published_at": "2021-06-07T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2833a3d0", "title": "How to write better tests for Swift date comparisons", "url": "https://mokacoding.com/blog/better-swift-date-compare-tests", "published_at": "2021-06-04T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d286a187d", "title": "On the benefits of distributed work", "url": "https://mokacoding.com/blog/distributed-working", "published_at": "2021-05-26T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d29313d43", "title": "How to manage complex inputs in your Swift tests with Scenario Builders", "url": "https://mokacoding.com/blog/scenario-builders-in-swift", "published_at": "2021-04-28T20:21:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d29f4d2f9", "title": "A World Without Slack", "url": "https://mokacoding.com/blog/a-world-without-slack", "published_at": "2021-04-19T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2a556e41", "title": "A distributed asynchronous release process", "url": "https://mokacoding.com/blog/distributed-app-release-process", "published_at": "2021-03-13T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2a72f403", "title": "Working Backwards", "url": "https://mokacoding.com/blog/working-backwards", "published_at": "2021-03-06T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2b3edd63", "title": "How waiting in line can improve your focus", "url": "https://mokacoding.com/blog/how-waiting-in-line-can-improve-your-focus", "published_at": "2021-02-16T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2c3e60fe", "title": "Unit Testing Combine Publisher Cheatsheet", "url": "https://mokacoding.com/blog/testing-combine-publisher-cheatsheet", "published_at": "2021-02-11T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2cf1953e", "title": "Boring Iterations. Interesting Steps.", "url": "https://mokacoding.com/blog/boring-iterations-interesting-steps", "published_at": "2021-01-30T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2dd4a574", "title": "How to migrate from SwiftUI to UIKit App Delegate Life Cycle in Xcode", "url": "https://mokacoding.com/blog/how-to-migrate-from-swiftui-to-uikit-life-cycle", "published_at": "2021-01-21T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2e151ea6", "title": "How to stick with your New Year resolutions", "url": "https://mokacoding.com/blog/how-to-stick-with-your-new-year-resolutions", "published_at": "2021-01-01T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2e9790b4", "title": "How to set default values in Swift compiler-generated initializers", "url": "https://mokacoding.com/blog/how-to-set-default-values-in-swift-compiler-generate-init", "published_at": "2020-12-23T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2edcaab1", "title": "How to improve your Test-Driven Development workflow by asking \"Do I need this yet?\"", "url": "https://mokacoding.com/blog/tdd-and-ydniy", "published_at": "2020-12-17T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2f2f697a", "title": "Write better Swift unit tests with custom XCTest assertions", "url": "https://mokacoding.com/blog/write-better-swift-tests-with-xctest-assertions", "published_at": "2020-12-10T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2fb3fe1d", "title": "How to write unit test assertions for Swift Result values", "url": "https://mokacoding.com/blog/how-to-write-tests-for-swift-result", "published_at": "2020-12-02T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d2ff5e3a9", "title": "When experiments go wrong", "url": "https://mokacoding.com/blog/when-experiments-go-wrong", "published_at": "2020-11-25T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d30db159a", "title": "How to merge pull requests with a commit that improves your Git history", "url": "https://mokacoding.com/blog/better-merging-for-github-pull-requests", "published_at": "2020-11-20T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d317f2db6", "title": "How to bypass the SwiftUI App when running unit tests", "url": "https://mokacoding.com/blog/prevent-swiftui-app-loading-in-unit-tests", "published_at": "2020-11-12T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d31affb41", "title": "How to rename a file in Vim", "url": "https://mokacoding.com/blog/vim-rename-file", "published_at": "2020-11-06T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d3253eb1e", "title": "How to remove trailing whitespaces from all files in a folder", "url": "https://mokacoding.com/blog/remove-trailing-whitespaces-in-folder-files", "published_at": "2020-11-05T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d32a53a10", "title": "How to make the View to ViewModel relationship clear", "url": "https://mokacoding.com/blog/nested-type-view-models", "published_at": "2020-11-04T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d33198a40", "title": "Dependency Injection in SwiftUI", "url": "https://mokacoding.com/blog/swiftui-dependency-injection", "published_at": "2020-10-28T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d33e7f3c5", "title": "What can a pipe wrench teach us about software engineering?", "url": "https://mokacoding.com/blog/pipe-wrench", "published_at": "2020-10-21T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d34de5abf", "title": "Hyperfocus by Chris Bailey", "url": "https://mokacoding.com/blog/hyperfocus-review", "published_at": "2020-10-12T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d3596f61f", "title": "You Don't Need It Yet", "url": "https://mokacoding.com/blog/you-dont-need-it-yet", "published_at": "2020-10-07T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d364ec7e7", "title": "\"That's funny…\" moments are learning opportunities", "url": "https://mokacoding.com/blog/thats-funny-moments-are-learning-opportunities", "published_at": "2020-09-28T00:00:00+00:00" }, { "id": "01a087a8-2840-721e-a4f1-379d374bca8c", "title": "Will iOS 14 Destroy Your Productivity?", "url": "https://mokacoding.com/blog/will-ios-14-destroy-your-productivity", "published_at": "2020-09-21T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fd7e80fd2", "title": "Replace Triple-state Boolean with Enumeration", "url": "https://mokacoding.com/blog/replace-triple-boolean-with-enum", "published_at": "2020-09-14T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fd7f8443d", "title": "How to decouple unit tests from values that change frequently", "url": "https://mokacoding.com/blog/how-to-decouple-tests-from-frequently-changing-values", "published_at": "2020-09-01T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fd8b81378", "title": "How to add co-authors to a Git commit", "url": "https://mokacoding.com/blog/how-to-add-coauthors-to-a-git-commit", "published_at": "2020-08-25T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fd9ad386f", "title": "How to check if macOS app is notarized", "url": "https://mokacoding.com/blog/how-to-check-if-app-is-notarized", "published_at": "2020-08-24T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fd9c2be26", "title": "How to reverse a file in the terminal", "url": "https://mokacoding.com/blog/how-to-reverse-a-file-in-the-terminal", "published_at": "2020-08-22T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fda6a1476", "title": "How to verify your SSH private key password", "url": "https://mokacoding.com/blog/how-to-verify-ssh-key-password", "published_at": "2020-08-20T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fda9e78a8", "title": "How to check if array contains element with block in Ruby", "url": "https://mokacoding.com/blog/how-to-check-if-ruby-array-contains-element", "published_at": "2020-08-18T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fdabcb6eb", "title": "Honesty-Oriented Programming", "url": "https://mokacoding.com/blog/honesty-oriented-programming", "published_at": "2020-07-12T15:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fdb852590", "title": "Referential Transparency in Swift", "url": "https://mokacoding.com/blog/referential-transparency-in-swift", "published_at": "2020-07-12T14:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fdc2781d5", "title": "Should you change your branch name to \"main\"?", "url": "https://mokacoding.com/blog/main-vs-master-xcode-12", "published_at": "2020-06-24T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fdc5f8034", "title": "The Indistractable Developer", "url": "https://mokacoding.com/blog/the-indistractable-developer", "published_at": "2020-05-27T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fdcfbe10b", "title": "How to use CocoaPods as a CLI tools manager", "url": "https://mokacoding.com/blog/cocoapods-ci-setup", "published_at": "2020-03-17T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fdd182316", "title": "How to manually generate Devise reset password link", "url": "https://mokacoding.com/blog/how-to-manually-generate-devise-reset-password-link", "published_at": "2019-07-28T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fddd94fee", "title": "Midwives with the Apple Watch", "url": "https://mokacoding.com/blog/midwives-with-the-apple-watch", "published_at": "2019-06-03T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fdeaeaa3e", "title": "How to use social media productively", "url": "https://mokacoding.com/blog/social-media-operating-procedures", "published_at": "2019-04-30T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fdf7bf272", "title": "How to run a single test in Xcode", "url": "https://mokacoding.com/blog/running-one-test-in-xcode", "published_at": "2019-04-23T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe06ba487", "title": "How to test view controllers navigation", "url": "https://mokacoding.com/blog/navigation-delegate-pattern", "published_at": "2019-04-16T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe1379923", "title": "Take care of your tools", "url": "https://mokacoding.com/blog/take-care-of-your-tools", "published_at": "2019-04-09T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe205b914", "title": "Code Like A Chef", "url": "https://mokacoding.com/blog/code-like-a-chef", "published_at": "2019-04-02T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe2bbf888", "title": "Top 10 Productivity Books", "url": "https://mokacoding.com/blog/top-10-productivity-books", "published_at": "2019-03-26T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe3a32071", "title": "Why I'm cutting back on podcasts and audiobooks", "url": "https://mokacoding.com/blog/podcast-addiction", "published_at": "2019-03-19T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe3ad3551", "title": "Better tests for delegates", "url": "https://mokacoding.com/blog/better-tests-for-delegates", "published_at": "2019-03-12T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe449585b", "title": "3 Lessons on Software Development from the New England Patriots", "url": "https://mokacoding.com/blog/3-lessons-from-new-england-patriots", "published_at": "2019-03-05T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe499d5b0", "title": "The value of decluttering and optimizing your software", "url": "https://mokacoding.com/blog/clutter-and-optimization", "published_at": "2019-02-26T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe5438483", "title": "Code Coverage Is A Broken Metric", "url": "https://mokacoding.com/blog/code-coverage-is-broken", "published_at": "2019-02-19T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe55259e5", "title": "Write Less Code", "url": "https://mokacoding.com/blog/wirte-less-code", "published_at": "2019-02-13T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe63a1cf0", "title": "How to TDD in Swift, a step by step guide", "url": "https://mokacoding.com/blog/step-by-step-tdd-in-swift-part-1", "published_at": "2019-02-08T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe7377159", "title": "The Productivity Project - by Chris Bailey", "url": "https://mokacoding.com/blog/the-productivity-project-notes", "published_at": "2019-01-29T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe7eacaf7", "title": "Test doubles in Swift: dummies, fakes, stubs, and spies.", "url": "https://mokacoding.com/blog/swift-test-doubles", "published_at": "2018-11-27T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe85cc5ef", "title": "How to become drastically faster at using the terminal", "url": "https://mokacoding.com/blog/terminal-aliases", "published_at": "2018-11-20T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe878d8c1", "title": "How to split decision and action logic with the Swift type system", "url": "https://mokacoding.com/blog/how-to-split-decision-and-action-logic-with-the-swift-type-system", "published_at": "2018-11-13T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe8b80fba", "title": "How to remove duplication from Swift tests with helper functions", "url": "https://mokacoding.com/blog/how-to-remove-duplication-from-swift-tests-with-helper-functions", "published_at": "2018-11-06T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fe95de646", "title": "Stephen King's Advice To Software Developers", "url": "https://mokacoding.com/blog/stephen-king-advice-to-software-developers", "published_at": "2018-10-30T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fea2702aa", "title": "Where to start to become more productive", "url": "https://mokacoding.com/blog/where-to-start-to-become-more-productive", "published_at": "2018-10-23T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fead2dd63", "title": "How to write code faster using snippets", "url": "https://mokacoding.com/blog/how-to-write-code-faster-using-snippets", "published_at": "2018-10-16T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2feb6b4267", "title": "Streamlining tests setup with fixtures in Swift", "url": "https://mokacoding.com/blog/streamlining-tests-setup-with-fixtures-in-swift", "published_at": "2018-10-09T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fec36ba9b", "title": "Invest in your terminal to become a better developer", "url": "https://mokacoding.com/blog/invest-in-your-terminal-to-become-a-better-developer", "published_at": "2018-10-02T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fecf43df5", "title": "What software developers can learn from Leonardo da Vinci", "url": "https://mokacoding.com/blog/what-software-developers-can-learn-from-leonardo-da-vinci", "published_at": "2018-09-25T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fed58da84", "title": "Red, green, and don't forget refactor", "url": "https://mokacoding.com/blog/red-green-and-dont-forget-refactor", "published_at": "2018-09-18T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fedb08933", "title": "Action focused protocols enhance testability", "url": "https://mokacoding.com/blog/action-focused-protocols-enhance-testability", "published_at": "2018-09-11T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fee67a44c", "title": "How to choose what to refactor", "url": "https://mokacoding.com/blog/how-to-choose-what-to-refactor", "published_at": "2018-09-04T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2feefaa0ed", "title": "How to get better at setting priorities", "url": "https://mokacoding.com/blog/the-focusing-question", "published_at": "2018-08-25T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2fef02ca55", "title": "If you're not writing tests first you're missing out", "url": "https://mokacoding.com/blog/if-youre-not-writing-tests-first-youre-missing-out", "published_at": "2018-08-17T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2feff3d9d5", "title": "\"Does Software Understand Complexity?\" via Michael Feathers", "url": "https://mokacoding.com/blog/does-software-understand-complexity-m-feathers", "published_at": "2018-08-12T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2ff064de31", "title": "Apps and Tools", "url": "https://mokacoding.com/blog/apps-and-tools-i-use", "published_at": "2018-07-28T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2ff093f785", "title": "4 books to kick start 2018", "url": "https://mokacoding.com/blog/books-to-start-2018", "published_at": "2018-01-01T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2ff1075dcd", "title": "Symbolic links in Git", "url": "https://mokacoding.com/blog/symliks-in-git", "published_at": "2017-09-12T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2ff1c05c94", "title": "Quick beforeSuite and afterSuite behaviour", "url": "https://mokacoding.com/blog/quick-beforesuite-aftersuite-behaviour", "published_at": "2017-05-11T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2ff1e61e7f", "title": "Quick beforeEach and afterEach behaviour", "url": "https://mokacoding.com/blog/quick-beforeeach-aftereach-behaviour", "published_at": "2017-05-08T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2ff2270872", "title": "Nimble: when to use waitUntil or toEventually", "url": "https://mokacoding.com/blog/waituntil-vs-toeventually", "published_at": "2017-05-05T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2ff2bb44fb", "title": "Unless.swift", "url": "https://mokacoding.com/blog/unless-swift", "published_at": "2017-04-04T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2ff2d02152", "title": "XCTest closure based expectations", "url": "https://mokacoding.com/blog/xctest-closure-based-expectation", "published_at": "2017-03-22T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2ff33c5c7c", "title": "How to use dependency injection for classes in Swift", "url": "https://mokacoding.com/blog/dependency-injection-for-classes-in-swift", "published_at": "2017-03-01T00:00:00+00:00" }, { "id": "01a087a8-2841-73da-8128-2f2ff342dc78", "title": "Lessons learned working on danger-switlint selective linting", "url": "https://mokacoding.com/blog/lessons-learned-working-on-danger-swiftlint-selective-linting", "published_at": "2017-01-26T00:00:00+00:00" }, { "id": "01a087a8-2842-708d-8eaf-8b2a23a01620", "title": "Your Git Log Should Tell A Story", "url": "https://mokacoding.com/blog/your-git-log-should-tell-a-story", "published_at": "2016-12-19T00:00:00+00:00" }, { "id": "01a087a8-2842-708d-8eaf-8b2a23d4e7c9", "title": "Better Xcode Run Script Build Phases", "url": "https://mokacoding.com/blog/better-build-phase-scripts", "published_at": "2016-11-07T00:00:00+00:00" }, { "id": "01a087a8-2842-708d-8eaf-8b2a24bd3a76", "title": "Setting Up Firebase Without Using CocoaPods", "url": "https://mokacoding.com/blog/setting-up-firebase-without-cocoapods", "published_at": "2016-08-15T00:00:00+00:00" }, { "id": "01a087a8-2842-708d-8eaf-8b2a24ec459c", "title": "Implicitly vs Force Unwrapping Swift Optionals", "url": "https://mokacoding.com/blog/impliticly-vs-force-unwrapping-swift-optionals", "published_at": "2016-08-09T00:00:00+00:00" }, { "id": "01a087a8-2842-708d-8eaf-8b2a256f8e10", "title": "Cloud 66 Postfix Deploy Hook", "url": "https://mokacoding.com/blog/cloud-66-postfix-deploy-hook", "published_at": "2016-08-01T00:00:00+00:00" } ] posts Claim your blog
Back to mokacoding
Blog · corpus.blog/blogs/mokacoding.com/posts

mokacoding

mokacoding.com

2026

2025

2024

2022

2021

2020

2019

2018

2017

2016