<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Eugene Belinski</title>
    <description>Hello! I’m Eugene, a mobile app developer in Minnesota. I love all things Swift, and I also work with Java, Kotlin, Ruby on Rails, and JavaScript. I sometimes go by Eugeniu, my Romanian name.</description>
    <link>/</link>
    <atom:link href="/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Fri, 06 Sep 2024 18:42:21 +0000</pubDate>
    <lastBuildDate>Fri, 06 Sep 2024 18:42:21 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>My favorite apps for iOS development in 2020</title>
        <description>&lt;p&gt;Developers of native iOS apps tend to spend a lot of time in &lt;a href=&quot;https://developer.apple.com/xcode/&quot;&gt;Xcode&lt;/a&gt;. From version control to robust debugging tools, Xcode has pretty much everything. Still, there are many third-party tools out there that can further enhance your development workflow. This is a list of my favorites!&lt;/p&gt;

&lt;h3 id=&quot;macos&quot;&gt;macOS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://coderunnerapp.com/&quot;&gt;CodeRunner&lt;/a&gt; ($15, also on &lt;a href=&quot;https://setapp.com/apps/coderunner&quot;&gt;Setapp&lt;/a&gt;)&lt;/strong&gt; — Hands down one of the best purchases I’ve ever made. CodeRunner let’s you quickly write and run code for Swift and many other languages. I often use it instead of Xcode Playgrounds when writing &lt;a href=&quot;https://swiftly.dev/&quot;&gt;Swiftly&lt;/a&gt; content because it’s just so much snappier. And for other languages, it eliminates the hassle of setting everything up from scratch. Just don’t forget to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;import Foundation&lt;/code&gt;, because unlike Xcode, CodeRunner won’t write it out for you!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://apps.apple.com/us/app/asset-catalog-creator-pro/id809625456?mt=12&quot;&gt;Asset Catalog Creator Pro&lt;/a&gt; ($6, also on &lt;a href=&quot;https://setapp.com/apps/asset-catalog-creator-pro&quot;&gt;Setapp&lt;/a&gt;)&lt;/strong&gt; — What did you do the last time you needed to add an app icon to an Xcode project? Did you try to create each size by hand? Did you use a shady online tool that required your email? After searching high and low, I finally found Asset Catalog Creator Pro. The UI is a bit confusing at first, but it is hands down the best tool out there to convert an iOS app icon image to every single size needed for an Xcode project. It even saves everything, metadata and all, directly into your project. There is also a &lt;a href=&quot;https://apps.apple.com/us/app/asset-catalog-creator/id866571115&quot;&gt;free&lt;/a&gt; version with fewer features.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://paw.cloud/&quot;&gt;Paw&lt;/a&gt; ($50, also on &lt;a href=&quot;https://setapp.com/apps/paw&quot;&gt;Setapp&lt;/a&gt;)&lt;/strong&gt; — With an elegant interface, Paw lets you test APIs that you plan on using in an iOS app. You can compose requests, inspect responses from the server, and export API definitions. It’s an alternative to Postman, and a very good one at that.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://wwdc.io/&quot;&gt;WWDC&lt;/a&gt; (free)&lt;/strong&gt; — Five years before Apple announced the &lt;a href=&quot;https://apps.apple.com/us/app/apple-developer/id640199958&quot;&gt;macOS Apple Developer app&lt;/a&gt; in 2020, Guilherme Rambo launched this gorgeous WWDC videos app. This app is arguably still the best way to watch WWDC talks, given that the official app is a Catalyst port with some awkward UI placement. Better yet, the WWDC app makes it possible to download a talk offline, and access the downloaded video directly, allowing you to easily watch it with your preferred video player.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://apps.apple.com/us/app/san-fransymbols/id1504761986&quot;&gt;San Fransymbols&lt;/a&gt; (free)&lt;/strong&gt; — Whether you use UIKit, SwiftUI, or AppKit, Apple has provided a rich set of symbols known as &lt;a href=&quot;https://developer.apple.com/design/human-interface-guidelines/sf-symbols/overview/&quot;&gt;SF Symbols&lt;/a&gt;. And they released a basic &lt;a href=&quot;https://developer.apple.com/sf-symbols/&quot;&gt;SF Symbols app&lt;/a&gt; that lets you browse these symbols. But what if you wanted an app with, you know, &lt;em&gt;features&lt;/em&gt;? That’s where San Fransymbols comes in. It lets you browse all SF Symbols, try out different thicknesses and colors, and even copy sample code for both SwiftUI and UIKit.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.sublimetext.com/&quot;&gt;Sublime Text&lt;/a&gt; ($80)&lt;/strong&gt; — While you’ll usually be coding in Xcode, you may sometimes want a standalone text editor. And by sometimes, I mean whenever there is a nasty merge conflict in &lt;em&gt;project.pbxproj&lt;/em&gt;. Sublime Text is extendable with themes and plugins for just about anything. And unlike Atom and VSCode, Sublime Text is native, so you can free up more RAM for Xcode to feast on.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://nativeconnect.app/&quot;&gt;NativeConnect&lt;/a&gt; ($5/month)&lt;/strong&gt; — As its name suggests, NativeConnect lets you access App Store Connect using a native macOS app. You can use it to view sales and trends for each of your apps, read and respond to reviews, and generate promo codes. (I imagine this is about as much access as the App Store Connect API allows for third-party apps.) At the $5/month price point, this app probably isn’t for everyone, but if avoiding the sluggish App Store Connect website sounds appealing, NativeConnect is worth trying out.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;ios--ipados&quot;&gt;iOS / iPadOS&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://apps.apple.com/app/charles-proxy/id1134218562&quot;&gt;Charles&lt;/a&gt; ($9)&lt;/strong&gt; — This powerful app allows you to run a proxy between all apps on your device and the internet. You can then browse through all of an app’s networking traffic. It comes in handy surprisingly often during app development. I have both this and the pricier &lt;a href=&quot;https://www.charlesproxy.com/&quot;&gt;macOS version&lt;/a&gt;, but I always just use the iOS one.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://apps.apple.com/us/app/adaptivity-a/id1054670022&quot;&gt;Adaptivity&lt;/a&gt; ($5)&lt;/strong&gt; — The Swiss Army knife of &lt;a href=&quot;https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout/&quot;&gt;iOS Size Classes&lt;/a&gt;, Adaptivity helps developers visualize how different size classes appear on real devices for many types of iOS and iPadOS views.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://apps.apple.com/us/app/app-store-connect/id1234793120&quot;&gt;App Store Connect&lt;/a&gt; (free)&lt;/strong&gt; — Apple offers this app for iOS that gives you access to App Store Connect information such as sales, trends data, build activity, and ratings in a nifty native app that offers push notifications. Be warned that it doesn’t provide nearly as much access as the web version, though it does log you out about as much.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://apps.apple.com/us/app/apple-developer/id640199958&quot;&gt;Apple Developer&lt;/a&gt; (free)&lt;/strong&gt; — This app, formerly named &lt;em&gt;WWDC&lt;/em&gt;, allows you to watch WWDC videos on your iPhone or iPad. Not much else to say here. Unlike on Mac, it’s really the only option for these videos.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://apps.apple.com/us/app/san-fransymbols/id1504761986&quot;&gt;San Fransymbols&lt;/a&gt; (free)&lt;/strong&gt; — Yes, I mentioned this app in the Mac section, but it’s available for iOS too!&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What are your favorite apps for iOS development? Let me know on &lt;a href=&quot;https://twitter.com/EugeneBelinski&quot;&gt;Twitter&lt;/a&gt;!&lt;/p&gt;
</description>
        <pubDate>Sat, 22 Aug 2020 06:00:00 +0000</pubDate>
        <link>/apps-for-ios-development-2020/</link>
        <guid isPermaLink="true">/apps-for-ios-development-2020/</guid>
        
        
      </item>
    
      <item>
        <title>MacBook portability over time (2006–2021)</title>
        <description>&lt;p&gt;This chart displays the masses of all MacBook releases from 2006 to 2021, measured in &lt;strong&gt;grams&lt;/strong&gt;. (1000 grams ≈ 2.2 pounds)&lt;/p&gt;

