<rss version="2.0">
  <channel>
    <title>app development on Ryan Grier</title>
    <link>https://ryangrier.blog/categories/app-development/</link>
    <description></description>
    
    <language>en</language>
    
    <lastBuildDate>Sun, 12 Jun 2022 20:20:00 -0400</lastBuildDate>
    
    <item>
      <title>WWDC</title>
      <link>https://ryangrier.blog/2022/06/12/wwdc.html</link>
      <pubDate>Sun, 12 Jun 2022 20:20:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2022/06/13/wwdc.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://ryangrier.blog/uploads/2022/9cc04b3b2f.jpg&#34; alt=&#34;Me at WWDC 2018&#34;&gt;&lt;/p&gt;
&lt;p&gt;WWDC 2022 was this past week and it was great. I didn’t get to watch enough sessions. There are a ton that I want to watch. I’ll slowly chip away over the next few months.&lt;/p&gt;
&lt;p&gt;I’ve been lucky enough to attend &lt;a href=&#34;https://developer.apple.com/wwdc22/&#34;&gt;Apple’s WWDC&lt;/a&gt; in person several times. I’ve been to WWDCs in 2012, 2014, 2015, and 2018. I “won” a ticket in 2019, but we transferred it to a teammate so that he could experience WWDC in-person.&lt;/p&gt;
&lt;p&gt;My first WWDC was in 2012 at the &lt;a href=&#34;https://www.moscone.com&#34;&gt;Moscone West&lt;/a&gt; in San Francisco. I had never been to California before. Everything was new and interesting. The entire trip was amazing and a little overwhelming. I loved every second of it. That same year, I attended &lt;a href=&#34;https://io.google/2022/&#34;&gt;Google I/O&lt;/a&gt; (also in Moscone West), but WWDC was different.&lt;/p&gt;
&lt;p&gt;My last WWDC was in 2018 at the &lt;a href=&#34;https://www.sanjose.org/conventioncenter&#34;&gt;San Jose McEnery Convention Center&lt;/a&gt; in San Jose. I liked the WWDC being in San Jose. It gave a new vibe to the conference. Selfishly, I was able to explore a new city experience some new things.&lt;/p&gt;
&lt;p&gt;Being at WWDC in-person beats any other experience. There’s a level of focus you’re able to give to the conference and all the amazing tech Apple has announced. You are there to focus on the conference and it’s easier to tune out other things. Flying across the country can be a hassle, but I think that bit of distance helps with the focus.&lt;/p&gt;
&lt;p&gt;When I watch WWDC remotely, I don’t get that same level of focus. Things will come up at work and home. Slack dings, dinner needs made, kids need to go to practice, dogs need walked, etc. At home, the list of distractions is pretty long, especially when it’s not essential work.&lt;/p&gt;
&lt;p&gt;I say all this as someone who’s been very productive as a fully remote employee for the last six years. I can handle one week a year being in-person with other folks and totally focused on the new Apple tech.&lt;/p&gt;
&lt;p&gt;I do enjoy the pre-recorded session videos. They are very well produced and succinct. Sometimes I thought in-person sessions were trying to fill the full time slot allotted. Now, the videos contain exactly what they need to. No less, no more. And they look great.&lt;/p&gt;
&lt;p&gt;I think the format for this year’s WWDC may be the future of the conference. Inviting a number of people to Apple Park for some in-person video watching and the rest of the conference being remote.&lt;/p&gt;
&lt;p&gt;I’m not sure if I’ll ever get back to take part of WWDC in person. I would love to. But I realize that I’ve been lucky enough to attend a handful of times.&lt;/p&gt;
&lt;p&gt;As long as Apple invites people to attend in-person, I’ll keep trying.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>&#39;Beer Style Guidelines 2022.2&#39;</title>
      <link>https://ryangrier.blog/2022/04/13/beer-style-guidelines.html</link>
      <pubDate>Wed, 13 Apr 2022 20:30:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2022/04/14/beer-style-guidelines.html</guid>
      <description>&lt;p&gt;Beer Style Guidelines 2022.2 has been released.&lt;/p&gt;
&lt;p&gt;I’m on a bit of a roll with these updates. In both of these updates, I’ve added new guides.&lt;/p&gt;
&lt;p&gt;This update includes the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adds the &lt;a href=&#34;https://www.brewersassociation.org/edu/brewers-association-beer-style-guidelines/&#34;&gt;2022 Brewers Association Beer Style Guidelines&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fixes a crashing issue. For real this time. 🤞🏻&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I had attempted to fix a crashing issue in the 2022.1 update. I don’t quite think that I got it that time. With the 2022.2 update, I feel much more confident that I was able to fix the crashing issue.&lt;/p&gt;
&lt;p&gt;I have a few ideas on what I’m going to do next. None of the ideas are concrete though. I’ve thought about some new features to add to Beer Style Guidelines. I may also want to try working on a few new ideas that I’ve had.&lt;/p&gt;
&lt;p&gt;I’m not sure what I’ll work on next. For now, I think I’ll just sit back and have a 🍺.&lt;/p&gt;
&lt;p&gt;Full list of release notes: &lt;a href=&#34;https://beerstyleguidelines.app/release-notes/2022.2.txt&#34;&gt;https://beerstyleguidelines.app/release-notes/2022.2.txt&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>&#39;Beer Style Guidelines 2022.1&#39;</title>
      <link>https://ryangrier.blog/2022/03/20/beer-style-guidelines.html</link>
      <pubDate>Sun, 20 Mar 2022 09:30:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2022/03/20/beer-style-guidelines.html</guid>
      <description>&lt;p&gt;I released Beer Style Guidelines 2022.1 today. It&amp;rsquo;s the first update of the year.&lt;/p&gt;
