<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Uladz Mi</title>
    <description>The latest articles on DEV Community by Uladz Mi (@uladzmi).</description>
    <link>https://dev.to/uladzmi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1651614%2Fc9f5bac9-4c82-46ac-bfaa-8b0ef5db1584.png</url>
      <title>DEV Community: Uladz Mi</title>
      <link>https://dev.to/uladzmi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uladzmi"/>
    <language>en</language>
    <item>
      <title>How I published my first app to Apple Store #2</title>
      <dc:creator>Uladz Mi</dc:creator>
      <pubDate>Sun, 23 Jun 2024 13:11:58 +0000</pubDate>
      <link>https://dev.to/uladzmi/how-i-published-my-first-app-to-apple-store-2-4g34</link>
      <guid>https://dev.to/uladzmi/how-i-published-my-first-app-to-apple-store-2-4g34</guid>
      <description>&lt;p&gt;Hello everyone! My laptop is still not back to life, so let's continue...&lt;/p&gt;

&lt;p&gt;You can read the background story &lt;a href="https://dev.to/uladzmi/how-i-published-my-first-app-to-apple-store-1-491a"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Development Process
&lt;/h3&gt;

&lt;p&gt;First, I decided to go through the official tutorials and immediately came across &lt;a href="https://developer.apple.com/tutorials/app-dev-training/getting-started-with-scrumdinger"&gt;this paragraph&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;These tutorials are created for experienced developers who are new to SwiftUI. You’ll need to know about Swift before you begin, so start by reviewing The Basics of the Swift programming language for an overview of syntax, data types, and unique language features&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I don't consider myself a highly experienced developer and had never worked with Swift before, but I really didn't want to read through the dry documentation since it would take a couple of days, and I just wanted to launch something in the simulator and my phone asap.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3g4zotcww80avm3pq8u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3g4zotcww80avm3pq8u.jpg" alt="debugging" width="640" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Without much hesitation, I skipped the basics and jumped straight into the tutorials. It started off quite well, I quickly grasped the basic concepts, but then the tutorials moved on to drawing and playing audio, which didn't fit within the scope of my logger. So, deciding that the knowledge gained from the first three or four lessons should be enough, I started working on my project.&lt;/p&gt;




&lt;p&gt;For the MVP (Minimum Viable Product), or in other words, to start using my own app, I needed the following features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ability to add/remove exercises from a list&lt;/li&gt;
&lt;li&gt;The ability to add/remove sets to these exercises&lt;/li&gt;
&lt;li&gt;The ability to view history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I started drafting the skeleton of the app and creating the first views, and as expected, problems from my lack of Swift knowledge quickly emerged. ChatGPT came to the rescue, sometimes providing complete nonsense, but also giving good ideas on where to dig. On the other hand, if I had finished the tutorials, I wouldn't have needed its help in many instances. Maybe I'll finish them next time... but who am I kidding 😅&lt;/p&gt;

&lt;p&gt;In addition to ChatGPT, I didn't neglect the good old Google, and my application started to take shape.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsdh84zu1h7cpvm4h5lib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsdh84zu1h7cpvm4h5lib.png" alt="google" width="632" height="632"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;One of the first questions to answer was data storage, as changing this aspect in the future would be very challenging. A full-fledged backend seemed overkill, although there are plans to try setting it up from scratch in the future. The tutorials provided an example of storing data locally in a JSON file, but that option didn't suit me either. In this case, I would either have to create many files for each type of object, for example, a file for exercises, a file for sets, a file for sessions, etc., and then somehow combine them, or store everything in one single file, which is not optimal and difficult to model properly. SQLite seemed like the ideal option, so I started looking in that direction. With the help of Google, I discovered that iOS has its own framework suitable for tasks like mine, and after fiddling for a couple of weeks with the help of a few YouTube videos and some GitHub examples, I managed to set up CoreData, which essentially uses SQLite inside, as I wanted.&lt;/p&gt;

&lt;p&gt;Having figured out data storage, I started to think about where to get the initial list of exercises. One option was to create the exercises using the app itself, which was realistic for the first tests, but I didn't want to manually create 20-30 exercises. In the end, I decided to read the list of exercises from a CSV file and write them to CoreData at the first launch, updating what changed on subsequent app launches. I generated the exercises and their descriptions using ChatGPT, resulting in a list of 100 exercises for the main muscle groups.&lt;/p&gt;




&lt;p&gt;Pleased with myself, I decided it was time to move on to testing in real conditions and began replicating workout records in my own app. Everything worked more or less stably, with many minor bugs that were easily fixed in the evenings. There was only one thing that bothered me: the app was not user-friendly at all, namely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I had to search for exercises in the huge list every time&lt;/li&gt;
&lt;li&gt;I had to set the weight and reps every time, even though I didn't increase the weights every workout and could simply use the last one&lt;/li&gt;
&lt;li&gt;And a few other similar little things that I initially didn't pay attention to, and it took a few more weeks to refine them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Besides usability issues, another problem arose, which I thought was a bug, but I couldn't catch it. The issue was that about a week after installing the app on my iPhone, it stopped launching. This was very frustrating, as I deleted and reinstalled it a couple of times, losing all history. After a few such deletions, I finally realized that I could re-upload the app without deleting it, preserving the history, but even that didn't save me, as I often forgot to re-upload the app on time. It turned out to be a certificate issue, which without an Apple developer program subscription was valid for only one week, meaning it was time to create a full-fledged developer account. Nothing foretold trouble, and I was already imagining how I would publish the app next week, but my enthusiasm waned when I found out the subscription cost 100€ per year. This slightly altered my initial concept, but I'll talk about that and the preparation process for release in the next part...&lt;/p&gt;




