<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Sash Zats</title><description>Personal blog of Sash Zats</description><link>https://zats.io/</link><item><title>Improving view debugging in Xcode</title><link>https://zats.io/blog/improving-view-debugging-in-xcode/</link><guid isPermaLink="true">https://zats.io/blog/improving-view-debugging-in-xcode/</guid><description>Normally view debugging in Xcode is somewhat hard: you have to attribute bunch of faceless UIViews to relevant view controller.</description><pubDate>Tue, 16 Jun 2015 04:00:00 GMT</pubDate></item><item><title>Fizz Buzz with GameplayKit</title><link>https://zats.io/blog/fizz-buzz-with-gameplaykit/</link><guid isPermaLink="true">https://zats.io/blog/fizz-buzz-with-gameplaykit/</guid><description>A great idea found at knowing.net and backported to swift.</description><pubDate>Sat, 15 Aug 2015 04:00:00 GMT</pubDate></item><item><title>GKRandomDistribution, GKShuffledDistribution and the GKGaussianDistribution</title><link>https://zats.io/blog/gkrandomdistribution-gkshuffleddistribution-and-the-gkgaussiandistribution/</link><guid isPermaLink="true">https://zats.io/blog/gkrandomdistribution-gkshuffleddistribution-and-the-gkgaussiandistribution/</guid><description>GameplayKit brings random numbers generation among other useful things. So what&apos;s the difference between GKRandomDistribution, GKGaussianDistribution and GKShuffledDistribution?</description><pubDate>Sat, 15 Aug 2015 04:00:00 GMT</pubDate></item><item><title>Generational analysis for tests</title><link>https://zats.io/blog/generational-analysis-for-tests/</link><guid isPermaLink="true">https://zats.io/blog/generational-analysis-for-tests/</guid><description>Execute a typical scenario, returning to the original state. Repeat the scenario several (≥ 4) times. Call -[LeaksInstrument measure] after each run. Assert on -[LeaksInstrument hasLeaksInRepresentativeSession] being falsy.</description><pubDate>Wed, 18 Feb 2015 05:00:00 GMT</pubDate></item><item><title>+initialize in categories</title><link>https://zats.io/blog/initialize-in-categories/</link><guid isPermaLink="true">https://zats.io/blog/initialize-in-categories/</guid><description>An interesting quirk for + initialize method when implemented in a category. Documentation doesn&apos;t really explain what is the correct behavior of the method, let&apos;s figure it out by ourselves.</description><pubDate>Sat, 12 Apr 2014 04:00:00 GMT</pubDate></item><item><title>Designing your own class cluster. Initializers.</title><link>https://zats.io/blog/designing-your-own-class-cluster-initializers/</link><guid isPermaLink="true">https://zats.io/blog/designing-your-own-class-cluster-initializers/</guid><description>I found myself creating a class cluster. Not just a notoriously studied subclass of `NSArray` or `UIButton` but a class cluster base class itself.</description><pubDate>Sat, 12 Apr 2014 04:00:00 GMT</pubDate></item><item><title>Counting tokens in Foundation Models</title><link>https://zats.io/blog/counting-tokens-in-foundation-models/</link><guid isPermaLink="true">https://zats.io/blog/counting-tokens-in-foundation-models/</guid><description>Understanding Apple’s Foundation Models Context Window: A Comparison with OpenAI’s Tokenization.</description><pubDate>Tue, 26 Aug 2025 04:00:00 GMT</pubDate></item><item><title>copy vs strong (retain)</title><link>https://zats.io/blog/copy-vs-strong-retain/</link><guid isPermaLink="true">https://zats.io/blog/copy-vs-strong-retain/</guid><description>The question when to use copy vs strong (ex retain) is getting quite old, so I decided to summarise rules I follow in one place. Mostly this is Objective-C-related post.</description><pubDate>Thu, 27 Aug 2015 04:00:00 GMT</pubDate></item><item><title>iPhone X home button</title><link>https://zats.io/blog/iphone-x-home-button/</link><guid isPermaLink="true">https://zats.io/blog/iphone-x-home-button/</guid><description>As soon as I saw iPhone X home indicator replacing the physical button, I got interested in its behavior: it has to be visible both on the lock screen with an arbitrary wallpaper as a background and in any 3rd-party app showing arbitrary content, which in case of videos or games can also change quite quickly.</description><pubDate>Wed, 27 Dec 2017 05:00:00 GMT</pubDate></item><item><title>Advanced NSProxy</title><link>https://zats.io/blog/advanced-nsproxy/</link><guid isPermaLink="true">https://zats.io/blog/advanced-nsproxy/</guid><description>Imagine your `Dog` class has a following method: Now imagine a mischievous `Cat` (a subclass of `NSProxy` obviously) wishing to get in a way…</description><pubDate>Tue, 15 Jul 2014 04:00:00 GMT</pubDate></item><item><title>Let&apos;s build Amphetamine</title><link>https://zats.io/blog/lets-build-amphetamine/</link><guid isPermaLink="true">https://zats.io/blog/lets-build-amphetamine/</guid><description>This is a first of what I hope will become a series of blog posts inspired by Mike Ash&apos;s let&apos;s build series.</description><pubDate>Sun, 10 Jun 2018 04:00:00 GMT</pubDate></item><item><title>Let&apos;s build toll-free bridged class</title><link>https://zats.io/blog/lets-build-toll-free-bridged-class/</link><guid isPermaLink="true">https://zats.io/blog/lets-build-toll-free-bridged-class/</guid><description>Source code for this blog post can be found at github: https://github.com/NSFW-Objective-C/Toll-Free-Bridging</description><pubDate>Sat, 14 Feb 2015 05:00:00 GMT</pubDate></item><item><title>llllm - LocalLLM for Open Web</title><link>https://zats.io/blog/llllm-local-llm-for-open-web/</link><guid isPermaLink="true">https://zats.io/blog/llllm-local-llm-for-open-web/</guid><description>A cross-platform macOS and iOS app that unlocks Apple’s on-device LLMs for any website, offering OpenAI-compatible APIs for privacy-preserving, low-latency AI directly in Safari, Chrome, and beyond. It bridges native-only limitations with a seamless developer and user experience.</description><pubDate>Tue, 08 Jul 2025 04:00:00 GMT</pubDate></item><item><title>Making the most of Apple Foundation Models: Context Window</title><link>https://zats.io/blog/making-the-most-of-apple-foundation-models-context-window/</link><guid isPermaLink="true">https://zats.io/blog/making-the-most-of-apple-foundation-models-context-window/</guid><description>How to manage Apple’s 4096-token limit with sliding windows, summarization, and selective retention.</description><pubDate>Wed, 03 Sep 2025 04:00:00 GMT</pubDate></item><item><title>Making the most of Apple Foundation Models: Routing</title><link>https://zats.io/blog/making-the-most-of-apple-foundation-models-routing/</link><guid isPermaLink="true">https://zats.io/blog/making-the-most-of-apple-foundation-models-routing/</guid><description>Integrating more capabilities into Apple Foundation Models by classifying intent and directing requests to the right tool while keeping a single, seamless user experience.</description><pubDate>Fri, 05 Sep 2025 04:00:00 GMT</pubDate></item><item><title>Markov Chains with GameplayKit</title><link>https://zats.io/blog/markov-chains-with-gameplaykit/</link><guid isPermaLink="true">https://zats.io/blog/markov-chains-with-gameplaykit/</guid><description>GameplayKit hides many amazing features: a random number generators, components architecture, path finding, state machines and more. Markov chains is another ingenious gem that can be utilised by games or apps to simulate natural patterns.</description><pubDate>Fri, 28 Aug 2015 04:00:00 GMT</pubDate></item><item><title>Moarfonts after upgrading Xcode</title><link>https://zats.io/blog/moarfonts-after-upgrading-xcode/</link><guid isPermaLink="true">https://zats.io/blog/moarfonts-after-upgrading-xcode/</guid><description>We are using moarfonts for WSYIWYG-style preview in Interface Builder. And if you&apos;r not doing it yet, you really should. However, after upgrading to Xcode 5.1.1 some of the team members started seeing a strange error while building the project.</description><pubDate>Mon, 14 Apr 2014 04:00:00 GMT</pubDate></item><item><title>NSDate is a model not a view</title><link>https://zats.io/blog/nsdate-is-a-model-not-a-view/</link><guid isPermaLink="true">https://zats.io/blog/nsdate-is-a-model-not-a-view/</guid><description>Following code [[NSDate date] dateByAddingTimeInterval:60 * 60] is a really common attempt to get the current time in, let&apos;s say, France. Despite developer&apos;s expectations, it does not represent current time in GMT+1 time zone. So where is all the confusion coming from?</description><pubDate>Mon, 17 Mar 2014 04:00:00 GMT</pubDate></item><item><title>NSArray&apos;s privates</title><link>https://zats.io/blog/nsarrays-privates/</link><guid isPermaLink="true">https://zats.io/blog/nsarrays-privates/</guid><description>Several private methods from `NSArray` API, complexity analysis, and how to implement it yourself.</description><pubDate>Fri, 09 May 2014 04:00:00 GMT</pubDate></item><item><title>A backport of NSProcessInfo isOperatingSystemAtLeastVersion</title><link>https://zats.io/blog/nsprocessinfo-isoperatingsystematleastversion-backport/</link><guid isPermaLink="true">https://zats.io/blog/nsprocessinfo-isoperatingsystematleastversion-backport/</guid><description>Make sure it&apos;s added to the current target, the class will take care of everything else.</description><pubDate>Sun, 19 Oct 2014 04:00:00 GMT</pubDate></item><item><title>Radar: Xcode version editor not showing all commits</title><link>https://zats.io/blog/radar-xcode-version-editor-not-showing-all-commits/</link><guid isPermaLink="true">https://zats.io/blog/radar-xcode-version-editor-not-showing-all-commits/</guid><description>Starting from Xcode 4, IDE comes with a version editor allowing (in theory) to browse commits, diffs, blames, logs etc</description><pubDate>Sat, 12 Apr 2014 04:00:00 GMT</pubDate></item><item><title>Optimizing tests running time</title><link>https://zats.io/blog/optimizing-tests-running-time/</link><guid isPermaLink="true">https://zats.io/blog/optimizing-tests-running-time/</guid><description>In our app we run a mix of unit, functional and integration tests, for example: Credit card validator is a unit test. Tapping menu items takes you to the right section is a functional test. Tapping a product, adding it to cart and going through all of the purchase steps is an integration test.</description><pubDate>Fri, 19 Dec 2014 05:00:00 GMT</pubDate></item><item><title>RTFM performSelector:withObject:</title><link>https://zats.io/blog/rtfm-performselector-withobject/</link><guid isPermaLink="true">https://zats.io/blog/rtfm-performselector-withobject/</guid><description>Recently, while going through the code review, I stumbled upon a curious bug that manifested itself on iOS 7.1 64 bit simulator. A committer had a boolean setter that he wanted to call with a delay, so he had a following code</description><pubDate>Wed, 12 Mar 2014 04:00:00 GMT</pubDate></item><item><title>Setting structures in Objective-C</title><link>https://zats.io/blog/setting-structures-in-objective-c/</link><guid isPermaLink="true">https://zats.io/blog/setting-structures-in-objective-c/</guid><description>You know how you always do this little dance to update couple of values on a structure property</description><pubDate>Thu, 02 Oct 2014 04:00:00 GMT</pubDate></item><item><title>Signing ipa for different team ids</title><link>https://zats.io/blog/signing-ipa-for-different-team-ids/</link><guid isPermaLink="true">https://zats.io/blog/signing-ipa-for-different-team-ids/</guid><description>As soon as you leave the cozy Xcode&apos;s build process, you find yourself fiddling with codesign dealing with, well, code signing. There are many tools that suppose to ease up the process: ota-tools, shenzhen and gists to name a few. However, once in a while you find yourself in need of more flexible solution.</description><pubDate>Wed, 02 Jul 2014 04:00:00 GMT</pubDate></item><item><title>State restoration: beyond iOS</title><link>https://zats.io/blog/state-restoration-beyond-ios/</link><guid isPermaLink="true">https://zats.io/blog/state-restoration-beyond-ios/</guid><description>Just a brief thought on Preservation &amp; Restoration API. It occurred to me that extending this technology to Mac OS might give us much more seamless experience when switching between apps on Mac OS and iOS apps.</description><pubDate>Sun, 13 Apr 2014 04:00:00 GMT</pubDate></item><item><title>Storyboards</title><link>https://zats.io/blog/storyboards/</link><guid isPermaLink="true">https://zats.io/blog/storyboards/</guid><description>I&apos;ve seen people quoting this Stack Overflow answer a lot when they need to convince someone not to use storyboards. I understand that it&apos;s a somewhat a flamewar topic, but I&apos;d like to address the points author makes.</description><pubDate>Wed, 12 Mar 2014 04:00:00 GMT</pubDate></item><item><title>Target-action for non-ui components. There is an easier way!</title><link>https://zats.io/blog/target-action-for-non-ui-components-there-is-an-easier-way/</link><guid isPermaLink="true">https://zats.io/blog/target-action-for-non-ui-components-there-is-an-easier-way/</guid><description>Use -[UIApplication sendAction:to:from:forEvent:] instead of calling action on target directly if you want responder chain behaviour for free.</description><pubDate>Tue, 23 Dec 2014 05:00:00 GMT</pubDate></item><item><title>Whose symbol is this?</title><link>https://zats.io/blog/whose-symbol-is-this/</link><guid isPermaLink="true">https://zats.io/blog/whose-symbol-is-this/</guid><description>Once in a while I found myself in need of finding who declared certain function or method. With Apple added support for iOS frameworks, the need in being sure where particular piece of code is coming is somewhat high.</description><pubDate>Sat, 25 Oct 2014 04:00:00 GMT</pubDate></item></channel></rss>