&lt;p&gt;The update includes the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adds the &lt;a href=&#34;https://www.bjcp.org/bjcp-style-guidelines/&#34;&gt;2021 BJCP Beer Style Guidelines&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fixes a crashing issue.&lt;/li&gt;
&lt;li&gt;Removes access to the 2015 BJCP Beer Style Guidelines.&lt;/li&gt;
&lt;li&gt;Removes access to the 2020 Brewers Association Beer Style Guidelines.&lt;/li&gt;
&lt;li&gt;Adds basic &lt;a href=&#34;https://telemetrydeck.com&#34;&gt;Telemetry&lt;/a&gt; analytics.&lt;/li&gt;
&lt;li&gt;Updates the &amp;ldquo;Page Down&amp;rdquo; keyboard shortcut to use a space (as it should have been all along).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The two big changes for me are the addition of the 2021 BJCP Beer Style Guidelines and fixing a crashing issue.&lt;/p&gt;
&lt;p&gt;I had missed that the &lt;a href=&#34;https://www.bjcp.org/news/bjcp-releases-2021-beer-style-guidelines/&#34;&gt;BJCP had released a new guideline&lt;/a&gt; at the end of December. It&amp;rsquo;s the first update to the guidelines since 2015. I don&amp;rsquo;t check all that often for new updates, but I should try to stay on top of things better.&lt;/p&gt;
&lt;p&gt;I also fixed a crashing issue. I&amp;rsquo;d seen a few reports of it in my weekly emails from Apple. I finally dove into it and got it fixed.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve already got the next update planned. The &lt;a href=&#34;https://www.brewersassociation.org&#34;&gt;Brewers Association&lt;/a&gt; has released their 2022 guidelines and I want to get that into the app as soon as possible.&lt;/p&gt;
&lt;p&gt;Once that&amp;rsquo;s done, I have some other things in mind. I&amp;rsquo;m excited to get started on those once I&amp;rsquo;ve got all of the guidelines updated and current.&lt;/p&gt;
&lt;p&gt;Full list of release notes: &lt;a href=&#34;https://beerstyleguidelines.app/release-notes/2022.1.txt&#34;&gt;https://beerstyleguidelines.app/release-notes/2022.1.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please enjoy the update.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>&#39;UIKeyCommand — Part 3: macOS Catalyst Menu Items&#39;</title>
      <link>https://ryangrier.blog/2021/04/28/uikeycommand-part-macos.html</link>
      <pubDate>Wed, 28 Apr 2021 19:30:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2021/04/28/uikeycommand-part-macos.html</guid>
      <description>&lt;p&gt;This is the final post in a series on adding UIKeyCommands (keyboard shortcuts) to an iOS app. In this post, we’ll cover how to add menu bar items to a macOS Catalyst app using UIKeyCommands.&lt;/p&gt;
&lt;p&gt;This will not be a full tutorial on how to add menu items to macOS Catalyst apps. Instead, this post will demonstrate that you can use the same keyboard shortcuts created in &lt;a href=&#34;https://ryangrier.blog/2021/04/26/uikeycommand-part-2/&#34;&gt;part two&lt;/a&gt; and create menu items.&lt;/p&gt;
&lt;p&gt;In macOS Catalyst apps, your &lt;code&gt;UIApplicationDelegate&lt;/code&gt; class (usually &lt;code&gt;AppDelegate&lt;/code&gt;) will configure the menu bar. This is handled in the &lt;code&gt;func buildMenu(with builder: UIMenuBuilder) &lt;/code&gt; method (&lt;a href=&#34;https://developer.apple.com/documentation/uikit/uiresponder/3327317-buildmenu&#34;&gt;documentation&lt;/a&gt;). In this method, you can add and remove menu items and sub menu items.&lt;/p&gt;
&lt;p&gt;You can download the corresponding sample app &lt;a href=&#34;https://github.com/rwgrier/UIKeyCommand-series/tree/part-3-catalyst&#34;&gt;here&lt;/a&gt; (the branch is &lt;code&gt;part-3-catalyst&lt;/code&gt;). I slightly refactored the code that creates the UIKeyCommand to be a class level variable on the two view controllers. They can now be easily accessed like: &lt;code&gt;TableViewController.showTableAlert&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Use the existing UIKeyCommand objects in a UIMenu initializer and then added to the builder object in the &lt;code&gt;buildMenu&lt;/code&gt; method (from above) like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;let menu = UIMenu(title: &amp;quot;Show&amp;quot;,
				  identifier: .show,
                  options: .displayInline,
                  children: [TableViewController.showTableAlert,
                             DetailViewController.showDetailAlert])

builder.insertChild(menu, atStartOfMenu: .file)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This little block of code adds the “Show Table” and “Show Detail” menu items. When you run the app, it will look like this.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ryangrier.blog/uploads/2022/29cc2445b2.jpg&#34; alt=&#34;Resulting menu&#34;&gt;&lt;/p&gt;
&lt;p&gt;That’s it. That’s really all there is to it to take existing keyboard shortcuts and add them to a macOS Catalyst app as menu items.&lt;/p&gt;
&lt;p&gt;UIKeyCommand object are incredibly versatile in the situations we’ve gone over in this series. They can be added to both simple and more complex apps. They can also be used in macOS Catalyst apps to provide menu bar items.&lt;/p&gt;
&lt;h2 id=&#34;other-posts-in-the-series&#34;&gt;Other Posts in the Series&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://ryangrier.blog/2021/04/22/uikeycommand-part-1/&#34;&gt;Part 1&lt;/a&gt; | &lt;a href=&#34;https://ryangrier.blog/2021/04/26/uikeycommand-part-2/&#34;&gt;Part 2&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>&#39;UIKeyCommand — Part 2: Split View Controller&#39;</title>
      <link>https://ryangrier.blog/2021/04/26/uikeycommand-part-split.html</link>
      <pubDate>Mon, 26 Apr 2021 19:45:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2021/04/26/uikeycommand-part-split.html</guid>
      <description>&lt;p&gt;In the &lt;a href=&#34;https://ryangrier.blog/2021/04/22/uikeycommand-part-1/&#34;&gt;first post&lt;/a&gt; in this UIKeyCommands series, we went over the basics of UIKeyCommands and adding keyboard shortcuts to an app. Adding keyboard shortcuts to a real app can be a little more complicated, but not much.&lt;/p&gt;