&lt;p&gt;Thanks to everyone who read till the end!&lt;/p&gt;

&lt;p&gt;You can view screenshots or download it &lt;a href="https://apps.apple.com/de/app/yet-another-workoutlogger/id6484401597?l=en-GB&amp;amp;platform=iphone"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Any feedback is appreciated, thanks, and stay fit!&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>development</category>
      <category>ios</category>
      <category>learning</category>
    </item>
    <item>
      <title>How I published my first app to Apple Store #1</title>
      <dc:creator>Uladz Mi</dc:creator>
      <pubDate>Wed, 19 Jun 2024 13:26:01 +0000</pubDate>
      <link>https://dev.to/uladzmi/how-i-published-my-first-app-to-apple-store-1-491a</link>
      <guid>https://dev.to/uladzmi/how-i-published-my-first-app-to-apple-store-1-491a</guid>
      <description>&lt;h3&gt;
  
  
  Background
&lt;/h3&gt;

&lt;p&gt;Hey ho! My name is Uladz and I’m writing my first iOS application. Last week, my laptop got drenched by water from a baby bottle and refused to turn on. So, for the next couple of weeks, since I can’t code, I’ll be writing posts instead…&lt;/p&gt;

&lt;p&gt;For the past few years, I’ve been constantly thinking about starting something of my own, dreaming of working for myself. The criteria for a new venture were a few, namely the ability to engage in it in my spare time, having the necessary skills or the desire to learn, minimal financial investment, and the potential to see initial results within six months. The ideas were quite varied, ranging from dropshipping or a print-on-demand T-shirt store to my own cafe or a children’s toy store. Many ideas were dismissed as boring, but mostly due to the fear that something might not work out.&lt;/p&gt;

&lt;p&gt;Two years ago, I became a father and we downloaded an app to track the activities of our growing baby. I don’t remember the name anymore, but it served its purpose. The only issue was that some features, which imho should have been free, were only available with a subscription. So, I thought, why not quickly put together my own app?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvo2q756ic4aql3ww3ws7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvo2q756ic4aql3ww3ws7.jpg" alt="idea" width="420" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I liked the idea because it met all the criteria: I could code for 1–2 hours a day, I wanted to learn mobile development, no funds were required (not entirely true, I’ll explain in the next parts), and six months seemed feasible. I didn’t plan to sell it; the main idea was learning and personal use. I also wanted to streamline the release process, i.e., to be able to make changes and release new versions quickly. In the future, if all went well, I could try to monetize it and have some passive income, which would be nice. And so, at night, sitting on a fitness ball, rocking my daughter with one hand and typing with the other, I started coding.&lt;/p&gt;

&lt;p&gt;The first thing was to decide what to write and for which platform. I decided not to limit myself to just iOS, as I couldn’t leave Android smartphone owners without the opportunity to use my wonderful creation. So, I was choosing between React Native and Flutter. For work, I needed to learn React to support an internal service, and I decided that it was a good argument in favor of React Native. I started, as expected, with the official documentation and tried to launch Hello World sample in the simulator, but it didn’t go as smoothly as I expected. The process of setting up the environment was so clumsy that my motivation quickly plummeted. Dependencies didn’t want to install, the simulator didn’t want to run or crashed without apparent reason. Also, the app release process was unclear to me, and after struggling for 2–3 weeks, I abandoned the idea. Besides, our child’s routine had settled, and we stopped using even the paid app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzypolo1i00kcqkjwews9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzypolo1i00kcqkjwews9.jpg" alt="this is the end" width="607" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nine months passed, we moved to another city, and I joined a gym. I had tried before, but never stuck with it for long. This time, the gym was a 2-minute walk away, so the likelihood of skipping was minimal. I started looking for an app to log sets and weights and found there were many. One of the first I came across suited me, but over time, I again found that I needed a subscription to comment on all exercises, not just one per session, and I couldn’t create more than three routines.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For the record, I believe you should pay for any service one way or another: watch ads, subscribe, or accept that your data is sold. The issue here was that much of the functionality available with a subscription was unnecessary for me, and what I needed was artificially limited with the sole purpose of forcing me to buy something I didn’t need.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thus, I returned to the idea of my own app and the question of what to write it in. This time, I decided to take the path of least resistance — start small, learn fast. Considering that I was writing primarily for myself, I decided to limit support to iOS. The entry threshold was very low; I started with &lt;a href="https://developer.apple.com/tutorials/app-dev-training/"&gt;Apple’s official tutorials&lt;/a&gt; and within the first two hours, I loaded a test app onto my phone. So, in the evenings after my main job, I began working on yet another workoutlogger 💪.&lt;/p&gt;

&lt;p&gt;That’s all for now, thanks to everyone who read to the end!&lt;/p&gt;

&lt;p&gt;In the next posts, I’ll write about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;development process and why I decided not to learn Swift, but to ask ChatGPT&lt;/li&gt;
&lt;li&gt;first release and&lt;/li&gt;
&lt;li&gt;future plans&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can see screenshots or download it &lt;a href="https://apps.apple.com/de/app/yet-another-workoutlogger/id6484401597?l=en-GB&amp;amp;platform=iphone"&gt;here&lt;/a&gt;. It’s free, with no ads or registration needed.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>development</category>
      <category>ios</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
