<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Airlist</title>
    <description>A special outliner for your dreams, ideas, lists, and projects</description>
    <link>https://airlist.app/</link>
    <item>
  <title>iOS 26 and MacOS 26 Updates</title>
  <link>https://airlist.app/blog/ios_26</link>
  <description>
    <![CDATA[<p>
Out now is the iOS 26 and MacOS 26 update for Airlist. Excited how this turned out.</p>
<p>
  <img alt="Shortcuts" class="feature_image" src="/images/new_menu.gif" />
</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
Out now is the iOS 26 and MacOS 26 update for Airlist. Excited how this turned out.</p>
<p>
  <img alt="Shortcuts" class="feature_image" src="/images/new_menu.gif" />

  <img alt="Shortcuts" class="feature_image" src="/images/new_plus_button.gif" />

  <img alt="Shortcuts" class="feature_image" src="/images/new_command_center.png" />

  <img alt="Shortcuts" class="feature_image" src="/images/new_date_picker.png" />

  <img alt="Shortcuts" class="feature_image" src="/images/new_menu_dark.png" />

  <img alt="Shortcuts" class="feature_image" src="/images/new_menu.png" />
</p>
]]>
  </content:encoded>
  <pubDate>Thu, 02 Oct 2025 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/ios_26</guid>
</item>
<item>
  <title>Undo Comes to Airlist</title>
  <link>https://airlist.app/blog/undo</link>
  <description>
    <![CDATA[<p>
  <img alt="undo" class="feature_image" src="/images/undo.png" />
</p>
<p>
Ever accidentally marked a task complete? Moved something to the wrong place? Deleted an item you meant to keep? Today, I’m excited to announce that Undo has arrived in Airlist.</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
  <img alt="undo" class="feature_image" src="/images/undo.png" />
</p>
<p>
Ever accidentally marked a task complete? Moved something to the wrong place? Deleted an item you meant to keep? Today, I’m excited to announce that Undo has arrived in Airlist.</p>
<h2>
How It Works</h2>
<p>
On iPhone, just shake your device to undo the last action, or press the ( … ) button in the top right and select Undo… On iPad and Mac, use Cmd+Z. Airlist remembers your last 30 actions, so you can step back through recent changes one at a time. </p>
<p>
Almost everything can be undone: completing tasks, moving items, deleting, editing names and notes, changing dates, starring items, collapsing sections, and more. </p>
<h2>
Under the Hood</h2>
<p>
Building Undo for a sync-first app presented interesting challenges. Each undoable action captures its previous state, and when you undo, Airlist reverses the change both locally and across all your devices. Deleted items are fully restored with all their properties intact. Complex operations like indent/outdent that affect multiple items are unwound in the correct order.</p>
<h2>
Try It Out</h2>
<p>
Undo is available now in Airlist on iPhone, iPad, and Mac in the App Store. Give it a shake (or a Cmd+Z) and let me know what you think. As always, I’d love to hear your feedback at help@airlist.app.</p>
]]>
  </content:encoded>
  <pubDate>Wed, 18 Jun 2025 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/undo</guid>
</item>
<item>
  <title>New Deep Shortcuts Integration</title>
  <link>https://airlist.app/blog/shortcuts-update</link>
  <description>
    <![CDATA[<p>
Today is a huge update for Airlist with a new deep integration with Apple Shortcuts.</p>
<p>
  <img alt="Shortcuts" class="feature_image" src="/images/shortcuts.png" />
</p>
<p>
Included are 9 new shortcut actions that allow you to create custom automations and workflows.</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
Today is a huge update for Airlist with a new deep integration with Apple Shortcuts.</p>
<p>
  <img alt="Shortcuts" class="feature_image" src="/images/shortcuts.png" />
</p>
<p>
Included are 9 new shortcut actions that allow you to create custom automations and workflows.</p>
<ul>
  <li>
Create Item  </li>
  <li>
Edit Item  </li>
  <li>
Find Item  </li>
  <li>
Get Item  </li>
  <li>
Get Items from a Saved Search  </li>
  <li>
Get Current View Information   </li>
  <li>
Open Item  </li>
  <li>
Open Saved Search  </li>
  <li>
Run Airlist URL  </li>
</ul>
<p>
<a href="https://airlist.app/blog/shortcuts">Read about the details of each shortcut here.</a></p>
<p>
These new actions allow you to do some powerful new automations. For example:</p>
<ul>
  <li>
Find all items with the tag #someday that are 30 days old and set the start date to tomorrow  </li>
  <li>
Create a new item due tomorrow at 1:00pm  </li>
  <li>
Find all overdue items and set their due date to today  </li>
  <li>
Create an item called Archive and move all completed items to it  </li>
</ul>
<p>
Have fun! </p>
]]>
  </content:encoded>
  <pubDate>Tue, 16 Jan 2024 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/shortcuts-update</guid>
</item>
<item>
  <title>New Customization and Enhanced Editing</title>
  <link>https://airlist.app/blog/1-14</link>
  <description>
    <![CDATA[<h2>
Customize appearance with new accent colors</h2>
<p>
Now you can customize the appearance of Airlist by picking your own accent color option (along with dark/light mode).</p>
<h2>
Split items by pressing return while editing</h2>
<p>
  <img alt="Split Items" class="feature_image" src="/images/split_item.gif" />
</p>
<h2>
Pressing backspace while editing an item, that item’s text will append to the item above</h2>
<p>
  <img alt="Merge Items" class="feature_image" src="/images/merge_item.gif" />
</p>
<p>
…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<h2>
Customize appearance with new accent colors</h2>
<p>
Now you can customize the appearance of Airlist by picking your own accent color option (along with dark/light mode).</p>
<p>
  <img alt="Accent Colors" class="feature_image" src="/images/accent_colors.png" />
</p>
<h2>
Split items by pressing return while editing</h2>
<p>
Sometimes, you might want to break a task or note into smaller parts. With this update, you can easily split items by pressing return while editing. </p>
<p>
  <img alt="Split Items" class="feature_image" src="/images/split_item.gif" />
</p>
<h2>
Pressing backspace while editing an item, that item’s text will append to the item above</h2>
<p>
It’s also easier to merge items. If you press backspace while editing an item, the text will automatically append to the item above. </p>
<p>
  <img alt="Merge Items" class="feature_image" src="/images/merge_item.gif" />
</p>
<p>
And of course, we’ve also made some bug fixes and improvements.</p>
<p>
Thanks!</p>
]]>
  </content:encoded>
  <pubDate>Fri, 01 Dec 2023 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/1-14</guid>
</item>
<item>
  <title>Airlist is ready for iOS 14 and MacOS Sonoma</title>
  <link>https://airlist.app/blog/ios_14_sonoma</link>
  <description>
    <![CDATA[<p>
Hello, Airlist users! I’m thrilled to announce that Airlist is ready for iOS 14 and MacOS Sonoma:</p>
<h2>
Updated for iOS 14 and MacOS Sonoma</h2>
<p>
Along with system compatibility you’ll experience smoother/faster performance, and an overall more seamless user experience.</p>
<h2>
Adjust Line Spacing</h2>
<p>
You can now adjust the line spacing within the app. Combined with font size, you can get your Airlist experience to your liking.</p>
<h2>
New and Updated Animations</h2>
<p>
We’ve added a host of new animations throughout the app, and updated existing ones too.</p>
<h2>
Use Airlist Premium Without Syncing</h2>
<p>
In response to user requests, we’ve made it possible to use Airlist Premium without the need to first sync.</p>
<h2>
Bug Fixes and Enhancements</h2>
<p>
As always, we’ve squashed some bugs and made several enhancements to improve the app’s performance and stability.</p>
<p>
As always, iff you have any feedback or suggestions, please don’t hesitate to <a href="https://airlist.app/contact">reach out</a>. Thanks!</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
Hello, Airlist users! I’m thrilled to announce that Airlist is ready for iOS 14 and MacOS Sonoma:</p>
<h2>
Updated for iOS 14 and MacOS Sonoma</h2>
<p>
Along with system compatibility you’ll experience smoother/faster performance, and an overall more seamless user experience.</p>
<h2>
Adjust Line Spacing</h2>
<p>
You can now adjust the line spacing within the app. Combined with font size, you can get your Airlist experience to your liking.</p>
<h2>
New and Updated Animations</h2>
<p>
We’ve added a host of new animations throughout the app, and updated existing ones too.</p>
<h2>
Use Airlist Premium Without Syncing</h2>
<p>
In response to user requests, we’ve made it possible to use Airlist Premium without the need to first sync.</p>
<h2>
Bug Fixes and Enhancements</h2>
<p>
As always, we’ve squashed some bugs and made several enhancements to improve the app’s performance and stability.</p>
<p>
As always, iff you have any feedback or suggestions, please don’t hesitate to <a href="https://airlist.app/contact">reach out</a>. Thanks!</p>
]]>
  </content:encoded>
  <pubDate>Tue, 26 Sep 2023 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/ios_14_sonoma</guid>