&lt;h2 id=&#34;first-some-background&#34;&gt;First, some background&lt;/h2&gt;
&lt;p&gt;My latest update of &lt;a href=&#34;https://www.beerstyleguidelines.app&#34;&gt;Beer Style Guidelines&lt;/a&gt; has these keyboard shortcuts reenabled. A long time ago, I had keyboard shortcuts enabled within the app. At that time, I didn’t have a clear understanding of how they worked. This lack of understanding meant that the keyboard shortcuts didn’t quite work the way I expected them to (or at all sometimes).&lt;/p&gt;
&lt;p&gt;I became frustrated with my lack of understanding and I just disabled the keyboard shortcuts. I didn’t have a lot of time to investigate and figure out what was wrong. But I was determined to figure it out. Recently, I had purchased an &lt;a href=&#34;https://www.apple.com/ipad-air/&#34;&gt;iPad Air&lt;/a&gt; (4th Generation) and an &lt;a href=&#34;https://www.apple.com/ipad-keyboards/&#34;&gt;Apple Magic Keyboard&lt;/a&gt;. This gave me the kick in the butt to get the keyboard shortcuts working again.&lt;/p&gt;
&lt;p&gt;Getting the keyboard shortcuts working wasn’t a lot of work. I just lacked an understanding of how to put it all together. I hope to impart some of that wisdom in this post.&lt;/p&gt;
&lt;p&gt;Beer Style Guidelines has a &lt;a href=&#34;https://developer.apple.com/documentation/uikit/uisplitviewcontroller&#34;&gt;Split View Controller&lt;/a&gt; view architecture.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ryangrier.blog/uploads/2022/5d495b7c1f.jpg&#34; alt=&#34;Split View Controller Wireframe&#34;&gt;&lt;/p&gt;
&lt;p&gt;In my first iteration of keyboard shortcuts, I had two or three commands. They were all triggered from the Detail View Controller (the large part of the screen). I wanted to add more keyboard shortcuts, but I was paralyzed with not knowing how to proceed.&lt;/p&gt;
&lt;p&gt;Ok. So, what was holding me up? I wasn’t sure which view controller in the app I needed to implement the keyboard command. Did I need to add them all to my Split View Controller class? Did I need to implement the commands in one view controller or the other, based on a user’s focus?&lt;/p&gt;
&lt;p&gt;I started by adding the commands to the split view controller class. But it turns out that isn’t the correct answer. The correct answer is that you implement the keyboard commands wherever you need them, and let the &lt;a href=&#34;https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/using_responders_and_the_responder_chain_to_handle_events&#34;&gt;Responder Chain&lt;/a&gt; take care of the rest.&lt;/p&gt;
&lt;h2 id=&#34;responder-chain-what&#34;&gt;Responder Chain? What?&lt;/h2&gt;
&lt;p&gt;In iOS, there is this thing called the responder chain. The responder chain is how iOS (and UIKit) determine how to handle events. This chain starts with the first responder and then traverses the rest of the chain looking to handle the event. In the case of UIKeyCommands, UIKit will traverse the responder chain and collect the UIKeyCommands for the current scenario.&lt;/p&gt;
&lt;p&gt;This WWDC video (&lt;a href=&#34;https://developer.apple.com/wwdc20/10109&#34; title=&#34;Support hardware keyboards in your app&#34;&gt;Support hardware keyboards in your app)&lt;/a&gt; does a fantastic job of explaining all of this. It’s also super short. I only discovered the video &lt;em&gt;after&lt;/em&gt; I figured out how this works.&lt;/p&gt;
&lt;p&gt;You may have noticed that the &lt;code&gt;UIApplicationDelegate&lt;/code&gt; class (usually called AppDelegate) is a subclass of &lt;code&gt;UIResponder&lt;/code&gt;. What you may not have noticed is that all &lt;code&gt;UIViewControllers&lt;/code&gt; and even &lt;code&gt;UIViews&lt;/code&gt; subclass &lt;code&gt;UIResponder&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;back-to-uikeycommand&#34;&gt;Back to UIKeyCommand&lt;/h2&gt;
&lt;p&gt;Getting back to where to implement the keyboard shortcuts. I ended up implementing the keyboard shortcuts for the list view (search, change guide, etc), in the list view controller. The keyboard shortcuts used in the detail view controller (like toggle favorite, next/previous section, etc) were implemented there.&lt;/p&gt;
&lt;p&gt;Like in part one, I’ve created a &lt;a href=&#34;https://github.com/rwgrier/UIKeyCommand-series/tree/part-2-splitview&#34;&gt;sample app&lt;/a&gt; to put this into practice. This sample app uses a Split View Controller and implements keyboard shortcuts where it makes sense. The sample app only has a few keyboard shortcuts.&lt;/p&gt;
&lt;p&gt;The list view controller has two keyboard shortcuts and so does the detail view controller.&lt;/p&gt;
&lt;p&gt;You may notice something strange about these keyboard shortcuts. Both have the “Show Info” keyboard shortcut. I did this as a test more than anything. I wanted to see what would happen if there are duplicate keyboard shortcuts. Likewise, I also wanted to see where this was called from when triggered. I discovered that found that the keyboard shortcut in the detail view controller usually wins. I think that’s because it’s the first responder in the chain that responds to this command.&lt;/p&gt;
&lt;p&gt;This may feel a bit overwhelming. But it’s not very difficult. The sample app should give you a better idea of how easy it is to implement keyboard shortcuts in a split view controller.&lt;/p&gt;
&lt;p&gt;There’s one more post in this series. Next time, we’ll stray away from iOS slightly to use UIKeyCommands to add menu items to a macOS Catalyst app.&lt;/p&gt;
&lt;h2 id=&#34;other-posts-in-the-series&#34;&gt;Other Posts in the Series&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://ryangrier.blog/2021/04/22/uikeycommand-part-1/&#34;&gt;Part 1&lt;/a&gt; | &lt;a href=&#34;https://ryangrier.blog/2021/04/28/uikeycommand-part-3/&#34;&gt;Part 3&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>&#39;UIKeyCommand — Part 1: The Basics&#39;</title>
      <link>https://ryangrier.blog/2021/04/21/uikeycommand-part-the.html</link>
      <pubDate>Wed, 21 Apr 2021 20:00:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2021/04/22/uikeycommand-part-the.html</guid>
      <description>&lt;p&gt;This post is the first in a series of three on UIKeyCommands on iOS. In this first post, we’ll go over &lt;code&gt;UIKeyCommand&lt;/code&gt; at a high level.&lt;/p&gt;
&lt;h2 id=&#34;what-are-uikeycommands&#34;&gt;What are UIKeyCommands?&lt;/h2&gt;
&lt;p&gt;UIKeyCommands represent a key press (or combination of key presses) on a hardware keyboard that will trigger an action. In short, you can think of these as keyboard shortcuts. The system already has a few built-in keyboard shortcuts. Some of these are keyboard shortcuts are Cut (⌘ + x), Copy (⌘ + c), and Paste (⌘ + v).&lt;/p&gt;
&lt;p&gt;Beginning in iOS 7, Apple started allowing developers to implement keyboard shortcuts. The system already handles Cut, Copy and Paste and developers won’t need to implement these.&lt;/p&gt;
&lt;p&gt;These keyboard shortcuts have been around for a few years. So, it’s easy to see how other developers have implemented these. A great way to discover what keyboard shortcuts apps have is to launch the app, and then hold down the command (⌘) key.  Here’s an example from my app &lt;a href=&#34;https://www.beerstyleguidelines.app&#34;&gt;Beer Style Guidelines&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ryangrier.blog/uploads/2022/6be6f57968.jpg&#34; alt=&#34;iPad Keyboard Shortcut Discovery&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;how-do-i-implement-my-own-uikeycommand&#34;&gt;How do I implement my own UIKeyCommand?&lt;/h2&gt;
&lt;p&gt;There are two parts to implement UIKeyCommands in your app. First, is the &lt;code&gt;UIKeyCommand&lt;/code&gt; object itself. Then these UIKeyCommands need to be integrated into the app.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://developer.apple.com/documentation/uikit/uikeycommand/3358593-init&#34; title=&#34;UIKeyCommand init&#34;&gt;initializer for UIKeyCommand&lt;/a&gt; has a lot going on. You don’t need to use every parameter. Here are the minimum parameters to create a UIKeyCommand object. Those parameters are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;: This is the display title of the keyboard shortcut.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;action&lt;/code&gt;: This parameter points to the method that gets called from this shortcut.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;input&lt;/code&gt;: This is the keyboard key (a string) that is part of the keyboard shortcut. For example, the “c” in the Copy shortcut (⌘ + c)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;modifierFlags&lt;/code&gt;: This is the modifying key that is the other part of the keyboard shortcut. For example, the &amp;ldquo;⌘&amp;rdquo; in the Copy shortcut (⌘ + c)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Putting all of this together, you can create a keyboard shortcut like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;let infoCommand = UIKeyCommand(title: &amp;quot;Show Info&amp;quot;,
                               action: #selector(showInfo),
                               input: &amp;quot;i&amp;quot;,
                               modifierFlags: .command)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In this example, the user will trigger a keyboard shortcut to show info when they use ⌘ + i. This will show them an iOS alert with a simple message in it.&lt;/p&gt;