&lt;div class=&quot;chart-container&quot; style=&quot;position: relative;&quot;&gt;
  &lt;canvas id=&quot;line-chart&quot;&gt;&lt;/canvas&gt;
&lt;/div&gt;

&lt;h2 id=&quot;changelog&quot;&gt;Changelog&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2019-11-20&lt;/code&gt; — Original post.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2020-05-10&lt;/code&gt; — Added early 2020 13” MacBook Pro and MacBook Air.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2021-12-22&lt;/code&gt; — Added late 2020 13” MacBook Pro and MacBook Air, added late 2021 14” and 16” MacBook Pros.&lt;/li&gt;
&lt;/ul&gt;

&lt;script src=&quot;/js/Chart.bundle.min.js&quot;&gt;&lt;/script&gt;

&lt;script&gt;
window.chartColors = {
  red: &apos;rgb(255, 99, 132)&apos;,
  orange: &apos;rgb(255, 159, 64)&apos;,
  yellow: &apos;rgb(255, 205, 86)&apos;,
  green: &apos;rgb(75, 192, 192)&apos;,
  blue: &apos;rgb(54, 162, 235)&apos;,
  purple: &apos;rgb(153, 102, 255)&apos;,
  darkGrey: &apos;rgb(100, 100, 100)&apos;,
  black: &apos;rgb(0, 0, 0)&apos;
};

var element = document.getElementById(&quot;line-chart&quot;);

