Stop trying to remember how to access your app's data directory in the iOS simulator and just create yourself a symlink instead
paul-samuels.com/blog/2022/1…
Quick debugging tip to make it easier to find a needle in a haystack (read: a specific instance of a class in a big heap of instances)
#xcode #swift #debugging
paul-samuels.com/blog/2022/1…
I've written a short post about creating a basic project validator using Kotlin Symbol Processing. Hopefully it shows KSP isn't all that scary and can be really powerful for automating even niche project requirements.
lnkd.in/eNMBxs3V #kotlin #ksp
Some handy tips and tricks for navigating source code efficiently in Xcode paul-samuels.com/blog/2022/0…
Not sure why I brought this post into existence but here's using Excel's LAMBDAs to solve day 1 of the Advent of Code 2021 with unit tests
paul-samuels.com/blog/2022/0…
#excel #lambda #unittesting
Bit niche but here's an idea for using Excel's new LAMBDA function to allow unit testing formulas
paul-samuels.com/blog/2022/0…
#excel #lambda #unittesting
Some third party dependencies are difficult to wrap. This post looks at wrapping an awkward iOS dependency to enable testing whilst keeping our code isolated paul-samuels.com/blog/2021/0…
Here's a quick read on using an iOS test suite in a non-standard way to perform automation tasks that need access to UIKit. paul-samuels.com/blog/2021/0…
macOS tip: System Preferences > Keyboard > Shortcuts > turn on "Use keyboard navigation to move focus between controls". This allows tabbing between controls in dialogs/alerts. Hitting space performs the selected action. Hitting return performs the default action.
When you annotate an import with testable in Swift you are making subtle tradeoffs that may be impacting your design without you realising it.
I've written a post to cover a few of these impacts.
paul-samuels.com/blog/2021/0…
Having an "unimplemented" helper function in Swift is handy for staying in a development flow state. Here's a post that shows how to build this 3 line function and hopefully inspire other productivty hacks. paul-samuels.com/blog/2021/0…
Keeping tests as isolated as possible is often thwarted by hidden global state. This post shows a small XCTestCase extension to make changing global state and restoring the original values during a test a little easier.
paul-samuels.com/blog/2021/0…
Asynchronous tests are already difficult but here's an additional rough edge to keep in mind when using XCTestExpectation and following the documentation.
paul-samuels.com/blog/2021/0…
Small post looking at quickly switching between git branches without confusing Xcode (or your IDE of choice).
paul-samuels.com/blog/2020/1…
Here's a quick exploration of using the nil-coalescing operator on Swift's Result type. This enables clear/concise code in use cases where you have a sensible default value and are happy to ignore errors.
paul-samuels.com/blog/2020/1…
Here's a quick read on some practical ways to keep your git history in top shape using the`--exec` option when using git rebase.
paul-samuels.com/blog/2020/1…
Mini blog post on a couple of lldb aliases to help swap between Swift/ObjC to evaluate commands.
This makes it much easier to use memory addresses to interact with objects or call private selectors like `-[UIView recursiveDescription]` paul-samuels.com/blog/2020/0…
iPhone code reading tip: Using “Reader View” in Safari will allow you to actually read code listings on blogs that annoyingly don’t allow horizontal scrolling in code blocks.
Here's a post where I look at doing basic analysis of how apps on the Apple App Store are built.
This doesn't require jailbreaking but still gives a lot of insight, which is useful if you are considering working for a company that has existing apps.
paul-samuels.com/blog/2019/0…

