<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Ilian Konchev on Medium]]></title>
        <description><![CDATA[Stories by Ilian Konchev on Medium]]></description>
        <link>https://medium.com/@iliankonchev?source=rss-5f805460b514------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*WZvD7DUd6q6FuvujVQEBdg.jpeg</url>
            <title>Stories by Ilian Konchev on Medium</title>
            <link>https://medium.com/@iliankonchev?source=rss-5f805460b514------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 24 Apr 2026 05:16:14 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@iliankonchev/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Bringing Zeplin Mobile to iPadOS]]></title>
            <link>https://medium.com/snapp-mobile/bringing-zeplin-mobile-to-ipados-2b3e3c28a194?source=rss-5f805460b514------2</link>
            <guid isPermaLink="false">https://medium.com/p/2b3e3c28a194</guid>
            <category><![CDATA[stories]]></category>
            <category><![CDATA[zeplin]]></category>
            <category><![CDATA[application-development]]></category>
            <category><![CDATA[ipados-13]]></category>
            <dc:creator><![CDATA[Ilian Konchev]]></dc:creator>
            <pubDate>Wed, 24 Jun 2020 09:19:17 GMT</pubDate>
            <atom:updated>2020-06-25T16:16:52.996Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*q8awrSR1zYIY6vBb9An6uA.png" /><figcaption>TL;DR — Zeplin Mobile now looks great on both iOS and iPadOS</figcaption></figure><p>Now that we launched our client app for the <a href="https://docs.zeplin.dev/docs">official Zeplin API</a> on iPhone we brought our attention on making the app a good fit for the iPadOS. Being a project we usually work on in our Fridays, some corner-cutting had to be done to hit the market faster. The first version of the app was aimed towards providing the ability to discuss designs on smaller screens.</p><p>The iPad was always on our radar but with the initial launch the tablet app was just a letterboxed version of the phone app. That was just unacceptable.</p><h4><strong>We do feel that iPad has an enormous potential of being a great productivity device and we wanted to experiment a bit with where can we go with that in mind.</strong></h4><p>It wasn’t as easy as ticking a checkbox, though. There is a fair bit of customization going on in the iPhone version of the app that had to be dealt with to fit iPadOS better.</p><p>We can’t stress enough how much of a difference using <em>split views</em> brings to the app interaction on the tablets. The bigger space gives you the opportunity to accommodate more information in a very useful way. We wanted to have a sidebar with the projects list that is always visible. In a very short amount of time, we had a proof of concept that allowed us to switch projects from entry points that were not possible before.</p><p>On the phone, you can tap twice on the image in the screen details view to trigger what we call ‘the <em>full screen mode</em>”. That mode allows you to preview designs on the device without any app chrome and we wanted to keep the same interaction on the tablets as well.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FvcwWHmmztOc%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DvcwWHmmztOc&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FvcwWHmmztOc%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/102f7fea4d8129ba95dd1d58efb90e76/href">https://medium.com/media/102f7fea4d8129ba95dd1d58efb90e76/href</a></iframe><p>You can hook a keyboard to an iPad and it made sense to us to provide a <em>keyboard shortcut</em> for the interaction. While we were at it we added some shortcuts for going to the previous/next screen in the details view as well. You can still do that by swiping but the shortcuts were another way to make our app “a good citizen” of the platform.</p><p>We use <em>custom expandable bottom sheets</em> to host some of the supplementary info (project members, screen versions) and we have an integration between the comments sheet and the screen previews. Although it works (and looks) great on the phone, it does not feel particularly good fit for the bigger screens.</p><p>There’s a modal presentation style that adapts its layout and behaviour depending on the screen size that Apple is using throughout the iPadOS. We like the approach a lot and we put in some work in making <em>our custom presentations</em> to behave in the same fashion. Again, it did not took us long before we started to see our custom presenters acting as expected.</p><p>We looked at our habits of using iPhoneOS. Using the system’s split view to display two apps side by side is a thing we do a lot and we wanted our app to be part of it. We decided to stay off allowing multiple windows for now, but the app can be displayed next to any other app in the split view mode. We also recognised that you may want to be able to <em>export the screen thumbnails</em> on the tablet for further use and we added support for that.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FbsCv_EtSU-E%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DbsCv_EtSU-E&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FbsCv_EtSU-E%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/bdfb295b04d6d4bc9579916dffbbdeff/href">https://medium.com/media/bdfb295b04d6d4bc9579916dffbbdeff/href</a></iframe><p>The variety of the screen sizes was another thing we did some explorations around. We tweaked our project and screen lists to show more info on the larger screens. As a result we now show from 3 to 5 thumbnails in a row, depending on the size of the iPad. We keep the size of the UI elements roughly the same, but the bigger screens look less empty now.</p><p>This is just our first delivery of the app on the tablets. We often say that software is never done and there are plenty of things we want to do with the next updates. One thing is sure, though — we are going to have fun doing it.</p><p><a href="https://apps.apple.com/bg/app/zeplin-mobile-by-snapp-mobile/id1498204511">‎Zeplin Mobile by Snapp Mobile</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2b3e3c28a194" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snapp-mobile/bringing-zeplin-mobile-to-ipados-2b3e3c28a194">Bringing Zeplin Mobile to iPadOS</a> was originally published in <a href="https://medium.com/snapp-mobile">Snapp Mobile</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building our first SwiftUI-only app — LearnCyrillic]]></title>
            <link>https://medium.com/snapp-mobile/building-our-first-swiftui-only-app-learncyrillic-def2c3d07cd2?source=rss-5f805460b514------2</link>
            <guid isPermaLink="false">https://medium.com/p/def2c3d07cd2</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[stories]]></category>
            <category><![CDATA[watchos6]]></category>
            <category><![CDATA[combine]]></category>
            <category><![CDATA[swiftui]]></category>
            <dc:creator><![CDATA[Ilian Konchev]]></dc:creator>
            <pubDate>Tue, 16 Jun 2020 17:50:28 GMT</pubDate>
            <atom:updated>2020-06-16T17:50:28.625Z</atom:updated>
            <content:encoded><![CDATA[<h3>Building our first SwiftUI-only app — LearnCyrillic</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*B1pE6FFm3hDYQwtB1R6DRA@2x.jpeg" /><figcaption>Learn Cyrillic by Snapp Mobile GmbH</figcaption></figure><p>Introduced at the 2019 WWDC, SwiftUI caught a lot of developers’ attention. People started to share bits and pieces on their personal experience with it mostly because besides the <a href="https://developer.apple.com/tutorials/swiftui/tutorials">great set of introductory lessons</a>, Apple didn’t share any documentation. The shift from what building apps using UIKit is to what SwiftUI promises to be is so dramatic that we naturally decided to give it a go.</p><p>One of the things we truly believe in at Snapp Mobile is the power of prototyping as a learning tool. As soon as we started toying around SwiftUI though, we realized that a prototype simply won’t be enough to gain the depth of knowledge we were interested in.</p><p>So, we decided to learn SwiftUI by writing an app. Actually, by porting an Android one to iOS. There’s a quite <a href="https://play.google.com/store/apps/details?id=com.lehtimaeki.learncyrillic&amp;hl=en">cool Android app to learn the Cyrillic alphabet</a> made by our colleague <a href="https://medium.com/u/e7d7eb783a40">Juhani Lehtimäki</a> that we wanted to port on iOS for a few reasons. First, it’s small enough not to cloud our availability. Second it’s complex enough UI and UX-wise to go beyond being a traditional SwiftUI exercise, and third… we had no iOS version of it :)</p><p>There were a few targets that we wanted to hit: we wanted it to look and feel as a brother of the Android app but to embrace the iOS design language and behavior.</p><h3>We wanted the app on iPadOS. And on watchOS.</h3><p>True to what Apple promised, it turned easy to reuse most of the UI components between iOS, iPadOS and watchOS, we only had to handle the minor details to get our components fit the platform language. We learned very quickly to avoid large view components. We broke our UI into small, reusable views which was beneficial when we reused them on watchOS later.</p><p>Another thing that made sense to us during the discovery process was to decouple the app logic and the data flow out of our UI code. There’s another great framework that was introduced at the very same WWDC that is kinda tied to SwiftUI, named Combine. We used Combine on some of the internals like loading and storing the alphabets and for generating and tracking the quizz progress.</p><p>There was a set of explorations around how we would like to structure our SwiftUI apps. Since reusability was a factor we built a shared framework that contains our app logic and our data models which gets used between all of the platforms. As SwiftUI is a declarative UI framework by nature we went with using a lightweight, in-house baked implementation of the Flux architecture to carry the data flow. This means that our state, actions and reducers live in the said shared library along with the data models. The result is a framework that we can use outside of the SwiftUI context, if needed.</p><p>Lastly, there was a fair amount of exploration around some of the advanced SwiftUI topics, including <a href="https://swiftui-lab.com/communicating-with-the-view-tree-part-1/">PreferenceKeys</a> and <a href="https://swiftui-lab.com/swiftui-animations-part3/">AnimatableModifiers</a>. To strengthen the platform integration we threw in some haptic feedback where we felt we need it. The end result is an app that feels snappy, responsive and pleasing. We do hope you like it.</p><p><strong>TL;DR: </strong>LearnCyrillic is now live on AppStore.</p><p><a href="https://apps.apple.com/bg/app/learn-cyrillic/id1455885726">‎Learn Cyrillic</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=def2c3d07cd2" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snapp-mobile/building-our-first-swiftui-only-app-learncyrillic-def2c3d07cd2">Building our first SwiftUI-only app — LearnCyrillic</a> was originally published in <a href="https://medium.com/snapp-mobile">Snapp Mobile</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[On project dependencies]]></title>
            <link>https://medium.com/snapp-mobile/on-project-dependencies-9e481bc42c5a?source=rss-5f805460b514------2</link>
            <guid isPermaLink="false">https://medium.com/p/9e481bc42c5a</guid>
            <category><![CDATA[stories]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[decision-making]]></category>
            <category><![CDATA[development]]></category>
            <dc:creator><![CDATA[Ilian Konchev]]></dc:creator>
            <pubDate>Thu, 20 Jun 2019 08:30:34 GMT</pubDate>
            <atom:updated>2019-06-26T14:13:41.298Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8ruS9UNNQCFHc2UP9eB8uQ.jpeg" /><figcaption>Photo by <a href="https://unsplash.com/@fempreneurstyledstock?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Leone Venter</a> on <a href="https://unsplash.com/search/photos/boxes?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure><p>No matter what we do at some point in our careers as developers we all face the dilemma of introducing external dependencies to our projects. We are pretty sure that you, dear reader, have faced it too. If you did not, you will, we promise you, it’s as inevitable as the chickenpox.</p><p>There are various reasons to rely on third-party code. It could be because you want to measure your app adoption and you don’t want to waste time writing the measurement layer. Or because you have to introduce a functionality that deals with a matter that you don’t quite have the experience with. Or because your dev buddies told you about that library that is going to sort out most of the existing issues that your app has. Or because that library had been there since the day you started working on the project in the first place. Or simply because you don’t want to deal with some of the basics every time you start a new app. Everybody hates boilerplate, right?</p><p>All of the above are valid reasons, but…</p><h4>Picking a dependency can be a tricky process</h4><p>There are few things that you should take into consideration:</p><ul><li><strong>Acknowledge the fact that adding a dependency makes it <em>your</em> code.</strong> Even if you have not authored it, it ships with your app, it’s part of your app’s workflows, some logic relies on it, so it’s your code too. You are responsible to maintain it (even if that maintenance goes as much as keeping the dependency updated).</li><li><strong>Make an informed decision.</strong> A google search might yield you a handful of options. How would you choose which one to pick? We would check the history of the dependency. It’s easy for most of the public libraries — just check the project on github. Look for things like how frequently the project gets updated. It might not seem important at first sight, since it does the job, right? But imagine it being a UI library that has no support for the next iPhone which is going to have two notches (figuratively speaking, you’ll see lots of that). Can you afford losing clients by waiting for the authors to update their libs 2–3 weeks (or more) after the device is on the market? It happens to the best apps on the AppStore, for real, it may happen to you too. We’d render suspicious a project that has no release in the last 3 to 6 months.</li><li><strong>Take a look at the list of the known issues of that dependency, the less they are, the better.</strong> Check the tone of the discussions, the age of the topics. Try to get a sense of how fast the bugs are getting resolved. You don’t want your app to host a bug that hasn’t been fixed in the past 2 years. You also don’t want to deal with people who are rude towards the bug reporters.</li><li><strong>Check the quality of the code.</strong> Some libraries start as side projects or are being used to demo the skills of their developers. Once in awhile a library becomes unmaintained because of various reasons — the author might get engaged into something else, or could simply lose his will to maintain the library. Depending on how deep the integration with your project is, dealing with such problems could be unpleasant. This can put you to a position to fork the project and to continue maintaining it yourself. It’s always better to know that you will enjoy doing so (and that you understand what’s going on to a degree that you can maintain it, of course). Or it may shift your attention from introducing new functionality to your apps to figuring out a suitable replacement.</li><li><strong>Consider treating the company-backed libraries equally to the single developer-driven ones.</strong> Most of the times, companies are looking at the libraries from the same perspective as the single developers — as a tool to promote themselves. Some companies make money out of their libraries. Every now and then a company gets acquired and changes its vision in consequence. This can also put you in a position to figure out a replacement. And if such a thing is at the foundation of your data stack, it could be a pain.</li><li><strong>Checking the capabilities of the library and figure out how would you utilise them.</strong> Would you use 1/10th of it’s capabilities? Do you really, really, really need to take the next 90% with your app for the price of these 10%. You may end up getting inspired to code these 10% of functionality alone.</li><li><strong>Make sure that you are aware of the fact that third-party code also has bugs that can be critical sometimes.</strong> This means that you have to be prepared for a situation where you have to deal with a third-party bugfix in the middle of your new feature development process. This could affect how you manage the code of your app, it may also have an impact on the testing workflows and so on.</li></ul><h3>So what, avoid dependencies?</h3><p>No, not really. There’s a lot of great stuff out there that you can’t simply ignore. In fact it’ll be expected from you to know how to deal with some of the most popular libraries.</p><p>A library with some community around it (that also passes the checklist above) is what we usually consider a good candidate to get added to our projects.</p><p>A library that is well-maintained by a single dev can also be a good option. Find that guy on Twitter, drop him a line, tell him that you are interested in what he’s doing. Ask him about his plans for the project, and who knows, you may discover a new dev buddy.</p><p>Try to avoid leaning on third-party code for small, utility-like stuff. You know, things like the next fancy UICollectionView layout for example. Or that fancy String extension that’s wrapped in a pod. Also, do you really need all of the features of that third-party image loading library? Or that JSON-to-object library that’s been in your project for the past 3 years. You will learn so much if you code and manage these bits of your apps on your own, we promise you.</p><p>At the end of the day it’s you who’s in the driving seat of your app. It’s you who decides how much control over its features you want to have. It’s up to you to choose where to steer it at, and how to manage it. We just hope that the above may help you in the process of deciding on your dependencies next time.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9e481bc42c5a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snapp-mobile/on-project-dependencies-9e481bc42c5a">On project dependencies</a> was originally published in <a href="https://medium.com/snapp-mobile">Snapp Mobile</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>