var data = [
  {
    label: &apos;17&quot; MBP&apos;,
    borderColor: window.chartColors.red,
    fill: false,
    data: [{
      x: new Date(&apos;April 24, 2006&apos;),
      y: 3100
    }, {
      x: new Date(&apos;October 24, 2006&apos;),
      y: 3100
    }, {
      x: new Date(&apos;June 5, 2007&apos;),
      y: 3100
    }, {
      x: new Date(&apos;November 1, 2007&apos;),
      y: 3100
    }, {
      x: new Date(&apos;February 26, 2008&apos;),
      y: 3100
    }, {
      x: new Date(&apos;October 14, 2008&apos;),
      y: 3100
    }]
  }, {
    label: &apos;15&quot; MBP&apos;,
    borderColor: window.chartColors.orange,
    fill: false,
    data: [{
      x: new Date(&apos;January 10, 2006&apos;),
      y: 2500
    }, {
      x: new Date(&apos;October 24, 2006&apos;),
      y: 2500
    }, {
      x: new Date(&apos;June 5, 2007&apos;),
      y: 2400
    }, {
      x: new Date(&apos;November 1, 2007&apos;),
      y: 2400
    }, {
      x: new Date(&apos;February 26, 2008&apos;),
      y: 2400
    }, {
      x: new Date(&apos;October 14, 2008&apos;),
      y: 2500
    }, {
      x: new Date(&apos;March 3, 2009&apos;),
      y: 2500
    }, {
      x: new Date(&apos;June 8, 2009&apos;),
      y: 2500
    }, {
      x: new Date(&apos;April 13, 2010&apos;),
      y: 2550
    }, {
      x: new Date(&apos;February 24, 2011&apos;),
      y: 2550
    }, {
      x: new Date(&apos;October 24, 2011&apos;),
      y: 2550
    }, {
      x: new Date(&apos;June 11, 2012&apos;),
      y: 2550
    }, {
      x: new Date(&apos;June 11, 2012&apos;),
      y: 2020
    }, {
      x: new Date(&apos;February 13, 2013&apos;),
      y: 2020
    }, {
      x: new Date(&apos;October 22, 2013&apos;),
      y: 2020
    }, {
      x: new Date(&apos;July 29, 2014&apos;),
      y: 2020
    }, {
      x: new Date(&apos;May 19, 2015&apos;),
      y: 2040
    }, {
      x: new Date(&apos;November 12, 2016&apos;),
      y: 1830
    }, {
      x: new Date(&apos;June 5, 2017&apos;),
      y: 1830
    }, {
      x: new Date(&apos;July 12, 2018&apos;),
      y: 1830
    }, {
      x: new Date(&apos;May 21, 2019&apos;),
      y: 1830
    }]
  }, {
    label: &apos;13&quot; MB&apos;,
    borderColor: window.chartColors.yellow,
    fill: false,
    data: [{
      x: new Date(&apos;May 16, 2006&apos;),
      y: 2350
    }, {
      x: new Date(&apos;November 8, 2006&apos;),
      y: 2350
    }, {
      x: new Date(&apos;May 15, 2007&apos;),
      y: 2300
    }, {
      x: new Date(&apos;November 1, 2007&apos;),
      y: 2275
    }, {
      x: new Date(&apos;February 26, 2008&apos;),
      y: 2275
    }, {
      x: new Date(&apos;October 14, 2008&apos;),
      y: 2275
    }, {
      x: new Date(&apos;October 14, 2008&apos;),
      y: 2000
    }, {
      x: new Date(&apos;January 21, 2009&apos;),
      y: 2275
    }, {
      x: new Date(&apos;May 27, 2009&apos;),
      y: 2275
    }, {
      x: new Date(&apos;October 20, 2009&apos;),
      y: 2125
    }, {
      x: new Date(&apos;May 18, 2010&apos;),
      y: 2125
    }]
  }, {
    label: &apos;13&quot; MBP&apos;,
    borderColor: window.chartColors.green,
    fill: false,
    data: [{
      x: new Date(&apos;June 8, 2009&apos;),
      y: 2040
    }, {
      x: new Date(&apos;April 13, 2010&apos;),
      y: 2040
    }, {
      x: new Date(&apos;February 24, 2011&apos;),
      y: 2040
    }, {
      x: new Date(&apos;October 24, 2011&apos;),
      y: 2040
    }, {
      x: new Date(&apos;June 11, 2012&apos;),
      y: 2040
    }, {
      x: new Date(&apos;October 23, 2012&apos;),
      y: 1620
    }, {
      x: new Date(&apos;February 13, 2013&apos;),
      y: 1620
    }, {
      x: new Date(&apos;October 22, 2013&apos;),
      y: 1570
    }, {
      x: new Date(&apos;July 29, 2014&apos;),
      y: 1570
    }, {
      x: new Date(&apos;March 9, 2015&apos;),
      y: 1580
    }, {
      x: new Date(&apos;October 27, 2016&apos;),
      y: 1370
    }, {
      x: new Date(&apos;November 12, 2016&apos;),
      y: 1370
    }, {
      x: new Date(&apos;June 5, 2017&apos;),
      y: 1370
    }, {
      x: new Date(&apos;July 12, 2018&apos;),
      y: 1370
    }, {
      x: new Date(&apos;July 9, 2019&apos;),
      y: 1370
    }, {
      x: new Date(&apos;May 21, 2019&apos;),
      y: 1370
    }, {
      x: new Date(&apos;May 4, 2020&apos;),
      y: 1400
    }, {
      x: new Date(&apos;November 17, 2020&apos;),
      y: 1400
    }]
  }, {
    label: &apos;13&quot; MBA&apos;,
    borderColor: window.chartColors.blue,
    fill: false,
    data: [{
      x: new Date(&apos;January 29, 2008&apos;),
      y: 1360
    }, {
      x: new Date(&apos;October 14, 2008&apos;),
      y: 1360
    }, {
      x: new Date(&apos;June 8, 2009&apos;),
      y: 1360
    }, {
      x: new Date(&apos;October 20, 2010&apos;),
      y: 1340
    }, {
      x: new Date(&apos;July 20, 2011&apos;),
      y: 1340
    }, {
      x: new Date(&apos;June 11, 2012&apos;),
      y: 1340
    }, {
      x: new Date(&apos;June 10, 2013&apos;),
      y: 1340
    }, {
      x: new Date(&apos;April 29, 2014&apos;),
      y: 1340
    }, {
      x: new Date(&apos;March 9, 2015&apos;),
      y: 1340
    }, {
      x: new Date(&apos;June 5, 2017&apos;),
      y: 1340
    }, {
      x: new Date(&apos;October 30, 2018&apos;),
      y: 1250
    }, {
      x: new Date(&apos;July 9, 2019&apos;),
      y: 1250
    }, {
      x: new Date(&apos;March 18, 2020&apos;),
      y: 1290
    }, {
      x: new Date(&apos;November 17, 2020&apos;),
      y: 1290
    }]
  }, {
    label: &apos;11&quot; MBA&apos;,
    borderColor: window.chartColors.purple,
    fill: false,
    data: [{
      x: new Date(&apos;October 20, 2010&apos;),
      y: 1080
    }, {
      x: new Date(&apos;July 20, 2011&apos;),
      y: 1080
    }, {
      x: new Date(&apos;June 11, 2012&apos;),
      y: 1080
    }, {
      x: new Date(&apos;June 10, 2013&apos;),
      y: 1080
    }, {
      x: new Date(&apos;April 29, 2014&apos;),
      y: 1080
    }, {
      x: new Date(&apos;March 9, 2015&apos;),
      y: 1080
    }]
  }, {
    label: &apos;12&quot; MB&apos;,
    borderColor: window.chartColors.darkGrey,
    fill: false,
    data: [{
      x: new Date(&apos;April 10, 2015&apos;),
      y: 920
    }, {
      x: new Date(&apos;April 19, 2016&apos;),
      y: 920
    }, {
      x: new Date(&apos;June 6, 2017&apos;),
      y: 920
    }]
  }, {
    label: &apos;16&quot; MBP&apos;,
    borderColor: window.chartColors.red,
    fill: false,
    data: [{
      x: new Date(&apos;November 13, 2019&apos;),
      y: 1950
    }, {
      x: new Date(&apos;October 26, 2021&apos;),
      y: 2100
    }]
  }, {
    label: &apos;14&quot; MBP&apos;,
    borderColor: window.chartColors.orange,
    fill: false,
    data: [{
      x: new Date(&apos;October 26, 2021&apos;),
      y: 1600
    }]
  }
];

