<?xml version="1.0" encoding="utf-8"?>

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<feed xmlns="http://www.w3.org/2005/Atom" >
  <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator>
  <link href="addisonwebb.com/feed.xml" rel="self" type="application/atom+xml" />
  <link href="addisonwebb.com/" rel="alternate" type="text/html" />
  <updated>2026-06-05T08:57:30+00:00</updated>
  <id>addisonwebb.com/feed.xml</id>

  
  
  

  
    <title type="html">addisonwebb.com</title>
  

  
    <subtitle>Software engineer and consultant experienced in leading teams building high-quality software.</subtitle>
  

  

  
  
  
    <entry>
      <title type="html">Can Someone at Meta Help Restore Park Guide’s Instagram Account?</title>
      <link href="addisonwebb.com/blog/2026-06-05-Can%20Someone%20at%20Meta%20Help%20Restore%20Park%20Guide's%20Instagram%20Account/" rel="alternate" type="text/html" title="Can Someone at Meta Help Restore Park Guide&apos;s Instagram Account?" />
      <published>2026-06-05T08:00:00+00:00</published>
      <updated>2026-06-05T08:00:00+00:00</updated>
      <id>addisonwebb.com/blog/Can%20Someone%20at%20Meta%20Help%20Restore%20Park%20Guide&apos;s%20Instagram%20Account</id>
      <content type="html" xml:base="addisonwebb.com/blog/2026-06-05-Can%20Someone%20at%20Meta%20Help%20Restore%20Park%20Guide&apos;s%20Instagram%20Account/">
      
      
      &lt;p&gt;&lt;strong&gt;TLDR;&lt;/strong&gt; I would really appreciate it if someone at Meta, Facebook, Instagram, or Threads can help me resolve what appears to be an automated mistake. &lt;a href=&quot;mailto:addison@park-guide.com&quot;&gt;addison@park-guide.com&lt;/a&gt; Thank you!&lt;/p&gt;

&lt;p&gt;This is not exactly how I planned to make the first public post about the new product I am building, but here we are.&lt;/p&gt;

&lt;p&gt;This week I launched the landing page for a new product called &lt;a href=&quot;https://park-guide.com&quot;&gt;Park Guide&lt;/a&gt;. Park Guide is a new product I am building, and as part of the launch I created matching social media accounts for it:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Facebook: &lt;a href=&quot;https://www.facebook.com/parkguidehq&quot;&gt;https://www.facebook.com/parkguidehq&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Instagram: &lt;a href=&quot;https://www.instagram.com/parkguidehq/&quot;&gt;https://www.instagram.com/parkguidehq/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Threads: &lt;a href=&quot;https://www.threads.com/@parkguidehq&quot;&gt;https://www.threads.com/@parkguidehq&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;YouTube: &lt;a href=&quot;https://www.youtube.com/@ParkGuideHQ&quot;&gt;https://www.youtube.com/@ParkGuideHQ&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;X: &lt;a href=&quot;https://x.com/parkguidehq&quot;&gt;https://x.com/parkguidehq&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;LinkedIn: &lt;a href=&quot;https://www.linkedin.com/company/parkguidehq&quot;&gt;https://www.linkedin.com/company/parkguidehq&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Instagram and Threads accounts are important because I would really like to keep the matching &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parkguidehq&lt;/code&gt; name across platforms.&lt;/p&gt;

&lt;h2 id=&quot;what-happened&quot;&gt;What Happened&lt;/h2&gt;

&lt;p&gt;On June 4, 2026 at 5:07 PM, I received an email from Instagram saying I needed to verify my account to keep using it. As far as I can tell, the email was genuine.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/gen/blog/2026-06-05-meta-instagram-park-guide/instagram-verification-email.png&quot; alt=&quot;Instagram verification email&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I can confirm I’m human! I rushed through the verification process. I probably did not do a great job with it because I was trying to complete it quickly and did not realize the consequence could be permanent loss of access to the account.&lt;/p&gt;

