<?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 Gil Goldstein on Medium]]></title>
        <description><![CDATA[Stories by Gil Goldstein on Medium]]></description>
        <link>https://medium.com/@gilg?source=rss-af537a57f12f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*49mJ0Y_HV6UI28SD.jpeg</url>
            <title>Stories by Gil Goldstein on Medium</title>
            <link>https://medium.com/@gilg?source=rss-af537a57f12f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 16 May 2026 01:59:46 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@gilg/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[How to fix disappearing UI elements in iOS app development]]></title>
            <link>https://medium.com/@gilg/how-to-fix-disappearing-ui-elements-in-ios-app-development-fcd2bafe0886?source=rss-af537a57f12f------2</link>
            <guid isPermaLink="false">https://medium.com/p/fcd2bafe0886</guid>
            <category><![CDATA[storyboard]]></category>
            <category><![CDATA[xcode]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[Gil Goldstein]]></dc:creator>
            <pubDate>Mon, 14 Aug 2017 11:36:38 GMT</pubDate>
            <atom:updated>2017-08-14T11:36:38.441Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>Disclaimer: I am not a pro iOS developer, I am just a beginner. I came across this issue and could not find a solution due to the vague description of the problem. I am sharing the solution that worked for me in the hopes it can help others.</blockquote><h4>The Issue</h4><p>As I was working on my first iOS app, I came across a weird problem. I have barely implemented anything, just a few ViewControllers, TableView and a few other UI elements.</p><p>When I was running the app, I noticed that sometimes, texts would disappear from buttons, labels and TableView cells.</p><h4>The Search for answers</h4><p>This issue appeared random and I could not find a single thing that would cause it in my code.</p><p>After some digging around the Internet, I found a few people who reported some UI issues but not like what I was experiencing. Even though the issues described were different, I attempted the proposed solutions — fixing some UIConstraints, removing and re-adding elements from Storyboard and removing and re-adding @IBOutlets.</p><p>That did not fix my issue.</p><h4>The Solution</h4><p>In a desperate move, I decided to delete my Storyboard and create a new one, not before selecting all elements within it and hitting Command-X to cut them and then paste everything back to the new board.</p><p>Then I just reconnected the outlets and re-added all my custom Classes to the elements.</p><p>I ran the app again and MAGIC!</p><p>Everything was working fine!</p><h4>The Lesson</h4><p>I don’t know exactly what screwed up my Storyboard, maybe I was deleting and renaming things in the wrong way, maybe it was just Xcode messing with me. Whatever the cause, my point in this blog post is that keep in mind that if you are working with Storyboards, you don’t always see what’s going on behind the scenes. And if you encounter issues, especially UI issues, and you don’t see a reason for it — keep in mind that you may just need to delete your Storyboard and start again.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fcd2bafe0886" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[HaloBack Smart Screen Protector Review]]></title>
            <link>https://medium.com/@gilg/haloback-smart-screen-protector-review-e9aa1c62e66f?source=rss-af537a57f12f------2</link>
            <guid isPermaLink="false">https://medium.com/p/e9aa1c62e66f</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[review]]></category>
            <category><![CDATA[mobile-phone-accessories]]></category>
            <category><![CDATA[iphone]]></category>
            <dc:creator><![CDATA[Gil Goldstein]]></dc:creator>
            <pubDate>Wed, 01 Mar 2017 09:53:27 GMT</pubDate>
            <atom:updated>2017-03-01T09:53:27.291Z</atom:updated>
            <content:encoded><![CDATA[<h4>TL;DR: Nice concept, still not fully baked.</h4><p>When I first saw the HaloBack on Kickstarter, I immediately backed them.</p><p>I needed a new screen protector anyway and the concept seemed really cool — a screen protector that gives you a virtual “back” button in the space near your iPhone’s home button (like they have on all Android phones).</p><p>What it does is “transmit” your tap from the bottom part of the screen to the top left corner where most apps place the software “back” button.</p><p>When I backed them in November, the said it will be delivered by Christmas. That did not happen and I only got the unit in the end of January. I don’t hold that against them, I never expect crowed sourced projects to ship on time.</p><h4>The Packaging</h4><p>I received the product in my mailbox in an unmarked envelope from Singapore. When I opened it, I saw the screen protector package inside.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zwN18iHCLEabYEjokGI5Lw.jpeg" /></figure><p>The package was fairly professional, it had a nice design, much nicer than most of those cheap screen protectors you can find.</p><p>Inside there are clear graphic instructions on how to apply the Protector to the phone.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gtcGs0SQfVJoYZLJrcXLZw.jpeg" /></figure><p>I must say, I was very impressed with the packaging, it was better than I expected.</p><h4>Installation</h4><p>I had the “pleasure” of installing a few screen protectors in my life time.</p><p>It was always frustrating to say the least.</p><p>Making sure the sticker is aligned correctly, and that there are not dirt particles before placing it.</p><p>HaloBack were cleaver enough to include 2 small stickers that you can use to anchor the Protector in place once you properly align it. I did not consider this method in the past and I was more than happy to have at least that frustrating part taken cared of.</p><p>As expected, they also included a microfiber cloth and a plastic card to extract air bubbles.</p><p>This was by far the easiest installation of a screen protector I have ever done.</p><h4>The Actual Product</h4><p>After I finished the installation I quickly jumped into testing the virtual “back” button.</p><p>The first thing I noticed is that the screen felt a little hard to swipe my finger on.</p><p>It is hard to explain the feeling but it felt as if when I swipe my finger is “sticking” to the screen.</p><p>I was willing to ignore that for now, thinking it might just take some getting used to.</p><p>For my first test, I went into the iPhone’s settings app and on to one of the sub menus from there.</p><p>When I tapped the virtual button it immediately responded and the screen went back to the previous one.</p><p>When I tested it a few more times I found mixed results but after a few tries I got the hang of it and it seemed to work properly.</p><h4>The Issues</h4><p>The first, more serious problem, was that tapping the top part of the screen directly does not always respond. I have to tap multiple times for the tap to register properly.</p><p>This is truly annoying and probably caused by the mechanics behind the transmission of the virtual back button.</p><p>The 2nd issue I have is that the virtual back button is slightly too sensitive, making any slight slide of your finger, on the area left of the home button, activate the back button unintentionally. This can be very frustrating when you are in the middle of something that you don’t want interrupted. (Like writing a blog post on the Medium app — true story! )</p><p>The last thing is only relevant for people who use iOS with an RTL interface, making all software “back” buttons appear on the right instead of left and thus, making the virtual button completely useless.</p><h4>In Conclusion</h4><p>The HaloBack is a very promising product. They gave allot of thought and care for the packaging and installation. The actual product is a very cool concept but until they fix the issue with tapping the top part of the screen directly, I say wait on buying it for now. I am definitely waiting for version 2.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e9aa1c62e66f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[From SQL to Firebase — How to structure the DB for a social network app]]></title>
            <link>https://medium.com/@gilg/from-sql-to-firebase-how-to-structure-the-db-for-a-social-network-app-95b0aa5664c0?source=rss-af537a57f12f------2</link>
            <guid isPermaLink="false">https://medium.com/p/95b0aa5664c0</guid>
            <category><![CDATA[firebase]]></category>
            <category><![CDATA[backend]]></category>
            <category><![CDATA[database]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[Gil Goldstein]]></dc:creator>
            <pubDate>Mon, 18 Jul 2016 07:26:56 GMT</pubDate>
            <atom:updated>2016-07-18T08:47:29.604Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RfrXcvAjUxN884giIfw32Q.png" /></figure><blockquote>Note: I am not a Firebase expert, I just got into it while working on an iOS app. I write this article after struggling to find a way to implement some core social network app concepts such as “posts”, “likes”, “followers” and so on.</blockquote><h3>Introduction</h3><p>As someone who used to work with SQL databases, switching to Firebase’s realtime database model was extremely weird.</p><p>I base allot of the information here on this post on the Firebase blog: <a href="https://firebase.googleblog.com/2015/10/client-side-fan-out-for-data-consistency_73.html?m=1">https://firebase.googleblog.com/2015/10/client-side-fan-out-for-data-consistency_73.html?m=1</a></p><h3>The basic concept</h3><p>Firebase doesn’t use tables, rows and columns. Instead they use a big JSON file that has “nodes”. You write \ read data by supplying the path to the node you want.</p><p>Like the post on the Firebase blog mentions, you need “fanout” your data to multiple locations in the JSON for easier read access.</p><p>The concept is strange to someone who is used to SQL. In SQL you simply reference a key to a key in another table. In Firebase you have to duplicate the data to all the locations you need.</p><p>So for example, if your app uses hashtags in posts and you want the ability to show all posts for a specific hashtag, you will also have to duplicate each post a user submits to a “hashtags” node under each hashtag’s sub node.</p><pre>Hashtags: {<br> &lt;hashtag_id&gt;: {<br>  name: &quot;MySuperCoolHashtag&quot;,<br>  posts: {<br>   &lt;post_id_1&gt;: {<br>    // your post data<br>   },<br>   &lt;post_id_2&gt;: {<br>    // your post data<br>   }<br>  }<br> } <br>}</pre><h3>What about Likes?</h3><p>Likes are handled similarly to posts. You need to keep a record of the “like” all the places you may need to use it, for example: viewing the list of people who liked a post or a “Notifications” section where a user sees who liked his posts.</p><p>To accomplish those 2 examples you will need a node structure like this:</p><pre>PostLikes: {<br> &lt;post_id_1&gt;: {<br>  &lt;user_uid_1&gt;: true,<br>  &lt;user_uid_2&gt;: true,<br>  ...<br> }<br>},<br>Notifications: {<br> &lt;user_uid_1&gt;: {<br>  &lt;notification_id_1&gt;: {<br>   from_user: &lt;some_user_uid&gt;,<br>   type: &quot;like&quot;,<br>   for_post: {<br>    &lt;post_id&gt;: {<br>     // your post data<br>    }<br>    // add whatever else you need to know about this notification.<br>   }<br>  }<br> }<br>}</pre><p>The above notifications structure also allows you to store other types of notifications, not just “like” alerts, for example “comments” or “friend requests”.</p><h3>How to count Likes \ Comments?</h3><p>Firebase lets you count the number of children in a node by using:</p><pre>snapshot.children.count</pre><p>but when you have allot of data this may not be the best approach. Instead you should keep a “counter” in your posts node under each post id.</p><p>When creating a new post, set the value to 0. When someone likes a post, increment the counter by 1.</p><p>You can use Firebase’s “<a href="https://firebase.google.com/docs/database/ios/save-data#save_data_as_transactions">Transactions</a>” to do this.</p><h3>Follow Functionality</h3><p>For handling a “followers” type functionality, you will need at least 2 separate nodes: “followers” and “following”.</p><p>Separating the follower-following relationship into 2 separate nodes helps with accessing this data when you want to get the list of followers for a user or a list of who this user is following.</p><p>Just as with posts, when a user follows someone, you need to update this user’s following node and the target user’s followers node.</p><h3>Conclusion</h3><p>As you can see, in Firebase, data duplication is key for handling data in different ways. Think of a node in the db as a “View” in your app. If your app needs to display some data in a certain way in one place and another way somewhere else, that means you need to duplicate your data to multiple nodes.</p><p>Like I mentioned, this sort of thinking goes against everything we know about SQL but this way makes sense in Firebase, as “write” operations are considered cheap and “read” is more important to provide your users fast access to data.</p><p>I hope this post helps you, if you have any questions or if you are doing something differently please share it with me in the comments!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=95b0aa5664c0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Problems connection to the internet on iOS8]]></title>
            <link>https://medium.com/@gilg/problems-connection-to-the-internet-on-ios8-b3a25bd04356?source=rss-af537a57f12f------2</link>
            <guid isPermaLink="false">https://medium.com/p/b3a25bd04356</guid>
            <dc:creator><![CDATA[Gil Goldstein]]></dc:creator>
            <pubDate>Thu, 18 Sep 2014 04:56:31 GMT</pubDate>
            <atom:updated>2014-09-18T05:11:26.783Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/228/1*Fze_ZL9E2T0_f5D1kNxfjA.png" /><figcaption>If you are having problems with internet connection on iOS8, a VPN might be at fault.</figcaption></figure><h3>Problems connecting to the internet on iOS8</h3><p>Today i upgraded my iPhone 5 to the latest OS by Apple — iOS8.</p><p>I notices several problems regrading internet connectivity — the first of which was when the phone rebooted after installing the OS — i could not connect to iCloud to restore my settings.</p><p>After that, i noticed several apps that also had problems connecting to the web, most notably Safari and Waze.</p><p>After digging around i found the problem! I had a VPN app installed called TunnelBear. Though it did not cause any problems in iOS7, in 8 it completly messed up the internet connection.</p><p>To solve the problem I needed to delete the profile TunnelBear created by going to Settings -&gt; General -&gt; Profiles.</p><p>It is possible that other apps \ profiles may cause more problems of this nature, so if you encounter anything like this — be sure to check your Profiles and VPN settings.</p><p>Hope this helps!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b3a25bd04356" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>