new Chart(element, {
  type: &apos;line&apos;,
  data: {
    datasets: data
  },
  options: {
    aspectRatio: 1.25,
    scales: {
      xAxes: [{
        type: &apos;time&apos;,
        position: &apos;bottom&apos;,
        time: {
          displayFormats: {
            quarter: &apos;YYYY&apos;
          }
        }
      }],
      yAxes: [{
        ticks: {
          beginAtZero: true
        }
      }]
    }
  }
});
&lt;/script&gt;

</description>
        <pubDate>Wed, 20 Nov 2019 06:00:00 +0000</pubDate>
        <link>/macbook-portability/</link>
        <guid isPermaLink="true">/macbook-portability/</guid>
        
        
      </item>
    
      <item>
        <title>Swiftly — the one-stop Swift reference site for busy coders</title>
        <description>&lt;p&gt;Today I’m excited to announce &lt;a href=&quot;https://swiftly.dev&quot;&gt;Swiftly&lt;/a&gt;, the one-stop quick reference spot for Swift developers! The culmination of 8 months of work, Swiftly has Swift 5.1 guides covering:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;the basics: &lt;a href=&quot;https://swiftly.dev/variables&quot;&gt;variables&lt;/a&gt;, &lt;a href=&quot;https://swiftly.dev/optionals/&quot;&gt;optionals&lt;/a&gt;, &lt;a href=&quot;https://swiftly.dev/closures/&quot;&gt;closures&lt;/a&gt;, &lt;a href=&quot;https://swiftly.dev/if/&quot;&gt;if statements&lt;/a&gt; and so on,&lt;/li&gt;
  &lt;li&gt;basic types such as &lt;a href=&quot;https://swiftly.dev/numbers/&quot;&gt;Ints&lt;/a&gt; and collection types such as &lt;a href=&quot;https://swiftly.dev/arrays/&quot;&gt;arrays&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://swiftly.dev/structs-and-classes/&quot;&gt;structs and classes&lt;/a&gt;, and their &lt;a href=&quot;https://swiftly.dev/properties/&quot;&gt;properties&lt;/a&gt; and &lt;a href=&quot;https://swiftly.dev/methods/&quot;&gt;methods&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;operators such as &lt;a href=&quot;https://swiftly.dev/math/&quot;&gt;plus and minus&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://swiftly.dev/functional-methods-comparison&quot;&gt;functional methods&lt;/a&gt; like &lt;a href=&quot;https://swiftly.dev/map&quot;&gt;map&lt;/a&gt;,&lt;/li&gt;
  &lt;li&gt;and more!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;the-idea&quot;&gt;The idea&lt;/h3&gt;

&lt;p&gt;In January 2018, I &lt;a href=&quot;/ios-ref-launch/&quot;&gt;launched iOS Ref&lt;/a&gt;. I had gotten tired of searching for the same iOS information over and over again, like iOS versions by device and device resolutions. To my surprise, it really took off on Twitter and Reddit, becoming the 17th highest all-time submission on &lt;a href=&quot;https://old.reddit.com/r/iOSProgramming/comments/7qencd/i_got_tired_of_searching_for_the_same_basic/?st=k287y0v5&amp;amp;sh=469ff2f0&quot;&gt;/r/iOSProgramming&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Around that time, I was spending a lot time developing in Swift, but also in other languages. Working in a software agency meant that I was coding in Kotlin and Java for Android, JavaScript for React Native, and even C# for Xamarin. Switching between Swift and Kotlin got particularily irksome, given that the two are oh-so-similar and yet oh-so-subtly-different. I would sometimes forget the syntax for basic things like enum declaration and array mapping.&lt;/p&gt;

&lt;p&gt;Worse yet, searching for &lt;em&gt;how to do basic thing X in Swift&lt;/em&gt; meant that I always ran into outdated Swift 2 StackOverflow answers. At this point Swift 2 might as well be considered a different language from modern Swift. And although the official &lt;a href=&quot;https://docs.swift.org/swift-book/&quot;&gt;Swift book&lt;/a&gt; was always a reliable source, it tended to read more like a textbook, verbose and heavy on conceptual understanding, when all I really needed was a quick refresher.&lt;/p&gt;

&lt;p&gt;Ultimately I began writing Swift-specific pages for iOS Ref, and soon realized that the number of pages I wanted to write would quickly crowd the whole site. That’s when the idea for Swiftly came in: by combining to-the-point reference sheets with a clutter-free website and a memorable site name, I could do to Swift what iOS Ref does to iOS. I started working in February 2019, and eight months later, I’m ready to share it.&lt;/p&gt;

&lt;h3 id=&quot;the-future&quot;&gt;The future&lt;/h3&gt;

&lt;p&gt;Although I’m launching Swiftly today, my work here is not done. I’m still writing reference guides for more advanced Swift topics such as protocols, extensions, errors, and access control. And of course, just as with iOS Ref, I plan on sticking around for the long haul to update Swiftly to Swift 5.2, Swift 6, and whatever other iterations the Swift programming language takes in the future.&lt;/p&gt;