</item>
<item>
  <title>Notes in Airlist are getting a huge upgrade — Markdown support!</title>
  <link>https://airlist.app/blog/markdown</link>
  <description>
    <![CDATA[<p>
  <img alt="Markdown" class="feature_image" src="/images/markdown_notes.png" />
</p>
<p>
To edit a note on iPhone, while editing an item, click the “Edit Note” button above the keyboard. On Mac or iPad, you can use the “shift” + “enter” shortcut.</p>
<h2>
Headings</h2>
<p>
You can create headings by using hashtags (#) before your text. The number of hashtags you use will determine the level of the heading. For example, using one hashtag (#) creates a major heading, similar to a title, while using two hashtags (##) creates a sub-heading. Using more hashtags creates lower-level headings.</p>
<pre><code class="html"># This is a major heading
## This is a sub-heading
### This is a lower-level heading</code></pre>
<h2>
Ordered and Unordered Lists</h2>
<p>
Markdown makes it simple to create ordered (numbered) and unordered (bulleted) lists.</p>
<p>
For ordered lists, simply start a line with a number, followed by a period and a space. For example:</p>
<pre><code class="html">1. First item
2. Second item
3. Third item</code></pre>
<p>
For unordered lists, you can use either a dash (-) or an asterisk (*) followed by a space. For example:</p>
<pre><code class="html">- First item
- Second item
- Third item</code></pre>
<h2>
Quotes</h2>
<p>
You can now create a blockquote using Markdown by adding a greater than sign (&gt;) before your text. It’s perfect for when you want to highlight a quote in your notes.</p>
<pre><code class="html">&gt; This is a blockquote</code></pre>
<h2>
Links</h2>
<p>
Finally, Markdown allows you to create hyperlinks easily. You can create a link by wrapping link text in brackets ([ ]), and then wrapping the URL in parentheses (( )). For example:</p>
<pre><code class="html">[Visit Airlist](https://www.airlist.app)</code></pre>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
  <img alt="Markdown" class="feature_image" src="/images/markdown_notes.png" />
</p>
<p>
To edit a note on iPhone, while editing an item, click the “Edit Note” button above the keyboard. On Mac or iPad, you can use the “shift” + “enter” shortcut.</p>
<h2>
Headings</h2>
<p>
You can create headings by using hashtags (#) before your text. The number of hashtags you use will determine the level of the heading. For example, using one hashtag (#) creates a major heading, similar to a title, while using two hashtags (##) creates a sub-heading. Using more hashtags creates lower-level headings.</p>
<pre><code class="html"># This is a major heading
## This is a sub-heading
### This is a lower-level heading</code></pre>
<h2>
Ordered and Unordered Lists</h2>
<p>
Markdown makes it simple to create ordered (numbered) and unordered (bulleted) lists.</p>
<p>
For ordered lists, simply start a line with a number, followed by a period and a space. For example:</p>
<pre><code class="html">1. First item
2. Second item
3. Third item</code></pre>
<p>
For unordered lists, you can use either a dash (-) or an asterisk (*) followed by a space. For example:</p>
<pre><code class="html">- First item
- Second item
- Third item</code></pre>
<h2>
Quotes</h2>
<p>
You can now create a blockquote using Markdown by adding a greater than sign (&gt;) before your text. It’s perfect for when you want to highlight a quote in your notes.</p>
<pre><code class="html">&gt; This is a blockquote</code></pre>
<h2>
Links</h2>
<p>
Finally, Markdown allows you to create hyperlinks easily. You can create a link by wrapping link text in brackets ([ ]), and then wrapping the URL in parentheses (( )). For example:</p>
<pre><code class="html">[Visit Airlist](https://www.airlist.app)</code></pre>
]]>
  </content:encoded>
  <pubDate>Thu, 01 Jun 2023 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/markdown</guid>
</item>
<item>
  <title>New in Airlist 1.11</title>
  <link>https://airlist.app/blog/1-11</link>
  <description>
    <![CDATA[<h2>
Export Options</h2>
<p>
  <img alt="Export Options" class="feature_image" src="/images/export_mac.png" />
</p>
<ul>
  <li>
<strong>Copy to Markdown</strong>: You can now copy the current view to Markdown  </li>
  <li>
<strong>Print Current View</strong>: Print your current view directly from Airlist  </li>
  <li>
<strong>Export All Items</strong>: Export all items to JSON, Markdown, or print them  </li>
</ul>
<h2>
Quickly Filter Tags</h2>
<video controls="controls" class="feature_image shadow" src="/images/temp_saved_search.mp4" type="video/mp4">
</video>
<p>
Next, I’ve added a powerful new way to manage and interact with your tags: <strong>Click on a tag to create a temporary Saved Search</strong>. This feature will display all items associated with a particular tag. You can then save this new view for future reference or simply dismiss it once you’re done.</p>
<p>
I’ve also worked on bug fixes and overall app enhancements to improve your user experience.</p>
<p>
Your feedback is always welcome. Let me know if you have any questions or need help with the new features.</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<h2>
Export Options</h2>
<p>
  <img alt="Export Options" class="feature_image" src="/images/export_mac.png" />
</p>
<ul>
  <li>
<strong>Copy to Markdown</strong>: You can now copy the current view to Markdown  </li>
  <li>
<strong>Print Current View</strong>: Print your current view directly from Airlist  </li>
  <li>
<strong>Export All Items</strong>: Export all items to JSON, Markdown, or print them  </li>
</ul>
<h2>
Quickly Filter Tags</h2>
<video controls="controls" class="feature_image shadow" src="/images/temp_saved_search.mp4" type="video/mp4">
</video>
<p>
Next, I’ve added a powerful new way to manage and interact with your tags: <strong>Click on a tag to create a temporary Saved Search</strong>. This feature will display all items associated with a particular tag. You can then save this new view for future reference or simply dismiss it once you’re done.</p>
<p>
I’ve also worked on bug fixes and overall app enhancements to improve your user experience.</p>
<p>
Your feedback is always welcome. Let me know if you have any questions or need help with the new features.</p>
]]>
  </content:encoded>
  <pubDate>Tue, 16 May 2023 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/1-11</guid>
</item>
<item>
  <title>Deprecating the web app</title>
  <link>https://airlist.app/blog/web_app_deprecation</link>
  <description>
    <![CDATA[<p>
I’d would like to inform you about an upcoming change to the Airlist. Starting July 1, 2023, the Airlist web app will be deprecated and no longer supported. I understand that this may cause some inconvenience, but I believe this decision is necessary to ensure the continued improvement of Airlist.</p>
<p>
…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
I’d would like to inform you about an upcoming change to the Airlist. Starting July 1, 2023, the Airlist web app will be deprecated and no longer supported. I understand that this may cause some inconvenience, but I believe this decision is necessary to ensure the continued improvement of Airlist.</p>
<p>
Why is this happening?</p>
<p>
Airlist is now on iPhone, iPad, and Mac. For a single developer maintaining the web app has been slowing down development. By focusing exclusively on one platform’s technologies (Apple’s in this case), I’ll be able to deliver a more streamlined, reliable, and faster user experience.</p>
<p>
I recognize that having access to Airlist on the web has been a valuable feature, especially for Windows and Linux users. However, the advantages of concentrating on a single platform will ultimately allow me to provide a better product and support.</p>
<p>
If you are currently using the web app, I encourage you to download Airlist on your iPhone, iPad, or Mac device.</p>
<p>
In the web app you can export your data by clicking on the “gear” in the top right, then “Export/Import Data”. From there you can export as HTML, OPML, or Markdown.</p>
<p>
In the iOS apps, an export option will be added in the next update.</p>
<p>
If you have any questions or concerns please don’t hesitate to reach out to at <a href="mailto:help@airlist.app">help@airlist.app</a>.</p>
<p>
Thanks!</p>
]]>
  </content:encoded>
  <pubDate>Wed, 03 May 2023 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/web_app_deprecation</guid>
</item>
<item>
  <title>New in Airlist 1.10</title>
  <link>https://airlist.app/blog/1-10</link>
  <description>
    <![CDATA[<h2>
Multi Move on both iPhone and Mac</h2>
<video controls="controls" class="feature_image shadow" src="/images/multi_move.mp4" type="video/mp4">
</video>
<h2>
Date Improvements</h2>
<p>
  <img alt="Date Improvements" class="feature_image" src="/images/quick_date_change.gif" />
</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<h2>
Multi Move on both iPhone and Mac</h2>
<video controls="controls" class="feature_image shadow" src="/images/multi_move.mp4" type="video/mp4">
</video>
<p>
First, select the items you want to move:</p>
<ul>
  <li>
iPhone: On iPhone swipe from right to left to open command center, press “Select”.  </li>
  <li>
iPad or Mac: You have several options    <ol>
      <li>
“CMD” + “Shift” + “L”      </li>
      <li>
Clicking “Select” in the menubar or Command Center      </li>
      <li>
Holding “CMD” and clicking on an item      </li>
    </ol>
  </li>
</ul>
<p>
Then using Command Center, select “Move”, search where you’d like to move the items to.</p>
<p>
You can also do the same with indenting. Just select the items you want to indent, and Command Center, the Menu Bar, or press the “Tab” key (“Shift” + “Tab” to reverse indent).</p>
<h2>
Date Improvements</h2>
<p>
  <img alt="Date Improvements" class="feature_image" src="/images/quick_date_change.gif" />
</p>
<p>
On Mac, simply right click on a date to set to Today, Tomorrow, Custom, or Clear. On iPhone lock press to do the same action.</p>
<p>
Search results for custom dates are also improved. They now always prefer future dates, and there are more options when typing things like “Next”.</p>
<h2>
New keyboard shortcuts</h2>
<p>
You can now Zoom and “Reverse” Zoom (go up one level) with Keyboard Shortcuts.</p>
<ul>
  <li>
<code class="inline">Control</code> + <code class="inline">Option</code> + <code class="inline">right arrow</code>: Zoom  </li>
  <li>
<code class="inline">Control</code> + <code class="inline">Option</code> + <code class="inline">left arrow</code>: Reverse Zoom  </li>
</ul>
<p>
And of course other small bug fixes and improvements…</p>
]]>
  </content:encoded>
  <pubDate>Tue, 18 Apr 2023 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/1-10</guid>
</item>
<item>
  <title>Automation in Airlist 1.9</title>
  <link>https://airlist.app/blog/automation_in_airlist</link>
  <description>
    <![CDATA[<h2>
New URL Scheme</h2>
<p>
Airlist now supports a URL Scheme. <a href="https://airlist.app/blog/url_scheme">Read about the documentation here</a>.</p>
<p>
What this means is you can send commands to Airlist from other apps!</p>
<p>
For instance, you can:</p>
<ul>
  <li>
Create a new item named “Call Mom”    <ul>
      <li>
With a Due Date of tomorrow      </li>
      <li>
Notes that says “Talk about grandkids”      </li>
      <li>
Under the “Family” parent      </li>
    </ul>
  </li>
  <li>
Show a specific item  </li>
  <li>
Show a Saved Search  </li>
</ul>
<p>
…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<h2>
New URL Scheme</h2>
<p>
Airlist now supports a URL Scheme. <a href="https://airlist.app/blog/url_scheme">Read about the documentation here</a>.</p>
<p>
What this means is you can send commands to Airlist from other apps!</p>
<p>
For instance, you can:</p>
<ul>
  <li>
Create a new item named “Call Mom”    <ul>
      <li>
With a Due Date of tomorrow      </li>
      <li>
Notes that says “Talk about grandkids”      </li>
      <li>
Under the “Family” parent      </li>
    </ul>
  </li>
  <li>
Show a specific item  </li>
  <li>
Show a Saved Search  </li>
</ul>
<h3>
Examples</h3>
<p>
<code class="inline">airlist:///create?name=Call Mom&amp;due_date=tomorrow at 9am&amp;parent_id=5214d0f4-8187-4e6f-b371-365dcd87e2c0</code></p>
<p>
<code class="inline">airlist:///open?id=5214d0f4-8187-4e6f-b371-365dcd87e2c0</code></p>
<h2>
How to get an item’s ID</h2>
<h4>
iPhone</h4>
<ul>
  <li>
Item: Long press on the “zoom” button and select <code class="inline">Copy item ID</code>  </li>
  <li>
Saved Search: Long press on the Saved Search and select <code class="inline">Copy ID</code>  </li>
</ul>
<p>
  <img alt="Get item IDs on iPhone" class="feature_image" src="/images/iphone_get_item_id.gif" />
</p>
<h4>
Mac</h4>
<ul>
  <li>
Item: Right click on the “zoom” button and select <code class="inline">Copy item ID</code>  </li>
  <li>
Saved Search: Right click on the Saved Search and select <code class="inline">Copy ID</code>  </li>
</ul>
<p>
  <img alt="Get item IDs on Mac" class="feature_image" src="/images/mac_get_item_id.gif" />
</p>
<h2>
#Hashtag support</h2>
<p>
You already could use <code class="inline">@</code> to create tags. Now you can also use <code class="inline">#</code>.</p>
]]>
  </content:encoded>
  <pubDate>Mon, 13 Mar 2023 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/automation_in_airlist</guid>
</item>
<item>
  <title>🚀 NEW: Airlist 1.8</title>
  <link>https://airlist.app/blog/1-8</link>
  <description>
    <![CDATA[<p>
Hi All! The latest update for Airlist is live on the iOS and Mac App Stores.</p>
<h2>
Saved Search Enhancements</h2>
<ul>
  <li>
NEW - Sorting by Start/Due now sorts by the time  </li>
  <li>
UPDATED Saved Search builder  </li>
</ul>
<p>
  <img alt="Saved Search Ordered by Time for Mac" class="blog_image" src="/images/ss_time_order.png" />
</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
Hi All! The latest update for Airlist is live on the iOS and Mac App Stores.</p>
<h2>
Saved Search Enhancements</h2>
<ul>
  <li>
NEW - Sorting by Start/Due now sorts by the time  </li>
  <li>
UPDATED Saved Search builder  </li>
</ul>
<p>
  <img alt="Saved Search Ordered by Time for Mac" class="blog_image" src="/images/ss_time_order.png" />
</p>
<h2>
Dynamic Text Size</h2>
<p>
Since launch, if you have adjusted your iPhone’s or Mac’s system font size setting, Airlist will automatically adjust.</p>
<p>
Now, you can increase or decrease Airlist’s font size even further on both iPhone and Mac.</p>
<p>
  <img alt="Tag Autocomplete for Mac" class="feature_image" src="/images/tag_autocomplete_mac.png" />
</p>
<h2>
Tags and References now autocomplete on Mac.</h2>
<p>
  <img alt="Text Size Adjustments for Mac" class="blog_image" src="/images/text_size.png" />
</p>
<p>
And of course, other bug fixes and enhancements:</p>
<ul>
  <li>
Fixed an issue with clicking some links  </li>
  <li>
Sync reliability enhancements  </li>
  <li>
Pasting in notes won’t create new items sometimes  </li>
  <li>
Notes text size is by default larger  </li>
</ul>
]]>
  </content:encoded>
  <pubDate>Wed, 08 Feb 2023 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/1-8</guid>
</item>
<item>
  <title>Airlist for Mac</title>
  <link>https://airlist.app/blog/mac</link>
  <description>
    <![CDATA[<p>
Excited to announce the release of the new Mac app for Airlist!</p>
<p>
  <img alt="Airlist for Mac" class="blog_image" src="/images/airlist_for_mac.png" />
</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<h3>
Excited to announce the release of the new Mac app for Airlist!</h3>
<p>
  <img alt="Airlist for Mac" class="blog_image" src="/images/airlist_for_mac.png" />
</p>
<h2>
Fully native</h2>
<p>
Built in 100% Swift, Airlist for MacOS is fully native. No web views. No electron. It’s incredibly fast, performant, and <em>feels</em> at home on your Mac.</p>
<p>
  <img alt="Airlist for Mac" class="blog_image" src="/images/mac_light_mode.png" />
</p>
<h2>
Sync with your iOS devices</h2>
<p>
Airlist for Mac seamlessly syncs across all your devices so everything is always up to date. Note, for syncing <a href="https://airlist.app/pricing">Airlist Premium</a> is required (and you can always try Airlist for free).</p>
<p>
  <img alt="Sync everywhere" class="blog_image" src="/images/sync_everywhere.png" />
</p>
<h2>
MacOS features you’d expect</h2>
<p>
It’s the little things with Mac apps that make them great:</p>
<ul>
  <li>
Keyboard shortcuts  </li>
  <li>
Full menu bar support  </li>
  <li>
Resizable sidebar!  </li>
  <li>
… and more!  </li>
</ul>
<p>
  <img alt="Airlist for Mac" class="blog_image" src="/images/mac_cc.png" />
</p>
<p>
<a href="https://apps.apple.com/us/app/airlist-notes-tasks/id1572580423">Try the Airlist Mac App today. Available on the Mac App Store.</a></p>
]]>
  </content:encoded>
  <pubDate>Tue, 10 Jan 2023 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/mac</guid>
</item>
<item>
  <title>Lock and Home Screen Widgets</title>
  <link>https://airlist.app/blog/widgets</link>
  <description>
    <![CDATA[<p>
Out now is the latest Airlist update for iOS 16 — now you can personalize your home or lock screen with brand new widgets. Quickly add new items, initiate a search, or view a list of your Starred or Saved Searches.</p>
<p>
  <img alt="Widgets" class="blog_image" src="/images/widgets.png" />
</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
Out now is the latest Airlist update for iOS 16 — now you can personalize your home or lock screen with brand new widgets. Quickly add new items, initiate a search, or view a list of your Starred or Saved Searches.</p>
<p>
  <img alt="Widgets" class="blog_image" src="/images/widgets.png" />
</p>
<h2>
View your Saved Searches or Starred items</h2>
<p>
With this list widget, you can see all of your Saved Searches with the item count for each. Or view your list of Starred items, all from the home screen. Tapping any item will take you directly to that Saved Search or Starred item.</p>
<p>
  <img alt="Widgets" class="blog_image" src="/images/widgets_ss.png" />
</p>
<h2>
Quickly add a new item</h2>
<p>
The new Quick Add widget allows you to quickly add an item from both the home and lock screen.</p>
<p>
  <img alt="Widgets" class="blog_image" src="/images/widgets_quickadd.png" />
</p>
<h2>
Search for your items</h2>
<p>
Tapping this widget opens Airlist with search open, allowing you to quickly find the item you’re looking for.</p>
<p>
  <img alt="Widgets" class="blog_image" src="/images/widgets_search.png" />
</p>
]]>
  </content:encoded>
  <pubDate>Sat, 01 Oct 2022 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/widgets</guid>
</item>
<item>
  <title>🚀 NEW: Start and Due Times	</title>
  <link>https://airlist.app/blog/start_due_times</link>
  <description>
    <![CDATA[<p>
Today’s a big release for Airlist. Already, you can set Due and Start dates on any item, along with custom filters in Saved Searches, you have unlimited flexibility how you stay organized.</p>
<p>
Now, you can set Due and Start TIMES!</p>
<video controls="controls" class="feature_image" src="/images/start_due_times.mp4" type="video/mp4">
</video>
<p>
…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
Today’s a big release for Airlist. Already, you can set Due and Start dates on any item, along with custom filters in Saved Searches, you have unlimited flexibility how you stay organized.</p>
<p>
Now, you can set Due and Start TIMES!</p>
<p>
Doing so will set a notification for the time set. Additionally, long press the notification to complete the item or snooze the notification.</p>
<p>
Even better, adding times couldn’t be easier. Simply type when, “Today at 9am”, “Tomorrow afternoon”, “Sunday at 23:00”. Or you can use the time picker to quickly set a time.</p>
<video controls="controls" class="feature_image" src="/images/start_due_times.mp4" type="video/mp4">
</video>
]]>
  </content:encoded>
  <pubDate>Fri, 24 Jun 2022 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/start_due_times</guid>
</item>
<item>
  <title>🚀 Paste Plaintext, Markdown, and OPML</title>
  <link>https://airlist.app/blog/iOS_paste</link>
  <description>
    <![CDATA[<p>
Previously only available on the web… now, on iOS and iPadOS, you can paste plaintext or markdown to create items in Airlist.</p>
<p>
For OPML, follow the below format.</p>
<pre><code class="html">&lt;opml version=&quot;2.0&quot;&gt;
    &lt;body&gt;
        &lt;outline text=&quot;Filters&quot;&gt;
            &lt;outline text =&quot;Approved/deny&quot;&gt;
                &lt;/outline&gt;
            &lt;outline text =&quot;Collections&quot;&gt;
                &lt;/outline&gt;
            &lt;outline text =&quot;Delivery&quot;&gt;
                &lt;/outline&gt;
            &lt;/outline&gt;
        &lt;/body&gt;
    &lt;/opml&gt;</code></pre>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
Previously only available on the web… now, on iOS and iPadOS, you can paste plaintext or markdown to create items in Airlist.</p>
<p>
For OPML, follow the below format.</p>
<pre><code class="html">&lt;opml version=&quot;2.0&quot;&gt;
    &lt;body&gt;
        &lt;outline text=&quot;Filters&quot;&gt;
            &lt;outline text =&quot;Approved/deny&quot;&gt;
                &lt;/outline&gt;
            &lt;outline text =&quot;Collections&quot;&gt;
                &lt;/outline&gt;
            &lt;outline text =&quot;Delivery&quot;&gt;
                &lt;/outline&gt;
            &lt;/outline&gt;
        &lt;/body&gt;
    &lt;/opml&gt;</code></pre>
]]>
  </content:encoded>
  <pubDate>Mon, 06 Jun 2022 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/iOS_paste</guid>
</item>
<item>
  <title>🚀 Natural Date Search </title>
  <link>https://airlist.app/blog/natural-date-search</link>
  <description>
    <![CDATA[<p>
Now it’s easier than ever to set start or due dates with Natural Date Search.</p>
<video controls="controls" class="feature_image shadow" src="/images/natural_dates.mov" type="video/mp4">
</video>
<p>
For example, you can type “3 days”, “tomorrow”, “weekend”, “June” “Next month”, “4/5”, etc… The parser is incredibly flexible and can understand just about anything you throw at it.</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
Now it’s easier than ever to set start or due dates with Natural Date Search.</p>
<div class="feature_video_video">
  <video controls="controls" class="feature_image shadow" src="/images/natural_dates.mov" type="video/mp4">  </video></div>
<p>
For example, you can type “3 days”, “tomorrow”, “weekend”, “June” “Next month”, “4/5”, etc… The parser is incredibly flexible and can understand just about anything you throw at it.</p>
<p>
<a href="https://apps.apple.com/app/id1572580423">Available on the App Store for iPhone and iPad.</a></p>
]]>
  </content:encoded>
  <pubDate>Thu, 07 Apr 2022 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/natural-date-search</guid>
</item>
<item>
  <title>Airlist is now available on the App Store</title>
  <link>https://airlist.app/blog/launch</link>
  <description>
    <![CDATA[<p>
Airlist is now available on the App Store!</p>
<div class="feature_video_video">
  <video controls="controls" class="feature_image shadow" src="/images/AirlistLaunch.mov" type="video/mp4">  </video></div>
<p>
…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<div class="feature_video_video">
  <video controls="controls" class="feature_image shadow" src="/images/AirlistLaunch.mov" type="video/mp4">  </video></div>
<ul>
  <li>
<a href="https://apps.apple.com/app/id1572580423">Download on the App Store for iPhone and iPad</a>  </li>
  <li>
Check out the new video above  </li>
</ul>
<p>
Airlist is free to use. Add unlimited items and view 3 Saved Searches (Today, Due Soon, Flagged).</p>
<p>
With <a href="https://airlist.app/pricing">Airlist Premium</a> (2.99 mo or 24.99yr) you’ll unlock syncing across devices, new icons, custom Saved Searches, and icon badge.</p>
]]>
  </content:encoded>
  <pubDate>Tue, 29 Mar 2022 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/launch</guid>
</item>
<item>
  <title>Paste Plain Text and Markdown to Create Lists</title>
  <link>https://airlist.app/blog/plaintext_markdown</link>
  <description>
    <![CDATA[<video controls="controls" class="feature_image shadow" src="/images/paste_plain_text_markdown.mov" type="video/mp4">
</video>
<p>
Now, it’s easier than ever to create lists in Airlist. Simply copy and paste any plain text or markdown list to directly import.</p>
<p>
Airlist even has smart formatting for certain markdown syntax:</p>
<ul>
  <li>
#header turns into “project” formatting  </li>
  <li>
##header turns into “header” formatting  </li>
  <li>
“-“ and “*” are removed from the start of lists  </li>
</ul>
]]>
  </description>
  <content:encoded>
    <![CDATA[<video controls="controls" class="feature_image shadow" src="/images/paste_plain_text_markdown.mov" type="video/mp4">
</video>
<p>
Now, it’s easier than ever to create lists in Airlist. Simply copy and paste any plain text or markdown list to directly import.</p>
<p>
Airlist even has smart formatting for certain markdown syntax:</p>
<ul>
  <li>
#header turns into “project” formatting  </li>
  <li>
##header turns into “header” formatting  </li>
  <li>
“-“ and “*” are removed from the start of lists  </li>
</ul>
]]>
  </content:encoded>
  <pubDate>Tue, 26 Oct 2021 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/plaintext_markdown</guid>
</item>
<item>
  <title>Multi-Select on iOS</title>
  <link>https://airlist.app/blog/multiselect</link>
  <description>
    <![CDATA[<p>
You can now edit multiple items at once with “multi-select” on iOS (iPhone and iPad). Check out the video to see how.</p>
<video controls="controls" class="feature_image shadow" src="/images/multi_select.mp4" type="video/mp4">
</video>
<p>
<a href="https://testflight.apple.com/join/z3CKqmWW">Try it now through TestFlight.</a></p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
You can now edit multiple items at once with “multi-select” on iOS (iPhone and iPad). Check out the video to see how.</p>
<video controls="controls" class="feature_image shadow" src="/images/multi_select.mp4" type="video/mp4">
</video>
<p>
<a href="https://testflight.apple.com/join/z3CKqmWW">Try it now through TestFlight.</a></p>
]]>
  </content:encoded>
  <pubDate>Tue, 17 Aug 2021 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/multiselect</guid>
</item>
<item>
  <title>Airlist for iOS</title>
  <link>https://airlist.app/blog/airlist_ios</link>
  <description>
    <![CDATA[<p>
This is the experience you have been waiting for. A native and modern outliner for iOS (iPhone and iPad).</p>
<video controls="controls" class="feature_image shadow" src="/images/airlist_promo_video.mp4" type="video/mp4">
</video>
<p>
<a href="https://testflight.apple.com/join/z3CKqmWW">Try it now through TestFlight.</a></p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
This is the experience you have been waiting for. A native and modern outliner for iOS (iPhone and iPad).</p>
<video controls="controls" class="feature_image shadow" src="/images/airlist_promo_video.mp4" type="video/mp4">
  Your browser does not support the video tag.</video>
<p>
<a href="https://testflight.apple.com/join/z3CKqmWW">Try it now through TestFlight.</a></p>
<h2>
Get the features you’d expect from a native app</h2>
<h3>
Drag and Drop</h3>
<p>
Drag and drop items to easily rearrange. Or, drag and drop URLs and text from <em>outside</em> Airlist to easily create a new item.</p>
<video controls="controls" class="feature_image shadow" src="/images/drag_and_drop.mp4" type="video/mp4">
  Your browser does not support the video tag.</video>
<h3>
Light and Dark Mode</h3>
<p>
By default, Airlist will mirror the system color scheme. You can also set Airlist to always be in light or dark mode.</p>
<video controls="controls" class="feature_image shadow" src="/images/light_dark_mode.mp4" type="video/mp4">
  Your browser does not support the video tag.</video>
<h3>
Custom Icons</h3>
<p>
Airlist comes with 16 different icons to perfectly match your home screen.</p>
<img alt="Custom Icons" class="blog_image" src="/images/rounded_icons.png" />
<h3>
Badge Icon</h3>
<p>
Choose a saved search and it’s count will be reflected on the app icon badge.</p>
<img alt="Badge Icon" class="blog_image" src="/images/badge.png" />
<h3>
System Date Picker</h3>
<p>
Dates play a big part in Airlist. It couldn’t be easier to find and choose the exact date you need.</p>
<img alt="Date Picker" class="blog_image" src="/images/date_picker.png" />
<h4>
And so much more…</h4>
<p>
<a href="https://testflight.apple.com/join/z3CKqmWW">Try it now through TestFlight.</a></p>
<h3>
Available on iPhone, iPad, and any web browser</h3>
<p>
Airlist supports you where ever you are. Seamlessly syncing between your devices.</p>
]]>
  </content:encoded>
  <pubDate>Wed, 30 Jun 2021 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/airlist_ios</guid>
</item>
<item>
  <title>April Updates</title>
  <link>https://airlist.app/blog/april-21-changelog</link>
  <description>
    <![CDATA[<h2>
🎁 New Features</h2>
<ul>
  <li>
Setup the backend for Stripe purchasing  </li>
</ul>
<h2>
🦾 Improvements</h2>
<ul>
  <li>
Max width is much wider (from 700px to 900px)  </li>
  <li>
Increased line height for the blog (easier on the eyes)  </li>
  <li>
Tag autocomplete respects <em>Show/Hide Completed</em> setting  </li>
  <li>
References respect <em>Show/Hide Completed</em> setting  </li>
</ul>
<p>
…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<h2>
🎁 New Features</h2>
<ul>
  <li>
Setup the backend for Stripe purchasing  </li>
</ul>
<h2>
🦾 Improvements</h2>
<ul>
  <li>
Max width is much wider (from 700px to 900px)  </li>
  <li>
Increased line height for the blog (easier on the eyes)  </li>
  <li>
Tag autocomplete respects <em>Show/Hide Completed</em> setting  </li>
  <li>
References respect <em>Show/Hide Completed</em> setting  </li>
</ul>
<h2>
🐞 Bug Fix</h2>
<ul>
  <li>
When editing, indenting or pressing the back/forward browser buttons (before clicking away) no longer causes you to lose what you typed  </li>
  <li>
Deleting a saved search automatically syncs to all other open windows  </li>
  <li>
General bug fixes  </li>
</ul>
]]>
  </content:encoded>
  <pubDate>Tue, 27 Apr 2021 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/april-21-changelog</guid>
</item>
<item>
  <title>Building with SwiftUI: SwiftUI Share Extension</title>
  <link>https://airlist.app/blog/swiftui-share-extension</link>
  <description>
    <![CDATA[<p>
Airlist for iPhone and iPad has a very powerful share extension thanks to SwiftUI.</p>
<p>
  <img alt="Share Sheet" class="blog_image" src="/images/share_sheet.png" />
</p>
<p>
But the share extension API is still only available in AppKit. So how do you do it in SwiftUI? Follow below…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
Airlist for iPhone and iPad has a very powerful share extension thanks to SwiftUI.</p>
<p>
  <img alt="Share Sheet" class="blog_image" src="/images/share_sheet.png" />
</p>
<p>
But the share extension API is still only available in AppKit. So how do you do it in SwiftUI? Follow below…</p>
<blockquote>
  <h4>
Setting up a share extension  </h4>
</blockquote>
<p>
Start by adding the share extension to your project</p>
<blockquote>
  <p>
File → New → Target → Share Extension … then press Activate  </p>
</blockquote>
<p>
During this process a new <code class="inline">ShareViewController.swift</code>, <code class="inline">MainInterface.storyboard</code> and <code class="inline">Info.plist</code> will be created for you.</p>
<p>
In order to build the Share Extension with SwiftUI you will need to customize the ShareViewController.</p>
<p>
First, replace the <code class="inline">ShareViewController</code> code with the below.</p>
<pre><code class="swift">import SwiftUI
import UIKit

class ShareViewController: UIViewController {
    @IBOutlet var container: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
    }
}</code></pre>
<blockquote>
  <h4>
Setting up SwiftUI View  </h4>
</blockquote>
<p>
Next, it’s time to setup your SwiftUI View. Let’s begin with something simple.</p>
<pre><code class="swift">struct SwiftUIView {
    @State public var incoming_text: String
    
    var body: some View {
        Text(incoming_text)
    }
}</code></pre>
<p>
Then, back in <code class="inline">ShareViewController</code> add the below to <code class="inline">viewDidLoad</code> to capture the incoming information from the share sheet.</p>
<pre><code class="swift">// in ShareViewController
override func viewDidLoad() {
    super.viewDidLoad()

    // this gets the incoming information from the share sheet
    if let item = extensionContext?.inputItems.first as? NSExtensionItem {
        if let attachments = item.attachments {
            for attachment: NSItemProvider in attachments {
                if attachment.hasItemConformingToTypeIdentifier(&quot;public.text&quot;) {
                    attachment.loadItem(forTypeIdentifier: &quot;public.text&quot;, options: nil, completionHandler: { text, _ in

                        // text variable is the text from the share sheet...
                    })
                }
            }
        }
    }
}</code></pre>
<p>
Next add the code which will embed your SwiftUI View into the <code class="inline">ShareViewController</code>.</p>
<pre><code class="swift">// this will add your SwiftUI View to the UIViewController
let childView = UIHostingController(rootView: AirlistShareView(name: text as! String, note: &quot;&quot;))
self.addChild(childView)
childView.view.frame = self.container.bounds
self.container.addSubview(childView.view)
childView.didMove(toParent: self)</code></pre>
<p>
The final <code class="inline">viewDidLoad</code> should look like this.</p>
<pre><code class="swift">// in ShareViewController
override func viewDidLoad() {
    super.viewDidLoad()

    // this gets the incoming information from the share sheet
    if let item = extensionContext?.inputItems.first as? NSExtensionItem {
        if let attachments = item.attachments {
            for attachment: NSItemProvider in attachments {
                if attachment.hasItemConformingToTypeIdentifier(&quot;public.text&quot;) {
                    attachment.loadItem(forTypeIdentifier: &quot;public.text&quot;, options: nil, completionHandler: { text, _ in

                        // text variable is the text from the share sheet...
                        let childView = UIHostingController(rootView: SwiftUIView(incoming_text: text as! String))
                        self.addChild(childView)
                        childView.view.frame = self.container.bounds
                        self.container.addSubview(childView.view)
                        childView.didMove(toParent: self)
                    })
                }
            }
        }
    }
}</code></pre>
<p>
Now go to safari in your iOS simulator and load a website. Select some text → share. Click your app’s icon and you should see your SwiftUI View!</p>
<blockquote>
  <h4>
Communicating between ShareController and your SwiftUI View  </h4>
</blockquote>
<p>
Next you’ll want to be able to communicate between the <code class="inline">ShareViewController</code> and your SwiftUI View. To do this, we will use <code class="inline">NSNotifications</code>.</p>
<pre><code class="swift">// at the end of viewDidLoad
NotificationCenter.default.addObserver(forName: NSNotification.Name(&quot;close&quot;), object: nil, queue: nil) { _ in
    self.close()
}

// add this function to UIShareViewController
func close() {
    extensionContext?.completeRequest(returningItems: [], completionHandler: nil)
}</code></pre>
<pre><code class="swift">// in your SwiftUI View
func close() {
    NotificationCenter.default.post(name: NSNotification.Name(&quot;close&quot;), object: nil)
}</code></pre>
<p>
Then, to close your share extension using SwiftUI, simply call <code class="inline">close()</code>.</p>
<hr class="thin">
<p>
<a class="shadow_h paid_button bold pricing_button" href="https://airlist.app/newsletter/new">Sign Up For Newsletter</a></p>
<p>
<em>We hate spam too. You’ll only receive periodic important Airlist information. Unsubscribe anytime.</em></p>
<p>
We’re also posting regular and in-depth updates on <a href="https://twitter.com/AirlistApp">twitter</a>.</p>
]]>
  </content:encoded>
  <pubDate>Thu, 15 Apr 2021 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/swiftui-share-extension</guid>
</item>
<item>
  <title>Building with SwiftUI: Managing State</title>
  <link>https://airlist.app/blog/swift-managing-state</link>
  <description>
    <![CDATA[<p>
We built Airlist for the web with Vue, <a href="https://vuex.vuejs.org">which out of the box comes with its own global state management library.</a></p>
<p>
So naturally, when building Airlist with SwiftUI, it made sense to follow the same paradigm (i.e. Redux). A global state variable that was passed around by an <code class="inline">environmentObject.</code></p>
<p>
At first, it went fantastic. Easy to maintain, simple to implement, and very fast… until it wasn’t. </p>
<p>
…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
We built Airlist for the web with Vue, <a href="https://vuex.vuejs.org">which out of the box comes with its own global state management library.</a></p>
<p>
So naturally, when building Airlist with SwiftUI, it made sense to follow the same paradigm (i.e. Redux). A global state variable that was passed around by an <code class="inline">environmentObject.</code></p>
<p>
At first, it went fantastic. Easy to maintain, simple to implement, and very fast… until it wasn’t. </p>
<p>
Suddenly, as more Airlist features were built out, and as datasets got larger, the app became slow. <em>Very slow</em>. </p>
<p>
Simple interactions stuttered. Animations were anything but smooth. </p>
<p>
After running some tests (commenting out code) it became clear. If a view accessed the global state variable through <code class="inline">.environmentObject</code>, that view was updated when the global state was updated. Or at least check if it should be updated.</p>
<p>
Since SwiftUI is still in its infancy, there isn’t a clear understanding on what you /should do. /</p>
<blockquote>
  <h3>
Implementing Services Model  </h3>
</blockquote>
<p>
Instead of using a single global variable, I embraced <code class="inline">@ObservableObject</code>. </p>
<p>
I broke the app down into mini “services”. Is the menu up or down? MenuService. Is CommandCenter open? CommandCenterService. Which item is being viewed? FocusService. Mark and item complete? ItemService. </p>
<h4>
<em>A service looks like this:</em></h4>
<pre><code>class MenuService: ObservableObject {
    @Published var isOpen: Bool = false

    // this is important, ensures there is only 1 instance
    static let shared = MenuService()
    private init() {
        // do any setup here
    }

    func doSomething() {
        // do something here
    }
}</code></pre>
<p>
If a view needs to know if the menu is open, I simply add:</p>
<pre><code>@ObsesrvedObject var menuService = MenuService.shared</code></pre>
<p>
Then I can do something like</p>
<pre><code>if menuService.isOpen {
  // do something
}</code></pre>
<blockquote>
  <h3>
The Results  </h3>
</blockquote>
<p>
Since implementing my services model, every interaction is buttery smooth. All the slow downs I was seeing are gone. On top of this, I find this model easier to maintain, add, and update than using a Global State variable.</p>
<hr class="thin">
<p>
<a class="shadow_h paid_button bold pricing_button" href="https://airlist.app/newsletter/new">Sign Up For Newsletter</a></p>
<p>
<em>We hate spam too. You’ll only receive periodic important Airlist information. Unsubscribe anytime.</em></p>
<p>
We’re also posting regular and in-depth updates on <a href="https://twitter.com/AirlistApp">twitter</a>.</p>
]]>
  </content:encoded>
  <pubDate>Fri, 29 Jan 2021 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/swift-managing-state</guid>
</item>
<item>
  <title>New Feature: References and Backlinks</title>
  <link>https://airlist.app/blog/references-and-backlinks</link>
  <description>
    <![CDATA[<blockquote>
  <h3>
Introducing backlinks and references  </h3>
</blockquote>
<p>
  <img alt="References and Backlinks" class="feature_image" src="/images/references_backlinks.mov" />
</p>
<p>
…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<blockquote>
  <h3>
Introducing backlinks and references  </h3>
</blockquote>
<p>
  <img alt="References and Backlinks" class="feature_image" src="/images/references_backlinks.mov" />
</p>
<p>
Now, you can easily link to another item by typing <code class="inline">[</code> to autocomplete the link. </p>
<p>
All back links to the current item will show at the bottom References section. </p>
<p>
  <img alt="Backlinks" class="feature_image" src="/images/references.png" />
</p>
<p>
This two directional linking combined with <a href="https://airlist.app/blog/saved-search">Airlist’s Saved Searches</a>, gives you an incredible amount of flexibility to organize your ideas, tasks, projects, and more.</p>
]]>
  </content:encoded>
  <pubDate>Tue, 22 Dec 2020 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/references-and-backlinks</guid>
</item>
<item>
  <title>Building with SwiftUI: Adding back Scene Delegate</title>
  <link>https://airlist.app/blog/swiftui-scene-delegate</link>
  <description>
    <![CDATA[<p>
For the <a href="https://airlist.app/blog/sign_in_with_apple">new iOS app for Airlist</a>, I am building it in (as much as I can) SwiftUI. For anyone coming from React (or in our case, we use Vue to build the web app), SwiftUI is a welcome change vs UIKit. Yet, <a href="https://v4.chriskrycho.com/2019/apple-your-developer-documentation-is-garbage.html">at times can be frustrating</a>. Often times problems are not documented, and not available via a Google Search. </p>
<p>
Along the way I’ve had to solve many problems that, for anyone else building a real-world SwiftUI app, might find helpful. I’ll be documenting these solutions on this blog. They’ve been helpful to me, hopefully they are to you.</p>
<blockquote>
  <h3>
Adding back scene delegate  </h3>
</blockquote>
<p>
…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
For the <a href="https://airlist.app/blog/sign_in_with_apple">new iOS app for Airlist</a>, I’m building it in (as much as I can) SwiftUI. For anyone coming from React (or in our case, we use Vue to build the web app), SwiftUI is a welcome change vs UIKit. Yet, <a href="https://v4.chriskrycho.com/2019/apple-your-developer-documentation-is-garbage.html">at times can be frustrating</a>. Often times problems are not documented, and not available via a Google Search. </p>
<p>
Along the way I’ve had to solve many problems that, for anyone else building a real-world SwiftUI app, might find helpful. I’ll be documenting these solutions on this blog. They’ve been helpful to me, hopefully they are to you.</p>
<blockquote>
  <h3>
Adding back scene delegate  </h3>
</blockquote>
<p>
Starting with Swift 2.0 you can now build apps <a href="https://www.hackingwithswift.com/quick-start/swiftui/swiftui-tutorial-building-a-complete-project">in 100% SwiftUI</a>, removing the need for <code class="inline">AppDelegate</code>. <em>If you need,</em> <a href="https://www.hackingwithswift.com/quick-start/swiftui/how-to-add-an-appdelegate-to-a-swiftui-app">/It’s easy to add back the standard AppDelegate functions./</a></p>
<p>
But what about SceneDelegate, or any of it’s functions? <code class="inline">(windowScene: UIWindowScene, performActionFor</code> or <code class="inline">scene: UIScene, willConnectTo)</code> There is literally 0 documentation. After spending way to long on this, I began thinking adding back SceneDelegate was not possible.</p>
<p>
But it is. Check out below.</p>
<p>
In your <code class="inline">class AppDelegate:...</code> (<a href="https://www.hackingwithswift.com/quick-start/swiftui/how-to-add-an-appdelegate-to-a-swiftui-app">described here</a>), add the following:</p>
<pre><code>func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -&gt; UISceneConfiguration {     
    let sceneConfiguration = UISceneConfiguration(name: &quot;My Config&quot;, sessionRole: connectingSceneSession.role)      
    sceneConfiguration.delegateClass = CustomSceneDelegate.self 
    return sceneConfiguration
}</code></pre>
<p>
Then, <em>outside</em> your <code class="inline">class AppDelegate:...</code> add:</p>
<pre><code>class CustomSceneDelegate: UIResponder, UIWindowSceneDelegate {     
    @Environment(\.openURL) var openURL...  
}</code></pre>
<h4>
Viola! SceneDelegate is hooked up and ready to go.</h4>
<p>
Now why do you need this? </p>
<p>
Let’s say you want to be able to handle <code class="inline">shortcutItems.</code> i.e. spotlight search, x-callback urls… Using <code class="inline">.onOpenURL</code> will work. But it will not work for Quick Actions (3D touching the app icon) from a cold start. Only <code class="inline">scene: UIScene, willConnectTo session: UISceneSession</code> will. Like so:</p>
<pre><code>func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 
    /** Process quick action shortcut if opened from a cold start **/   
    if let shortcutItem = connectionOptions.shortcutItem {      
        if let id = shortcutItem.userInfo?[&quot;id&quot;] {          
            // do stuff here...     
        }   
    }
}</code></pre>
<hr class="thin">
<p>
<a class="shadow_h paid_button bold pricing_button" href="https://airlist.app/newsletter/new">Sign Up For Newsletter</a></p>
<p>
<em>We hate spam too. You’ll only receive periodic important Airlist information. Unsubscribe anytime.</em></p>
<p>
We’re also posting regular and in-depth updates on <a href="https://twitter.com/AirlistApp">twitter</a>.</p>
]]>
  </content:encoded>
  <pubDate>Sun, 13 Dec 2020 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/swiftui-scene-delegate</guid>
</item>
<item>
  <title>Keep organized with advanced Saved Searches</title>
  <link>https://airlist.app/blog/saved-search</link>
  <description>
    <![CDATA[<p>
  <img alt="Saved Search" class="feature_image" src="/images/savedsearch.gif" />
</p>
<p>
“Show me just what I need to see” </p>
<p>
Airlist’s infinitely nested items gives you unlimited flexability. But what was that one thing I need to do? I remember putting it in last week? That’s where saved searches come in.</p>
<p>
…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<p>
  <img alt="Saved Search" class="feature_image" src="/images/savedsearch.gif" />
</p>
<p>
“Show me just what I need to see” </p>
<p>
Airlist’s infinitely nested items gives you unlimited flexibility. But what was that one thing I need to do? I remember putting it in last week? That’s where saved searches come in.</p>
<p>
Saved Searches are a powerful way to keep organized and filter just what you want.</p>
<p>
To create a new Saved Search, press the <code class="inline">+</code> on the sidebar or select <code class="inline">New Saved Search</code> in Command Center. </p>
<h2>
Groups and Filters</h2>
<p>
Saved Searches consist of filters where you can filter based on the below. To add a new filter, press the <code class="inline">+filter</code> button. </p>
<ul>
  <li>
Tags  </li>
  <li>
Start Dates  </li>
  <li>
Due Dates  </li>
  <li>
Item text  </li>
  <li>
Note text  </li>
  <li>
Starred  </li>
</ul>
<p>
Easily group your filters to add more granularity to Saved Searches. Each group allows organizing by:</p>
<ul>
  <li>
<code class="inline">ALL</code> of the following…  </li>
  <li>
<code class="inline">ANY</code> of the following…  </li>
  <li>
<code class="inline">NONE</code> of the following…  </li>
</ul>
<h2>
Examples</h2>
<p>
Show all items with the tag <code class="inline">@due</code>.</p>
<p>
  <img alt="Saved Search Example" class="feature_image" src="/images/saved_search1.png" />
</p>
<p>
Show items with a tag of <code class="inline">@flag</code> OR <code class="inline">@today</code> OR <code class="inline">start/due date less than or equal to today</code> AND not tagged <code class="inline">@now</code>.</p>
<p>
  <img alt="Saved Search Example" class="feature_image" src="/images/saved_search2.png" />
</p>
<h2>
Only Search Subset of Items</h2>
<p>
By Default, all items are searched in a Saved Search. To only search a subset of items, select <code class="inline">Only Include Children Of…</code>, then insert the <code class="inline">item ID</code>. The item ID can be found in the url: https:airlist.app<em>a#</em><code class="inline">ITEM_ID</code>.</p>
<h2>
Sort Saved Search Results</h2>
<p>
The <code class="inline">Sort by:</code> dropdown allows you to sort the Saved Search results by:</p>
<ul>
  <li>
Default  </li>
  <li>
Tag  </li>
  <li>
Due Date  </li>
  <li>
Start Date  </li>
  <li>
Created Date  </li>
  <li>
Updated Date  </li>
  <li>
Name  </li>
</ul>
]]>
  </content:encoded>
  <pubDate>Sun, 05 Jan 2020 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/saved-search</guid>
</item>
<item>
  <title>Welcome to Airlist: Usage Guide</title>
  <link>https://airlist.app/blog/guide</link>
  <description>
    <![CDATA[<h2>
The Basics</h2>
<p>
Airlist is an outlining tool that is simple at its core yet advanced where you need it.</p>
<p>
Your Airlist outline consists of nested bulleted lists of items. Each nested list can be infinitely deep easily helping you keep track of everything from your grocery list to your most advanced projects.</p>
<p>
…</p>
]]>
  </description>
  <content:encoded>
    <![CDATA[<h2>
The Basics</h2>
<p>
Airlist is an outlining tool that is simple at its core yet advanced where you need it.</p>
<p>
Your Airlist outline consists of nested bulleted lists of items. Each nested list can be infinitely deep easily helping you keep track of everything from your grocery list to your most advanced projects.</p>
<h3>
Editing</h3>
<ul>
  <li>
    <p>
Complete:    </p>
    <ul>
      <li>
While editing, press  <code class="inline">CMD</code> + <code class="inline">enter</code> key.      </li>
      <li>
In Command Center, press Complete      </li>
      <li>
On Mac, right click on an item and select Complete or in the menu bar select Complete      </li>
    </ul>
  </li>
  <li>
    <p>
Editing: Click on any item to begin editing.    </p>
  </li>
  <li>
    <p>
Creating new items:    </p>
    <ul>
      <li>
While editing, press the <code class="inline">enter</code> key.      </li>
      <li>
Or click the <code class="inline">+</code> button in the bottom right corner      </li>
      <li>
Or drag the <code class="inline">+</code> button      </li>
    </ul>
  </li>
  <li>
    <p>
Indenting:    </p>
    <ul>
      <li>
While editing, press the <code class="inline">tab</code> key      </li>
      <li>
Or on iPhone, while editing, press the indent button above the keyboard      </li>
    </ul>
  </li>
  <li>
    <p>
Reverse indent:    </p>
    <ul>
      <li>
While editing, press <code class="inline">shift</code> + <code class="inline">tab</code> keys      </li>
      <li>
Or on iPhone, while editing, press the reverse indent button above the keyboard      </li>
    </ul>
  </li>
  <li>
    <p>
Adding tags: While editing type <code class="inline">#</code> to begin a tag.    </p>
    <ul>
      <li>
You can also start a tag with <code class="inline">@</code>.      </li>
    </ul>
  </li>
  <li>
    <p>
Insert Note: Add a <code class="inline">note</code> to any item by pressing <code class="inline">shift</code> + <code class="inline">enter</code>.    </p>
    <ul>
      <li>
Or on iPhone, press the <code class="inline">note</code> button above the keyboard      </li>
    </ul>
  </li>
  <li>
    <p>
Multi-Edit: Hold <code class="inline">CMD</code> and click on items to highlight. Then using <code class="inline">Command Center</code> or <code class="inline">Keyboard Shortcuts</code> you can edit several items at once.    </p>
  </li>
</ul>
<h3>
Navigating in Airlist</h3>
<ul>
  <li>
Opening Command Center:    <ul>
      <li>
On iPhone swipe an item from left to right      </li>
      <li>
On Mac, hit <code class="inline">CMD</code> + <code class="inline">K</code>      </li>
    </ul>
  </li>
</ul>
<p>
  <img alt="Command Center" class="feature_image" src="/images/iPhone_cc.gif" />
</p>
<ul>
  <li>
Zoom: Click the <code class="inline">dot</code> To left left of each item.  </li>
</ul>
<p>
  <img alt="Zoom" class="feature_image" src="/images/zoom.gif" />
</p>
<ul>
  <li>
Zoom Out/Up: To zoom back out_up click the item name at the top of the screen. Hovering over the top of the screen with your mouse shows all available parents.  </li>
  <li>
Drag and Drop: Drag the <code class="inline">dot</code> next to each item to enter drag/drop mode. As your drag the yellow indicator will show you where the drop will occur.  </li>
</ul>
<p>
  <img alt="Drag Drop" class="feature_image" src="/images/drag_drop.gif" />
</p>
<ul>
  <li>
Expand/Collapse: To expand or collapse a list, click the <code class="inline">+</code> or <code class="inline">-</code> button to the left of the item. The button will not appear if there are no <code class="inline">children</code>.  </li>
</ul>
<p>
  <img alt="Collapse" class="feature_image" src="/images/collapse.gif" />
</p>
<ul>
  <li>
Command Center: Quickly access all available actions by pressing <code class="inline">CMD</code> + <code class="inline">K</code>. <em>Actions available when an item is selected</em>    <ul>
      <li>
Complete      </li>
      <li>
Delete      </li>
      <li>
Indent      </li>
      <li>
Reverse Indent      </li>
      <li>
Star      </li>
      <li>
Move to…      </li>
      <li>
Set Start Date      </li>
      <li>
Set Due Date      </li>
      <li>
Format Project      </li>
      <li>
Format Header      </li>
      <li>
Sequential      </li>
      <li>
Add New Above      </li>
      <li>
Add New Below      </li>
      <li>
Add Child      </li>
      <li>
Duplicate      </li>
    </ul>
 <em>Actions always available in Command Center</em>    <ul>
      <li>
Search      </li>
      <li>
Quick Add      </li>
      <li>
Select      </li>
      <li>
Go Home      </li>
      <li>
Show Settings      </li>
      <li>
Show/Hide Complete      </li>
    </ul>
  </li>
</ul>
<h2>
Keyboard Shortcuts</h2>
<ul>
  <li>
<code class="inline">Tab</code>: Indent  </li>
  <li>
<code class="inline">Shift</code> + <code class="inline">Tab</code>: Reverse indent  </li>
  <li>
<code class="inline">Enter</code> : Create new Item  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Shift</code> + <code class="inline">N</code>: Open Quick Add  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Enter</code>: Complete Item  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">S</code>: Set Start Date  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">D</code>: Set Due Date  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">]</code>: Go Forward  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">[</code>: Go Back  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">“Click”</code>: Select multiple items  </li>
  <li>
<code class="inline">ESC</code>: Cancel search, close modals  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">F</code>: Open Search  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">K</code>: Open Command Center  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Shift</code> + <code class="inline">P</code>: Format item as Project  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Shift</code> + <code class="inline">H</code>: Format item as Header  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Shift</code> + <code class="inline">N</code>: Quick add a new item  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Shift</code> + <code class="inline">R</code>: Set item repeat  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Shift</code> + <code class="inline">M</code>: Move item  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Option</code> + <code class="inline">R</code>: Star item  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Shift</code> + <code class="inline">Delete</code>: Delete item  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Control</code> + <code class="inline">H</code>: Go Home  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">P</code>: Print  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Shift</code> + <code class="inline">M</code>: Move item…  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Shift</code> + <code class="inline">Up Arrow</code>: Move item up  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">Shift</code> + <code class="inline">Down Arrow</code>: Move item down  </li>
</ul>
<h2>
Setting Dates</h2>
<p>
Set a date by:</p>
<ul>
  <li>
<code class="inline">CMD</code> + <code class="inline">S</code>: Set Start Date  </li>
  <li>
<code class="inline">CMD</code> + <code class="inline">D</code>: Set Due Date  </li>
  <li>
Using Command Center    <ul>
      <li>
On iPhone swipe an item from left to right      </li>
      <li>
On Mac, hit <code class="inline">CMD</code> + <code class="inline">K</code>      </li>
    </ul>
  </li>
</ul>
<p>
You can also set a due time, which will add a notification.</p>
<p>
Both <code class="inline">Start Date</code> and <code class="inline">Due Date</code> are used when creating <code class="inline">Saved Searches</code>.</p>
<h3>
Repeating Dates</h3>
<p>
You can also set an item to repeat upon completion:</p>
<ul>
  <li>
After Completion  </li>
  <li>
Daily  </li>
  <li>
Weekly  </li>
  <li>
Monthly  </li>
  <li>
Yearly  </li>
</ul>
<h2>
Saved Search</h2>
<p>
Saved Searches are a powerful way to keep organized and filter just what you want.</p>
<p>
To create a new Saved Search, press the <code class="inline">+</code> on the sidebar.</p>
<h3>
Groups and Filters</h3>
<p>
Saved Searches consist of filters and groupswhere you can filter based on the below. To add a new filter, press the <code class="inline">+filter</code> and <code class="inline">+group</code> button.</p>
<p>
You can filter based on:</p>
<ul>
  <li>
Tags  </li>
  <li>
Start Dates  </li>
  <li>
Start Time  </li>
  <li>
Due Dates  </li>
  <li>
Due Time  </li>
  <li>
Item text  </li>
  <li>
Note text  </li>
</ul>
<p>
Easily group your filters to add more granularity to Saved Searches. Each group allows organizing by:</p>
<ul>
  <li>
<code class="inline">ALL</code> of the following…  </li>
  <li>
<code class="inline">ANY</code> of the following…  </li>
  <li>
<code class="inline">NONE</code> of the following…  </li>
</ul>
<p>
Examples</p>
<p>
Show all items with the tag <code class="inline">#due</code>.</p>
<p>
  <img alt="Saved Search" class="feature_image" src="/images/ss_simple.png" />
</p>
<p>
Show items with a tag of <code class="inline">#flag</code> OR <code class="inline">#now</code>OR <code class="inline">start/due date less than or equal to today</code> AND not tagged <code class="inline">#waiting</code>.</p>
<p>
  <img alt="Saved Search" class="feature_image" src="/images/ss_complex.png" />
</p>
<p>
Only Search Subset of Items</p>
<p>
By Default, all items are searched in a Saved Search. To only search a subset of items, un-select <code class="inline">Include All Items</code>, then insert the <code class="inline">item ID</code>. The item ID can be found by right clicking or long pressing (on iPhone) the “zoom” dot.</p>
<p>
Sort Saved Search Results</p>
<p>
The <code class="inline">Sort by:</code> dropdown allows you to sort the Saved Search results by:</p>
<ul>
  <li>
Default  </li>
  <li>
Tag  </li>
  <li>
Due Date  </li>
  <li>
Start Date  </li>
  <li>
Created Date  </li>
  <li>
Updated Date  </li>
  <li>
Name  </li>
</ul>
<h2>
Using Tags</h2>
<p>
Tags start with a <code class="inline">#</code> or <code class="inline">@</code>.</p>
<h2>
What is Sequential?</h2>
<p>
Sequential is best suited for projects that require tasks to be completed in a specific order. You are able to list the tasks in the necessary order, and can only move on to the next task once the previous one has been completed.</p>
<p>
Let’s say you have a project like this.</p>
<p>
  <img alt="Sequential Project" class="feature_image" src="/images/sequential_1.png" />
</p>
<p>
When you mark an item as “sequential” in a Saved Search, it will only show you the 1st available item to do.</p>
<p>
  <img alt="Sequential Project" class="feature_image" src="/images/sequential_2.gif" />
</p>
<h2>
Contact Us</h2>
<p>
If you have any other questions, please contact us at <a href="https://airlist.app/blog/help@airlist.app">help@airlist.app</a>.</p>
]]>
  </content:encoded>
  <pubDate>Wed, 01 Jan 2020 00:00:00 </pubDate>
  <guid isPermaLink="true">https://airlist.app/blog/guide</guid>
</item>

  </channel>
</rss>