&lt;p&gt;At 6:27 PM the same day, I received another email saying the account had been permanently disabled because it was found to not follow Instagram’s Community Standards.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/gen/blog/2026-06-05-meta-instagram-park-guide/instagram-disabled-email.png&quot; alt=&quot;Instagram account disabled email&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I am new to social media, so it is possible I made some setup mistake without realizing it. But I have not posted anything from these accounts, so I do not understand what content or behavior could have triggered a Community Standards violation. My best guess is that an automated system made a mistake.&lt;/p&gt;

&lt;h2 id=&quot;no-appeal-option&quot;&gt;No Appeal Option&lt;/h2&gt;

&lt;p&gt;I can still log in to the Instagram account, but all I see is a screen that says “We disabled your account.”&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/gen/blog/2026-06-05-meta-instagram-park-guide/instagram-disabled-account-screen.png&quot; alt=&quot;Instagram disabled account screen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The main issue is that I do not see any way to appeal the decision. The only actions available to me are to download my data, which should be empty because the account is new, or log out.&lt;/p&gt;

&lt;p&gt;Interestingly, I did find an appeal option in the Threads app.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/gen/blog/2026-06-05-meta-instagram-park-guide/threads-appeal-option.png&quot; alt=&quot;Threads appeal option&quot; /&gt;&lt;/p&gt;

&lt;p&gt;However, when I tried to submit that form, I received a message telling me to follow the instructions shown when I sign into my Instagram account. This message was consistent with other documentation I came across. Basically all the documents I saw mentioned that I should see an option to appeal when I log in to the Instagram account.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/gen/blog/2026-06-05-meta-instagram-park-guide/threads-appeal-error.png&quot; alt=&quot;Threads appeal error message&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;what-i-am-asking-for&quot;&gt;What I Am Asking For&lt;/h2&gt;

&lt;p&gt;If you work at Meta, Facebook, Instagram, or Threads, or if you know someone who does, I would be extremely grateful for help getting this reviewed by a human.&lt;/p&gt;

&lt;p&gt;I am not trying to avoid any rules. If I made a mistake while creating the account, I would be happy to fix it. I just cannot find a path to ask what went wrong or have the decision reviewed.&lt;/p&gt;

&lt;p&gt;Losing the matching &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parkguidehq&lt;/code&gt; Instagram and Threads names would be frustrating.&lt;/p&gt;

&lt;p&gt;If you can help, please contact me at &lt;a href=&quot;mailto:addison@park-guide.com&quot;&gt;addison@park-guide.com&lt;/a&gt;. Thank you!&lt;/p&gt;
      </content>

      
      
      
      
      

      <author>
          <name>Addison Webb</name>
        
        
      </author>

      

      

      
        <summary type="html">TLDR; I would really appreciate it if someone at Meta, Facebook, Instagram, or Threads can help me resolve what appears to be an automated mistake. addison@park-guide.com Thank you!</summary>
      

    </entry>
  
    <entry>
      <title type="html">Safari Custom Authentication UI</title>
      <link href="addisonwebb.com/blog/2020-04-17-Safari%20Custom%20Authentication%20UI/" rel="alternate" type="text/html" title="Safari Custom Authentication UI" />
      <published>2020-06-29T13:00:00+00:00</published>
      <updated>2020-06-29T13:00:00+00:00</updated>
      <id>addisonwebb.com/blog/Safari%20Custom%20Authentication%20UI</id>
      <content type="html" xml:base="addisonwebb.com/blog/2020-04-17-Safari%20Custom%20Authentication%20UI/">
      
      
      &lt;p&gt;First, this feature creates a worse experience for users who use third-party password managers. Safari takes several seconds to load the custom authentication UI (why? 🤷🏼‍♂️) and then the user has to click “Cancel” to display the normal username and password fields on the website. This makes the process of logging in significantly longer than it would be if Safari showed normal username/email and password fields from the start.&lt;/p&gt;