&lt;p&gt;I hope that Swiftly can become a reliable long-term reference site for all Swift developers for years to come.&lt;/p&gt;
</description>
        <pubDate>Tue, 29 Oct 2019 06:00:00 +0000</pubDate>
        <link>/swiftly-announcement/</link>
        <guid isPermaLink="true">/swiftly-announcement/</guid>
        
        
      </item>
    
      <item>
        <title>How to join a video call in 2018</title>
        <description>&lt;ol&gt;
  &lt;li&gt;Find the corresponding event invite in your calendar app and accept it.&lt;/li&gt;
  &lt;li&gt;Go to the event in your calendar.&lt;/li&gt;
  &lt;li&gt;Go to the notes section of the event. It should look something like this: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-::~:~::~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~::~:~::- Please do not edit this section of the description. This event has a Google Hangouts video call. Join: https://plus.google.com/hangouts/_/thecompanyyouworkfor/some-meeting?hceid=g8j39q4jtc4m37hqtr89734qx89tr34yuxq8n._4j8t93qh849hjer9fhRNOUISGHNROSF94efgj&amp;amp;hs=448 -::~:~::~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~::~:~::-&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Carefully select the full link and paste it in your browser.&lt;/li&gt;
  &lt;li&gt;“Sorry, Hangouts doesn’t work in this browser. You can use one of these browsers instead: Chrome 37+ Internet Explorer 9 (32-bit) or 10+ Safari 6+”&lt;/li&gt;
  &lt;li&gt;Open Safari.&lt;/li&gt;
  &lt;li&gt;Paste the call link in Safari.&lt;/li&gt;
  &lt;li&gt;“Ready to join the video call? Joining as yourpersonalaccount@notyourworkaccount.com.”&lt;/li&gt;
  &lt;li&gt;Look for the “switch account” button.&lt;/li&gt;
  &lt;li&gt;It’s not there.&lt;/li&gt;
  &lt;li&gt;Go to google.com.&lt;/li&gt;
  &lt;li&gt;Select your avatar in the top right, and select your work account.&lt;/li&gt;
  &lt;li&gt;Nothing happens.&lt;/li&gt;
  &lt;li&gt;Go to gmail.com to login through there instead.&lt;/li&gt;
  &lt;li&gt;“Welcome. Your favorite email has a fresh new look.”&lt;/li&gt;
  &lt;li&gt;Look for the “skip” button.&lt;/li&gt;
  &lt;li&gt;It’s not there.&lt;/li&gt;
  &lt;li&gt;Click on the “next” button.&lt;/li&gt;
  &lt;li&gt;“Choose a view: Default — Comfortable — Compact”&lt;/li&gt;
  &lt;li&gt;Make a selection and click on “OK”.&lt;/li&gt;
  &lt;li&gt;Select your avatar in the top right, and select your work account.&lt;/li&gt;
  &lt;li&gt;“Please confirm your login by entering your password.”&lt;/li&gt;
  &lt;li&gt;Unlock your 1Password vault.&lt;/li&gt;
  &lt;li&gt;Paste your password into the field.&lt;/li&gt;
  &lt;li&gt;Paste the call link and hit enter.&lt;/li&gt;
  &lt;li&gt;“Ready to join the video call? Joining as yourpersonalaccount@notyourworkaccount.com.”&lt;/li&gt;
  &lt;li&gt;Look for the “switch account” button.&lt;/li&gt;
  &lt;li&gt;It’s there.&lt;/li&gt;
  &lt;li&gt;Switch to your work account.&lt;/li&gt;
  &lt;li&gt;Click on the “Join” button.&lt;/li&gt;
  &lt;li&gt;Nothing happens.&lt;/li&gt;
  &lt;li&gt;Remember that Google services usually work best with Google browsers.&lt;/li&gt;
  &lt;li&gt;Look for Chrome on your computer.&lt;/li&gt;
  &lt;li&gt;It’s not there.&lt;/li&gt;
  &lt;li&gt;Remember that you uninstalled it when you were trying to declutter your computer.&lt;/li&gt;
  &lt;li&gt;Download Chrome.&lt;/li&gt;
  &lt;li&gt;Install Chrome and open it.&lt;/li&gt;
  &lt;li&gt;Paste the call link and hit enter.&lt;/li&gt;
  &lt;li&gt;“Join Google Hangouts video call. Please introduce yourself to the people in the call: &lt;strong&gt;__&lt;/strong&gt;___ or Sign in with Google.”&lt;/li&gt;
  &lt;li&gt;Click on “Sign in with Google”.&lt;/li&gt;
  &lt;li&gt;Install the 1Password plugin for Chrome.&lt;/li&gt;
  &lt;li&gt;Enter your password from 1Password.&lt;/li&gt;
  &lt;li&gt;“2-Step Verification. This extra step shows it’s really you trying to sign in. Get a verification code from the Google Authenticator app.”&lt;/li&gt;
  &lt;li&gt;Reach into your pocket for your phone.&lt;/li&gt;
  &lt;li&gt;It’s not there.&lt;/li&gt;
  &lt;li&gt;Remember that you left it in the bathroom.&lt;/li&gt;
  &lt;li&gt;Open the Google Authenticator app.&lt;/li&gt;
  &lt;li&gt;Scroll through the list to find the right authentication code.&lt;/li&gt;
  &lt;li&gt;It looks like the timer is almost up for this code. Wait for the next one to appear.&lt;/li&gt;
  &lt;li&gt;Enter the new code into the field.&lt;/li&gt;
  &lt;li&gt;“Make sure your settings are up-to-date. Since you have opted for higher security with 2-Step Verification, we need to periodically make sure your settings are correct.”&lt;/li&gt;
  &lt;li&gt;Click on “Remind me later”.&lt;/li&gt;
  &lt;li&gt;“hangouts.google.com wants to use your microphone and camera.”&lt;/li&gt;
  &lt;li&gt;Click on “Allow”.&lt;/li&gt;
  &lt;li&gt;Click on “Join”.&lt;/li&gt;
  &lt;li&gt;“You are the only one here.”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The call ended 10 minutes ago.&lt;/p&gt;

</description>
        <pubDate>Mon, 10 Sep 2018 06:00:00 +0000</pubDate>
        <link>/video-call-in-2018/</link>
        <guid isPermaLink="true">/video-call-in-2018/</guid>
        
        
      </item>
    
      <item>
        <title>The 2018 free privacy tools starter kit</title>
        <description>&lt;p&gt;The following is a list of free tools I recommend for protecting your privacy online from advertisers, your ISP, social media companies, and others. For a broader discussion on privacy, check out my &lt;a href=&quot;/online-mobile-security-talk/&quot;&gt;2016 talk&lt;/a&gt; at Open Twin Cities.&lt;/p&gt;

