-
Notifications
You must be signed in to change notification settings - Fork 0
/
feed.rss
168 lines (156 loc) · 48.2 KB
/
feed.rss
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Alberto Cantallops</title><description>Alberto Cantallops Website</description><link>https://acantallops.com</link><language>en</language><lastBuildDate>Tue, 20 Jun 2023 09:15:12 +0000</lastBuildDate><pubDate>Tue, 20 Jun 2023 09:15:12 +0000</pubDate><ttl>250</ttl><atom:link href="https://acantallops.com/feed.rss" rel="self" type="application/rss+xml"/><item><guid isPermaLink="true">https://acantallops.com/about/work/santevet</guid><title>Santevet</title><description>Mobile Tech Leader and Senior iOS Developer</description><link>https://acantallops.com/about/work/santevet</link><pubDate>Fri, 9 Sep 2022 00:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="santevet">Santevet</h1><h3 class="dark:text-gray-100 text-gray-900 text-lg sm:text-2xl md:text-3xl font-semibold mb-2 mt-6" id="stack">Stack</h3><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">SwiftUI, UIKit, MVVM, Accessibility, CI/CD, SPM, Firebase, Cocoapods, Datadog, Bitrise</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="-mobile-tech-leader-and-senior-ios-developer<subheading>september-2022---current</subheading>"> Mobile Tech Leader and Senior iOS Developer<span class="font-bold text-sm text-gray-500 dark:text-gray-400 block">September 2022 - current</span></h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Teach lead of three mobile developers (2 Android and 1 iOS developers). Also help developing in the iOS side. Working remotely and attending the office around 2 days a month.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Improve processes, delivery time in the team. Moving from UIKit to SwiftUI</p>]]></content:encoded></item><item><guid isPermaLink="true">https://acantallops.com/articles/swiftui-neon-style</guid><title>Neon style in SwiftUI</title><description>How to do neon effect in SwiftUI.</description><link>https://acantallops.com/articles/swiftui-neon-style</link><pubDate>Mon, 22 Nov 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="neon-style-in-swiftui">Neon style in SwiftUI</h1><pre><code><span class="keyword">struct</span> NeonStyle: <span class="type">ViewModifier</span> {
<span class="keyword">let</span> color: <span class="type">Color</span>
<span class="keyword">func</span> body(content: <span class="type">Content</span>) -> <span class="keyword">some</span> <span class="type">View</span> {
content
.<span class="call">foregroundColor</span>(color).<span class="call">brightness</span>(<span class="number">0.3</span>)
.<span class="call">shadow</span>(color: color, radius: <span class="number">10</span>, x: <span class="number">0</span>, y: <span class="number">0</span>)
}
}
<span class="keyword">extension</span> <span class="type">View</span> {
<span class="keyword">func</span> neon(color: <span class="type">Color</span>) -> <span class="keyword">some</span> <span class="type">View</span> {
<span class="call">modifier</span>(<span class="type">NeonStyle</span>(color: color))
}
}
<span class="comment">/* Usage */</span>
<span class="type">Label</span>(<span class="string">"Neon effect"</span>, systemImage: <span class="string">"bolt.fill"</span>)
.<span class="call">font</span>(.<span class="call">system</span>(.<span class="dotAccess">largeTitle</span>, design: .<span class="dotAccess">rounded</span>))
.<span class="call">neon</span>(color: .<span class="dotAccess">yellow</span>)
.<span class="call">padding</span>()
.<span class="call">padding</span>()
.<span class="call">overlay</span>(
<span class="type">RoundedRectangle</span>(cornerRadius: <span class="number">8</span>)
.<span class="call">stroke</span>(lineWidth: <span class="number">4</span>)
.<span class="call">neon</span>(color: .<span class="dotAccess">yellow</span>)
)
</code></pre>]]></content:encoded></item><item><guid isPermaLink="true">https://acantallops.com/articles/publish-series/deploy-a-publish-website-in-github</guid><title>Deploy a Publish website in GitHub</title><description>How to deploy a Publish website in GitHub using Github Pages and Actions</description><link>https://acantallops.com/articles/publish-series/deploy-a-publish-website-in-github</link><pubDate>Sun, 14 Nov 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="deploy-a-publish-website-in-github">Deploy a Publish website in GitHub</h1><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">This is part of <a href="https://acantallops.com/articles/publish-series/" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50">Publish Posts Series</a>.</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="create-the-repositories--">Create the repositories </h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">It's possible to just use one repository to act a the publisher and also the one that serves the pages. But in order to use a private repo for the publisher, this article will walk you through the creation of two repos, one for the publisher and another to host the html files.</p><h3 class="dark:text-gray-100 text-gray-900 text-lg sm:text-2xl md:text-3xl font-semibold mb-2 mt-6" id="repo-to-host-the-website">Repo to host the website</h3><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Go to <a href="https://docs.github.com/en/get-started/quickstart/create-a-repo" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener">Github and create a repo <svg class="stroke-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" role="img"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a> as Public. Let's call it MyWebsite.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Activate <a href="https://docs.github.com/en/pages" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener">Github Pages <svg class="stroke-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" role="img"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a> under <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">Settings > Pages > Source</code> select the branch, probably <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">main</code>, and then use <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">/(root)</code>.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Make sure you are using HTTPS and assign your custom domain if you have one.</p><h3 class="dark:text-gray-100 text-gray-900 text-lg sm:text-2xl md:text-3xl font-semibold mb-2 mt-6" id="repo-to-store-your-publisher">Repo to store your publisher</h3><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Go to Github and <a href="https://docs.github.com/en/get-started/quickstart/create-a-repo" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener">create a repo <svg class="stroke-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" role="img"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a> as Private. Let's call it MyWebsite-Publisher.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">In this repo all the code, except for the <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">Output</code> folder, should be committed.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">From now on, all the changes should only be committed in this repo. The other one will be automatically updated by the Github Action.</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="setup-github-action-to-automatically-publish-new-changes">Setup Github Action to automatically publish new changes</h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">First, you'll need <a href="https://github.com/settings/tokens" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener"><svg class="fill-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" stroke="none" role="img"> <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> create a Personal Access Token</a> (<code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">PAT</code>) with <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">public_repo</code> and <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">repo_deployment</code> rights. You'll find it under <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">Settings > Developer Settings > Personal Access Tokens</code> in your profile, not the repo.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Once you obtained the <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">PAT</code> go to MyWebsite-Publisher and add it as a secret named <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">PAT_TOKEN</code>. You'll find the secrets in <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">Settings > Secrets</code>.</p><div class="h-px my-2 sm:my-4 md:my-6 bg-gray-200 dark:bg-gray-800 w-full"></div><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Now you'll need to create the action. In order to do that on the root folder of MyWebsite-Publisher repo, create this folder tree <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">.github/workflows/</code>.</p><pre><code class="language-shell">$ mkdir .github
$ cd .github
$ mkdir workflows
$ cd workdlows
</code></pre><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Then in <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">.github/workflows/</code> create a yaml file (let's name it <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">deploy.yml</code>) and include the following:</p><pre><code class="language-yaml">name: Deploy Github Pages
on:
push:
branches:
- main
jobs:
gh-pages:
runs-on: ubuntu-latest
container:
image: "swift:5.4"
steps:
- name: Checkout 🛎️
uses: actions/checkout@v1
- name: Install Publish 📚
run: |
git clone https://github.com/JohnSundell/Publish.git
cd Publish
make
# Needed for JamesIves/github-pages-deploy-action@4.1.5
- name: Install rsync 📚
run: |
apt-get update && apt-get install -y rsync
- name: Generate Site 🏗
run: |
publish generate
- name: Deploy 🚀
uses: JamesIves/github-pages-deploy-action@4.1.5
with:
branch: main
folder: ./Output
target-folder: ./
token: ${{ secrets.PAT_TOKEN }}
repository-name: <YOUR_GITHUB_HANDLE>/MyWebsite
</code></pre><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">After that commit all the local changes and push it to Github repo. In the tab <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">Actions</code> will show that an action is running and when finished MyWebsite repo should be updated and deploying your website.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://acantallops.com/articles/swiftui-infinity-animations</guid><title>Infinite animations in SwiftUI</title><description>Creating infinite animation in SwiftUI it's really easy.</description><link>https://acantallops.com/articles/swiftui-infinity-animations</link><pubDate>Sun, 7 Nov 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="infinite-animations-in-swiftui">Infinite animations in SwiftUI</h1><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">SwiftUI gives a powerful API to create custom animations, but it isn't obvious how to create animations that loop indefinitely.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">First, create a green dot. An small implementation could be like the following:</p><pre><code><span class="keyword">struct</span> OnlineIndicator: <span class="type">View</span> {
<span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {
<span class="type">Circle</span>()
.<span class="call">foregroundColor</span>(.<span class="dotAccess">green</span>)
}
}
</code></pre><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">To make the blinking effect it is possible to use the <strong>opacity</strong> of the view:</p><pre><code><span class="keyword">struct</span> OnlineIndicator: <span class="type">View</span> {
<span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {
<span class="type">Circle</span>()
<span class="border rounded-md px-1 -mx-1 pb-0.5 border-yellow-300 inline-block">.<span class="call">opacity</span>(<span class="number">0.2</span>)</span>
.<span class="call">foregroundColor</span>(.<span class="dotAccess">green</span>)
}
}
</code></pre><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">But this just gives a semi-transparent green dot. What it needs is to go from <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">0.2</code> to <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">1.0</code> first. In order to accomplish that add an opacity state variable that holds the value and <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">onAppear</code> change it to <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">1.0</code>:</p><pre><code><span class="keyword">struct</span> OnlineIndicator: <span class="type">View</span> {
<span class="border rounded-md px-1 -mx-1 pb-0.5 border-yellow-300 inline-block"><span class="keyword">@State private var</span> opacity: <span class="type">CGFloat</span> = <span class="number">0.2</span></span>
<span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {
<span class="type">Circle</span>()
.<span class="call">opacity</span>(<span class="border rounded-md px-1 -mx-1 pb-0.5 border-yellow-300 inline-block">opacity</span>)
.<span class="call">foregroundColor</span>(.<span class="dotAccess">green</span>)
<span class="border rounded-md px-1 -mx-1 pb-0.5 border-yellow-300 inline-block">.<span class="call">onAppear</span>(perform: { opacity = <span class="number">1</span> })</span>
}
}
</code></pre><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Now the green dot goes from <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">0.2</code> to <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">1.0</code> but there's no animation at all, so this happens instantaneously, making it look like it didn't happen. To show this transition smoothly and with animation, add the animation modifier associated with the value that's being modified to prevent weird animations.</p><pre><code><span class="keyword">struct</span> OnlineIndicator: <span class="type">View</span> {
<span class="keyword">@State private var</span> opacity: <span class="type">CGFloat</span> = <span class="number">0.2</span>
<span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {
<span class="type">Circle</span>()
.<span class="call">opacity</span>(opacity)
.<span class="call">foregroundColor</span>(.<span class="dotAccess">green</span>)
<span class="border rounded-md px-1 -mx-1 pb-0.5 border-yellow-300 inline-block">.<span class="call">animation</span>(.<span class="call">easeInOut</span>(duration: <span class="number">1</span>), value: opacity)</span>
.<span class="call">onAppear</span>(perform: { opacity = <span class="number">1</span> })
}
}
</code></pre><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">This solution will animate just once and it'll stop. So it isn't finished yet. Thanks to SwiftUI's animation API, views can get an infinite animation just by adding <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">.repeatForever()</code> to the animation.</p><pre><code><span class="keyword">struct</span> OnlineIndicator: <span class="type">View</span> {
<span class="keyword">@State private var</span> opacity: <span class="type">CGFloat</span> = <span class="number">0.2</span>
<span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {
<span class="type">Circle</span>()
.<span class="call">opacity</span>(opacity)
.<span class="call">foregroundColor</span>(.<span class="dotAccess">green</span>)
.<span class="call">animation</span>(
.<span class="call">easeInOut</span>(duration: <span class="number">1</span>)<span class="border rounded-md px-1 -mx-1 pb-0.5 border-yellow-300 inline-block">.<span class="call">repeatForever</span>()</span>,
value: opacity
)
.<span class="call">onAppear</span>(perform: { opacity = <span class="number">1</span> })
}
}
</code></pre><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">With this, the green dot now breathes in and out. But still there are improvements to make, like abstracting the opacity animation logic as a view modifier:</p><pre><code><span class="comment">/* BlinkAnimation.swift */</span>
<span class="keyword">struct</span> BlinkAnimation: <span class="type">ViewModifier</span> {
<span class="keyword">@State private var</span> opacity: <span class="type">CGFloat</span> = <span class="number">0.2</span>
<span class="keyword">func</span> body(content: <span class="type">Content</span>) -> <span class="keyword">some</span> <span class="type">View</span> {
content
.<span class="call">opacity</span>(opacity)
.<span class="call">animation</span>(
.<span class="call">easeInOut</span>(duration: <span class="number">1</span>).<span class="call">repeatForever</span>(),
value: opacity
)
.<span class="call">onAppear</span>(perform: { opacity = <span class="number">1</span> })
}
}
<span class="keyword">extension</span> <span class="type">View</span> {
<span class="keyword">func</span> blink() -> <span class="keyword">some</span> <span class="type">View</span> {
<span class="call">modifier</span>(<span class="type">BlinkAnimation</span>())
}
}
<span class="comment">/* OnlineIndicator.swift */</span>
<span class="keyword">struct</span> OnlineIndicator: <span class="type">View</span> {
<span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {
<span class="type">Circle</span>()
.<span class="call">blink</span>()
.<span class="call">foregroundColor</span>(.<span class="dotAccess">green</span>)
}
}
</code></pre>]]></content:encoded></item><item><guid isPermaLink="true">https://acantallops.com/articles/publish-series/build-a-static-website-using-publish</guid><title>Build a website using Publish</title><description>How to build a static website using the Publish library in Swift by Sundell.</description><link>https://acantallops.com/articles/publish-series/build-a-static-website-using-publish</link><pubDate>Mon, 1 Nov 2021 12:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="build-a-website-using-publish">Build a website using Publish</h1><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">This is part of <a href="https://acantallops.com/articles/publish-series/" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50">Publish Posts Series</a>.</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="what's-a-static-website?">What's a static website?</h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">A static website delivers its content as it's stored. That means there's no backend/server that process the request in any special way to build the HTML. This can improve performance in displaying the website.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">This kind of website is suited for content that rarely changes or for blogging, documentation or similar that doesn't need dynamic features.</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="what's-publish?">What's Publish?</h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300"><a href="https://github.com/JohnSundell/Publish" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener"><svg class="fill-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" stroke="none" role="img"> <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> Publish</a> is a static web generator built in Swift by <a href="https://swiftbysundell.com" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener">Jonh Sundell <svg class="stroke-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" role="img"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">It uses Swift programming features like DSL to generate the static website. It comes with a default theme that's focused on blogging. The content is created in markdown files that Publish converts using the theme into static HTML pages.</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="how-to-set-up-publish?">How to set up Publish?</h2><h3 class="dark:text-gray-100 text-gray-900 text-lg sm:text-2xl md:text-3xl font-semibold mb-2 mt-6" id="installation">Installation</h3><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">First of all, it's necessary to install Publish, clone the repo and run <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">$ make</code> as shown below.</p><pre><code>$ git clone https://github.com/JohnSundell/Publish.git
$ cd Publish
$ make
</code></pre><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Once this completes successfully, it's time to create the website. To do that let's create a folder with the name of the website and open it. Once is open run <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">$ publish new</code>.</p><pre><code>$ mkdir MyWebsite
$ cd MyWebsite
$ publish new
</code></pre><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Now all the files necessary for building your website are in place. Now open the website in Xcode using <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">$ open Package.swift</code>.</p><h3 class="dark:text-gray-100 text-gray-900 text-lg sm:text-2xl md:text-3xl font-semibold mb-2 mt-6" id="locally-run">Locally run</h3><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">To check that everything runs smoothly on the terminal in the root folder of your website, run <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">$ publish run</code>. This will create a local server that runs it in <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">http://localhost:8000</code>.</p><h3 class="dark:text-gray-100 text-gray-900 text-lg sm:text-2xl md:text-3xl font-semibold mb-2 mt-6" id="some-must-do-changes">Some must do changes</h3><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Go back to Xcode and open <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">main.swift</code> file, you'll find this:</p><pre><code><span class="keyword">var</span> url = <span class="type">URL</span>(string: <span class="string">"http://localhost:8000"</span>)!
<span class="keyword">var</span> name = <span class="string">"MyWebsite"</span>
<span class="keyword">var</span> description = <span class="string">"MyWebsite Website"</span>
</code></pre><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">If you are going to deploy this online it'll be necessary to change the URL for the one you are using. Also, the <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">name</code> and <code class="text-gray-800 dark:text-gray-400 border-gray-200 dark:border-gray-800 px-1 py-0.5 bg-gray-100 dark:bg-gray-900 border rounded-md">description</code> may need to be change to something more meaningful.</p><div class="h-px my-2 sm:my-4 md:my-6 bg-gray-200 dark:bg-gray-800 w-full"></div><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Refer to the <a href="https://github.com/JohnSundell/Publish" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener"><svg class="fill-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" stroke="none" role="img"> <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> GitHub project</a> for more accurate setup process and troubleshooting.</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="where-to-deploy-publish?">Where to deploy Publish?</h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">There's a bunch of places where a static website can be deployed. Some of the even for free.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">This particular website is hosted using <a href="https://pages.github.com" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener">Github Pages <svg class="stroke-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" role="img"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Other alternatives, but not limited to, are <a href="https://www.netlify.com/" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener">Netlify <svg class="stroke-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" role="img"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>, <a href="https://aws.amazon.com/s3/" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener">Amazon S3 <svg class="stroke-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" role="img"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>, and <a href="https://render.com" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener">Render <svg class="stroke-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" role="img"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a>.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://acantallops.com/about/side-project/website</guid><title>This web</title><description>A personal blog/website</description><link>https://acantallops.com/about/side-project/website</link><pubDate>Fri, 1 Oct 2021 00:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="-this-web"> This web</h1><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300"><a href="https://github.com/Cantallops/cantallops.github.io" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener"><svg class="fill-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" stroke="none" role="img"> <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> Github repo</a></p>]]></content:encoded></item><item><guid isPermaLink="true">https://acantallops.com/about/side-project/surroundit</guid><title>SurroundIt Game</title><description>An iOS game based in a Japanese table top game using SwiftUI</description><link>https://acantallops.com/about/side-project/surroundit</link><pubDate>Thu, 1 Jul 2021 00:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="-surroundit-game"> SurroundIt Game</h1><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">An iOS game based in a Japanese table top game using SwiftUI.</p><div class="grid grid-cols-1 sm:grid-cols-3 gap-4 my-4">
<img class="block dark:hidden" alt="Homescreen of the app" src="https://acantallops.com/images/side-project/surroundit/screenshots/homescreen.png">
<img class="dark:block hidden" alt="Homescreen of the app" src="https://acantallops.com/images/side-project/surroundit/screenshots/homescreen_dark.png">
<img class="block dark:hidden" alt="Gameplay" src="https://acantallops.com/images/side-project/surroundit/screenshots/playing.png">
<img class="dark:block hidden" alt="Gameplay" src="https://acantallops.com/images/side-project/surroundit/screenshots/playing_dark.png">
<img class="block dark:hidden" alt="Pause gameplay" src="https://acantallops.com/images/side-project/surroundit/screenshots/pause.png">
<img class="dark:block hidden" alt="Pause gameplay" src="https://acantallops.com/images/side-project/surroundit/screenshots/pause_dark.png">
</div>]]></content:encoded></item><item><guid isPermaLink="true">https://acantallops.com/about/work/trifork</guid><title>Trifork</title><description>iOS Engineer</description><link>https://acantallops.com/about/work/trifork</link><pubDate>Wed, 14 Apr 2021 00:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="trifork">Trifork</h1><h3 class="dark:text-gray-100 text-gray-900 text-lg sm:text-2xl md:text-3xl font-semibold mb-2 mt-6" id="stack">Stack</h3><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">SwiftUI, UIKit, MVVM, Clean architecture, CI/CD, SPM, Firebase, Cocoapods</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="senior-ios-developer<subheading>april-2021---september-2022</subheading>">Senior iOS Developer<span class="font-bold text-sm text-gray-500 dark:text-gray-400 block">April 2021 - September 2022</span></h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Develop new native iOS apps and maintain existing ones from a Body Measurement app to a Banking app. Work in a remote/distributed teams across Europe.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://acantallops.com/about/side-project/lighterpack</guid><title>Lighterpack</title><description>An iOS client for Lighterpack website</description><link>https://acantallops.com/about/side-project/lighterpack</link><pubDate>Sun, 1 Nov 2020 00:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="-lighterpack"> Lighterpack</h1><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">An iOS client for <a href="https://lighterpack.com/signin" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener">Lighterpack website <svg class="stroke-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" role="img"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a></p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300"><a href="https://github.com/Cantallops/Lighterpack" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener"><svg class="fill-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" stroke="none" role="img"> <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> Github repo</a></p><div class="grid grid-cols-1 sm:grid-cols-3 gap-4 my-4">
<img class="block dark:hidden" alt="Homescreen of the app" src="https://acantallops.com/images/side-project/lighterpack/screenshots/home.png">
<img class="dark:block hidden" alt="Homescreen of the app" src="https://acantallops.com/images/side-project/lighterpack/screenshots/home_dark.png">
<img class="block dark:hidden" alt="Item list" src="https://acantallops.com/images/side-project/lighterpack/screenshots/itemlist.png">
<img class="dark:block hidden" alt="Item list" src="https://acantallops.com/images/side-project/lighterpack/screenshots/itemlist_dark.png">
<img class="block dark:hidden" alt="Settings" src="https://acantallops.com/images/side-project/lighterpack/screenshots/settings.png">
<img class="dark:block hidden" alt="Settings" src="https://acantallops.com/images/side-project/lighterpack/screenshots/settings_dark.png">
</div><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300"><a href="https://www.vecteezy.com/free-vector/feather-icon" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener">Feather Icon Vectors by Vecteezy <svg class="stroke-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" role="img"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a></p>]]></content:encoded></item><item><guid isPermaLink="true">https://acantallops.com/about/work/mercari</guid><title>Mercari</title><description>Started as an iOS Engineer and became iOS Tech Lead and iOS Architect</description><link>https://acantallops.com/about/work/mercari</link><pubDate>Thu, 1 Nov 2018 00:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="mercari">Mercari</h1><h3 class="dark:text-gray-100 text-gray-900 text-lg sm:text-2xl md:text-3xl font-semibold mb-2 mt-6" id="stack">Stack</h3><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">SwiftUI, UIKit, Combine, Reducer based architecture, Accessibility, CI/CD, SPM, Firebase</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="ios-developer-in-architecture-team<subheading>september-2020---april-2021</subheading>">iOS Developer in Architecture Team<span class="font-bold text-sm text-gray-500 dark:text-gray-400 block">September 2020 - April 2021</span></h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Change teams to have a broader impact on the company. I joined the Architecture Team to work on CI/CD, dev tools and the foundation of the next-gen iOS apps for the company.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Help to build the new architecture using SwiftUI and Combine. Also make sure all the design system components follow accessibility requirements through code.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Worked in Dev experience and QA experience introducing tool for internal builds so feature flags and other settings to help develop and test the apps.</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="tech-lead-ios-developer<subheading>july-2019---september-2020</subheading>">Tech Lead iOS Developer<span class="font-bold text-sm text-gray-500 dark:text-gray-400 block">July 2019 - September 2020</span></h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">While maintaining the same tasks as in the previous position also got the responsibility in technical decisions to improve and maintain the codebase quality of features related to user onboarding flows.</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="ios-developer<subheading>november-2018---june-2019</subheading>">iOS Developer<span class="font-bold text-sm text-gray-500 dark:text-gray-400 block">November 2018 - June 2019</span></h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Developer in Mercari Japan iOS App and also one of the main devs in the development of eKYC to improve the user experience to use Merpay.</p>]]></content:encoded></item><item><guid isPermaLink="true">https://acantallops.com/about/side-project/phantom</guid><title>Phantom</title><description>An iOS client for Ghost CMS</description><link>https://acantallops.com/about/side-project/phantom</link><pubDate>Sun, 1 Jul 2018 00:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="-phantom"> Phantom</h1><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">An iOS client for <a href="https://ghost.org" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener">Ghost CMS <svg class="stroke-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" role="img"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" /></svg></a></p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300"><a href="https://github.com/Cantallops/Phantom" target="_blank" class="text-red-600 dark:text-red-400 border-b border- border-red-600 dark:border-red-400 transition font-medium hover:opacity-50" rel="noopener"><svg class="fill-current icon inline-icon" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" stroke="none" role="img"> <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> Github repo</a></p>]]></content:encoded></item><item><guid isPermaLink="true">https://acantallops.com/about/work/habitissimo</guid><title>Habitissimo</title><description>Started as an iOS Engineer to Mobile Team leader</description><link>https://acantallops.com/about/work/habitissimo</link><pubDate>Fri, 1 Jul 2016 00:00:00 +0000</pubDate><content:encoded><![CDATA[<h1 class="dark:text-gray-100 text-gray-900 text-3xl sm:text-4xl md:text-5xl font-semibold mb-6 mt-6" id="habitissimo">Habitissimo</h1><h3 class="dark:text-gray-100 text-gray-900 text-lg sm:text-2xl md:text-3xl font-semibold mb-2 mt-6" id="stack">Stack</h3><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">UIKit, Viper, CI/CD w/ Jenkins, Firebase, Cocoapods, Fastlane</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="-mobile-team-leader-and-ios-developer<subheading>november-2017---september-2018</subheading>"> Mobile Team Leader and iOS Developer<span class="font-bold text-sm text-gray-500 dark:text-gray-400 block">November 2017 - September 2018</span></h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">The developer of native apps for iOS as in the previous position and the team leader of three mobile developers (2 Android and 1 iOS developers).</p><h2 class="dark:text-gray-100 text-gray-900 text-2xl sm:text-3xl md:text-4xl font-semibold mb-2 mt-6" id="ios-developer<subheading>july-2016---november-2017</subheading>">iOS Developer<span class="font-bold text-sm text-gray-500 dark:text-gray-400 block">July 2016 - November 2017</span></h2><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">Developed native applications for iOS devices in Objective-C and Swift, using our libraries and third-party libraries. Performing Unit Tests and UI Tests and version control with Git and CI using GitLab and Fastlane.</p><p class="block leading-normal mb-4 text-gray-700 dark:text-gray-300">The apps started as a Objective-C so I took the challenge to move to Swift and in the meantime improve the % of crash-free users from 95% to 99%.</p>]]></content:encoded></item></channel></rss>