&lt;p&gt;Second, this assumes that a user only ever wants to log into Apple services with one Apple ID. Admittedly this is a problem that most people don’t have, but as someone who needs to use several different Apple IDs this is super frustrating.&lt;/p&gt;

&lt;p&gt;The other issue I have with this feature is more conceptual. This feature completely mucks up the concept of what a local user account password is used for. Apple devices are constantly asking for passwords and normal people have a tough time determining when to use their Apple ID password and when to use their local user account password.&lt;/p&gt;

&lt;p&gt;Even though it can be confusing to many users, the boundaries generally make sense. Unlocking your device or changing device settings require your local user account password. Interacting with Apple’s services like the App Store and iTunes use your Apple ID and thus require your Apple ID password. (I know there are some edge cases and that’s generally where people get confused.)&lt;/p&gt;

&lt;p&gt;But with this change, Apple is introducing a situation where you need to enter your local device password to log into a website with your Apple ID. Can you see how this is super confusing? As far as I am aware, there is no other situation where you would be prompted for your local user account password to log into a website.&lt;/p&gt;

&lt;p&gt;Below is the Radar that I filed suggesting that Apple at least add a preference in Safari to disable this behavior. &lt;strong&gt;Please dupe this Radar if you feel that this Safari “feature” should be removed or a setting added to allow users to disable it!&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;radar-fb7582188&quot;&gt;Radar (FB7582188)&lt;/h2&gt;

&lt;h3 id=&quot;please-provide-a-descriptive-title-for-your-feedback&quot;&gt;Please provide a descriptive title for your feedback:&lt;/h3&gt;
&lt;p&gt;Add Setting to Disable Custom Authentication UI on Apple Websites&lt;/p&gt;

&lt;h3 id=&quot;which-area-are-you-seeing-an-issue-with&quot;&gt;Which area are you seeing an issue with?&lt;/h3&gt;
&lt;p&gt;Safari&lt;/p&gt;

&lt;h3 id=&quot;what-type-of-issue-are-you-reporting&quot;&gt;What type of issue are you reporting?&lt;/h3&gt;
&lt;p&gt;Suggestion&lt;/p&gt;

&lt;h3 id=&quot;what-does-the-safari-issue-you-are-seeing-involve&quot;&gt;What does the Safari issue you are seeing involve?&lt;/h3&gt;
&lt;p&gt;Something else not on this list&lt;/p&gt;

&lt;h3 id=&quot;please-provide-the-url-to-one-or-more-websites-where-you-are-seeing-this-problem&quot;&gt;Please provide the URL to one or more websites where you are seeing this problem:&lt;/h3&gt;
&lt;p&gt;https://appleid.apple.com/#!&amp;amp;page=signin, idmsa.apple.com&lt;/p&gt;

&lt;h3 id=&quot;what-extensions-or-content-blockers-do-you-have-enabled-example-ghostery-ublock-origin&quot;&gt;What extensions or content blockers do you have enabled? Example: Ghostery, Ublock origin&lt;/h3&gt;
&lt;p&gt;{ Insert your extensions here. Ultimately, it doesn’t matter what extensions you have. }&lt;/p&gt;

&lt;h3 id=&quot;are-you-able-to-capture-a-screen-recording-of-the-issue-occurring-if-so-please-attach-it-to-this-report&quot;&gt;Are you able to capture a screen recording of the issue occurring? If so, please attach it to this report.&lt;/h3&gt;
&lt;p&gt;Yes&lt;/p&gt;

&lt;h3 id=&quot;what-time-was-it-when-this-last-occurred-example-1200-pm-est-02142018&quot;&gt;What time was it when this last occurred? (Example: 12:00 pm EST 02/14/2018)&lt;/h3&gt;
&lt;p&gt;{ Enter today’s date. }&lt;/p&gt;

&lt;h3 id=&quot;please-describe-the-issue-and-what-steps-we-can-take-to-reproduce-it&quot;&gt;Please describe the issue and what steps we can take to reproduce it:&lt;/h3&gt;