&lt;p&gt;I’ve created a &lt;a href=&#34;https://github.com/rwgrier/UIKeyCommand-series/tree/part-1-basics&#34;&gt;sample app&lt;/a&gt; that pulls all the various pieces together. The sample app, is simple. It has a single keyboard shortcut. You can discover this just like keyboard shortcuts in other iOS apps.&lt;/p&gt;
&lt;p&gt;Download and run the sample app. Once launched, hold down on the Command key (⌘) until you see the prompt showing the single keyboard shortcut within the app.&lt;/p&gt;
&lt;h2 id=&#34;testing-in-the-simulator&#34;&gt;Testing in the simulator.&lt;/h2&gt;
&lt;p&gt;If nothing shows up, and you’re testing this in the simulator, you may need to enable “Send Keyboard Input to Device” in the simulator. This can be done through the menu system by selecting I/O → Input → Send Keyboard Input to Device. Or, you can click on this button in the toolbar (below) of the simulator. Without doing this, sometimes the keyboard shortcuts can be lost, and it will seem like the keyboard shortcuts are not working.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ryangrier.blog/uploads/2022/5f6d68c405.jpg&#34; alt=&#34;Send Keyboard Input to Device&#34;&gt;&lt;/p&gt;
&lt;p&gt;That’s it. Keyboard shortcuts are straightforward to set up and get working in your apps. Next time we’ll get a little more in-depth on UIKeyCommand.&lt;/p&gt;
&lt;h2 id=&#34;other-posts-in-the-series&#34;&gt;Other Posts in the Series&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://ryangrier.blog/2021/04/26/uikeycommand-part-2/&#34;&gt;Part 2&lt;/a&gt; | &lt;a href=&#34;https://ryangrier.blog/2021/04/28/uikeycommand-part-3/&#34;&gt;Part 3&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>General Update: March 2021</title>
      <link>https://ryangrier.blog/2021/03/30/general-update-march.html</link>
      <pubDate>Tue, 30 Mar 2021 22:00:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2021/03/31/general-update-march.html</guid>
      <description>&lt;p&gt;It’s been a busy month. I’m not even sure where the month went. I figured I’d post a general update on what I’ve been up to.&lt;/p&gt;
