-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.xml
249 lines (205 loc) · 21.3 KB
/
index.xml
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Home on all about apps</title>
<link>https://code.allaboutapps.at/</link>
<description>Recent content in Home on all about apps</description>
<generator>Hugo -- gohugo.io</generator>
<language>en-us</language>
<lastBuildDate>Thu, 23 Sep 2021 17:56:00 +0200</lastBuildDate><atom:link href="https://code.allaboutapps.at/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>About</title>
<link>https://code.allaboutapps.at/about/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://code.allaboutapps.at/about/</guid>
<description>All about apps is a market leader in the realisation of individual mobile solutions for industrial companies, financial service providers, commercial traders and medical organisations. We guide our partners from initial concepts right through to the end product.
Visit allaboutapps.at to learn more about us and our services.</description>
</item>
<item>
<title>Nested navigation with Getx</title>
<link>https://code.allaboutapps.at/articles/nested-navigation-with-getx/</link>
<pubDate>Thu, 23 Sep 2021 17:56:00 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/nested-navigation-with-getx/</guid>
<description>Nested navigation is a useful approach when navigation inside a screen is required or when the provided designs requires specific transitions to and from a dialog. This article will cover the basics for nested navigation in Flutter with the Getx framework.
Table of Contents Introduction Navigator Arguments State management Bottom navigation Problems Introduction Have you ever had the challenge to navigate on a screen while still showing the BottomNavigationBar or wanted to navigate inside a dialog?</description>
</item>
<item>
<title>Snapping behaviour in Epoxy Carousel and its pitfalls</title>
<link>https://code.allaboutapps.at/articles/custom-epoxy-carousel/</link>
<pubDate>Tue, 24 Mar 2020 12:32:36 +0100</pubDate>
<guid>https://code.allaboutapps.at/articles/custom-epoxy-carousel/</guid>
<description>During the development of one of our apps, we were tasked to develop a carousel view connected to a Google map in such a way that items displayed in the carousel would correspond to markers on the map. The details of the behaviour:
There is a selected element — one item, that is fully visible inside the carousel The carousel snaps to a newly selected element whenever we move it Once the selected item is chosen, we move the map to it’s corresponding map marker For the purpose of this article, we decided to skip the map entirely and simply display the information about the selected item outside the carousel.</description>
</item>
<item>
<title>Load Testing</title>
<link>https://code.allaboutapps.at/articles/load-testing/</link>
<pubDate>Wed, 11 Dec 2019 09:27:32 +0100</pubDate>
<guid>https://code.allaboutapps.at/articles/load-testing/</guid>
<description>Load testing is a crucial part in the final testing phase of a software product and should be done for every application where a large number of concurrent users is expected. Since there are plenty of tools available for this purpose, the main objective remains the same. It is important to recreate realistic user paths and scenarios in order to obtain meaningful results for bottleneck analysis. Most of the time it is not easy to find the layer which has the highest impact on performance since there are many components involved like network, database, application server and so forth.</description>
</item>
<item>
<title>Xcode Alternative Icons</title>
<link>https://code.allaboutapps.at/articles/xcode-alternative-icons/</link>
<pubDate>Mon, 23 Sep 2019 10:16:32 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/xcode-alternative-icons/</guid>
<description>Xcode beta season is over but it&rsquo;s still the time of the year where iOS developers usually have multiple Xcode version installed. Distinguishing one from another isn&rsquo;t easy if you have multiple identical icons in the dock and, like me, getting reminded by Xcode that your project&rsquo;s Swift version isn&rsquo;t compatible.
Alternative icons to the rescue! It&rsquo;s actually quite easy to change any app&rsquo;s icon in macOS. After opening the info panel of Xcode.</description>
</item>
<item>
<title>Proper Material Theming in a Multi-Module Setup</title>
<link>https://code.allaboutapps.at/articles/material-theming/</link>
<pubDate>Mon, 16 Sep 2019 09:57:26 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/material-theming/</guid>
<description>Basic Setup Recently an opportunity opened up for us to fully utilize a Material Theming &amp; Styling setup in one of our new projects. We took some time to dig into this topic and made a clean setup in order to prepare for a long-term running project. This article will describe the results and our learnings.
Let&rsquo;s start with the basic setup: as with all of our projects we use our A3AndroidTemplate as a starting point.</description>
</item>
<item>
<title>UIKonf 2019</title>
<link>https://code.allaboutapps.at/articles/uikonf2019/</link>
<pubDate>Wed, 03 Jul 2019 14:06:29 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/uikonf2019/</guid>
<description>UIKonf 2019 took place from May 26th to 29th in Berlin and is one of the largest iOS conferences in Europe. For us at all about apps it was the forth visit in a row and, as always, it was an awesome conference.
While the talks don&rsquo;t start until Monday, UIKonf always kicks off with a day of social events. These include a boat tour, guided tours through museums or the famous bike tour.</description>
</item>
<item>
<title>Force Android in App Updates</title>
<link>https://code.allaboutapps.at/articles/android-in-app-updates/</link>
<pubDate>Fri, 21 Jun 2019 09:45:12 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/android-in-app-updates/</guid>
<description><p>With the new <a href="https://developer.android.com/guide/app-bundle/playcore#include_playcore">Play Core Library</a> Google offers us the possibility to prompt for app updates from within our app for the first time. Users get informed about new available versions and can decide to update their app. If needed, we can even force the update altogether. The Google library itself handles the download and installation of the new app version.</p>
<p>There are two modes how an update can be triggered:</p>
<ul>
<li><em>Flexible</em>: The app update runs in the background. The User can continue using the app and the update will be applied when the user chooses to restart the app.</li>
<li><em>Immediate</em>: The user is forced to update the app and the app is unusable until the process is finished.</li>
</ul>
<p>The downside is, that the library itself is not able to detect if an update should be flexible or immediate. Sometimes it might be necessary to force users to update right away due to some breaking changes or unwanted crashes.</p>
<p>So we need to provide a way to decide between a flexible or immediate update. To simplify this process we published an Android library which allows us to decide on the type of update we need.</p>
<h5 id="who-decides-to-force-an-update">Who decides to force an update?</h5>
<p>The library offers an easy way to detect if an update should be forced. All we have to do is implement <code>ForceUpdateProvider</code> and call <code>doUpdate()</code> when we need to update right away.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-kotlin" data-lang="kotlin"><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">DemoForceUpdateProvider</span> : ForceUpdateProvider {
<span style="color:#66d9ef">override</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">requestUpdateShouldBeImmediate</span>(availableVersionCode: Int, doUpdate: () <span style="color:#f92672">-&gt;</span> Unit) {
<span style="color:#75715e">// place your logic here
</span><span style="color:#75715e"></span> <span style="color:#75715e">// obtain force update decision from your source eg Firebase Remote Config
</span><span style="color:#75715e"></span>
<span style="color:#75715e">// if a forced update is needed, just call doUpdate
</span><span style="color:#75715e"></span> doUpdate()
}
}
inAppUpdateManager = InAppUpdateManager(<span style="color:#66d9ef">this</span>, DemoForceUpdateProvider())</code></pre></div>
<p>There are a lot of possible sources to decide if an update should be forced. Examples are <code>Firebase Remote Config</code>, <code>File hosted on your server</code>, <code>Even/Odd available version code</code>, &hellip;</p>
<p>Since the forced-update screen that shows when we use this method can be closed through the back button, we need to override <code>onActivityResult</code> to keep showing the update again to achieve an actually blocking update mechanism.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-kotlin" data-lang="kotlin"><span style="color:#66d9ef">override</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">onActivityResult</span>(requestCode: Int, resultCode: Int, <span style="color:#66d9ef">data</span>: Intent?) {
inAppUpdateManager.onActivityResult(requestCode, resultCode)
<span style="color:#66d9ef">super</span>.onActivityResult(requestCode, resultCode, <span style="color:#66d9ef">data</span>)
}</code></pre></div>
<p>That&rsquo;s it. The end result looks like this:</p>
<p><img src="https://code.allaboutapps.at/images/in_app_update_optimized.gif" alt=""></p>
<p>The library is available on GitHub: <a href="https://github.com/allaboutapps/InAppUpdater">https://github.com/allaboutapps/InAppUpdater</a></p></description>
</item>
<item>
<title>Nodejs June Meetup</title>
<link>https://code.allaboutapps.at/articles/nodejs-june-meetup/</link>
<pubDate>Wed, 19 Jun 2019 08:48:46 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/nodejs-june-meetup/</guid>
<description>On the 4th of June we hosted the NodeJS June Meetup in our CreatePlayground office, with 3 presentations and ongoing discussions about various topics.
The first talk with the title Private registry with Verdaccio was given by Juan Picado, follwed by a Lightning Talk about Fun with Time Zones by our Gottfried Chen. The last talk was held by Juho Vepsäläinen about JavaScript - Quo Vadis
Related questions and notes about the talks as well as conversations about other NodeJS related topics have been discussed afterwards and we are already looking forward to host the next one.</description>
</item>
<item>
<title>iOS Coordinators</title>
<link>https://code.allaboutapps.at/articles/ios-coordinator/</link>
<pubDate>Tue, 14 May 2019 10:00:00 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/ios-coordinator/</guid>
<description><p>In our apps, we use the <a href="https://www.objc.io/issues/13-architecture/mvvm/">MVVM (Model-View-ViewModel)</a> approach.
This concept manages the interaction within a view controller, but who manages the view controllers?</p>
<h1 id="the-coordinator">The Coordinator!</h1></description>
</item>
<item>
<title>Android Jetpack Navigation Pitfalls & Tricks</title>
<link>https://code.allaboutapps.at/articles/android-jetpack-navigation-pitfalls/</link>
<pubDate>Tue, 07 May 2019 10:03:39 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/android-jetpack-navigation-pitfalls/</guid>
<description>Table of content Send Args to fragments within activities Use startActivityForResult with the Navigation library Use generic naming for action names Reuse fragments in multiple navigation graphs TLDR Further readings Navigation library from Jetpack offers a great variety of helpful tools, especially with the SafeArgs extension. My last project contained many different navigation flows paired with a large number of screens, so I decided to try the new navigation library which had just reached a stable release.</description>
</item>
<item>
<title>Fun With Time Zones Part 1</title>
<link>https://code.allaboutapps.at/articles/fun-with-time-zones-pt1/</link>
<pubDate>Thu, 04 Apr 2019 14:36:09 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/fun-with-time-zones-pt1/</guid>
<description>In our daily jobs as programmers we tackle coding challenges and abstract them in algorithms and functions, happy when we find an elegant solutions to a tricky problem. We find comfort in dealing with easily understandable, deterministic and logical concepts.
Time is NOT one of them. And that’s a big problem. We are so used logical terms, that we try to apply our thinking to the concept of time as well.</description>
</item>
<item>
<title>Reactive Swift: Progress HUD Extension and Order of Events</title>
<link>https://code.allaboutapps.at/articles/reactive-swift-events-order/</link>
<pubDate>Thu, 28 Mar 2019 11:00:00 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/reactive-swift-events-order/</guid>
<description>A blocking progress HUD to show a network or any other asynchronous activity may not be the most elegant solution, but sometimes it just gets the job done. Using ReactiveSwift you can use a SignalProducer extension to quickly show &amp; hide a HUD for any reactive operation:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 extension SignalProducer { public func bindToProgressHUD(_ viewDelay: Double = 0.</description>
</item>
<item>
<title>Cocoaheads @ all about apps</title>
<link>https://code.allaboutapps.at/articles/cocoaheads/</link>
<pubDate>Tue, 26 Feb 2019 11:30:08 +0100</pubDate>
<guid>https://code.allaboutapps.at/articles/cocoaheads/</guid>
<description>Last Thursday we hosted the 109th edition of Cocoaheads Austria in our office and more than 30 local iOS and Mac developers showed up. Cocoaheads is a monthly meetup and always hosted at a different location, usually by local development companies here in Vienna.
Michael Heinzl and myself, Matthias Buchetics, gave the main talk about App Architecture at all about apps before Peter Steinberger talked about Swizzling. Our own Gunter Hager then closed with a fun presentation of Emoji Flags before we had some great conversations with food &amp; drinks.</description>
</item>
<item>
<title>Advanced Pagination With Epoxy & Datasources</title>
<link>https://code.allaboutapps.at/articles/advanced-pagination-with-epoxy/</link>
<pubDate>Thu, 14 Feb 2019 10:30:11 +0100</pubDate>
<guid>https://code.allaboutapps.at/articles/advanced-pagination-with-epoxy/</guid>
<description>Many developers still avoid using Epoxy. I even hesitated for a long time because of the boilerplate coming a long with epoxy and its models, but after reading this post at the latest, you may consider using epoxy, when paging is needed.
So in this post we gonna build pagination with the jetpack‘s paging library, and epoxy, which has an own controller for paging.
We gonna use reddit as our api, by simply adding .</description>
</item>
<item>
<title>Emoji Flags</title>
<link>https://code.allaboutapps.at/articles/emoji-flags/</link>
<pubDate>Wed, 23 Jan 2019 10:01:25 +0100</pubDate>
<guid>https://code.allaboutapps.at/articles/emoji-flags/</guid>
<description>Sometimes there&rsquo;s the need to fly a flag in your project. You probably know the ISO code, more specifically the ISO 3166-1 alpha-2 code, a.k.a two-letter code. For Austria this would be AT. Now when thinking about converting these codes into emoji flags, a lookup table comes to mind. But instead of jumping straight into implementing the table it&rsquo;s time to take a closer look at the Unicode Standard. The clever people that added the flag emojis to the Unicode character set invented a system of specifying the flags that makes an algorithmic conversion without lookup tables quite easy.</description>
</item>
<item>
<title>Drawing Smooth 2D Graphs using UIBezierPath</title>
<link>https://code.allaboutapps.at/articles/smooth-graph-lines/</link>
<pubDate>Mon, 26 Nov 2018 21:12:27 +0100</pubDate>
<guid>https://code.allaboutapps.at/articles/smooth-graph-lines/</guid>
<description>We have been working on multiple projects that required drawing 2D line graphs given a set of points. UIKit gives us the versatile UIBezierPath, which allows us to create a straight line graph by appending segments using addLineToPath for each point in our array. Easy, but not really pretty.
There are two different kinds of curves in UIBezierPath: quadratic curves with a single control point (addQuadCurveToPoint) and cubic curves with two control points (addCurveToPoint).</description>
</item>
<item>
<title>TimingLogger</title>
<link>https://code.allaboutapps.at/articles/timing-logger/</link>
<pubDate>Wed, 03 Oct 2018 16:02:48 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/timing-logger/</guid>
<description>TimingLogger Sometimes developers needs to analyze performance of a small friction of code. Maybe a RecyclerView is not scrolling smoothly or a calculation needs too much time, we have to split it up and try to find the line or block that runs inefficently. We all know to get a smooth user experience we only have 16ms for each frame to render. So it is very important to locate and optimize inefficient code.</description>
</item>
<item>
<title>Android Template Project</title>
<link>https://code.allaboutapps.at/articles/android-template-project/</link>
<pubDate>Tue, 25 Sep 2018 16:01:48 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/android-template-project/</guid>
<description>Team Android Project Template As a software development company we are starting new projects every few weeks. With every project we create a jira ticket called Project Setup.
We walked through all our Project Setup Jira tickets and calculated the average hours for this kind of task: In average every android project needs about 3.5 hours for a simple setup. On the other hand the project setup is boring and no developer likes that work.</description>
</item>
<item>
<title>Reactive Swift: Access Control for Mutable Properties</title>
<link>https://code.allaboutapps.at/articles/reactive-swift-properties/</link>
<pubDate>Tue, 17 Jul 2018 11:50:28 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/reactive-swift-properties/</guid>
<description>Swift&rsquo;s access control allows us to define separate access levels for the getter and setter of a property. This is nice if we want to provide read access to a property but should only be able to modify it internally:
private(set) var isLoading = false When using ReactiveSwift (or similarly RxSwift) you usually work with MutableProperty. In order to limit modification of the property&rsquo;s value we can create a private writable MutableProperty and a public read-only Property:</description>
</item>
<item>
<title>Reactive Swift: flatMap, flatten and combineLatest</title>
<link>https://code.allaboutapps.at/articles/reactive-swift-flatmap/</link>
<pubDate>Tue, 17 Jul 2018 11:50:28 +0200</pubDate>
<guid>https://code.allaboutapps.at/articles/reactive-swift-flatmap/</guid>
<description>Most of our projects at all about apps are build using a MVVM architecture with ReactiveSwift as our reactive framework of choice. However, all code examples should be easily translatable to RxSwift.
Often, you end up with an array of objects (e.g. View Models) which contain some reactive property that you want to bind to. The array itself is a MutableProperty as well and can change at any time (e.g. after a network request).</description>
</item>
</channel>
</rss>