&lt;p&gt;A new feature was added in Catalina that lets the user use their local user account password (or Touch ID) to log into Apple websites when that local user account is logged in with iCloud.&lt;/p&gt;

&lt;p&gt;This is undesired behavior for users who use third-party password managers. Safari takes several seconds to load the custom authentication UI and then the user has to click “Cancel” to display the normal username and password fields on the website. This makes the process of logging in much longer than it would be if Safari didn’t show custom authentication UI.&lt;/p&gt;

&lt;p&gt;It is highly annoying that Safari treats Apple websites differently than any other website.&lt;/p&gt;

&lt;p&gt;Steps to Reproduce&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Navigate to an Apple website where you can log in with your Apple ID. (appleid.apple.com, developer.apple.com, etc.)&lt;/li&gt;
  &lt;li&gt;Wait for Safari to present custom login UI.&lt;/li&gt;
  &lt;li&gt;Click “Cancel”.&lt;/li&gt;
  &lt;li&gt;Wait for webpage to load username/password text fields.&lt;/li&gt;
  &lt;li&gt;Use third-party password manager to fill form.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Suggestion
Add a setting to Safari to disable this behavior. The desired behavior is that Safari does not treat Apple websites differently than other websites. When navigating to a log in page, Safari should show the standard username and password fields.&lt;/p&gt;
      </content>

      
      
      
      
      

      <author>
          <name>Addison Webb</name>
        
        
      </author>

      

      

      
        <summary type="html">First, this feature creates a worse experience for users who use third-party password managers. Safari takes several seconds to load the custom authentication UI (why? 🤷🏼‍♂️) and then the user has to click “Cancel” to display the normal username and password fields on the website. This makes the process of logging in significantly longer than it would be if Safari showed normal username/email and password fields from the start.</summary>
      

    </entry>
  
    <entry>
      <title type="html">Feedback Assistant Bug - FB7486859</title>
      <link href="addisonwebb.com/blog/2020-02-15-FB7486859/" rel="alternate" type="text/html" title="Feedback Assistant Bug - FB7486859" />
      <published>2020-02-15T20:00:00+00:00</published>
      <updated>2020-02-15T20:00:00+00:00</updated>
      <id>addisonwebb.com/blog/FB7486859</id>
      <content type="html" xml:base="addisonwebb.com/blog/2020-02-15-FB7486859/">
      
      
      &lt;p&gt;Recently, I have been working on an app that is centered around opening files on iOS. Opening files is something we have been able to do on iOS for several years now and the concept is pretty simple. While working on this app I ran into a bug in iOS 13.&lt;/p&gt;

&lt;p&gt;Users can no longer select multiple folders with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentPickerViewController&lt;/code&gt; in iOS 13. This is obviously a problem when your app’s functionality is heavily reliant on opening an arbitrary number of files and folders that users select.&lt;/p&gt;

&lt;p&gt;I have a very simple &lt;a href=&quot;https://github.com/addisonwebb/FB7486859&quot;&gt;sample project&lt;/a&gt; that demonstrates the regression.&lt;/p&gt;

&lt;p&gt;The code is very simple:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;let documentPicker = UIDocumentPickerViewController(documentTypes: [kUTTypeDirectory as String], in: .open)
documentPicker.allowsMultipleSelection = true
present(documentPicker, animated: true, completion: nil)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It just creates a document picker by specifying the UTIs we allow the user to select. I have not found a different UTI or combination of UTIs that create a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentPickerViewController&lt;/code&gt; that allows user to select multiple folders.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Side Note:&lt;/strong&gt; Choosing a single folder is still supported if you use the UTI of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kUTTypeFolder&lt;/code&gt; instead of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kUTTypeDirectory&lt;/code&gt;. The curious thing is that a completely different view is presented when creating the document picker view controller with just the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kUTTypeFolder&lt;/code&gt; UTI. This view does not have the “select” functionality that would allow multiple folder selection.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;reproduction-steps&quot;&gt;Reproduction Steps&lt;/h3&gt;

&lt;p&gt;Prerequisites&lt;/p&gt;