&lt;ul id=&quot;markdown-toc&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#email&quot; id=&quot;markdown-toc-email&quot;&gt;Email&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#note-taking&quot; id=&quot;markdown-toc-note-taking&quot;&gt;Note-taking&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#messaging&quot; id=&quot;markdown-toc-messaging&quot;&gt;Messaging&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#operating-systems&quot; id=&quot;markdown-toc-operating-systems&quot;&gt;Operating systems&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#web-browsing&quot; id=&quot;markdown-toc-web-browsing&quot;&gt;Web browsing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#browser-extensions&quot; id=&quot;markdown-toc-browser-extensions&quot;&gt;Browser extensions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#file-sharing&quot; id=&quot;markdown-toc-file-sharing&quot;&gt;File sharing&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#authentication&quot; id=&quot;markdown-toc-authentication&quot;&gt;Authentication&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#more&quot; id=&quot;markdown-toc-more&quot;&gt;More&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;email&quot;&gt;Email&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://tutanota.com/&quot;&gt;TutaNota&lt;/a&gt;: A privacy-conscious email provider based in &lt;a href=&quot;https://tutanota.com/blog/posts/data-privacy-germany&quot;&gt;Germany&lt;/a&gt;, a country with stronger data privacy laws than the US. The free plan gets you a &lt;em&gt;username@tutanota.com&lt;/em&gt; address with 1 GB of storage. Unlike Gmail, TutaNota cannot scan your emails to display &lt;a href=&quot;https://www.nytimes.com/2017/06/23/technology/gmail-ads.html&quot;&gt;targeted ads&lt;/a&gt;, because your emails on TutaNota servers are encrypted at rest. (See &lt;a href=&quot;https://tutanota.uservoice.com/knowledgebase/topics/69730-english&quot;&gt;limitations&lt;/a&gt;.)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://protonmail.com/&quot;&gt;ProtonMail&lt;/a&gt;: A more well known privacy-conscious email provider based in Switzerland, protected by Swiss privacy laws. The free plan gets you your own &lt;em&gt;username@protonmail.com&lt;/em&gt; address with 500 MB of storage, but all of your sent emails have a required “Sent with ProtonMail” signature. The paid plan is about $60 per year. (See &lt;a href=&quot;https://protonmail.com/support/knowledge-base/what-is-encrypted/&quot;&gt;limitations&lt;/a&gt;.)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;note-taking&quot;&gt;Note-taking&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://standardnotes.org/&quot;&gt;Standard Notes&lt;/a&gt;: A cross-platform note-taking app with cloud storage. Unlike iCloud Notes and Google Keep, no one can read them except you. Their mobile apps are fine, but the desktop app needs some improvement. The free plan is more than enough for most people. I have found that the Extended plan ($35/year) doesn’t really improve the desktop app, so it’s not worth the money.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;messaging&quot;&gt;Messaging&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://signal.org/&quot;&gt;Signal&lt;/a&gt;: A messaging app so secure that it’s recommended by Edward Snowden. Available for &lt;a href=&quot;https://itunes.apple.com/us/app/signal-private-messenger/id874139669?mt=8&quot;&gt;iOS&lt;/a&gt; and &lt;a href=&quot;https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms&amp;amp;hl=en&quot;&gt;Android&lt;/a&gt;. You can use it to send messages, group messages, calls, and video calls, which are always end-to-end encrypted, so they can’t be read by anyone else.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;operating-systems&quot;&gt;Operating systems&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://tails.boum.org/&quot;&gt;Tails&lt;/a&gt;: A privacy and anonymity-focused operating system. Typically, Tails is installed on an external USB drive, and run on a computer, without replacing or affecting the OS inside the computer. Tails is a Linux OS, so there’s a bit of a learning curve. All internet usage on Tails is routed through Tor. It’s like the Tor Browser, but for the entire OS.  More information can be found &lt;a href=&quot;https://tails.boum.org/about/index.en.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.lineageos.org/&quot;&gt;LineageOS&lt;/a&gt;: An operating system for Android phones that is free and open-source. Combined with &lt;a href=&quot;https://lineage.microg.org/&quot;&gt;microG&lt;/a&gt;, it’s worth trying out if you have a compatible device.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;web-browsing&quot;&gt;Web browsing&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.torproject.org/projects/torbrowser.html.en&quot;&gt;Tor Browser&lt;/a&gt;: The most secure web browser, Tor Browser routes all your traffic through the Tor Network. This means that your ISP can’t tell what you’re browsing, and the websites you visit will not necessarily know who you are. However, Tor Browser is &lt;a href=&quot;https://www.torproject.org/download/download.html.en#warning&quot;&gt;not all you need&lt;/a&gt; to browse anonymously.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.mozilla.org/en-US/firefox/new/&quot;&gt;Firefox&lt;/a&gt;: For more standard web browsing, Firefox is the most popular free and open-source web browser. Unlike Chrome, it won’t &lt;a href=&quot;https://twitter.com/swagitda_/status/979477998142476289&quot;&gt;scan your files&lt;/a&gt;. Firefox is &lt;a href=&quot;https://en.wikipedia.org/wiki/Free_and_open-source_software&quot;&gt;FOSS&lt;/a&gt; software developed by &lt;a href=&quot;https://www.mozilla.org/en-US/&quot;&gt;Mozilla&lt;/a&gt;, a non-profit organization.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;browser-extensions&quot;&gt;Browser extensions&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock&quot;&gt;uBlock Origin&lt;/a&gt;: The most popular and most effective content blocker, blocking targeted ads, third-party trackers, malware, and more for &lt;a href=&quot;https://addons.mozilla.org/addon/ublock-origin/&quot;&gt;Firefox&lt;/a&gt;, &lt;a href=&quot;https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm&quot;&gt;Chrome&lt;/a&gt;, &lt;a href=&quot;https://addons.opera.com/extensions/details/ublock/&quot;&gt;Opera&lt;/a&gt;, and &lt;a href=&quot;https://www.microsoft.com/store/p/app/9nblggh444l4&quot;&gt;Edge&lt;/a&gt;. There is also a &lt;a href=&quot;https://github.com/el1t/uBlock-Safari#ublock-originfor-safari&quot;&gt;Safari&lt;/a&gt; experimental version. Beware of mixing up uBlock Origin with “&lt;a href=&quot;https://www.ublock.org/&quot;&gt;uBlock&lt;/a&gt;”, which is outdated.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.eff.org/privacybadger&quot;&gt;Privacy Badger&lt;/a&gt;: A content blocker that is similar to uBlock Origin, but it only blocks trackers and ads that track you. Developed by the Electronic Frontier Foundation, it is available for Firefox, Chrome, and Opera.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.eff.org/https-everywhere&quot;&gt;HTTPS Everywhere&lt;/a&gt;: Another extension by EFF, HTTPS Everywhere redirects you from HTTP to HTTPS when it’s available, increasing your privacy. Available for Firefox, Chrome, and Opera.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://decentraleyes.org/&quot;&gt;Decentraleyes&lt;/a&gt;: Helps avoid being tracked by third-party CDNs. Available for Firefox, Chrome, and Opera.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/noscript/&quot;&gt;NoScript&lt;/a&gt; (Firefox only): For more advanced users, NoScript blocks all JavaScript scripts, and allows you to selectively whitelist scripts and websites.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;file-sharing&quot;&gt;File sharing&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://onionshare.org/&quot;&gt;OnionShare&lt;/a&gt;: A tool that lets you securely and anonymously share a file of any size with someone, over the Tor Network. Available for Mac, Windows, and Linux.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;authentication&quot;&gt;Authentication&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://freeotp.github.io/&quot;&gt;FreeOTP&lt;/a&gt;: A free and open-source authentication app for iOS and Android that is an alternative to Google Authenticator.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://itunes.apple.com/us/app/authenticator/id766157276?mt=8&quot;&gt;Authenticator by Matt Rubin&lt;/a&gt; (iOS only): A simple, beautiful authentication app that is an alternative to Google Authenticator. It is free, open-source, and never connects to the internet.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;more&quot;&gt;More&lt;/h3&gt;