&lt;h2 id=&#34;development-updates&#34;&gt;Development Updates&lt;/h2&gt;
&lt;p&gt;I’ve been super busy at work, working on a new (to us) property. I’m not sure if I can announce what that property is yet, so I won’t. Once it launches, I’ll probably post an update here with more info.&lt;/p&gt;
&lt;p&gt;As far as personal projects go, I’ve shipped a large update to &lt;a href=&#34;https://www.beerstyleguidelines.app&#34;&gt;Beer Style Guidelines&lt;/a&gt;. This update includes the &lt;a href=&#34;https://www.brewersassociation.org/edu/brewers-association-beer-style-guidelines/&#34;&gt;Brewers Association 2021 Beer Style Guidelines&lt;/a&gt;. The release notes are &lt;a href=&#34;https://www.beerstyleguidelines.app/release-notes/2021.3.txt&#34;&gt;here&lt;/a&gt;. I love updating the app with new guides as they come out, but I always forget how much work it is. I do a fair bit of testing the guide out before I release it, but I just know that I’m going go missing something.&lt;/p&gt;
&lt;p&gt;This last few weeks, I’ve been really busy working on a few server components to another update to Beer Style Guidelines. It’s not ready yet and users shouldn’t notice any difference in how the app works. But this new set of server components it building towards some future features.&lt;/p&gt;
&lt;h2 id=&#34;gaming-updates&#34;&gt;Gaming Updates&lt;/h2&gt;
&lt;p&gt;I haven’t been playing many video games this month. I’ve been so busy with the development updates above, it doesn’t leave a lot of time for playing video games at night.&lt;/p&gt;
&lt;p&gt;I’ve dabbled in a few new games, but nothing has really hooked me. I think if a game hooked me, I’d find a way to play the game more.&lt;/p&gt;
&lt;p&gt;Some of the games I’ve started:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nintendo.com/games/detail/lego-harry-potter-collection-switch/&#34;&gt;LEGO Harry Potter Collection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.microsoft.com/en-us/p/gears-of-war-ultimate-edition/bqt21vxfs52f&#34;&gt;Gears of War Ultimate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nintendo.com/games/detail/pikmin-3-deluxe-switch/&#34;&gt;Pikmin 3 Deluxe&lt;/a&gt; (demo)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nintendo.com/games/detail/hollow-knight-switch/&#34;&gt;Hollow Knight&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I probably spent the most time playing LEGO Harry Potter Collection. I love LEGO games, they aren’t usually hard, and I can let my mind wander a bit while playing through them.&lt;/p&gt;
&lt;p&gt;I stared Gears of War, but didn’t make it too far in. I’ve played through this game a few times, years ago. I have a lot of fond memories playing through these with my brother. But I just couldn&amp;rsquo;t really get into it again.&lt;/p&gt;
&lt;p&gt;I finished the Pikmin 3 demo, but not sure I’m ready for the full game yet. I love the early game of Pikmin games, but I always get to a point where I get frustrated with the games. It’s probably because I’m bad at video games. I’m still debating whether I want to get this game or not.&lt;/p&gt;
&lt;p&gt;I tried Hollow Knight. I’ve heard so many good things about it. It made me realize (even more) that I’m bad at video games. I couldn’t even get past the first boss (&lt;a href=&#34;https://hollowknightwiki.com/false-knight/&#34;&gt;False Knight&lt;/a&gt;) before getting frustrated and giving up. I feel like I should keep at it, but I am just so bad at this game.&lt;/p&gt;
&lt;h2 id=&#34;book-update&#34;&gt;Book Update&lt;/h2&gt;
&lt;p&gt;I’ve read a handful of books this month. Looking back at the list, it was more than I expected. I listen to most of my books. It makes it much easier to enjoy books while I go for walks, runs, or while driving in the car.&lt;/p&gt;
&lt;p&gt;In March, I finished these books:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Bossypants&#34;&gt;Bossypants&lt;/a&gt; by Tina Fey&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://books.disney.com/book/into-the-dark/&#34;&gt;Into the Dark (Star Wars: The High Republic)&lt;/a&gt; by Cladia Gray&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.penguinrandomhouse.com/books/625412/star-wars-the-rise-of-skywalker-graphic-novel-adaptation-by-alessandro-ferrari/&#34;&gt;Star Wars: The Rise of Skywalker Graphic Novel Adaptation&lt;/a&gt; by Alessandro Ferrari&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gumroad.com/l/leaddeveloper&#34;&gt;Lead Developer: best practices and tips for lead software developers&lt;/a&gt; by Jeroen Leenarts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bossypants was a fun, quick read. I like Tina Fey and the work she’s done. This book was written during her time working on 30 Rock (which was a great show). Tina is also an Eagles fan, so that helps immensely.&lt;/p&gt;
&lt;p&gt;I am a big fan of the new Star Wars: The High Republic content that’s been coming out this year. It’s an entirely new era being discovered in Star Wars. I’ve been keeping up with the novels and comic books in this ear and have really been enjoying them. I listened to about half of this book in a single day during a long road trip.&lt;/p&gt;
&lt;p&gt;I really enjoyed the art style in Star Wars: The Rise of Skywalker Graphic Novel Adaptation. The graphic novel adaptation gets the bulk of the story across from the movie and the (non-graphic) novel adaptation. I still enjoying reading comics on my iPad. Although, I only really list the graphic novels or omnibuses on my list of books I’ve read.&lt;/p&gt;
&lt;p&gt;The Lead Developer book was an impulse read of mine. I saw it promoted by some iOS developers I follow on Twitter, so I decided to buy it. The book is a good first version. There were a handful of typos throughout the book, but I could easily see past those. But the book does give a good overview of what a lead developer’s responsibilities are and some practical tips on how to survive as one. This is a relatively short book that I read in 3 or 4 sittings.&lt;/p&gt;
&lt;h2 id=&#34;wrapping-up&#34;&gt;Wrapping up&lt;/h2&gt;
&lt;p&gt;This has been quite a busy month. I didn’t even cover the movies and TV shows that we’ve been watching. Maybe I’ll cover that in a different post, maybe not.&lt;/p&gt;
&lt;p&gt;I hope to provide more frequent updates on the site. But I’m not always great with that.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>MyCndwn - TestFlight</title>
      <link>https://ryangrier.blog/2021/01/15/mycndwn-testflight.html</link>
      <pubDate>Fri, 15 Jan 2021 12:30:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2021/01/15/mycndwn-testflight.html</guid>
      <description>&lt;p&gt;This past weekend, MyCntdwn took a step forward. I sent a new build of it to Apple’s &lt;a href=&#34;https://en.wikipedia.org/wiki/TestFlight&#34;&gt;TestFlight&lt;/a&gt;. It’s the first time a MyCntdwn build has been uploaded to TestFlight in years.&lt;/p&gt;
&lt;p&gt;This doesn’t really mean anything is going to happen with it. I just wanted to upload a new build so that I can test things on multiple devices in a (more) real world environment.&lt;/p&gt;
&lt;p&gt;Once I downloaded the TestFlight build, I immediately found 5 or 6 bugs. My iCloud syncing also didn’t work. But at least that gives me some important information. It gives me plenty of things to look into.&lt;/p&gt;
&lt;p&gt;I haven’t had a lot of time to invest in MyCntdwn so far this month. I’ve got another app (through work) which is shipping very soon and has captured most (if not all) of my attention. I hope things change soon. Either that, or I’ll be totally burnt out on dev work and need to just sit and stare at the wall for a while.&lt;/p&gt;
&lt;p&gt;Either way, I’m happy with this latest step. It’s a step. It means that I’m moving forward and continuing with the process.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>MyCntdwn Lives?</title>
      <link>https://ryangrier.blog/2020/12/16/mycntdwn-lives.html</link>
      <pubDate>Wed, 16 Dec 2020 20:00:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2020/12/17/mycntdwn-lives.html</guid>
      <description>&lt;p&gt;Over a year ago, I &lt;a href=&#34;https://ryan.grier.co/2019/10/22/sad-day/&#34;&gt;removed MyCntdwn from the App Store&lt;/a&gt;. But I’m not sure that’s the end of the story for MyCntdwn.&lt;/p&gt;
&lt;p&gt;I’ve been working on an update to MyCntdwn for a long time now. I’ve had multiple starts and stops. This &lt;em&gt;could&lt;/em&gt; just be another false start in the lifecycle of MyCntdwn. I&amp;rsquo;m not really sure just yet.&lt;/p&gt;
&lt;h2 id=&#34;why-am-i-doing-this&#34;&gt;Why am I doing this?&lt;/h2&gt;
&lt;p&gt;Working on MyCntdwn is a mechanism for learning new things. In my normal &lt;a href=&#34;https://www.linkedin.com/in/rwgrier/&#34;&gt;day job&lt;/a&gt;, I don’t usually get to play with the latest and greatest technologies. The apps I’m working on currently support iOS 12+. We do get some time set aside to learn new tech, but we rarely ever get to apply it. This gives me the chance to do that.&lt;/p&gt;
&lt;p&gt;I’ve started this latest iteration/update of MyCntdwn with a brand new Xcode project. I started from scratch. Nothing has transferred directly over. I’ve been using old code as a reference, but nothing has been directly copied over.&lt;/p&gt;
&lt;p&gt;I’ve been using a lot of things I just can’t use in my day job. &lt;a href=&#34;https://developer.apple.com/xcode/swiftui/&#34;&gt;SwiftUI&lt;/a&gt;, &lt;a href=&#34;https://developer.apple.com/documentation/combine&#34;&gt;Combine&lt;/a&gt;, &lt;a href=&#34;https://developer.apple.com/icloud/cloudkit/&#34;&gt;CloudKit&lt;/a&gt; (cloud sync, finally!), etc. The learning curve for these technologies has been steep, but it’s exactly what I have been looking for. This has given me a chance to learn new technologies, and apply them in a real-world app.&lt;/p&gt;
&lt;p&gt;The template that I chose for this project may allow me to release a native macOS app too. Not &lt;a href=&#34;https://developer.apple.com/mac-catalyst/&#34;&gt;Catalyst&lt;/a&gt;, but built with native SwiftUI code. I haven’t actually tried this yet, I’ve been focused on the iOS experience, but I plan to at some point.&lt;/p&gt;
&lt;p&gt;I may even try to include one or more widgets for the app using &lt;a href=&#34;https://developer.apple.com/widgets/&#34;&gt;WidgetKit&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;why-am-i-doing-this-with-mycntdwn&#34;&gt;Why am I doing this with MyCntdwn?&lt;/h2&gt;
&lt;p&gt;I’m not really sure. I have had other app ideas, but nothing has really taken root in my brain. MyCntdwn was my first (shipping) app in the App Store (shortly after the App Store launched) and continues to be my baby (app-wise).&lt;/p&gt;
&lt;p&gt;MyCntdwn also gives me a comfortable app to play in. I know how it should work. I know the feature list. I’m not trying to solidify a new idea while also learn new technologies. So far, It’s been working out nicely.&lt;/p&gt;
&lt;h2 id=&#34;whats-next&#34;&gt;What’s next?&lt;/h2&gt;
&lt;p&gt;I’m just going to keep at it. Learning new things and applying them to MyCntdwn. I’m not sure if these changes will ever go anywhere. But I’ve had a lot of fun learning. Who knows, I may even be able to use them in my day job in a year or two.&lt;/p&gt;
&lt;p&gt;Or I may get distracted with video games (currently playing &lt;a href=&#34;https://www.nintendo.com/games/detail/the-legend-of-zelda-a-link-between-worlds-3ds/&#34;&gt;The Legend of Zelda: A Link Between Worlds&lt;/a&gt; again) and abandon this entirely.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Getting Out of My Technical Rut</title>
      <link>https://ryangrier.blog/2020/06/10/getting-out-of.html</link>
      <pubDate>Wed, 10 Jun 2020 18:30:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2020/06/10/getting-out-of.html</guid>
      <description>&lt;p&gt;I’ve spent about six months in a technical rut. Not really learning anything new iOS/tvOS/Swift-wise. I got a little complacent with the skills that I had.&lt;/p&gt;
&lt;p&gt;Recently, I’ve started breaking out of that rut. At least I hope.&lt;/p&gt;
&lt;p&gt;Over the past week and a half, I’ve made my way through &lt;a href=&#34;https://store.raywenderlich.com/products/core-data-by-tutorials&#34;&gt;Core Data by Tutorials&lt;/a&gt; from the Ray Wenderlich team. The Core Data book is currently on sale (50% off). It’s a really good book.&lt;/p&gt;
&lt;p&gt;I’ve used Core Data quite a bit over the years, but I haven’t used it heavily since 2016. Since 2016, most of my professional work has been using &lt;a href=&#34;https://realm.io&#34;&gt;Realm&lt;/a&gt; which is an alternative to Core Data.&lt;/p&gt;
&lt;p&gt;Core Data by Tutorials was a really nice refresher on Core Data. I also learned a few new tidbits here. Most interesting chapters to me were “Unit Testing” &amp;amp; “Core Data &amp;amp; CloudKit”.&lt;/p&gt;
&lt;p&gt;The unit testing chapter gave me some great ideas on how to improve my unit testing in various areas. I’ve been trying to get better with unit testing in both professional and personal projects. This chapter sparked some interest in that area that I’ve been able to progress with, so far.&lt;/p&gt;
&lt;p&gt;The Core Data and CloudKit chapter was entirely new to me. I’ve had multiple false starts on getting cloud syncing working in projects. These attempts include a failed blog series called &lt;a href=&#34;https://ryan.grier.co/2017/10/24/data-sync-series-part-5/&#34;&gt;Data Sync Series&lt;/a&gt;. I had also made multiple attempts to get syncing into my &lt;a href=&#34;https://ryan.grier.co/2019/10/22/sad-day/&#34;&gt;retired app MyCntdwn&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This book has got me thinking about data syncing again. I’ve even thought about doing a few things. First, adding sync to MyCntdwn (finally) and shipping it again. Second, revamping my data sync series and actually finishing it. I’m not sure if any of this will happen. But this book has got me started down that path mentally. Who knows, maybe it will be a nice Summer project.&lt;/p&gt;
&lt;p&gt;I’ve got my next book lined up. It’s &lt;a href=&#34;https://store.raywenderlich.com/products/combine-asynchronous-programming-with-swift&#34;&gt;Combine: Asynchronous Programming with Swift&lt;/a&gt; also from the Ray Wenderlich team. I’ve been dabbling in Combine here and there since it was announced by Apple at least year’s WWDC. It’s not something I can really use professionally, yet. Combine requires iOS 13+ to work and we support iOS 11+ at work. But Combine &lt;em&gt;is&lt;/em&gt; something that I can use in personal projects.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Beer Style Guidelines 2020.5 Released</title>
      <link>https://ryangrier.blog/2020/04/28/beer-style-guidelines.html</link>
      <pubDate>Tue, 28 Apr 2020 22:30:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2020/04/29/beer-style-guidelines.html</guid>
      <description>&lt;p&gt;My latest release of &lt;a href=&#34;https://apps.apple.com/us/app/beer-styles-bjcp-2015/id998139111?ls=1&#34;&gt;Beer Style Guidelines&lt;/a&gt; has just gone out.&lt;/p&gt;
&lt;p&gt;This version of Beer Style Guidelines (finally) includes a new beer style guideline. I’ve just added the &lt;a href=&#34;https://www.brewersassociation.org/edu/brewers-association-beer-style-guidelines/&#34;&gt;Brewers Association 2020 Beer Style Guidelines&lt;/a&gt;. This is the first guide update I’ve done since the 2017 version of this same guide.&lt;/p&gt;
&lt;p&gt;The other (included) guides from the Brewers Association are so old (2016 &amp;amp; 2017), I’ve removed them from the app. I’m not aware of many people who like to compare the guidelines from year to year. To me, it only makes sense to have the latest version included in the app.&lt;/p&gt;
&lt;p&gt;I’ve also fixed a few bugs within the app. But the largest change is the new guide being added.&lt;/p&gt;
&lt;p&gt;Full list of release notes: &lt;a href=&#34;https://beerstyleguidelines.app/release-notes/2020.5.txt&#34;&gt;https://beerstyleguidelines.app/release-notes/2020.5.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please enjoy the update.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Beer Style Guidelines 2019.1 Released</title>
      <link>https://ryangrier.blog/2019/11/03/beer-style-guidelines.html</link>
      <pubDate>Sun, 03 Nov 2019 15:30:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2019/11/03/beer-style-guidelines.html</guid>
      <description>&lt;p&gt;This past week, I released a new version of &lt;a href=&#34;https://apps.apple.com/us/app/beer-styles-bjcp-2015/id998139111?ls=1&#34;&gt;Beer Style Guidelines&lt;/a&gt;. It’s the first update to the app in almost two years (Nov 6, 2017). Talk about a neglected app!&lt;/p&gt;
&lt;h2 id=&#34;whats-since-the-last-version&#34;&gt;What’s since the last version&lt;/h2&gt;
&lt;p&gt;Here’s a full list of the things I’ve changed in the app since the last release. Most of it happening in the last month or so.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tore out &lt;a href=&#34;https://get.fabric.io&#34;&gt;Fabric&lt;/a&gt;/&lt;a href=&#34;https://fabric.io/kits/ios/crashlytics&#34;&gt;Crashlytics&lt;/a&gt; (good riddance)&lt;/li&gt;
&lt;li&gt;Set the deployment target for iOS 13+.&lt;/li&gt;
&lt;li&gt;Added Light/Dark mode support.&lt;/li&gt;
&lt;li&gt;Fixed the search bar (it was broken in iOS 13).&lt;/li&gt;
&lt;li&gt;Fixed a slew of compiler warnings (but not all 😔).&lt;/li&gt;
&lt;li&gt;Fixed a stupid iOS 13 Navigation (title) bar issue.&lt;/li&gt;
&lt;li&gt;Changed the versioning scheme from &lt;code&gt;major.minor&lt;/code&gt; to &lt;code&gt;year.release&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;fabriccrashlytics&#34;&gt;Fabric/Crashlytics&lt;/h3&gt;
&lt;p&gt;This was one of the first things I did in this release. I actually tore it out in March of this year.&lt;/p&gt;
&lt;p&gt;I tore out Fabric/Crashlytics for several reasons. It always made me feel a little gross using it. It’s not owned by me (it’s now owned by Google). I don’t &lt;em&gt;really&lt;/em&gt; know what they do with the data. And what they do with the data can change at any moment. They are also shutting Fabric/Crashlytics down early next year, so it’s going away anyway.&lt;/p&gt;
&lt;p&gt;I have written my own analytics reporting engine. I think it’s mostly ready to go. But I’m not certain about it yet and I didn’t want to hold up an already two-year old release for this. For this release (at least), I rely on Apple’s &lt;a href=&#34;https://developer.apple.com/app-store-connect/analytics/&#34;&gt;App Analytics&lt;/a&gt;.  I’m still not certain if/when my own analytics reporting engine will be put in place. For now, I’m focusing on other things.&lt;/p&gt;
&lt;h3 id=&#34;ios-13&#34;&gt;iOS 13+&lt;/h3&gt;
&lt;p&gt;I think this is pretty self explanatory. I want to be able to support the latest and greatest that Apple has to offer. I will probably continue this every year by moving to the latest/greatest iOS version.&lt;/p&gt;
&lt;h3 id=&#34;lightdark-mode&#34;&gt;Light/Dark Mode&lt;/h3&gt;
&lt;p&gt;I’ve been wanting to add this for a long time. I’ve been tinkering with this off and on (mostly off) for three years. I have a really old branch in my GitHub repo called &lt;code&gt;themes&lt;/code&gt;. I’ve been wanting to do this for a long time. It’s finally here.&lt;/p&gt;
&lt;h3 id=&#34;misc-ios-13-issueswarnings&#34;&gt;Misc iOS 13 Issues/Warnings&lt;/h3&gt;
&lt;p&gt;This release also has bunch of iOS 13 specific fixes.&lt;/p&gt;
&lt;p&gt;For example, when I upgraded to iOS 13, the search bar was acting silly. I think it was the way I had the list of Style Guide Chapters setup. I had to re-work a number of things to make this work correctly. But it’s all for the better now.&lt;/p&gt;
&lt;p&gt;I also fixed a number of compiler warnings (deprecations mostly) that were introduced since I last worked on the project. I still have 4 or 5 warnings left. I plan on tackling these soon™.&lt;/p&gt;
&lt;h3 id=&#34;version-number-change&#34;&gt;Version Number Change&lt;/h3&gt;
&lt;p&gt;My last version was 1.9. This version is 2019.1. This makes sense to me. It’s the first release in 2019. The next version (if this year) will be 2019.2. I took cues from &lt;a href=&#34;https://blog.curtisherbert.com&#34;&gt;Curtis Herbert&lt;/a&gt; and &lt;a href=&#34;https://marco.org&#34;&gt;Marco Arment&lt;/a&gt;. I think (a small) part of the reason I waited so long for a release was I knew I wanted to call it 2.0, but I wasn’t sure when was a good time to call it done. Now I just plan on adding a new feature or fixing some bugs and shipping it. No more fretting over what’s “enough” for a major release.&lt;/p&gt;
&lt;h2 id=&#34;website-re-launch&#34;&gt;Website Re-Launch&lt;/h2&gt;
&lt;p&gt;There was a point in time when I had a website for Beer Style Guidelines. I just don’t know why I 1: let the domain lapse and 2: let it die.&lt;/p&gt;
&lt;p&gt;So, I relaunched the site as &lt;a href=&#34;https://beerstyleguidelines.app&#34;&gt;https://beerstyleguidelines.app&lt;/a&gt;. I’m using the really old design for it. I have plans to update it. But I wanted to get something together for the launch of this version. I also needed to have a privacy policy page together for Apple and the App Store (which is a good thing).&lt;/p&gt;
&lt;h2 id=&#34;whats-next&#34;&gt;What’s Next?&lt;/h2&gt;
&lt;p&gt;I’ve already started on the next version of the app.&lt;/p&gt;
&lt;p&gt;In the app now, I’m using a &lt;a href=&#34;https://developer.apple.com/documentation/uikit/uiwebview&#34;&gt;UIWebView&lt;/a&gt; to display the guide chapter contents. &lt;code&gt;UIWebView&lt;/code&gt; has been deprecated by Apple (as of iOS 12) and will eventually be removed from the OS.&lt;/p&gt;
&lt;p&gt;Apple suggests moving to &lt;a href=&#34;https://developer.apple.com/documentation/webkit/wkwebview&#34;&gt;WKWebView&lt;/a&gt; instead which is currently supported by them. However, I’m not sure I want to do that. I was never a fan of using a web view to display the heart of the content to users. There is also a very slight delay in displaying the content for the first time. This slight delay also exists in &lt;code&gt;WKWebView&lt;/code&gt;. I’ve been toying around with other ways of displaying the data and I think I have a pretty good solution. It currently has some drawbacks that I need to fix before I can even think about shipping this.&lt;/p&gt;
&lt;p&gt;After a few more releases like this (modernizing the app in many places), I also want to start thinking about a macOS app. I also need to get new guides into the app. I currently have 3, but the last “new” guide was added in 2017. It’s almost 2020. Time to get more recent guides in place.&lt;/p&gt;
&lt;p&gt;I already have a short mental list of what I want to change on the website. For starters, I need to add dark mode support. I hope to get that into place in the next week or two.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Sad Day</title>
      <link>https://ryangrier.blog/2019/10/22/sad-day.html</link>
      <pubDate>Tue, 22 Oct 2019 13:30:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2019/10/22/sad-day.html</guid>
      <description>&lt;p&gt;Yesterday was a bit of a sad day for me. I retired two apps of mine from the iOS App Store. I removed both MyCntdwn and Showers: White Noise Generator from sale.&lt;/p&gt;
&lt;p&gt;I had mentioned that it may come to this in my last post (&lt;a href=&#34;https://ryan.grier.co/2019/07/19/summer-2019-development-goals/&#34;&gt;Summer 2019 Development Goals&lt;/a&gt;). I made some progress with updates for both MyCtndwn and &lt;a href=&#34;https://apps.apple.com/us/app/beer-style-guidelines/id998139111?ls=1&#34;&gt;Beer Style Guidelines&lt;/a&gt;. But ultimately I decided that the progress on MyCntdwn wasn’t enough to continue forward with it.&lt;/p&gt;
&lt;p&gt;MyCntdwn has been in the App Store since shortly after the App Store launched (in 2008). It was actually coming up on it’s 11th birthday. But I have also lost a bit of motivation to keep maintaining it. I haven’t made any valuable updates since the iPhone X was released two years ago. I’ve had plans on big updates to the app, but just could never get things going.&lt;/p&gt;
&lt;p&gt;Showers is a much more recent app. I launched this app in early 2014. The last update to it was in 2016. I hadn’t even planning on making any future updates to it. I was just holding onto it. Retiring this app was a much easier decision and I’m surprised that I didn’t do it earlier.&lt;/p&gt;
&lt;p&gt;There is good news from all of this. I can finally stop making half-hearted efforts on two different apps and focus instead on making updates to my remaining app: Beer Style Guidelines.&lt;/p&gt;
&lt;p&gt;Beer Style Guidelines is still alive and kicking. There hasn’t been an update to it for a little while. But I have one in the works. A small update with iOS 13 compatibility should be submitted in a few weeks. I have a few small (I hope) bugs to work out and then I can submit it for review. In upcoming versions, I plan on rewriting most of what’s under the hood and adding new/updated style guides.&lt;/p&gt;
&lt;p&gt;I hope that officially retiring two of my apps will open up some mental capacity for me to keep Beer Style Guidelines updated and fresh.&lt;/p&gt;
&lt;p&gt;On the off chance that anyone would like to purchase either MyCntdwn or Showers: White Noise Generator from me to take over development and maintenance. Please reach out to me &lt;a href=&#34;https://www.twitter.com/rwgrier&#34;&gt;on twitter&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Summer 2019 Development Goals</title>
      <link>https://ryangrier.blog/2019/07/19/summer-development-goals.html</link>
      <pubDate>Fri, 19 Jul 2019 13:30:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2019/07/19/summer-development-goals.html</guid>
      <description>&lt;p&gt;I’ve made a set of goals for the Summer. In the recent past I have been bad about making goals. I’ve been so busy with life, that I’ve just tried hanging on and making it through.&lt;/p&gt;
&lt;p&gt;This Summer, I want to do some quality development work on both &lt;a href=&#34;https://apps.apple.com/us/app/mycntdwn/id293970065?ls=1&#34;&gt;MyCntdwn&lt;/a&gt; and &lt;a href=&#34;https://apps.apple.com/us/app/beer-style-guidelines/id998139111?ls=1&#34;&gt;Beer Style Guidelines&lt;/a&gt;. The thing is that I say this every Summer. And for the last few Summers, I haven’t done enough quality work to ship anything.  I’ve even gone as far as committing to a &lt;a href=&#34;https://medium.com/@rwgrier/data-sync-series-part-1-bb492efebab9&#34;&gt;Data Sync Series&lt;/a&gt; which I eventually gave up on.&lt;/p&gt;
&lt;p&gt;It’s been tough the last few years. I have a lot of things that I want to do, but I haven’t made this development work a priority. Other things in life have been a higher priority (work, family, etc). They still are, but this Summer I am going to do a better job of removing the time wasters. Instead of vegging out and watching a series of stupid TV shows in the evening, I’m going to do more development work.&lt;/p&gt;
&lt;p&gt;I’ve decided that if I don’t do some good work and actually ship app updates this Fall, I’m going to stop development on these apps. It’s not fair to the small number of users I have to keep these apps in the Apps Store and not properly support them.&lt;/p&gt;
&lt;p&gt;So far I’ve made some nice progress.&lt;/p&gt;
&lt;p&gt;I’ve torn out all 3rd party analytic support in favor of one that I’ve written myself. This in itself has been a year-long project (with long breaks). This one I’ve written allows me to have much finer control over what’s being sent to my analytics backend. There’s no sneaky stuff going on there. And the users can easily turn all analytics tracking off.&lt;/p&gt;
&lt;p&gt;I’ve also enabled &lt;a href=&#34;https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/dark-mode/&#34;&gt;Dark Mode&lt;/a&gt; support for both apps. I already had support for this in MyCntdwn. But now that it’s supported at the OS level, I was able to rip out a bunch of code I no longer need.&lt;/p&gt;
&lt;p&gt;I’m currently tinkering with &lt;a href=&#34;https://developer.apple.com/xcode/swiftui/&#34;&gt;SwiftUI&lt;/a&gt; and seeing if I can replace a bunch of UI-based code and Storyboards with SwiftUI. Early indications are that I will be able to. I’m not 100% certain yet. I need to do more exploration with SwiftUI.&lt;/p&gt;
&lt;p&gt;Next on my list will be to support data sync. It looks like they’ve made that much easier in iOS 13. But I’m not there yet. So I’m not going to get my hopes up with it.&lt;/p&gt;
&lt;p&gt;And if this all works out nicely. I may even try to make them both macOS apps with &lt;a href=&#34;https://developer.apple.com/ipad-apps-for-mac/&#34;&gt;Catalyst&lt;/a&gt;. But this is &lt;em&gt;way&lt;/em&gt; down the road for me.&lt;/p&gt;
&lt;p&gt;As you can see I’ve got some lofty development goals here. I just hope I can make them enough of a priority in my life to get them done. Honestly, I’d be happy shipping what I’ve done already when it’s time. But I want to do more. Stay tuned to see if I actually follow through on these plans.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Finally Watching WWDC 2019 Videos</title>
      <link>https://ryangrier.blog/2019/07/10/finally-watching-wwdc.html</link>
      <pubDate>Wed, 10 Jul 2019 20:30:00 -0400</pubDate>
      
      <guid>http://rwgrier.micro.blog/2019/07/11/finally-watching-wwdc.html</guid>
      <description>&lt;p&gt;I’ve finally had a minute (or 60) to sit down and start watching videos from WWDC 2019. I know, I’m over a month late to the show.&lt;/p&gt;
&lt;p&gt;I watched both the &lt;a href=&#34;https://developer.apple.com/videos/play/wwdc2019/101/&#34;&gt;Keynote&lt;/a&gt; and &lt;a href=&#34;https://developer.apple.com/videos/play/wwdc2019/103/&#34;&gt;Platforms State of the Union&lt;/a&gt; on the first day of WWDC. But since then, I’ve been so busy with work and other stuff that I haven’t had much time to catch up.&lt;/p&gt;
&lt;p&gt;From the keynote and state of the union videos, I knew SwiftUI looked amazing. But I didn’t get a real sense of it until this week.&lt;/p&gt;
&lt;p&gt;I watched &lt;a href=&#34;https://developer.apple.com/videos/play/wwdc2019/204/&#34;&gt;Introducing SwiftUI: Building Your First App&lt;/a&gt;. That was such a good video/session. I feel like I need to watch it again. I’m also looking forward to watching the other SwiftUI videos and learning much more about SwiftUI.&lt;/p&gt;
&lt;p&gt;I think Apple really nailed it with SwiftUI. It looks so simple and intuitive. I should be able to remove a lot of code in my personal apps (and eventually professional apps) because of SwiftUI.&lt;/p&gt;
&lt;p&gt;Tonight, I had a chance to sit down and start tinkering with SwiftUI. I currently feel like I’m lost in the woods with some things. It’s a bit overwhelming at first. There’s a lot going on that I don’t know how to do yet (interaction with Timers and Core Data). I need to watch more of Apple’s videos and really dig into the code a bit more.&lt;/p&gt;
&lt;p&gt;I’ve got plans to update both &lt;a href=&#34;https://apps.apple.com/us/app/mycntdwn/id293970065?ls=1&#34;&gt;MyCntdwn&lt;/a&gt; and &lt;a href=&#34;https://apps.apple.com/us/app/beer-style-guidelines/id998139111?ls=1&#34;&gt;Beer Style Guidelines&lt;/a&gt; to use SwiftUI (among other new features). I’m really hoping that I get good chunks of time this Summer to really dive in and learn the new stuff.&lt;/p&gt;
&lt;p&gt;I just hope I have some time to actually make updates to my apps. Like for real this time. Things are so busy with the kids, that I rarely have much time to do this sort of thing anymore.&lt;/p&gt;
&lt;p&gt;But this Summer, I’m determined to watch many more videos from WWDC and incorporate new technologies into my apps.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>