&lt;p&gt;Set up two simulators, one iOS 12.x and one iOS 13.x, and sign in to an iCloud account. Make sure that iCloud account has two folders in iCloud drive.&lt;/p&gt;

&lt;p&gt;iOS 12&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Run the sample app.&lt;/li&gt;
  &lt;li&gt;Tap the button.&lt;/li&gt;
  &lt;li&gt;Tap “select” to enter selection mode.&lt;/li&gt;
  &lt;li&gt;Verify you are able to select the folders.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;iOS 13&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Run the sample app.&lt;/li&gt;
  &lt;li&gt;Tap the button.&lt;/li&gt;
  &lt;li&gt;Tap “select” to enter selection mode.&lt;/li&gt;
  &lt;li&gt;Verify you are NOT able to select the folders.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With this simple project you can see that selecting multiple folders at a time was supported on iOS 12 and is no longer possible with the exact same code on iOS 13. I have not been able to find any documentation stating this change was intentional.&lt;/p&gt;

&lt;h2 id=&quot;work-arounds&quot;&gt;Work-Arounds?&lt;/h2&gt;
&lt;p&gt;Quick refresher: There are a couple supported ways to let users select a document and do something with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://developer.apple.com/documentation/uikit/uidocumentpickerviewcontroller&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentPickerViewController&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentPickerViewController&lt;/code&gt; is a view controller that your app can use to let a user import, export, open, or move a file/document. It’s a pretty simple idea. You present this view controller when the user needs to move a file in/out of your app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://developer.apple.com/documentation/uikit/uidocumentbrowserviewcontroller&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentBrowserViewController&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentBrowserViewController&lt;/code&gt; is a view controller for browsing and performing actions on documents. It is designed to be the root view controller in a document-based app (like Pages, Numbers, Keynote, etc.). &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentBrowserViewController&lt;/code&gt; is designed to be the view controller you design/build your entire app around. You start at the document browser and only navigate away when a user selects a document.&lt;/p&gt;

&lt;p&gt;So, we have already addressed the fact that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentPickerViewController&lt;/code&gt; does not work for a situation where you need to open/import more than one folder at a time.&lt;/p&gt;

&lt;h4 id=&quot;open-folders-one-at-a-time&quot;&gt;Open folders one at a time&lt;/h4&gt;
&lt;p&gt;The first solution is more of a change in your app navigation than a functional replacement. You could create a flow where users would open one folder at a time until they have opened all of folders they want. &lt;em&gt;This only works if you know that the user needs/wants to open a folder before presenting the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentPickerViewController&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h4 id=&quot;misuse-uidocumentbrowserviewcontroller&quot;&gt;[Mis]Use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentBrowserViewController&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The best work-around I have found so far is to present a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentBrowserViewController&lt;/code&gt; modally, even though the documentation explicitily says &lt;a href=&quot;https://developer.apple.com/documentation/uikit/view_controllers/adding_a_document_browser_to_your_app&quot;&gt;not to do this&lt;/a&gt;. It seems to work well even though it is not intended to be used as a document picker.&lt;/p&gt;

&lt;h2 id=&quot;bug-report&quot;&gt;Bug Report&lt;/h2&gt;
&lt;p&gt;I filed a bug in Feedback Assistant on December 9, 2019. It is still “Open” but has a resolution of “Investigation complete - Works as currently designed”. I don’t know exactly what that status means, but it sounds like Apple thinks this isn’t an issue and will not fix it. (But if that is the case then why not mark the issue as “Closed”?) I just find it really hard to belive that it “works as currently designed” given that opening multiple folders at a time was possible in iOS 12, and no longer seems to be possible in iOS 13 without misusing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentBrowserViewController&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In hindsight, my initial bug report could have been a little more detailed, though I thought it was pretty clear from the sample project that the behavior in iOS 13 was different than iOS 12. I hope this blog post will help provide any missing details and get the attention of someone at Apple so this gets a second look.&lt;/p&gt;