&lt;p&gt;Where to go from here? &lt;a href=&quot;https://www.privacytools.io/&quot;&gt;PrivacyTools.io&lt;/a&gt; has much more detailed lists of privacy tools, both free and non-free. They cover additional categories like VPNs, decentralized social networks, and password managers. In addition, &lt;a href=&quot;https://www.reddit.com/r/privacytoolsIO/&quot;&gt;/r/privacytoolsIO/&lt;/a&gt; is a great place to ask questions about privacy tools.&lt;/p&gt;
</description>
        <pubDate>Mon, 30 Apr 2018 06:00:00 +0000</pubDate>
        <link>/2018-free-privacy-tools/</link>
        <guid isPermaLink="true">/2018-free-privacy-tools/</guid>
        
        
      </item>
    
      <item>
        <title>7 Steps Apple Could Take to Protect Privacy</title>
        <description>&lt;p&gt;I wrote a blog post for Software for Good. Check it out here: &lt;a href=&quot;https://softwareforgood.com/7-steps-apple-could-take-to-protect-privacy/&quot;&gt;7 Steps Apple Could Take to Protect Privacy&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 19 Apr 2018 06:00:00 +0000</pubDate>
        <link>/apple-privacy-steps/</link>
        <guid isPermaLink="true">/apple-privacy-steps/</guid>
        
        
      </item>
    
      <item>
        <title>iOS Ref — the quick reference site for iOS developers</title>
        <description>&lt;p&gt;This past week I built &lt;a href=&quot;https://iosref.com&quot;&gt;iOS Ref&lt;/a&gt;, a quick reference website for iOS and Swift developers! It has the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Convenient &lt;a href=&quot;https://iosref.com/res&quot;&gt;device resolution tables&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A beautiful and concise &lt;a href=&quot;https://iosref.com/swift-cheatsheet&quot;&gt;Swift 4 cheatsheet&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://iosref.com/ios&quot;&gt;iOS compatibility tables&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A hex code to UIColor &lt;a href=&quot;https://iosref.com/uihex&quot;&gt;converter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;A Swift 4 &lt;a href=&quot;https://iosref.com/swift-closures&quot;&gt;closures quick reference&lt;/a&gt; page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I created iOS Ref because I got tired of searching for the same information over and over again. Plus, in the iOS world, there are so many websites that are useful, but do just one thing. There’s a one-page website for explaining Swift closures. Another one-page website for iOS device resolutions. There’s even a website just for &lt;a href=&quot;https://uihex.com&quot;&gt;converting a hex code&lt;/a&gt; to a UIColor, made by some weird guy (&lt;em&gt;cough&lt;/em&gt; me).&lt;/p&gt;

&lt;p&gt;With so many websites with unique names, it’s hard to remember which one is which. So when I started iOS Ref, my goal was not to provide information that isn’t available anywhere else, it was to make the most important iOS information, tools, and links accessible as quickly and as friction-free as possible.&lt;/p&gt;