&lt;p&gt;Feedback Assistant: &lt;a href=&quot;https://feedbackassistant.apple.com/feedback/7486859&quot;&gt;https://feedbackassistant.apple.com/feedback/7486859&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Content of the bug report: &lt;a href=&quot;https://github.com/addisonwebb/FB7486859/blob/master/README.md&quot;&gt;https://github.com/addisonwebb/FB7486859/blob/master/README.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open Radar: &lt;a href=&quot;https://openradar.appspot.com/radar?id=4954820121198592&quot;&gt;https://openradar.appspot.com/radar?id=4954820121198592&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;If you think this is something that should be fixed, please take a few minutes to dupe FB7486859.&lt;/p&gt;

&lt;p&gt;If you spot a problem in my sample code, or know of a way to reenable multiple folder selection in iOS 13’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UIDocumentPickerViewController&lt;/code&gt; please &lt;a href=&quot;mailto:feedback@addisonwebb.com&quot;&gt;let me know&lt;/a&gt;!&lt;/p&gt;

&lt;h2 id=&quot;links&quot;&gt;Links&lt;/h2&gt;
&lt;p&gt;Sample Project: &lt;a href=&quot;https://github.com/addisonwebb/FB7486859&quot;&gt;https://github.com/addisonwebb/FB7486859&lt;/a&gt;&lt;/p&gt;
      </content>

      
      
      
      
      

      <author>
          <name>Addison Webb</name>
        
        
      </author>

      

      

      
        <summary type="html">Recently, I have been working on an app that is centered around opening files on iOS. Opening files is something we have been able to do on iOS for several years now and the concept is pretty simple. While working on this app I ran into a bug in iOS 13.</summary>
      

    </entry>
  
    <entry>
      <title type="html">Nashville CocoaHeads - Introduction to Unit Testing</title>
      <link href="addisonwebb.com/blog/2018-04-08-Nashville%20CocoaHeads%20-%20Introduction%20to%20Unit%20Testing/" rel="alternate" type="text/html" title="Nashville CocoaHeads - Introduction to Unit Testing" />
      <published>2018-04-08T11:59:00+00:00</published>
      <updated>2018-04-08T11:59:00+00:00</updated>
      <id>addisonwebb.com/blog/Nashville%20CocoaHeads%20-%20Introduction%20to%20Unit%20Testing</id>
      <content type="html" xml:base="addisonwebb.com/blog/2018-04-08-Nashville%20CocoaHeads%20-%20Introduction%20to%20Unit%20Testing/">
      
      
      &lt;iframe allow=&quot;autoplay; encrypted-media&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;350&quot; src=&quot;https://www.youtube.com/embed/r10ybYpsKfc&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
      </content>

      
      
      
      
      

      <author>
          <name>Addison Webb</name>
        
        
      </author>

      
        <category term="[&quot;Talks&quot;]" />
      

      

      
        <summary type="html"></summary>
      

    </entry>
  
    <entry>
      <title type="html">Testing Asynchronous Code Continued</title>
      <link href="addisonwebb.com/blog/2018-03-01-%20Testing%20Asynchronous%20Code%20Continued/" rel="alternate" type="text/html" title="Testing Asynchronous Code Continued" />
      <published>2018-03-01T01:00:00+00:00</published>
      <updated>2018-03-01T01:00:00+00:00</updated>
      <id>addisonwebb.com/blog/%20Testing%20Asynchronous%20Code%20Continued</id>
      <content type="html" xml:base="addisonwebb.com/blog/2018-03-01-%20Testing%20Asynchronous%20Code%20Continued/">
      
      
        
        
          &lt;figure&gt;&lt;img src=&quot;/assets/images/gen/blog/blog-1.webp&quot; /&gt;&lt;/figure&gt; 
          
      
      &lt;p&gt;This past week John Sundell wrote a blog post (&lt;a href=&quot;https://www.swiftbysundell.com/posts/unit-testing-asynchronous-swift-code&quot;&gt;Unit testing asynchronous Swift code&lt;/a&gt;) about unit testing asynchronous code.&lt;/p&gt;

&lt;p&gt;As I was trying to apply some of the techniques when I came across a method I couldn’t mock because I was getting an error.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Objective-C method &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;addNotificationRequest:withCompletionHandler:&lt;/code&gt; provided by method &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add(_:withCompletionHandler:)&lt;/code&gt; does not match the requirement’s selector (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;add:withCompletionHandler:&lt;/code&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Consider the following method for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UNUserNotificationCenter&lt;/code&gt; in Swift.&lt;/p&gt;

&lt;div class=&quot;language-swift highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;UNNotificationRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;withCompletionHandler&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;completionHandler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Swift&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)?&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If you would want to create a Swift protocol to mimic the interface to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;UNUserNotificationCenter&lt;/code&gt; that would be pretty simple.&lt;/p&gt;

&lt;div class=&quot;language-swift highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;@objc&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;protocol&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;UserNotificationCenter&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;UNNotificationRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;withCompletionHandler&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;completionHandler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Swift&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)?)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The problem is that the method signature in Swift is different from the method signature in Objective-C. Here is the method definition in Objective-C.&lt;/p&gt;

&lt;div class=&quot;language-swift highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;addNotificationRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;UNNotificationRequest&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;withCompletionHandler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;nullable&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;NSError&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__nullable&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;completionHandler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Since the Objective-C method has a different method signature than the Swift version, we have to specify the Objective-C method signature in our protocol.&lt;/p&gt;

&lt;div class=&quot;language-swift highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;@objc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;addNotificationRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;withCompletionHandler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:)&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;UNNotificationRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;withCompletionHandler&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;completionHandler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;?)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;Swift&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)?)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now we can implement that method in our mock object!&lt;/p&gt;
      </content>

      
      
      
      
      

      <author>
          <name>Addison Webb</name>
        
        
      </author>

      
        <category term="[&quot;Swift&quot;]" />
      

      

      
        <summary type="html">This past week John Sundell wrote a blog post (Unit testing asynchronous Swift code) about unit testing asynchronous code.</summary>
      

    </entry>
  
    <entry>
      <title type="html">Nashville CocoaHeads - Introduction to CloudKit</title>
      <link href="addisonwebb.com/blog/2016-03-01-Nashville%20CocoaHeads%20-%20Introduction%20to%20CloudKit/" rel="alternate" type="text/html" title="Nashville CocoaHeads - Introduction to CloudKit" />
      <published>2016-03-01T11:59:00+00:00</published>
      <updated>2016-03-01T11:59:00+00:00</updated>
      <id>addisonwebb.com/blog/Nashville%20CocoaHeads%20-%20Introduction%20to%20CloudKit</id>
      <content type="html" xml:base="addisonwebb.com/blog/2016-03-01-Nashville%20CocoaHeads%20-%20Introduction%20to%20CloudKit/">
      
      
      &lt;p&gt;This past Wednesday I gave a talk about CloudKit at Nashville CocoaHeads. It was nice to get to meet everyone there and I am excited to be a part of the meetup! The slides for the presentation can be found here: &lt;a href=&quot;https://github.com/addisonwebb/talks/blob/master/CocoaHeads/CloudKit%20Overview.key&quot;&gt;CloudKit Overview Keynote&lt;/a&gt;.&lt;/p&gt;

&lt;iframe allow=&quot;autoplay; encrypted-media&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;350&quot; src=&quot;https://www.youtube.com/embed/lZYjWfmEZTw&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
      </content>

      
      
      
      
      

      <author>
          <name>Addison Webb</name>
        
        
      </author>

      
        <category term="[&quot;Talks&quot;]" />
      

      

      
        <summary type="html">This past Wednesday I gave a talk about CloudKit at Nashville CocoaHeads. It was nice to get to meet everyone there and I am excited to be a part of the meetup! The slides for the presentation can be found here: CloudKit Overview Keynote.</summary>
      

    </entry>
  
</feed>