&lt;p&gt;Since launching, iOS Ref has received a positive response from developers, even becoming the #5 most popular post of all time in the iOS programming subreddit on &lt;a href=&quot;https://www.reddit.com/r/iOSProgramming/comments/7qencd/i_got_tired_of_searching_for_the_same_basic/?st=jci0rtlw&amp;amp;sh=667ed998&quot;&gt;reddit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I’m always looking for things to add, and clutter to remove from iOS Ref, so if you have any suggestions, send them my way! All of my contact info is on the &lt;a href=&quot;/&quot;&gt;main page&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Tue, 16 Jan 2018 06:00:00 +0000</pubDate>
        <link>/ios-ref-launch/</link>
        <guid isPermaLink="true">/ios-ref-launch/</guid>
        
        
      </item>
    
      <item>
        <title>Lessons learned from publishing an iOS sticker pack</title>
        <description>&lt;p&gt;I recently went through the process of publishing a sticker pack for the first time to the &lt;a href=&quot;https://developer.apple.com/app-store/imessage-app-submissions/&quot;&gt;iMessages App Store&lt;/a&gt;. I submitted a sticker pack called &lt;a href=&quot;https://antisocialalison.com&quot;&gt;Antisocial Alison&lt;/a&gt;, designed by my sister &lt;a href=&quot;https://artadriana.com&quot;&gt;Adriana&lt;/a&gt;. Along the way, we made some interesting observations.&lt;/p&gt;

&lt;h3 id=&quot;almost-no-one-knows-what-a-sticker-pack-is&quot;&gt;Almost no one knows what a sticker pack is&lt;/h3&gt;

&lt;p&gt;When Apple announced iOS 10 in June 2016, the new iMessages App Store was highly touted, being the third “App Store” ever launched by Apple. It made it possible for iPhone and iPad owners to download apps made specifically for the iMessages app and packs of stickers that they could send to friends. Over a year later, it’s clear that most people still don’t use these new iMessages features. Most friends we shared the sticker pack with had never used stickers before, and usually needed help installing our pack.&lt;/p&gt;

&lt;p&gt;Hopefully, iOS 11 will gradually change this. With this update, iMessages apps and sticker packs are much more prominent, inviting users to explore the store.&lt;/p&gt;

&lt;h3 id=&quot;a-sticker-pack-is-an-app-without-the-app&quot;&gt;A sticker pack is an app without the app&lt;/h3&gt;

&lt;p&gt;As an iOS engineer, the process of making and publishing a sticker pack felt eerily familiar: Create an Xcode project, fiddle around with media assets in Xcode, try to submit a sticker pack as an archive via Xcode, deal with obscure errors in the upload process, deal with weird Xcode signing issues, look for a solution on Stack Overflow, upload the archive with Application Loader instead, promise that you’re not using an Advertising Identifiers during the submission process in iTunes Connect, try to convince your friends to download TestFlight to try out your beta, submit your app to Apple reviewers, cross your fingers, breathe a sigh of relief, make an update by incrementing the version and build numbers in Xcode, and check in the changes to your git repository.&lt;/p&gt;

&lt;p&gt;Basically, it’s the whole process of building a native iOS app, sans writing even a line of code.&lt;/p&gt;

&lt;h3 id=&quot;good-luck-doing-anything-else-with-your-sticker-pack&quot;&gt;Good luck doing anything else with your sticker pack&lt;/h3&gt;

&lt;p&gt;After submitting the sticker pack to the App Store, we tried to find other places we could submit it. WhatsApp doesn’t have stickers. Facebook Messenger, the most popular app with sticker packs, doesn’t accept submissions. Google Allo doesn’t either. (Not that anyone uses Allo.) LINE may be just about the only other messaging app we could submit to.&lt;/p&gt;

&lt;p&gt;Have you ever submitted a sticker pack? I’d love to hear your experience. I’m &lt;a href=&quot;https://twitter.com/EugeneBelinski&quot;&gt;@EugeneBelinski&lt;/a&gt; on Twitter, and my email can be found &lt;a href=&quot;&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sat, 07 Oct 2017 06:00:00 +0000</pubDate>
        <link>/ios-sticker-pack-lessons/</link>
        <guid isPermaLink="true">/ios-sticker-pack-lessons/</guid>
        
        
      </item>
    
      <item>
        <title>Thanks to the 90,000 people who signed the United petition!</title>
        <description>&lt;p&gt;Following the shocking incident on United Airlines flight UA3411, where Doctor David Dao was forcibly and violently removed from his seat, I started a &lt;a href=&quot;https://www.change.org/p/mike-hhogan-we-demand-the-resignation-of-united-airlines-ceo-oscar-munoz&quot;&gt;petition&lt;/a&gt; calling for the resignation of United CEO Oscar Munoz. So far, 90,000 people have signed the petition, demonstrating the degree of frustration and anger people have with Munoz.&lt;/p&gt;

&lt;p&gt;Our petition has been mentioned on BBC News, CNBC, the Telegraph, and others. Munoz has responded to calls for his resignation, stating “No. I was hired to make United better and we’ve been doing that and that’s what I’ll continue to do.” He’s offered compromises including promising to not use police to remove passengers anymore.&lt;/p&gt;

&lt;p&gt;Although his resignation seems to be unlikely at this point, I believe our petition has made a big difference in the company’s response to this incident. Thank you so much to everyone who signed and shared the petition with friends and family.&lt;/p&gt;
</description>
        <pubDate>Sun, 30 Apr 2017 06:00:00 +0000</pubDate>
        <link>/united-petition/</link>
        <guid isPermaLink="true">/united-petition/</guid>
        
        
      </item>
    
      <item>
        <title>Online and Mobile Security Talk at Open Twin Cities</title>
        <description>&lt;p&gt;I recently had the opportunity to talk about online and mobile security at Open Twin Cities in Minneapolis. Thank you to the wonderful organizers of Open Twin Cities for inviting me. The recorded presentation, along with the awesome questions people had, can be watched below.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/8CfBMCyeEIE&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;I’m sure I didn’t get everything quite right, so if you have any comments or questions, reach me at &lt;a href=&quot;https://twitter.com/EugeneBelinski&quot;&gt;@EugeneBelinski&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Fri, 19 Feb 2016 06:00:00 +0000</pubDate>
        <link>/online-mobile-security-talk/</link>
        <guid isPermaLink="true">/online-mobile-security-talk/</guid>
        
        
      </item>
    
  </channel>
</rss>
